diff --git a/AaronJT1_ip_master/authorship.json b/AaronJT1_ip_master/authorship.json index a3eb6e96..14f77407 100644 --- a/AaronJT1_ip_master/authorship.json +++ b/AaronJT1_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":"AaronJT1"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"javafx {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"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":"AaronJT1"},"content":"// mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":"// mainClass.set(\"aj.Aj\")","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" mainClass.set(\"aj.Launcher\")","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":"// mainClassName \u003d \u0027aj.Aj\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" mainClassName \u003d \u0027aj.Launcher\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" archiveBaseName \u003d \"aj\"","lastModifiedDate":"2023-08-31"},{"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":"AaronJT1"},"content":" archiveFileName \u003d \u0027aj.jar\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AaronJT1":29,"-":40}},{"path":"src/main/data/actualData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm,true","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"event yooo /from mon 2pm /to 3pm,false","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"todo few,false","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"deadline project meeting /by 2022-12-12,false","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"AaronJT1":4}},{"path":"src/main/data/backUpData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"todo borrow book,false","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"deadline return book /by Sunday,true","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm,false","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"AaronJT1":3}},{"path":"src/main/data/exampleInput.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"deadline return book /by 2019-10-15","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"todo return book","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":3}},{"path":"src/main/data/testData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"deadline return book /by 2019-10-15,false","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"todo return book,true","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm,false","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":3}},{"path":"src/main/java/aj/Aj.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" * Aj chat-bot class.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":"public class Aj extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" private Image ajImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/aj_bot.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" private String latestCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" private Task lastTaskAdded;","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" private Task lastTaskRemoved;","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" private String lastTaskRemovedEntry;","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" * Takes in description portion of user input and mark the task specified in the taskList and database.","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" public void markTask(StringBuilder outMsg, String descString) throws IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" int idx \u003d Integer.parseInt(descString.substring(1)) - 1; // this idx is idx of tasklst","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" this.ui.checkIndex(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" Task taskToMark \u003d this.taskList.getTask(idx);","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.horiLine());","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" if (taskToMark.isCompleted()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"You have already marked it!!!\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" taskToMark.toggleComplete();","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" this.storage.updateData(idx, true);","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(taskToMark);","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":" * Takes in description portion of user input and unmark the task specified in the taskList and database.","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" public void unmarkTask(StringBuilder outMsg, String descString) throws IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":" int idx \u003d Integer.parseInt(descString.substring(1)) - 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" this.ui.checkIndex(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" Task taskToUnmark \u003d this.taskList.getTask(idx);","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.horiLine());","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" if (!taskToUnmark.isCompleted()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Task is already unmarked!!!\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-08-19"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":" taskToUnmark.toggleComplete();","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" this.storage.updateData(idx, false);","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"OK, I\u0027ve marked this task as not done yet:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(taskToUnmark);","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"AaronJT1"},"content":" * Takes in user input and add the task in the taskList and database.","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"AaronJT1"},"content":" * @param cmdString Command portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"AaronJT1"},"content":" * @param task Task to be added in the taskList and database.","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"AaronJT1"},"content":" public void addTask(StringBuilder outMsg, String cmdString, String descString, Task task)","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"AaronJT1"},"content":" throws IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"AaronJT1"},"content":" this.storage.addData(cmdString + descString + \",false\");","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"AaronJT1"},"content":" this.taskList.addTask(task);","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"AaronJT1"},"content":" this.lastTaskAdded \u003d task;","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(task).append(\"\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.printNumTask());","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"AaronJT1"},"content":" * Takes in index of task in taskList to be deleted.","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"AaronJT1"},"content":" public void deleteTask(StringBuilder outMsg, String descString) throws IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"AaronJT1"},"content":" int idx \u003d Integer.parseInt(descString.substring(1)) - 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"AaronJT1"},"content":" this.ui.checkIndex(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.horiLine());","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"AaronJT1"},"content":" Task removedTask \u003d this.taskList.getTask(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"AaronJT1"},"content":" this.taskList.removeTask(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"AaronJT1"},"content":" this.lastTaskRemovedEntry \u003d this.storage.deleteData(idx);","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"AaronJT1"},"content":" this.lastTaskRemoved \u003d removedTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(removedTask).append(\"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.printNumTask());","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"AaronJT1"},"content":" * Takes in a string keyword from user input and find tasks with that keyword.","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"AaronJT1"},"content":" public void findTask(StringBuilder outMsg, String descString) {","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.printKeywordTask(descString.substring(1)));","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.printNumTask());","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"AaronJT1"},"content":" public void undoCommand(StringBuilder outMsg) throws IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"AaronJT1"},"content":" String[] cmdAndDesc \u003d this.parser.parseCommand(this.latestCommand);","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"AaronJT1"},"content":" String cmdString;","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"AaronJT1"},"content":" if (cmdAndDesc.length !\u003d 0) { // if user input is not a single command","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"AaronJT1"},"content":" cmdString \u003d cmdAndDesc[0];","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"AaronJT1"},"content":" String descString \u003d cmdAndDesc[1];","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"AaronJT1"},"content":" switch (cmdString) {","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"AaronJT1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"AaronJT1"},"content":" unmarkTask(outMsg, descString);","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"AaronJT1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"AaronJT1"},"content":" markTask(outMsg, descString);","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"AaronJT1"},"content":" case \"delete\": // adds the last task removed into taskList again","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"AaronJT1"},"content":" this.storage.addData(this.lastTaskRemovedEntry); // add entry to database","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"AaronJT1"},"content":" this.taskList.addTask(this.lastTaskRemoved); // add to tasklist","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Readded task \").append(this.lastTaskRemoved).append(\"!!!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":162,"author":{"gitId":"AaronJT1"},"content":" default: // latest command is add task","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"AaronJT1"},"content":" int idx \u003d this.taskList.getSize() - 1;","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"AaronJT1"},"content":" Task removedTask \u003d this.taskList.getTask(idx);","lastModifiedDate":"2023-09-13"},{"lineNumber":166,"author":{"gitId":"AaronJT1"},"content":" this.taskList.removeTask(idx);","lastModifiedDate":"2023-09-13"},{"lineNumber":167,"author":{"gitId":"AaronJT1"},"content":" this.storage.deleteData(idx);","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(removedTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Latest command \\\"\").append(this.latestCommand).append(\"\\\" is not undoable!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":177,"author":{"gitId":"AaronJT1"},"content":" * Takes in command portion of userinput and carry out respective action.","lastModifiedDate":"2023-09-11"},{"lineNumber":178,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":179,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":180,"author":{"gitId":"AaronJT1"},"content":" * @param cmdString Command portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":181,"author":{"gitId":"AaronJT1"},"content":" * @throws NoSuchCommandException If command does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":182,"author":{"gitId":"AaronJT1"},"content":" * @throws EmptyDescriptionException If second part of user input does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":183,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-13"},{"lineNumber":184,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":185,"author":{"gitId":"AaronJT1"},"content":" public void getSingleCommandResponse(StringBuilder outMsg, String cmdString)","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"AaronJT1"},"content":" throws NoSuchCommandException, EmptyDescriptionException, IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-13"},{"lineNumber":187,"author":{"gitId":"AaronJT1"},"content":" switch (cmdString) {","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"AaronJT1"},"content":" case \"list\":","lastModifiedDate":"2023-09-11"},{"lineNumber":189,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.printList());","lastModifiedDate":"2023-09-11"},{"lineNumber":190,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":191,"author":{"gitId":"AaronJT1"},"content":" case \"bye\":","lastModifiedDate":"2023-09-11"},{"lineNumber":192,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.exit());","lastModifiedDate":"2023-09-11"},{"lineNumber":193,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":194,"author":{"gitId":"AaronJT1"},"content":" case \"help\":","lastModifiedDate":"2023-09-11"},{"lineNumber":195,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.getHelpMessage());","lastModifiedDate":"2023-09-11"},{"lineNumber":196,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":197,"author":{"gitId":"AaronJT1"},"content":" case \"undo\":","lastModifiedDate":"2023-09-13"},{"lineNumber":198,"author":{"gitId":"AaronJT1"},"content":" undoCommand(outMsg);","lastModifiedDate":"2023-09-13"},{"lineNumber":199,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":200,"author":{"gitId":"AaronJT1"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":201,"author":{"gitId":"AaronJT1"},"content":" this.ui.checkCommand(cmdString);","lastModifiedDate":"2023-09-11"},{"lineNumber":202,"author":{"gitId":"AaronJT1"},"content":" throw new NoSuchCommandException();","lastModifiedDate":"2023-09-11"},{"lineNumber":203,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":204,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":205,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":206,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":207,"author":{"gitId":"AaronJT1"},"content":" * Takes in a full command (first part and description) of userinput and carry out respective action.","lastModifiedDate":"2023-09-11"},{"lineNumber":208,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":209,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":210,"author":{"gitId":"AaronJT1"},"content":" * @param cmdString Command portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":211,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":212,"author":{"gitId":"AaronJT1"},"content":" * @return Task object specified in user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":213,"author":{"gitId":"AaronJT1"},"content":" * @throws NoSuchCommandException If command does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":214,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-11"},{"lineNumber":215,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-11"},{"lineNumber":216,"author":{"gitId":"AaronJT1"},"content":" * @throws WrongDescriptionException If task description is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":217,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":218,"author":{"gitId":"AaronJT1"},"content":" public Task getFullCommandResponse(StringBuilder outMsg, String cmdString, String descString)","lastModifiedDate":"2023-09-11"},{"lineNumber":219,"author":{"gitId":"AaronJT1"},"content":" throws NoSuchCommandException, IndexOutOfRangeException, IOException, WrongDescriptionException {","lastModifiedDate":"2023-09-11"},{"lineNumber":220,"author":{"gitId":"AaronJT1"},"content":" switch (cmdString) {","lastModifiedDate":"2023-09-11"},{"lineNumber":221,"author":{"gitId":"AaronJT1"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-11"},{"lineNumber":222,"author":{"gitId":"AaronJT1"},"content":" markTask(outMsg, descString);","lastModifiedDate":"2023-09-11"},{"lineNumber":223,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":224,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":225,"author":{"gitId":"AaronJT1"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-11"},{"lineNumber":226,"author":{"gitId":"AaronJT1"},"content":" unmarkTask(outMsg, descString);","lastModifiedDate":"2023-09-11"},{"lineNumber":227,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":228,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":229,"author":{"gitId":"AaronJT1"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-11"},{"lineNumber":230,"author":{"gitId":"AaronJT1"},"content":" deleteTask(outMsg, descString);","lastModifiedDate":"2023-09-11"},{"lineNumber":231,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":232,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":233,"author":{"gitId":"AaronJT1"},"content":" case \"find\":","lastModifiedDate":"2023-09-11"},{"lineNumber":234,"author":{"gitId":"AaronJT1"},"content":" findTask(outMsg, descString);","lastModifiedDate":"2023-09-11"},{"lineNumber":235,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":236,"author":{"gitId":"AaronJT1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-11"},{"lineNumber":237,"author":{"gitId":"AaronJT1"},"content":" return this.parser.getTodoTask(descString, false);","lastModifiedDate":"2023-09-11"},{"lineNumber":238,"author":{"gitId":"AaronJT1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-11"},{"lineNumber":239,"author":{"gitId":"AaronJT1"},"content":" return this.parser.getDeadlineTask(descString, false);","lastModifiedDate":"2023-09-11"},{"lineNumber":240,"author":{"gitId":"AaronJT1"},"content":" case \"event\":","lastModifiedDate":"2023-09-11"},{"lineNumber":241,"author":{"gitId":"AaronJT1"},"content":" return this.parser.getEventTask(descString, false);","lastModifiedDate":"2023-09-11"},{"lineNumber":242,"author":{"gitId":"AaronJT1"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":243,"author":{"gitId":"AaronJT1"},"content":" throw new NoSuchCommandException();","lastModifiedDate":"2023-08-22"},{"lineNumber":244,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":245,"author":{"gitId":"AaronJT1"},"content":" return null;","lastModifiedDate":"2023-09-11"},{"lineNumber":246,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":247,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":248,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":249,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":250,"author":{"gitId":"AaronJT1"},"content":" * Takes in user input and return the corresponding response.","lastModifiedDate":"2023-09-11"},{"lineNumber":251,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":252,"author":{"gitId":"AaronJT1"},"content":" * @param userInput User Input from GUI","lastModifiedDate":"2023-09-11"},{"lineNumber":253,"author":{"gitId":"AaronJT1"},"content":" * @return true to exit program, else function will be continuously called.","lastModifiedDate":"2023-09-11"},{"lineNumber":254,"author":{"gitId":"AaronJT1"},"content":" * @throws NoSuchCommandException If command does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":255,"author":{"gitId":"AaronJT1"},"content":" * @throws EmptyDescriptionException If second part of user input does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":256,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-11"},{"lineNumber":257,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-11"},{"lineNumber":258,"author":{"gitId":"AaronJT1"},"content":" * @throws WrongDescriptionException If task description is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":259,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":260,"author":{"gitId":"AaronJT1"},"content":" public StringBuilder getBotResponse(String userInput)","lastModifiedDate":"2023-09-11"},{"lineNumber":261,"author":{"gitId":"AaronJT1"},"content":" throws NoSuchCommandException, EmptyDescriptionException, IndexOutOfRangeException, IOException,","lastModifiedDate":"2023-09-11"},{"lineNumber":262,"author":{"gitId":"AaronJT1"},"content":" WrongDescriptionException {","lastModifiedDate":"2023-09-11"},{"lineNumber":263,"author":{"gitId":"AaronJT1"},"content":" StringBuilder outMsg \u003d new StringBuilder();","lastModifiedDate":"2023-09-11"},{"lineNumber":264,"author":{"gitId":"AaronJT1"},"content":" String[] cmdAndDesc \u003d this.parser.parseCommand(userInput);","lastModifiedDate":"2023-09-11"},{"lineNumber":265,"author":{"gitId":"AaronJT1"},"content":" String cmdString;","lastModifiedDate":"2023-09-11"},{"lineNumber":266,"author":{"gitId":"AaronJT1"},"content":" if (cmdAndDesc.length \u003d\u003d 0) { // if user input is a single command","lastModifiedDate":"2023-09-11"},{"lineNumber":267,"author":{"gitId":"AaronJT1"},"content":" cmdString \u003d userInput;","lastModifiedDate":"2023-09-11"},{"lineNumber":268,"author":{"gitId":"AaronJT1"},"content":" getSingleCommandResponse(outMsg, cmdString);","lastModifiedDate":"2023-09-11"},{"lineNumber":269,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":270,"author":{"gitId":"AaronJT1"},"content":" cmdString \u003d cmdAndDesc[0];","lastModifiedDate":"2023-09-11"},{"lineNumber":271,"author":{"gitId":"AaronJT1"},"content":" String descString \u003d cmdAndDesc[1];","lastModifiedDate":"2023-09-11"},{"lineNumber":272,"author":{"gitId":"AaronJT1"},"content":" Task task \u003d getFullCommandResponse(outMsg, cmdString, descString);","lastModifiedDate":"2023-09-11"},{"lineNumber":273,"author":{"gitId":"AaronJT1"},"content":" if (task !\u003d null) { // add task to database and taskList","lastModifiedDate":"2023-09-07"},{"lineNumber":274,"author":{"gitId":"AaronJT1"},"content":" addTask(outMsg, cmdString, descString, task);","lastModifiedDate":"2023-09-11"},{"lineNumber":275,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":276,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":277,"author":{"gitId":"AaronJT1"},"content":" return outMsg;","lastModifiedDate":"2023-09-07"},{"lineNumber":278,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":280,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":281,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":282,"author":{"gitId":"AaronJT1"},"content":" * Initialises the necessary components of the AJ chat-bot","lastModifiedDate":"2023-09-02"},{"lineNumber":283,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":284,"author":{"gitId":"AaronJT1"},"content":" * @param filePath Filepath of database","lastModifiedDate":"2023-09-02"},{"lineNumber":285,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":286,"author":{"gitId":"AaronJT1"},"content":" public void setUpBot(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"AaronJT1"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"AaronJT1"},"content":" this.storage \u003d new Storage(this.parser, filePath);","lastModifiedDate":"2023-09-11"},{"lineNumber":289,"author":{"gitId":"AaronJT1"},"content":" this.taskList \u003d new TaskList(this.storage.initialiseData());","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"AaronJT1"},"content":" this.ui \u003d new Ui(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":292,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":293,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":294,"author":{"gitId":"AaronJT1"},"content":" public void configureStage(Stage stage, AnchorPane mainLayout, Button sendButton) {","lastModifiedDate":"2023-09-11"},{"lineNumber":295,"author":{"gitId":"AaronJT1"},"content":" stage.setTitle(\"Aj-Bot\");","lastModifiedDate":"2023-09-11"},{"lineNumber":296,"author":{"gitId":"AaronJT1"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-11"},{"lineNumber":297,"author":{"gitId":"AaronJT1"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":298,"author":{"gitId":"AaronJT1"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":299,"author":{"gitId":"AaronJT1"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":300,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-11"},{"lineNumber":301,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-11"},{"lineNumber":302,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-11"},{"lineNumber":303,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":304,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-11"},{"lineNumber":305,"author":{"gitId":"AaronJT1"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-11"},{"lineNumber":306,"author":{"gitId":"AaronJT1"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":307,"author":{"gitId":"AaronJT1"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":308,"author":{"gitId":"AaronJT1"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":309,"author":{"gitId":"AaronJT1"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":310,"author":{"gitId":"AaronJT1"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":311,"author":{"gitId":"AaronJT1"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":312,"author":{"gitId":"AaronJT1"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":313,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":314,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":315,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":316,"author":{"gitId":"AaronJT1"},"content":" * Controls are like HTML elements like textField, image, button. Nodes can be controls","lastModifiedDate":"2023-09-07"},{"lineNumber":317,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":318,"author":{"gitId":"AaronJT1"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-07"},{"lineNumber":319,"author":{"gitId":"AaronJT1"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-07"},{"lineNumber":320,"author":{"gitId":"AaronJT1"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-07"},{"lineNumber":321,"author":{"gitId":"AaronJT1"},"content":" * primary stages.","lastModifiedDate":"2023-09-07"},{"lineNumber":322,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":323,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":324,"author":{"gitId":"AaronJT1"},"content":" public void start(Stage stage) { // first 2 steps in html/css, 3rd step is js","lastModifiedDate":"2023-09-07"},{"lineNumber":325,"author":{"gitId":"AaronJT1"},"content":" String fullFilePath \u003d \"/Users/aaronjt/Documents/CS2103T_IP/ip/src/main/data/actualData.txt\";","lastModifiedDate":"2023-09-07"},{"lineNumber":326,"author":{"gitId":"AaronJT1"},"content":" setUpBot(fullFilePath);","lastModifiedDate":"2023-09-07"},{"lineNumber":327,"author":{"gitId":"AaronJT1"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-07"},{"lineNumber":328,"author":{"gitId":"AaronJT1"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-07"},{"lineNumber":329,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-07"},{"lineNumber":330,"author":{"gitId":"AaronJT1"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-07"},{"lineNumber":331,"author":{"gitId":"AaronJT1"},"content":" Button sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-07"},{"lineNumber":332,"author":{"gitId":"AaronJT1"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-07"},{"lineNumber":333,"author":{"gitId":"AaronJT1"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-11"},{"lineNumber":334,"author":{"gitId":"AaronJT1"},"content":" Scene scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-07"},{"lineNumber":335,"author":{"gitId":"AaronJT1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":336,"author":{"gitId":"AaronJT1"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":337,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":338,"author":{"gitId":"AaronJT1"},"content":" configureStage(stage, mainLayout, sendButton);","lastModifiedDate":"2023-09-11"},{"lineNumber":339,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":340,"author":{"gitId":"AaronJT1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-07"},{"lineNumber":341,"author":{"gitId":"AaronJT1"},"content":" handleUserInput();","lastModifiedDate":"2023-09-07"},{"lineNumber":342,"author":{"gitId":"AaronJT1"},"content":" });","lastModifiedDate":"2023-09-07"},{"lineNumber":343,"author":{"gitId":"AaronJT1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-07"},{"lineNumber":344,"author":{"gitId":"AaronJT1"},"content":" handleUserInput();","lastModifiedDate":"2023-09-07"},{"lineNumber":345,"author":{"gitId":"AaronJT1"},"content":" });","lastModifiedDate":"2023-09-07"},{"lineNumber":346,"author":{"gitId":"AaronJT1"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-07"},{"lineNumber":347,"author":{"gitId":"AaronJT1"},"content":" dialogContainer.getChildren()","lastModifiedDate":"2023-09-11"},{"lineNumber":348,"author":{"gitId":"AaronJT1"},"content":" .addAll(DialogBox.getAjDialog(getDialogLabel(this.ui.greet()), new ImageView(ajImage)));","lastModifiedDate":"2023-09-11"},{"lineNumber":349,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":350,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":351,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":352,"author":{"gitId":"AaronJT1"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-07"},{"lineNumber":353,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":354,"author":{"gitId":"AaronJT1"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-07"},{"lineNumber":355,"author":{"gitId":"AaronJT1"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-07"},{"lineNumber":356,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":357,"author":{"gitId":"AaronJT1"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-07"},{"lineNumber":358,"author":{"gitId":"AaronJT1"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-07"},{"lineNumber":359,"author":{"gitId":"AaronJT1"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":360,"author":{"gitId":"AaronJT1"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-07"},{"lineNumber":361,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":362,"author":{"gitId":"AaronJT1"},"content":" return textToAdd;","lastModifiedDate":"2023-09-07"},{"lineNumber":363,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":364,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":365,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":366,"author":{"gitId":"AaronJT1"},"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":367,"author":{"gitId":"AaronJT1"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":368,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":369,"author":{"gitId":"AaronJT1"},"content":" private void handleUserInput() { // need change here***","lastModifiedDate":"2023-09-07"},{"lineNumber":370,"author":{"gitId":"AaronJT1"},"content":" Label userLabel \u003d getDialogLabel(userInput.getText()); // get userinput from textField","lastModifiedDate":"2023-09-07"},{"lineNumber":371,"author":{"gitId":"AaronJT1"},"content":" Label ajLabel \u003d getDialogLabel(getResponse(userInput.getText())); // get string, create label for dialogBox","lastModifiedDate":"2023-09-07"},{"lineNumber":372,"author":{"gitId":"AaronJT1"},"content":" dialogContainer.getChildren().addAll(DialogBox.getUserDialog(userLabel, new ImageView(userImage)),","lastModifiedDate":"2023-09-11"},{"lineNumber":373,"author":{"gitId":"AaronJT1"},"content":" DialogBox.getAjDialog(ajLabel, new ImageView(ajImage)));","lastModifiedDate":"2023-09-11"},{"lineNumber":374,"author":{"gitId":"AaronJT1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":375,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":376,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":377,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":378,"author":{"gitId":"AaronJT1"},"content":" * Gets response from bot to be displayed to user.","lastModifiedDate":"2023-09-11"},{"lineNumber":379,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":380,"author":{"gitId":"AaronJT1"},"content":" * @param userInput User\u0027s input into bot.","lastModifiedDate":"2023-09-11"},{"lineNumber":381,"author":{"gitId":"AaronJT1"},"content":" * @return String response to be displayed to user.","lastModifiedDate":"2023-09-11"},{"lineNumber":382,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":383,"author":{"gitId":"AaronJT1"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-11"},{"lineNumber":384,"author":{"gitId":"AaronJT1"},"content":" String outMsg \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":385,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":386,"author":{"gitId":"AaronJT1"},"content":" outMsg \u003d getBotResponse(userInput).toString();","lastModifiedDate":"2023-09-11"},{"lineNumber":387,"author":{"gitId":"AaronJT1"},"content":" } catch (AjException | IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":388,"author":{"gitId":"AaronJT1"},"content":" outMsg \u003d e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":389,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":390,"author":{"gitId":"AaronJT1"},"content":" this.latestCommand \u003d userInput; // set user input as latest command","lastModifiedDate":"2023-09-13"},{"lineNumber":391,"author":{"gitId":"AaronJT1"},"content":" return outMsg;","lastModifiedDate":"2023-09-07"},{"lineNumber":392,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":393,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":394,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":395,"author":{"gitId":"AaronJT1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":396,"author":{"gitId":"AaronJT1"},"content":" Application.launch(Aj.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":397,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":398,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":399,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"AaronJT1":397,"-":2}},{"path":"src/main/java/aj/AjException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * AjException class for exceptions related to Aj chat-bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class AjException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" AjException(String msg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" super(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":11}},{"path":"src/main/java/aj/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":" * Deadline class for Deadline Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" private final LocalDate by;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" String formattedDate \u003d by.format(formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formattedDate + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" Deadline(String taskName, boolean isMarked, LocalDate by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" super(taskName,","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" isMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"AaronJT1":25}},{"path":"src/main/java/aj/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" private Label text;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" * Factory method that takes in a Label and Imageview and return a DialogBox control for Aj-bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" * @param l Label control with text","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" * @param iv Imageview control with the image","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" * @return DialogBox control to be displayed in scene","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" public static DialogBox getAjDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" return new DialogBox(l,","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" iv);","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" * Factory method that takes in a Label and Imageview and return a DialogBox control for user.","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" * @param l Label control with text","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" * @param iv Imageview control with the image","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" * @return DialogBox control to be displayed in scene","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" var db \u003d new DialogBox(l,","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" iv);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" this.text \u003d l;","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" this.displayPicture \u003d iv;","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" this.getChildren().addAll(text,","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" displayPicture);","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":64}},{"path":"src/main/java/aj/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * EmptyDescriptionException class for exceptions related to empty description.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class EmptyDescriptionException extends AjException {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" EmptyDescriptionException(String cmd, String helpMsg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" super(\"OOPS!!! The description of a \" + cmd + \" cannot be empty.\\n\" + \"Try:\\n\" + helpMsg);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":12}},{"path":"src/main/java/aj/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * Event class for Event Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" private final String fromDt, toDt;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" public String getFromDt() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" return this.fromDt;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" public String getToDt() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" return this.toDt;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.fromDt + \" to: \" + this.toDt + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" Event(String taskName, boolean isMarked, String fromDt, String toDt) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" super(taskName,","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" isMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" this.fromDt \u003d fromDt;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" this.toDt \u003d toDt;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"AaronJT1":30}},{"path":"src/main/java/aj/IndexOutOfRangeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":" * IndexOutOfRangeException class for exceptions related to index being out of range.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"public class IndexOutOfRangeException extends AjException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" IndexOutOfRangeException(int val) {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" super(\"OOPS!!! Please choose an index within the number of items in the list \" + \"(\" + val + \")\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":11}},{"path":"src/main/java/aj/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":" Application.launch(Aj.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"// Aj.main(args);","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":10}},{"path":"src/main/java/aj/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" private Aj aj \u003d new Aj();","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setAj(aj);","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":32}},{"path":"src/main/java/aj/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" private Aj aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" public void setAj(Aj d) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" aj \u003d d;","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"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":42,"author":{"gitId":"AaronJT1"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":"// String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":"// String response \u003d aj.getResponse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":"// dialogContainer.getChildren().addAll(DialogBox.getUserDialog(input,","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":"// userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":"// DialogBox.getDukeDialog(response,","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":"// dukeImage));","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":"// userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" Label dukeText \u003d new Label(aj.getResponse(userInput.getText()));","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" dialogContainer.getChildren().addAll(DialogBox.getUserDialog(userText,","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" new ImageView(userImage)),","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" DialogBox.getAjDialog(dukeText,","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" new ImageView(dukeImage)));","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":63}},{"path":"src/main/java/aj/NoSuchCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * NoSuchCommandException class for exceptions related to unknown commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class NoSuchCommandException extends AjException {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" NoSuchCommandException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n Type \u0027help\u0027 to find out more!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":12}},{"path":"src/main/java/aj/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" * Parser class to parse user input and return respective Tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" * Takes in user input string, parse it, and return command string and task string","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" * @param userInput User input.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" * @return String array, where first element is command, and second element is task, if no match, return empty","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" * array.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" public String[] parseCommand(String userInput) {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" Pattern pattern \u003d Pattern.compile(\"(\\\\w+) (.*)\");","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" Matcher matcher \u003d pattern.matcher(userInput);","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" String[] strArray;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" String command \u003d matcher.group(1);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" String taskString \u003d matcher.group(2);","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" taskString \u003d \" \" + taskString;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" strArray \u003d new String[]{command, taskString};","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" return strArray;","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" return new String[]{};","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" * Creates and return a Todo Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" * @param remaining The remaining sub-command from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" * @param isMark Mark task as complete or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" * @return Todo Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" public Task getTodoTask(String remaining, boolean isMark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" return new Todo(remaining.substring(1), isMark);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" * Creates and return a Deadline Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" * @param remaining The remaining sub-command from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" * @param isMark Mark task as complete or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" * @return Deadline Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" * @throws WrongDescriptionException If task description is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" public Task getDeadlineTask(String remaining, boolean isMark)","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" throws WrongDescriptionException { // takes in command, parse it and return task object","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" String pattern \u003d \" (.*) /by (.*)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" Pattern regexPattern \u003d Pattern.compile(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" Matcher matcher \u003d regexPattern.matcher(remaining);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" String taskName \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" String by \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" LocalDate newDate \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" return new Deadline(taskName, isMark, newDate);","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":" throw new WrongDescriptionException(\"ERROR!! Please ensure that your date format is correct\");","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" throw new WrongDescriptionException(\"ERROR!! Please type \u0027deadline\u0027 to view correct format!!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" * Creates and return a Event Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" * @param remaining The remaining sub-command from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":" * @param isMark Mark task as complete or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" * @return Event Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" * @throws WrongDescriptionException If task description is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" public Task getEventTask(String remaining, boolean isMark)","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":" throws WrongDescriptionException { // takes in command, parse it and return task object","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" String pattern \u003d \" (.*) /from (.*?) /to (.*)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" Pattern regexPattern \u003d Pattern.compile(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":" Matcher matcher \u003d regexPattern.matcher(remaining);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"AaronJT1"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"AaronJT1"},"content":" String taskName \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"AaronJT1"},"content":" String startTime \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"AaronJT1"},"content":" String endTime \u003d matcher.group(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"AaronJT1"},"content":" return new Event(taskName, isMark, startTime, endTime);","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"AaronJT1"},"content":" throw new WrongDescriptionException(\"ERROR!! Please type \u0027event\u0027 to view correct format!!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":96}},{"path":"src/main/java/aj/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import java.nio.charset.StandardCharsets;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" * Storage class responsible for CRUD operations with database.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" final String FILEPATH;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" * Gets raw data from database and return task related to it.","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" * @param line Data from database.","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" * @return Task associated to the data.","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" * @throws WrongDescriptionException If command from user input does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" public Task getTaskFromData(String line) throws WrongDescriptionException {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" String[] parsedValues \u003d line.split(\",\");","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" Scanner strScanner \u003d new Scanner(parsedValues[0]);","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" String command \u003d strScanner.next().toLowerCase();","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" String remaining \u003d strScanner.nextLine();","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" boolean isMark \u003d Boolean.parseBoolean(parsedValues[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" Task task;","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" switch (command) {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" task \u003d this.parser.getTodoTask(remaining, isMark);","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" task \u003d this.parser.getDeadlineTask(remaining, isMark);","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" case \"event\":","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" task \u003d this.parser.getEventTask(remaining, isMark);","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" task \u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" return task;","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" * Reads data from database, creates the necessary Task objects and returns an Arraylist of Tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" * @return Arraylist of Tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" public List\u003cTask\u003e initialiseData() {","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" File file \u003d new File(this.FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" List\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"File does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" try (BufferedReader br \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":" taskList.add(getTaskFromData(line));","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":" } catch (IOException | WrongDescriptionException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" return taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" * Set the \u0027isMarked\u0027 attribute of the Task at index \u0027idx\u0027 to \u0027isMarked\u0027 in database.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" * @param idx Index of the database (starting from 0).","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":" * @param isMarked True to mark Task as completed, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" public void updateData(int idx, boolean isMarked) throws IOException { // linenumber refers to index from 0","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":" Path myPath \u003d Paths.get(this.FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"AaronJT1"},"content":" List\u003cString\u003e fileContent \u003d new ArrayList\u003c\u003e(Files.readAllLines(myPath, StandardCharsets.UTF_8));","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 0; i \u003c fileContent.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"AaronJT1"},"content":" if (i \u003d\u003d idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"AaronJT1"},"content":" String[] parsedValues \u003d fileContent.get(i).split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"AaronJT1"},"content":" String newLineContent \u003d parsedValues[0] + \",\" + Boolean.toString(isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"AaronJT1"},"content":" fileContent.set(i, newLineContent);","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"AaronJT1"},"content":" Files.write(myPath, fileContent, StandardCharsets.UTF_8);","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"AaronJT1"},"content":" * Deletes data of Task at index \u0027idx\u0027 from database.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"AaronJT1"},"content":" * @param idx Index of that Task to be deleted (starting from 0).","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"AaronJT1"},"content":" public String deleteData(int idx) throws IOException { // get linenumber and delete that entry","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"AaronJT1"},"content":" Path myPath \u003d Paths.get(this.FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"AaronJT1"},"content":" String deletedLine \u003d \"\";","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"AaronJT1"},"content":" List\u003cString\u003e fileContent \u003d new ArrayList\u003c\u003e(Files.readAllLines(myPath, StandardCharsets.UTF_8));","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 0; i \u003c fileContent.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"AaronJT1"},"content":" if (i \u003d\u003d idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"AaronJT1"},"content":" deletedLine \u003d fileContent.get(i);","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"AaronJT1"},"content":" fileContent.remove(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"AaronJT1"},"content":" Files.write(myPath, fileContent, StandardCharsets.UTF_8);","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"AaronJT1"},"content":" return deletedLine;","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"AaronJT1"},"content":" * Adds new Task into database.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"AaronJT1"},"content":" * @param str Full data string to be stored in database.","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"AaronJT1"},"content":" public void addData(String str) throws IOException { // get linenumber and delete that entry","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"AaronJT1"},"content":" Path myPath \u003d Paths.get(this.FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"AaronJT1"},"content":" List\u003cString\u003e fileContent \u003d new ArrayList\u003c\u003e(Files.readAllLines(myPath, StandardCharsets.UTF_8));","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"AaronJT1"},"content":" fileContent.add(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"AaronJT1"},"content":" Files.write(myPath, fileContent, StandardCharsets.UTF_8);","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"AaronJT1"},"content":" Storage(Parser parser, String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"AaronJT1"},"content":" this.parser \u003d parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"AaronJT1"},"content":" this.FILEPATH \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":140}},{"path":"src/main/java/aj/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * Task abstract class for user tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" protected boolean isMarked;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" protected String taskName;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" public void toggleComplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" this.isMarked \u003d !this.isMarked;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" public boolean isCompleted() {","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" return this.isMarked;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" public String getTaskName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" return this.taskName;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" return (this.isMarked ? \"[X] \" : \"[ ] \") + this.taskName;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" Task(String taskName, boolean completed) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" this.isMarked \u003d completed;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"AaronJT1":35}},{"path":"src/main/java/aj/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" * TaskList wrapper class to integrate with Storage class.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" public Task getTask(int idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" return this.taskList.get(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" public void removeTask(int idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" this.taskList.remove(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":31}},{"path":"src/main/java/aj/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * Todo class for Todo Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" Todo(String taskName, boolean isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" super(taskName,","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" isMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"AaronJT1":18}},{"path":"src/main/java/aj/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":" * Ui class responsible for User Interface of the programme. Return string instead","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * change java doc","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" public String horiLine() {","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" return \"---------------------\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" * Greets user.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" public String greet() {","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" return horiLine() + \"Hello! I\u0027m Aj\\n\" + \"Loading data....\\nHere are your saved data:\\n\" + printList() +","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" \"\\nWhat can i do for you?\\n\" + horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" public String getHelpMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" return \"Here is a list of commands you can try:\\n\\n\" + \"list - To list your added tasks\\n\" + \"mark - To mark \"","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" + \"a \" + \"task as completed\\n\" + \"unmark - To unmark a task\\n\" + \"delete - To delete a task\\n\" +","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" \"find \" + \"- To \" + \"find any keyword related to the task\\n\" + \"todo - To create a \u0027Todo\u0027 task\\n\" +","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" \"deadline -\" + \" To \" + \"creete\" + \" a \u0027deadline\u0027 task\\n\" + \"event - To create an \u0027event\u0027 \" + \"task\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" + \"undo - To undo latest command \\n\" + \"\\n\\n\\n\" + \"To get \" + \"more \" + \"specific help for \" + \"each \" +","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" \"command, type the command itself!!!\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" * Throws error with help message if command is valid, throws NoSuchCommandException otherwise","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" * @param cmd First part of user input which indicates type of command.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" * @throws EmptyDescriptionException If second part of user input does not exist.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" * @throws NoSuchCommandException If command from user input does not exist.","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" public void checkCommand(String cmd)","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" throws EmptyDescriptionException, NoSuchCommandException { // if no arguments, give help message","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" String helpMessage;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" switch (cmd) {","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"todo \u003ctask name\u003e\";","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"deadline \u003ctask name\u003e /by \u003cYYYY-MM-DD\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" case \"event\":","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"event \u003ctask name\u003e /from \u003cdate/time\u003e /to \u003cdate/time\u003e\";","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"mark \u003ctask_no\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"unmark \u003ctask_no\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"delete \u003ctask_no\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" case \"find\":","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"find \u003cany keyword related to the task\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" throw new NoSuchCommandException();","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" throw new EmptyDescriptionException(cmd, helpMessage);","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" * Takes in an index \u0027idx\u0027 and checks if it is within range of taskList size.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":" * @param idx Index given by user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index \u0027idx\u0027 bigger than taskList size.","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" public void checkIndex(int idx) throws IndexOutOfRangeException { // throws error if index invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" if (idx \u003c\u003d this.taskList.getSize() - 1 \u0026\u0026 idx \u003e\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" throw new IndexOutOfRangeException(this.taskList.getSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":" * Prints number of Tasks in taskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":" public String printNumTask() {","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"AaronJT1"},"content":"// System.out.printf(\"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"AaronJT1"},"content":"// this.taskList.getSize());","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"AaronJT1"},"content":" return String.format(\"Now you have %d tasks in the list.\\n\", this.taskList.getSize());","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"AaronJT1"},"content":" * Prints the Tasks in taskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"AaronJT1"},"content":" public String printList() {","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"AaronJT1"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"AaronJT1"},"content":" if (this.taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(\"No items yet, add something!!!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"AaronJT1"},"content":" str \u003d \"No items yet, add something!!!\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 1; i \u003c\u003d this.taskList.getSize(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"AaronJT1"},"content":" assert this.taskList.getSize() !\u003d 0 : \"Tasklist size should be 0\";","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(i + \".\" + this.lst[i - 1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(i + \".\" + this.taskList.getTask(i - 1));","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"AaronJT1"},"content":" str +\u003d i + \".\" + this.taskList.getTask(i - 1) + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"AaronJT1"},"content":" return str;","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"AaronJT1"},"content":" public String printKeywordTask(String k) {","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"AaronJT1"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"AaronJT1"},"content":" str +\u003d \"Finding tasks with names matching : \\\"\" + k + \"\\\"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"AaronJT1"},"content":" str +\u003d \"Here they are!!:\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(\"Finding tasks with names matching : \\\"\" + k + \"\\\"\");","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(\"Here they are!!:\");","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"AaronJT1"},"content":" int no \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 0; i \u003c this.taskList.getSize(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"AaronJT1"},"content":" Task task \u003d this.taskList.getTask(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"AaronJT1"},"content":" if (task.getTaskName().contains(k)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(Integer.toString(no) + \".\" + task);","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"AaronJT1"},"content":" str +\u003d Integer.toString(no++) + \".\" + task + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"AaronJT1"},"content":" str +\u003d horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"AaronJT1"},"content":" return str;","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"AaronJT1"},"content":" * Prints exit message.","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"AaronJT1"},"content":" public String exit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":132,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"AaronJT1"},"content":" horiLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"AaronJT1"},"content":" return \"Bye. Hope to see you again soon!\" + horiLine() + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"AaronJT1"},"content":" Ui(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"AaronJT1"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":140}},{"path":"src/main/java/aj/UiOld.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":" * Ui class responsible for User Interface of the programme.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"public class UiOld {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":" TaskList taskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" public void horiLine() {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"---------------------\");","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" * Greets user.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" public void greet() {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"Hello! I\u0027m Aj\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"Loading data....\\nHere are your saved data:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" printList();","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"\\nWhat can i do for you?\");","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" * Checks that user input is correct, prints help message and throws error otherwise.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" * @param cmd First part of user input which indicates type of command.","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" * @param msg Second part of user input which indicates content and parameters.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" * @throws EmptyDescriptionException If second part of user input does not exist.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" public void checkMessage(String cmd, String msg) throws","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" EmptyDescriptionException { // if no arguments, give help message","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" String helpMessage;","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" if (msg.length() \u003d\u003d 0 || msg.equals(\" \")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" if (cmd.equals(\"todo\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"todo \u003ctask name\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"deadline\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"deadline \u003ctask name\u003e /by \u003cdate/time\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"event\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"event \u003ctask name\u003e /from \u003cdate/time\u003e /to \u003cdate/time\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"mark\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"mark \u003cidx\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"unmark\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"unmark \u003cidx\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"delete\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"delete \u003cidx\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"find\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"find \u003cany keyword for task name\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" throw new EmptyDescriptionException(cmd,","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" helpMessage);","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" * Takes in an index \u0027idx\u0027 and checks if it is within range of taskList size.","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" * @param idx Index given by user input.","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index \u0027idx\u0027 bigger than taskList size.","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" public void checkIndex(int idx) throws IndexOutOfRangeException { // throws error if index invalid","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" if (idx \u003c\u003d this.taskList.getSize() - 1 \u0026\u0026 idx \u003e\u003d 0) {","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":" throw new IndexOutOfRangeException(this.taskList.getSize());","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" * Prints number of Tasks in taskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" public void printNumTask() {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":" System.out.printf(\"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" this.taskList.getSize());","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":" * Prints the Tasks in taskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":" public void printList() {","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" if (this.taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"No items yet, add something!!!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 1; i \u003c\u003d this.taskList.getSize(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(i + \".\" + this.lst[i - 1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"AaronJT1"},"content":" System.out.println(i + \".\" + this.taskList.getTask(i - 1));","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"AaronJT1"},"content":" public void printKeywordTask(String k) {","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"Finding tasks with names matching : \\\"\" + k + \"\\\"\");","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"Here they are!!:\");","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"AaronJT1"},"content":" int no \u003d 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 0; i \u003c this.taskList.getSize(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"AaronJT1"},"content":" Task task \u003d this.taskList.getTask(i);","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"AaronJT1"},"content":" if (task.getTaskName().contains(k)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"AaronJT1"},"content":" System.out.println(Integer.toString(no) + \".\" + task);","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"AaronJT1"},"content":" horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"AaronJT1"},"content":" * Prints exit message.","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"AaronJT1"},"content":" public void exit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"AaronJT1"},"content":" horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"AaronJT1"},"content":" UiOld(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"AaronJT1"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":118}},{"path":"src/main/java/aj/WrongDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":" * WrongDescriptionException class for exceptions related to invalid task description from user input","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"public class WrongDescriptionException extends AjException {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":" WrongDescriptionException(String errMsg) {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" super(errMsg);","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":10}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"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-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"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":12,"author":{"gitId":"AaronJT1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"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\"aj.MainWindow\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"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":"AaronJT1"},"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":"AaronJT1"},"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":"AaronJT1"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":19}},{"path":"src/test/java/aj/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" public void fromDt_correctInput_stringReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" Event testTask \u003d new Event(\"project meeting\", false, \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.getFromDt(), \"Mon 2pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" public void toDt_correctInput_stringReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" Event testTask \u003d new Event(\"project meeting\", false, \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.getToDt(), \"4pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" public void toString_noInput_stringPrinted() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" Event testTask \u003d new Event(\"project meeting\", false, \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.toString(), \"[E][ ] project meeting (from: Mon 2pm to: 4pm)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":25}},{"path":"src/test/java/aj/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" public void getTodoTask_correctInput_taskReturned() { // test that the Todo Task created have same behaviour","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"todo return book\";","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" Scanner scanner \u003d new Scanner(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" String command \u003d scanner.next().toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" String remaining \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" Task testTask \u003d parser.getTodoTask(remaining, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" assertTrue(testTask instanceof Todo); // test object returned is Todo task","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.taskName, \"return book\"); // test taskName correct","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" assertFalse(testTask.isMarked); // test isMarked set to false","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" public void getDeadlineTask_correctInput_taskReturned() throws WrongDescriptionException { // test that the deadline Task created have same behaviour","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"deadline homework /by 2019-10-15\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" Scanner scanner \u003d new Scanner(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" String command \u003d scanner.next().toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" String remaining \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" Task testTask \u003d parser.getDeadlineTask(remaining, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" assertTrue(testTask instanceof Deadline); // test object returned is Deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.taskName, \"homework\"); // test taskName correct","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" assertFalse(testTask.isMarked); // test isMarked set to false","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.toString(), \"[D][ ] homework (by: Oct 15 2019)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" public void getEventTask_correctInput_taskReturned() throws WrongDescriptionException { // test that the event Task created have same behaviour","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"event project meeting /from Mon 2pm /to 4pm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" Scanner scanner \u003d new Scanner(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" String command \u003d scanner.next().toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" String remaining \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" Task testTask \u003d parser.getEventTask(remaining, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" assertTrue(testTask instanceof Event); // test object returned is Deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.taskName, \"project meeting\"); // test taskName correct","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" assertFalse(testTask.isMarked); // test isMarked set to false","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.toString(), \"[E][ ] project meeting (from: Mon 2pm to: 4pm)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":50}},{"path":"src/test/java/aj/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"public class UiTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" public TaskList createTestTaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" List\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"todo return book\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" Scanner scanner \u003d new Scanner(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" String command \u003d scanner.next().toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" String remaining \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" Task testTodoTask \u003d parser.getTodoTask(remaining,","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" false);","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" taskList.add(testTodoTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" return new TaskList(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" public void checkIndex_correctIndex_noExceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" TaskList testTaskList \u003d createTestTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" Ui testUi \u003d new Ui(testTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" boolean haveException \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" testUi.checkIndex(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" } catch (IndexOutOfRangeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" haveException \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" assertFalse(haveException);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" public void checkIndex_incorrectIndex_ExceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" TaskList testTaskList \u003d createTestTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" Ui testUi \u003d new Ui(testTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" boolean haveException \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" testUi.checkIndex(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" } catch (IndexOutOfRangeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" haveException \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" assertTrue(haveException);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" public void checkCommand_wrongInput_EmptyDescriptionExceptionThrown() {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" TaskList testTaskList \u003d createTestTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" Ui testUi \u003d new Ui(testTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"todo\";","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" boolean isCorrect \u003d false;","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" testUi.checkCommand(userInput);","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" } catch (AjException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" if (e instanceof EmptyDescriptionException) {","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" isCorrect \u003d true;","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" assertTrue(isCorrect);","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":" public void checkCommand_wrongInput_NoSuchCommandExceptionThrown() {","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":" TaskList testTaskList \u003d createTestTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" Ui testUi \u003d new Ui(testTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"deadline wrong command\"; // no \u0027by\u0027 flag","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" boolean isCorrect \u003d false;","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":" testUi.checkCommand(userInput);","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" } catch (AjException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" if (e instanceof NoSuchCommandException) {","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":" isCorrect \u003d true;","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" assertTrue(isCorrect);","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AaronJT1":86}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"unmark 2","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"unmark 3","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"mark","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"mark 2","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"deadline return book /by 2023-10-20","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"mark 5","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"mark 4","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"unmark 1","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"delete 5","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"delete 7","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":"delete 3","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":"delete 3","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":"delete 2","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"delete 1","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":"deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":"event","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":"deadline return book /by 2019-10-15","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":"todo return book","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AaronJT1":28}},{"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":"AaronJT1"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/aj/*.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":"AaronJT1"},"content":"java -classpath ../bin Aj \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":{"AaronJT1":2,"-":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":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"javafx {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"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":"AaronJT1"},"content":"// mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":"// mainClass.set(\"aj.Aj\")","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" mainClass.set(\"aj.Launcher\")","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":"// mainClassName \u003d \u0027aj.Aj\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" mainClassName \u003d \u0027aj.Launcher\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" archiveBaseName \u003d \"aj\"","lastModifiedDate":"2023-08-31"},{"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":"AaronJT1"},"content":" archiveFileName \u003d \u0027aj.jar\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AaronJT1":29,"-":40}},{"path":"src/main/data/actualData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm,false","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"event yooo /from mon 2pm /to 3pm,true","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"todo feed dog,false","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"AaronJT1":3}},{"path":"src/main/data/backUpData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"todo borrow book,false","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"deadline return book /by Sunday,true","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm,false","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"AaronJT1":3}},{"path":"src/main/data/exampleInput.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"deadline return book /by 2019-10-15","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"todo return book","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":3}},{"path":"src/main/data/testData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"deadline return book /by 2019-10-15,false","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"todo return book,true","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm,false","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":3}},{"path":"src/main/java/aj/Aj.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" * Aj chat-bot class.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":"public class Aj extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" private Image ajImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/aj_bot.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" private String latestCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" private Task lastTaskAdded;","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" private Task lastTaskRemoved;","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" private String lastTaskRemovedEntry;","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" * Takes in description portion of user input and mark the task specified in the taskList and database.","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" public void markTask(StringBuilder outMsg, String descString) throws IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" int idx \u003d Integer.parseInt(descString.substring(1)) - 1; // this idx is idx of tasklst","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" this.ui.checkIndex(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" Task taskToMark \u003d this.taskList.getTask(idx);","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.horiLine());","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" if (taskToMark.isCompleted()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"You have already marked it!!!\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" taskToMark.toggleComplete();","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" this.storage.updateData(idx, true);","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(taskToMark);","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":" * Takes in description portion of user input and unmark the task specified in the taskList and database.","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" public void unmarkTask(StringBuilder outMsg, String descString) throws IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":" int idx \u003d Integer.parseInt(descString.substring(1)) - 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" this.ui.checkIndex(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" Task taskToUnmark \u003d this.taskList.getTask(idx);","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.horiLine());","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" if (!taskToUnmark.isCompleted()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Task is already unmarked!!!\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-08-19"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":" taskToUnmark.toggleComplete();","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" this.storage.updateData(idx, false);","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"OK, I\u0027ve marked this task as not done yet:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(taskToUnmark);","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"AaronJT1"},"content":" * Takes in user input and add the task in the taskList and database.","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"AaronJT1"},"content":" * @param cmdString Command portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"AaronJT1"},"content":" * @param task Task to be added in the taskList and database.","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"AaronJT1"},"content":" public void addTask(StringBuilder outMsg, String cmdString, String descString, Task task)","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"AaronJT1"},"content":" throws IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"AaronJT1"},"content":" this.storage.addData(cmdString + descString + \",false\");","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"AaronJT1"},"content":" this.taskList.addTask(task);","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"AaronJT1"},"content":" this.lastTaskAdded \u003d task;","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(task).append(\"\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.printNumTask());","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"AaronJT1"},"content":" * Takes in index of task in taskList to be deleted.","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"AaronJT1"},"content":" public void deleteTask(StringBuilder outMsg, String descString) throws IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"AaronJT1"},"content":" int idx \u003d Integer.parseInt(descString.substring(1)) - 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"AaronJT1"},"content":" this.ui.checkIndex(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.horiLine());","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"AaronJT1"},"content":" Task removedTask \u003d this.taskList.getTask(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"AaronJT1"},"content":" this.taskList.removeTask(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"AaronJT1"},"content":" this.lastTaskRemovedEntry \u003d this.storage.deleteData(idx);","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"AaronJT1"},"content":" this.lastTaskRemoved \u003d removedTask;","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(removedTask).append(\"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.printNumTask());","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"AaronJT1"},"content":" * Takes in a string keyword from user input and find tasks with that keyword.","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"AaronJT1"},"content":" public void findTask(StringBuilder outMsg, String descString) {","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.printKeywordTask(descString.substring(1)));","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.printNumTask());","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"AaronJT1"},"content":" public void undoCommand(StringBuilder outMsg) throws IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"AaronJT1"},"content":" String[] cmdAndDesc \u003d this.parser.parseCommand(this.latestCommand);","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"AaronJT1"},"content":" String cmdString;","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"AaronJT1"},"content":" if (cmdAndDesc.length !\u003d 0) { // if user input is not a single command","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"AaronJT1"},"content":" cmdString \u003d cmdAndDesc[0];","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"AaronJT1"},"content":" String descString \u003d cmdAndDesc[1];","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"AaronJT1"},"content":" switch (cmdString) {","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"AaronJT1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"AaronJT1"},"content":" unmarkTask(outMsg, descString);","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"AaronJT1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"AaronJT1"},"content":" markTask(outMsg, descString);","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"AaronJT1"},"content":" case \"delete\": // adds the last task removed into taskList again","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"AaronJT1"},"content":" this.storage.addData(this.lastTaskRemovedEntry); // add entry to database","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"AaronJT1"},"content":" this.taskList.addTask(this.lastTaskRemoved); // add to tasklist","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Readded task \").append(this.lastTaskRemoved).append(\"!!!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":162,"author":{"gitId":"AaronJT1"},"content":" default: // latest command is add task","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"AaronJT1"},"content":" int idx \u003d this.taskList.getSize() - 1;","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"AaronJT1"},"content":" Task removedTask \u003d this.taskList.getTask(idx);","lastModifiedDate":"2023-09-13"},{"lineNumber":166,"author":{"gitId":"AaronJT1"},"content":" this.taskList.removeTask(idx);","lastModifiedDate":"2023-09-13"},{"lineNumber":167,"author":{"gitId":"AaronJT1"},"content":" this.storage.deleteData(idx);","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(removedTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(\"Latest command \\\"\").append(this.latestCommand).append(\"\\\" is not undoable!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":177,"author":{"gitId":"AaronJT1"},"content":" * Takes in command portion of userinput and carry out respective action.","lastModifiedDate":"2023-09-11"},{"lineNumber":178,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":179,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":180,"author":{"gitId":"AaronJT1"},"content":" * @param cmdString Command portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":181,"author":{"gitId":"AaronJT1"},"content":" * @throws NoSuchCommandException If command does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":182,"author":{"gitId":"AaronJT1"},"content":" * @throws EmptyDescriptionException If second part of user input does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":183,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-13"},{"lineNumber":184,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":185,"author":{"gitId":"AaronJT1"},"content":" public void getSingleCommandResponse(StringBuilder outMsg, String cmdString)","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"AaronJT1"},"content":" throws NoSuchCommandException, EmptyDescriptionException, IndexOutOfRangeException, IOException {","lastModifiedDate":"2023-09-13"},{"lineNumber":187,"author":{"gitId":"AaronJT1"},"content":" switch (cmdString) {","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"AaronJT1"},"content":" case \"list\":","lastModifiedDate":"2023-09-11"},{"lineNumber":189,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.printList());","lastModifiedDate":"2023-09-11"},{"lineNumber":190,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":191,"author":{"gitId":"AaronJT1"},"content":" case \"bye\":","lastModifiedDate":"2023-09-11"},{"lineNumber":192,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.exit());","lastModifiedDate":"2023-09-11"},{"lineNumber":193,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":194,"author":{"gitId":"AaronJT1"},"content":" case \"help\":","lastModifiedDate":"2023-09-11"},{"lineNumber":195,"author":{"gitId":"AaronJT1"},"content":" outMsg.append(this.ui.getHelpMessage());","lastModifiedDate":"2023-09-11"},{"lineNumber":196,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":197,"author":{"gitId":"AaronJT1"},"content":" case \"undo\":","lastModifiedDate":"2023-09-13"},{"lineNumber":198,"author":{"gitId":"AaronJT1"},"content":" undoCommand(outMsg);","lastModifiedDate":"2023-09-13"},{"lineNumber":199,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":200,"author":{"gitId":"AaronJT1"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":201,"author":{"gitId":"AaronJT1"},"content":" this.ui.checkCommand(cmdString);","lastModifiedDate":"2023-09-11"},{"lineNumber":202,"author":{"gitId":"AaronJT1"},"content":" throw new NoSuchCommandException();","lastModifiedDate":"2023-09-11"},{"lineNumber":203,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":204,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":205,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":206,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":207,"author":{"gitId":"AaronJT1"},"content":" * Takes in a full command (first part and description) of userinput and carry out respective action.","lastModifiedDate":"2023-09-11"},{"lineNumber":208,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":209,"author":{"gitId":"AaronJT1"},"content":" * @param outMsg StringBuilder object to craft bot response.","lastModifiedDate":"2023-09-11"},{"lineNumber":210,"author":{"gitId":"AaronJT1"},"content":" * @param cmdString Command portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":211,"author":{"gitId":"AaronJT1"},"content":" * @param descString Description portion of user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":212,"author":{"gitId":"AaronJT1"},"content":" * @return Task object specified in user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":213,"author":{"gitId":"AaronJT1"},"content":" * @throws NoSuchCommandException If command does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":214,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-11"},{"lineNumber":215,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-11"},{"lineNumber":216,"author":{"gitId":"AaronJT1"},"content":" * @throws WrongDescriptionException If task description is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":217,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":218,"author":{"gitId":"AaronJT1"},"content":" public Task getFullCommandResponse(StringBuilder outMsg, String cmdString, String descString)","lastModifiedDate":"2023-09-11"},{"lineNumber":219,"author":{"gitId":"AaronJT1"},"content":" throws NoSuchCommandException, IndexOutOfRangeException, IOException, WrongDescriptionException {","lastModifiedDate":"2023-09-11"},{"lineNumber":220,"author":{"gitId":"AaronJT1"},"content":" switch (cmdString) {","lastModifiedDate":"2023-09-11"},{"lineNumber":221,"author":{"gitId":"AaronJT1"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-11"},{"lineNumber":222,"author":{"gitId":"AaronJT1"},"content":" markTask(outMsg, descString);","lastModifiedDate":"2023-09-11"},{"lineNumber":223,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":224,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":225,"author":{"gitId":"AaronJT1"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-11"},{"lineNumber":226,"author":{"gitId":"AaronJT1"},"content":" unmarkTask(outMsg, descString);","lastModifiedDate":"2023-09-11"},{"lineNumber":227,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":228,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":229,"author":{"gitId":"AaronJT1"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-11"},{"lineNumber":230,"author":{"gitId":"AaronJT1"},"content":" deleteTask(outMsg, descString);","lastModifiedDate":"2023-09-11"},{"lineNumber":231,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":232,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":233,"author":{"gitId":"AaronJT1"},"content":" case \"find\":","lastModifiedDate":"2023-09-11"},{"lineNumber":234,"author":{"gitId":"AaronJT1"},"content":" findTask(outMsg, descString);","lastModifiedDate":"2023-09-11"},{"lineNumber":235,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":236,"author":{"gitId":"AaronJT1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-11"},{"lineNumber":237,"author":{"gitId":"AaronJT1"},"content":" return this.parser.getTodoTask(descString, false);","lastModifiedDate":"2023-09-11"},{"lineNumber":238,"author":{"gitId":"AaronJT1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-11"},{"lineNumber":239,"author":{"gitId":"AaronJT1"},"content":" return this.parser.getDeadlineTask(descString, false);","lastModifiedDate":"2023-09-11"},{"lineNumber":240,"author":{"gitId":"AaronJT1"},"content":" case \"event\":","lastModifiedDate":"2023-09-11"},{"lineNumber":241,"author":{"gitId":"AaronJT1"},"content":" return this.parser.getEventTask(descString, false);","lastModifiedDate":"2023-09-11"},{"lineNumber":242,"author":{"gitId":"AaronJT1"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":243,"author":{"gitId":"AaronJT1"},"content":" throw new NoSuchCommandException();","lastModifiedDate":"2023-08-22"},{"lineNumber":244,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":245,"author":{"gitId":"AaronJT1"},"content":" return null;","lastModifiedDate":"2023-09-11"},{"lineNumber":246,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":247,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":248,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":249,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":250,"author":{"gitId":"AaronJT1"},"content":" * Takes in user input and return the corresponding response.","lastModifiedDate":"2023-09-11"},{"lineNumber":251,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":252,"author":{"gitId":"AaronJT1"},"content":" * @param userInput User Input from GUI","lastModifiedDate":"2023-09-11"},{"lineNumber":253,"author":{"gitId":"AaronJT1"},"content":" * @return true to exit program, else function will be continuously called.","lastModifiedDate":"2023-09-11"},{"lineNumber":254,"author":{"gitId":"AaronJT1"},"content":" * @throws NoSuchCommandException If command does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":255,"author":{"gitId":"AaronJT1"},"content":" * @throws EmptyDescriptionException If second part of user input does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":256,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index bigger than taskList size.","lastModifiedDate":"2023-09-11"},{"lineNumber":257,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-11"},{"lineNumber":258,"author":{"gitId":"AaronJT1"},"content":" * @throws WrongDescriptionException If task description is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":259,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":260,"author":{"gitId":"AaronJT1"},"content":" public StringBuilder getBotResponse(String userInput)","lastModifiedDate":"2023-09-11"},{"lineNumber":261,"author":{"gitId":"AaronJT1"},"content":" throws NoSuchCommandException, EmptyDescriptionException, IndexOutOfRangeException, IOException,","lastModifiedDate":"2023-09-11"},{"lineNumber":262,"author":{"gitId":"AaronJT1"},"content":" WrongDescriptionException {","lastModifiedDate":"2023-09-11"},{"lineNumber":263,"author":{"gitId":"AaronJT1"},"content":" StringBuilder outMsg \u003d new StringBuilder();","lastModifiedDate":"2023-09-11"},{"lineNumber":264,"author":{"gitId":"AaronJT1"},"content":" String[] cmdAndDesc \u003d this.parser.parseCommand(userInput);","lastModifiedDate":"2023-09-11"},{"lineNumber":265,"author":{"gitId":"AaronJT1"},"content":" String cmdString;","lastModifiedDate":"2023-09-11"},{"lineNumber":266,"author":{"gitId":"AaronJT1"},"content":" if (cmdAndDesc.length \u003d\u003d 0) { // if user input is a single command","lastModifiedDate":"2023-09-11"},{"lineNumber":267,"author":{"gitId":"AaronJT1"},"content":" cmdString \u003d userInput;","lastModifiedDate":"2023-09-11"},{"lineNumber":268,"author":{"gitId":"AaronJT1"},"content":" getSingleCommandResponse(outMsg, cmdString);","lastModifiedDate":"2023-09-11"},{"lineNumber":269,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":270,"author":{"gitId":"AaronJT1"},"content":" cmdString \u003d cmdAndDesc[0];","lastModifiedDate":"2023-09-11"},{"lineNumber":271,"author":{"gitId":"AaronJT1"},"content":" String descString \u003d cmdAndDesc[1];","lastModifiedDate":"2023-09-11"},{"lineNumber":272,"author":{"gitId":"AaronJT1"},"content":" Task task \u003d getFullCommandResponse(outMsg, cmdString, descString);","lastModifiedDate":"2023-09-11"},{"lineNumber":273,"author":{"gitId":"AaronJT1"},"content":" if (task !\u003d null) { // add task to database and taskList","lastModifiedDate":"2023-09-07"},{"lineNumber":274,"author":{"gitId":"AaronJT1"},"content":" addTask(outMsg, cmdString, descString, task);","lastModifiedDate":"2023-09-11"},{"lineNumber":275,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":276,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":277,"author":{"gitId":"AaronJT1"},"content":" return outMsg;","lastModifiedDate":"2023-09-07"},{"lineNumber":278,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":280,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":281,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":282,"author":{"gitId":"AaronJT1"},"content":" * Initialises the necessary components of the AJ chat-bot","lastModifiedDate":"2023-09-02"},{"lineNumber":283,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":284,"author":{"gitId":"AaronJT1"},"content":" * @param filePath Filepath of database","lastModifiedDate":"2023-09-02"},{"lineNumber":285,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":286,"author":{"gitId":"AaronJT1"},"content":" public void setUpBot(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"AaronJT1"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"AaronJT1"},"content":" this.storage \u003d new Storage(this.parser, filePath);","lastModifiedDate":"2023-09-11"},{"lineNumber":289,"author":{"gitId":"AaronJT1"},"content":" this.taskList \u003d new TaskList(this.storage.initialiseData());","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"AaronJT1"},"content":" this.ui \u003d new Ui(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":292,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":293,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":294,"author":{"gitId":"AaronJT1"},"content":" public void configureStage(Stage stage, AnchorPane mainLayout, Button sendButton) {","lastModifiedDate":"2023-09-11"},{"lineNumber":295,"author":{"gitId":"AaronJT1"},"content":" stage.setTitle(\"Aj-Bot\");","lastModifiedDate":"2023-09-11"},{"lineNumber":296,"author":{"gitId":"AaronJT1"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-11"},{"lineNumber":297,"author":{"gitId":"AaronJT1"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":298,"author":{"gitId":"AaronJT1"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":299,"author":{"gitId":"AaronJT1"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":300,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-11"},{"lineNumber":301,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-11"},{"lineNumber":302,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-11"},{"lineNumber":303,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":304,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-11"},{"lineNumber":305,"author":{"gitId":"AaronJT1"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-11"},{"lineNumber":306,"author":{"gitId":"AaronJT1"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":307,"author":{"gitId":"AaronJT1"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":308,"author":{"gitId":"AaronJT1"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":309,"author":{"gitId":"AaronJT1"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":310,"author":{"gitId":"AaronJT1"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":311,"author":{"gitId":"AaronJT1"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":312,"author":{"gitId":"AaronJT1"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":313,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":314,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":315,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":316,"author":{"gitId":"AaronJT1"},"content":" * Controls are like HTML elements like textField, image, button. Nodes can be controls","lastModifiedDate":"2023-09-07"},{"lineNumber":317,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":318,"author":{"gitId":"AaronJT1"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-07"},{"lineNumber":319,"author":{"gitId":"AaronJT1"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-07"},{"lineNumber":320,"author":{"gitId":"AaronJT1"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-07"},{"lineNumber":321,"author":{"gitId":"AaronJT1"},"content":" * primary stages.","lastModifiedDate":"2023-09-07"},{"lineNumber":322,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":323,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":324,"author":{"gitId":"AaronJT1"},"content":" public void start(Stage stage) { // first 2 steps in html/css, 3rd step is js","lastModifiedDate":"2023-09-07"},{"lineNumber":325,"author":{"gitId":"AaronJT1"},"content":" String fullFilePath \u003d \"/Users/aaronjt/Documents/CS2103T_IP/ip/src/main/data/actualData.txt\";","lastModifiedDate":"2023-09-07"},{"lineNumber":326,"author":{"gitId":"AaronJT1"},"content":" setUpBot(fullFilePath);","lastModifiedDate":"2023-09-07"},{"lineNumber":327,"author":{"gitId":"AaronJT1"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-07"},{"lineNumber":328,"author":{"gitId":"AaronJT1"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-07"},{"lineNumber":329,"author":{"gitId":"AaronJT1"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-07"},{"lineNumber":330,"author":{"gitId":"AaronJT1"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-07"},{"lineNumber":331,"author":{"gitId":"AaronJT1"},"content":" Button sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-07"},{"lineNumber":332,"author":{"gitId":"AaronJT1"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-07"},{"lineNumber":333,"author":{"gitId":"AaronJT1"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-11"},{"lineNumber":334,"author":{"gitId":"AaronJT1"},"content":" Scene scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-07"},{"lineNumber":335,"author":{"gitId":"AaronJT1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":336,"author":{"gitId":"AaronJT1"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":337,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":338,"author":{"gitId":"AaronJT1"},"content":" configureStage(stage, mainLayout, sendButton);","lastModifiedDate":"2023-09-11"},{"lineNumber":339,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":340,"author":{"gitId":"AaronJT1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-07"},{"lineNumber":341,"author":{"gitId":"AaronJT1"},"content":" handleUserInput();","lastModifiedDate":"2023-09-07"},{"lineNumber":342,"author":{"gitId":"AaronJT1"},"content":" });","lastModifiedDate":"2023-09-07"},{"lineNumber":343,"author":{"gitId":"AaronJT1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-07"},{"lineNumber":344,"author":{"gitId":"AaronJT1"},"content":" handleUserInput();","lastModifiedDate":"2023-09-07"},{"lineNumber":345,"author":{"gitId":"AaronJT1"},"content":" });","lastModifiedDate":"2023-09-07"},{"lineNumber":346,"author":{"gitId":"AaronJT1"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-07"},{"lineNumber":347,"author":{"gitId":"AaronJT1"},"content":" dialogContainer.getChildren()","lastModifiedDate":"2023-09-11"},{"lineNumber":348,"author":{"gitId":"AaronJT1"},"content":" .addAll(DialogBox.getAjDialog(getDialogLabel(this.ui.greet()), new ImageView(ajImage)));","lastModifiedDate":"2023-09-11"},{"lineNumber":349,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":350,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":351,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":352,"author":{"gitId":"AaronJT1"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-07"},{"lineNumber":353,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":354,"author":{"gitId":"AaronJT1"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-07"},{"lineNumber":355,"author":{"gitId":"AaronJT1"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-07"},{"lineNumber":356,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":357,"author":{"gitId":"AaronJT1"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-07"},{"lineNumber":358,"author":{"gitId":"AaronJT1"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-07"},{"lineNumber":359,"author":{"gitId":"AaronJT1"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":360,"author":{"gitId":"AaronJT1"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-07"},{"lineNumber":361,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":362,"author":{"gitId":"AaronJT1"},"content":" return textToAdd;","lastModifiedDate":"2023-09-07"},{"lineNumber":363,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":364,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":365,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":366,"author":{"gitId":"AaronJT1"},"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":367,"author":{"gitId":"AaronJT1"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":368,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":369,"author":{"gitId":"AaronJT1"},"content":" private void handleUserInput() { // need change here***","lastModifiedDate":"2023-09-07"},{"lineNumber":370,"author":{"gitId":"AaronJT1"},"content":" Label userLabel \u003d getDialogLabel(userInput.getText()); // get userinput from textField","lastModifiedDate":"2023-09-07"},{"lineNumber":371,"author":{"gitId":"AaronJT1"},"content":" Label ajLabel \u003d getDialogLabel(getResponse(userInput.getText())); // get string, create label for dialogBox","lastModifiedDate":"2023-09-07"},{"lineNumber":372,"author":{"gitId":"AaronJT1"},"content":" dialogContainer.getChildren().addAll(DialogBox.getUserDialog(userLabel, new ImageView(userImage)),","lastModifiedDate":"2023-09-11"},{"lineNumber":373,"author":{"gitId":"AaronJT1"},"content":" DialogBox.getAjDialog(ajLabel, new ImageView(ajImage)));","lastModifiedDate":"2023-09-11"},{"lineNumber":374,"author":{"gitId":"AaronJT1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":375,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":376,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":377,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":378,"author":{"gitId":"AaronJT1"},"content":" * Gets response from bot to be displayed to user.","lastModifiedDate":"2023-09-11"},{"lineNumber":379,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":380,"author":{"gitId":"AaronJT1"},"content":" * @param userInput User\u0027s input into bot.","lastModifiedDate":"2023-09-11"},{"lineNumber":381,"author":{"gitId":"AaronJT1"},"content":" * @return String response to be displayed to user.","lastModifiedDate":"2023-09-11"},{"lineNumber":382,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":383,"author":{"gitId":"AaronJT1"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-11"},{"lineNumber":384,"author":{"gitId":"AaronJT1"},"content":" String outMsg \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":385,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":386,"author":{"gitId":"AaronJT1"},"content":" outMsg \u003d getBotResponse(userInput).toString();","lastModifiedDate":"2023-09-11"},{"lineNumber":387,"author":{"gitId":"AaronJT1"},"content":" } catch (AjException | IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":388,"author":{"gitId":"AaronJT1"},"content":" outMsg \u003d e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":389,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":390,"author":{"gitId":"AaronJT1"},"content":" this.latestCommand \u003d userInput; // set user input as latest command","lastModifiedDate":"2023-09-13"},{"lineNumber":391,"author":{"gitId":"AaronJT1"},"content":" return outMsg;","lastModifiedDate":"2023-09-07"},{"lineNumber":392,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":393,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":394,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":395,"author":{"gitId":"AaronJT1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":396,"author":{"gitId":"AaronJT1"},"content":" Application.launch(Aj.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":397,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":398,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":399,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"AaronJT1":397,"-":2}},{"path":"src/main/java/aj/AjException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * AjException class for exceptions related to Aj chat-bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class AjException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" AjException(String msg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" super(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":11}},{"path":"src/main/java/aj/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":" * Deadline class for Deadline Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" private final LocalDate by;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" String formattedDate \u003d by.format(formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formattedDate + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" Deadline(String taskName, boolean isMarked, LocalDate by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" super(taskName,","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" isMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"AaronJT1":25}},{"path":"src/main/java/aj/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" private Label text;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" * Factory method that takes in a Label and Imageview and return a DialogBox control for Aj-bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" * @param l Label control with text","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" * @param iv Imageview control with the image","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" * @return DialogBox control to be displayed in scene","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" public static DialogBox getAjDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" return new DialogBox(l,","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" iv);","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" * Factory method that takes in a Label and Imageview and return a DialogBox control for user.","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" * @param l Label control with text","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" * @param iv Imageview control with the image","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" * @return DialogBox control to be displayed in scene","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" var db \u003d new DialogBox(l,","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" iv);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" this.text \u003d l;","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" this.displayPicture \u003d iv;","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" this.getChildren().addAll(text,","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" displayPicture);","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":64}},{"path":"src/main/java/aj/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * EmptyDescriptionException class for exceptions related to empty description.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class EmptyDescriptionException extends AjException {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" EmptyDescriptionException(String cmd, String helpMsg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" super(\"OOPS!!! The description of a \" + cmd + \" cannot be empty.\\n\" + \"Try:\\n\" + helpMsg);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":12}},{"path":"src/main/java/aj/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * Event class for Event Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" private final String fromDt, toDt;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" public String getFromDt() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" return this.fromDt;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" public String getToDt() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" return this.toDt;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.fromDt + \" to: \" + this.toDt + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" Event(String taskName, boolean isMarked, String fromDt, String toDt) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" super(taskName,","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" isMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" this.fromDt \u003d fromDt;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" this.toDt \u003d toDt;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"AaronJT1":30}},{"path":"src/main/java/aj/IndexOutOfRangeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":" * IndexOutOfRangeException class for exceptions related to index being out of range.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"public class IndexOutOfRangeException extends AjException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" IndexOutOfRangeException(int val) {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" super(\"OOPS!!! Please choose an index within the number of items in the list \" + \"(\" + val + \")\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":11}},{"path":"src/main/java/aj/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":" Application.launch(Aj.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"// Aj.main(args);","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":10}},{"path":"src/main/java/aj/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" private Aj aj \u003d new Aj();","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setAj(aj);","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":32}},{"path":"src/main/java/aj/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" private Aj aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" public void setAj(Aj d) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" aj \u003d d;","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"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":42,"author":{"gitId":"AaronJT1"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":"// String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":"// String response \u003d aj.getResponse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":"// dialogContainer.getChildren().addAll(DialogBox.getUserDialog(input,","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":"// userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":"// DialogBox.getDukeDialog(response,","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":"// dukeImage));","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":"// userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" Label dukeText \u003d new Label(aj.getResponse(userInput.getText()));","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" dialogContainer.getChildren().addAll(DialogBox.getUserDialog(userText,","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" new ImageView(userImage)),","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" DialogBox.getAjDialog(dukeText,","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" new ImageView(dukeImage)));","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":63}},{"path":"src/main/java/aj/NoSuchCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * NoSuchCommandException class for exceptions related to unknown commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class NoSuchCommandException extends AjException {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" NoSuchCommandException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n Type \u0027help\u0027 to find out more!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":12}},{"path":"src/main/java/aj/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" * Parser class to parse user input and return respective Tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" * Takes in user input string, parse it, and return command string and task string","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" * @param userInput User input.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" * @return String array, where first element is command, and second element is task, if no match, return empty","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" * array.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" public String[] parseCommand(String userInput) {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" Pattern pattern \u003d Pattern.compile(\"(\\\\w+) (.*)\");","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" Matcher matcher \u003d pattern.matcher(userInput);","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" String[] strArray;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" String command \u003d matcher.group(1);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" String taskString \u003d matcher.group(2);","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" taskString \u003d \" \" + taskString;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" strArray \u003d new String[]{command, taskString};","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" return strArray;","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" return new String[]{};","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" * Creates and return a Todo Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" * @param remaining The remaining sub-command from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" * @param isMark Mark task as complete or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" * @return Todo Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" public Task getTodoTask(String remaining, boolean isMark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" return new Todo(remaining.substring(1), isMark);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" * Creates and return a Deadline Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" * @param remaining The remaining sub-command from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" * @param isMark Mark task as complete or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" * @return Deadline Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" * @throws WrongDescriptionException If task description is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" public Task getDeadlineTask(String remaining, boolean isMark)","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" throws WrongDescriptionException { // takes in command, parse it and return task object","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" String pattern \u003d \" (.*) /by (.*)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" Pattern regexPattern \u003d Pattern.compile(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" Matcher matcher \u003d regexPattern.matcher(remaining);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" String taskName \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" String by \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" LocalDate newDate \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" return new Deadline(taskName, isMark, newDate);","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":" throw new WrongDescriptionException(\"ERROR!! Please ensure that your date format is correct\");","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" throw new WrongDescriptionException(\"ERROR!! Please type \u0027deadline\u0027 to view correct format!!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" * Creates and return a Event Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" * @param remaining The remaining sub-command from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":" * @param isMark Mark task as complete or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" * @return Event Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" * @throws WrongDescriptionException If task description is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" public Task getEventTask(String remaining, boolean isMark)","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":" throws WrongDescriptionException { // takes in command, parse it and return task object","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" String pattern \u003d \" (.*) /from (.*?) /to (.*)\";","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" Pattern regexPattern \u003d Pattern.compile(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":" Matcher matcher \u003d regexPattern.matcher(remaining);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"AaronJT1"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"AaronJT1"},"content":" String taskName \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"AaronJT1"},"content":" String startTime \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"AaronJT1"},"content":" String endTime \u003d matcher.group(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"AaronJT1"},"content":" return new Event(taskName, isMark, startTime, endTime);","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"AaronJT1"},"content":" throw new WrongDescriptionException(\"ERROR!! Please type \u0027event\u0027 to view correct format!!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":96}},{"path":"src/main/java/aj/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import java.nio.charset.StandardCharsets;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" * Storage class responsible for CRUD operations with database.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" final String FILEPATH;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" * Gets raw data from database and return task related to it.","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" * @param line Data from database.","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" * @return Task associated to the data.","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" * @throws WrongDescriptionException If command from user input does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" public Task getTaskFromData(String line) throws WrongDescriptionException {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" String[] parsedValues \u003d line.split(\",\");","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" Scanner strScanner \u003d new Scanner(parsedValues[0]);","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" String command \u003d strScanner.next().toLowerCase();","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" String remaining \u003d strScanner.nextLine();","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" boolean isMark \u003d Boolean.parseBoolean(parsedValues[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" Task task;","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" switch (command) {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" task \u003d this.parser.getTodoTask(remaining, isMark);","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" task \u003d this.parser.getDeadlineTask(remaining, isMark);","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" case \"event\":","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" task \u003d this.parser.getEventTask(remaining, isMark);","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" task \u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" return task;","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" * Reads data from database, creates the necessary Task objects and returns an Arraylist of Tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" * @return Arraylist of Tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" public List\u003cTask\u003e initialiseData() {","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" File file \u003d new File(this.FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" List\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"File does not exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" try (BufferedReader br \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":" taskList.add(getTaskFromData(line));","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":" } catch (IOException | WrongDescriptionException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" return taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" * Set the \u0027isMarked\u0027 attribute of the Task at index \u0027idx\u0027 to \u0027isMarked\u0027 in database.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" * @param idx Index of the database (starting from 0).","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":" * @param isMarked True to mark Task as completed, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" public void updateData(int idx, boolean isMarked) throws IOException { // linenumber refers to index from 0","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":" Path myPath \u003d Paths.get(this.FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"AaronJT1"},"content":" List\u003cString\u003e fileContent \u003d new ArrayList\u003c\u003e(Files.readAllLines(myPath, StandardCharsets.UTF_8));","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 0; i \u003c fileContent.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"AaronJT1"},"content":" if (i \u003d\u003d idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"AaronJT1"},"content":" String[] parsedValues \u003d fileContent.get(i).split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"AaronJT1"},"content":" String newLineContent \u003d parsedValues[0] + \",\" + Boolean.toString(isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"AaronJT1"},"content":" fileContent.set(i, newLineContent);","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"AaronJT1"},"content":" Files.write(myPath, fileContent, StandardCharsets.UTF_8);","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"AaronJT1"},"content":" * Deletes data of Task at index \u0027idx\u0027 from database.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"AaronJT1"},"content":" * @param idx Index of that Task to be deleted (starting from 0).","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"AaronJT1"},"content":" public String deleteData(int idx) throws IOException { // get linenumber and delete that entry","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"AaronJT1"},"content":" Path myPath \u003d Paths.get(this.FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"AaronJT1"},"content":" String deletedLine \u003d \"\";","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"AaronJT1"},"content":" List\u003cString\u003e fileContent \u003d new ArrayList\u003c\u003e(Files.readAllLines(myPath, StandardCharsets.UTF_8));","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 0; i \u003c fileContent.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"AaronJT1"},"content":" if (i \u003d\u003d idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"AaronJT1"},"content":" deletedLine \u003d fileContent.get(i);","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"AaronJT1"},"content":" fileContent.remove(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"AaronJT1"},"content":" Files.write(myPath, fileContent, StandardCharsets.UTF_8);","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"AaronJT1"},"content":" return deletedLine;","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"AaronJT1"},"content":" * Adds new Task into database.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"AaronJT1"},"content":" * @param str Full data string to be stored in database.","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"AaronJT1"},"content":" * @throws IOException Arose if there is issue updating database.","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"AaronJT1"},"content":" public void addData(String str) throws IOException { // get linenumber and delete that entry","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"AaronJT1"},"content":" Path myPath \u003d Paths.get(this.FILEPATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"AaronJT1"},"content":" List\u003cString\u003e fileContent \u003d new ArrayList\u003c\u003e(Files.readAllLines(myPath, StandardCharsets.UTF_8));","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"AaronJT1"},"content":" fileContent.add(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"AaronJT1"},"content":" Files.write(myPath, fileContent, StandardCharsets.UTF_8);","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"AaronJT1"},"content":" Storage(Parser parser, String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"AaronJT1"},"content":" this.parser \u003d parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"AaronJT1"},"content":" this.FILEPATH \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":140}},{"path":"src/main/java/aj/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * Task abstract class for user tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" protected boolean isMarked;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" protected String taskName;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" public void toggleComplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" this.isMarked \u003d !this.isMarked;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" public boolean isCompleted() {","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" return this.isMarked;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" public String getTaskName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" return this.taskName;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" return (this.isMarked ? \"[X] \" : \"[ ] \") + this.taskName;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" Task(String taskName, boolean completed) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" this.isMarked \u003d completed;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"AaronJT1":35}},{"path":"src/main/java/aj/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" * TaskList wrapper class to integrate with Storage class.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" public Task getTask(int idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" return this.taskList.get(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" public void removeTask(int idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" this.taskList.remove(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":31}},{"path":"src/main/java/aj/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * Todo class for Todo Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" Todo(String taskName, boolean isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" super(taskName,","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" isMarked);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"AaronJT1":18}},{"path":"src/main/java/aj/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":" * Ui class responsible for User Interface of the programme. Return string instead","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" * change java doc","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" public String horiLine() {","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" return \"---------------------\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" * Greets user.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" public String greet() {","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" return horiLine() + \"Hello! I\u0027m Aj\\n\" + \"Loading data....\\nHere are your saved data:\\n\" + printList() +","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" \"\\nWhat can i do for you?\\n\" + horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" public String getHelpMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" return \"Here is a list of commands you can try:\\n\\n\" + \"list - To list your added tasks\\n\" + \"mark - To mark \"","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" + \"a \" + \"task as completed\\n\" + \"unmark - To unmark a task\\n\" + \"delete - To delete a task\\n\" +","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" \"find \" + \"- To \" + \"find any keyword related to the task\\n\" + \"todo - To create a \u0027Todo\u0027 task\\n\" +","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" \"deadline -\" + \" To \" + \"creete\" + \" a \u0027deadline\u0027 task\\n\" + \"event - To create an \u0027event\u0027 \" + \"task\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" + \"undo - To undo latest command \\n\" + \"\\n\\n\\n\" + \"To get \" + \"more \" + \"specific help for \" + \"each \" +","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" \"command, type the command itself!!!\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" * Throws error with help message if command is valid, throws NoSuchCommandException otherwise","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" * @param cmd First part of user input which indicates type of command.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" * @throws EmptyDescriptionException If second part of user input does not exist.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" * @throws NoSuchCommandException If command from user input does not exist.","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" public void checkCommand(String cmd)","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" throws EmptyDescriptionException, NoSuchCommandException { // if no arguments, give help message","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" String helpMessage;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" switch (cmd) {","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"todo \u003ctask name\u003e\";","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"deadline \u003ctask name\u003e /by \u003cYYYY-MM-DD\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" case \"event\":","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"event \u003ctask name\u003e /from \u003cdate/time\u003e /to \u003cdate/time\u003e\";","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"mark \u003ctask_no\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"unmark \u003ctask_no\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"delete \u003ctask_no\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" case \"find\":","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"find \u003cany keyword related to the task\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" throw new NoSuchCommandException();","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" throw new EmptyDescriptionException(cmd, helpMessage);","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" * Takes in an index \u0027idx\u0027 and checks if it is within range of taskList size.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":" * @param idx Index given by user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index \u0027idx\u0027 bigger than taskList size.","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" public void checkIndex(int idx) throws IndexOutOfRangeException { // throws error if index invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" if (idx \u003c\u003d this.taskList.getSize() - 1 \u0026\u0026 idx \u003e\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" throw new IndexOutOfRangeException(this.taskList.getSize());","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":" * Prints number of Tasks in taskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":" public String printNumTask() {","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"AaronJT1"},"content":"// System.out.printf(\"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"AaronJT1"},"content":"// this.taskList.getSize());","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"AaronJT1"},"content":" return String.format(\"Now you have %d tasks in the list.\\n\", this.taskList.getSize());","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"AaronJT1"},"content":" * Prints the Tasks in taskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"AaronJT1"},"content":" public String printList() {","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"AaronJT1"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"AaronJT1"},"content":" if (this.taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(\"No items yet, add something!!!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"AaronJT1"},"content":" str \u003d \"No items yet, add something!!!\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 1; i \u003c\u003d this.taskList.getSize(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"AaronJT1"},"content":" assert this.taskList.getSize() !\u003d 0 : \"Tasklist size should be 0\";","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(i + \".\" + this.lst[i - 1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(i + \".\" + this.taskList.getTask(i - 1));","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"AaronJT1"},"content":" str +\u003d i + \".\" + this.taskList.getTask(i - 1) + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"AaronJT1"},"content":" return str;","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"AaronJT1"},"content":" public String printKeywordTask(String k) {","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"AaronJT1"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"AaronJT1"},"content":" str +\u003d \"Finding tasks with names matching : \\\"\" + k + \"\\\"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"AaronJT1"},"content":" str +\u003d \"Here they are!!:\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(\"Finding tasks with names matching : \\\"\" + k + \"\\\"\");","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(\"Here they are!!:\");","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"AaronJT1"},"content":" int no \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 0; i \u003c this.taskList.getSize(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"AaronJT1"},"content":" Task task \u003d this.taskList.getTask(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"AaronJT1"},"content":" if (task.getTaskName().contains(k)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(Integer.toString(no) + \".\" + task);","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"AaronJT1"},"content":" str +\u003d Integer.toString(no++) + \".\" + task + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"AaronJT1"},"content":" str +\u003d horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"AaronJT1"},"content":" return str;","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"AaronJT1"},"content":" * Prints exit message.","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"AaronJT1"},"content":" public String exit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":132,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"AaronJT1"},"content":" horiLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"AaronJT1"},"content":" return \"Bye. Hope to see you again soon!\" + horiLine() + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"AaronJT1"},"content":" Ui(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"AaronJT1"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":140}},{"path":"src/main/java/aj/UiOld.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":" * Ui class responsible for User Interface of the programme.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"public class UiOld {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":" TaskList taskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" public void horiLine() {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"---------------------\");","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" * Greets user.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" public void greet() {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"Hello! I\u0027m Aj\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"Loading data....\\nHere are your saved data:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" printList();","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"\\nWhat can i do for you?\");","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" * Checks that user input is correct, prints help message and throws error otherwise.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" * @param cmd First part of user input which indicates type of command.","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" * @param msg Second part of user input which indicates content and parameters.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" * @throws EmptyDescriptionException If second part of user input does not exist.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" public void checkMessage(String cmd, String msg) throws","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" EmptyDescriptionException { // if no arguments, give help message","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" String helpMessage;","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" if (msg.length() \u003d\u003d 0 || msg.equals(\" \")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" if (cmd.equals(\"todo\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"todo \u003ctask name\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"deadline\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"deadline \u003ctask name\u003e /by \u003cdate/time\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"event\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"event \u003ctask name\u003e /from \u003cdate/time\u003e /to \u003cdate/time\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"mark\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"mark \u003cidx\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"unmark\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"unmark \u003cidx\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"delete\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"delete \u003cidx\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" } else if (cmd.equals(\"find\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"find \u003cany keyword for task name\u003e\";","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":" helpMessage \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" throw new EmptyDescriptionException(cmd,","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" helpMessage);","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" * Takes in an index \u0027idx\u0027 and checks if it is within range of taskList size.","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" * @param idx Index given by user input.","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" * @throws IndexOutOfRangeException If user gives an index \u0027idx\u0027 bigger than taskList size.","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" public void checkIndex(int idx) throws IndexOutOfRangeException { // throws error if index invalid","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" if (idx \u003c\u003d this.taskList.getSize() - 1 \u0026\u0026 idx \u003e\u003d 0) {","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":" throw new IndexOutOfRangeException(this.taskList.getSize());","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" * Prints number of Tasks in taskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" public void printNumTask() {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":" System.out.printf(\"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" this.taskList.getSize());","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":" * Prints the Tasks in taskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":" public void printList() {","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" if (this.taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"No items yet, add something!!!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 1; i \u003c\u003d this.taskList.getSize(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"AaronJT1"},"content":"// System.out.println(i + \".\" + this.lst[i - 1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"AaronJT1"},"content":" System.out.println(i + \".\" + this.taskList.getTask(i - 1));","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"AaronJT1"},"content":" public void printKeywordTask(String k) {","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"Finding tasks with names matching : \\\"\" + k + \"\\\"\");","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"Here they are!!:\");","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"AaronJT1"},"content":" int no \u003d 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"AaronJT1"},"content":" for (int i \u003d 0; i \u003c this.taskList.getSize(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"AaronJT1"},"content":" Task task \u003d this.taskList.getTask(i);","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"AaronJT1"},"content":" if (task.getTaskName().contains(k)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"AaronJT1"},"content":" System.out.println(Integer.toString(no) + \".\" + task);","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"AaronJT1"},"content":" horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"AaronJT1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"AaronJT1"},"content":" * Prints exit message.","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"AaronJT1"},"content":" public void exit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"AaronJT1"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"AaronJT1"},"content":" horiLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"AaronJT1"},"content":" UiOld(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"AaronJT1"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":118}},{"path":"src/main/java/aj/WrongDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":" * WrongDescriptionException class for exceptions related to invalid task description from user input","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"public class WrongDescriptionException extends AjException {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":" WrongDescriptionException(String errMsg) {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" super(errMsg);","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":10}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"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-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"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":12,"author":{"gitId":"AaronJT1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"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\"aj.MainWindow\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"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":"AaronJT1"},"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":"AaronJT1"},"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":"AaronJT1"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"AaronJT1":19}},{"path":"src/test/java/aj/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":" public void fromDt_correctInput_stringReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" Event testTask \u003d new Event(\"project meeting\", false, \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.getFromDt(), \"Mon 2pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" public void toDt_correctInput_stringReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" Event testTask \u003d new Event(\"project meeting\", false, \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.getToDt(), \"4pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" public void toString_noInput_stringPrinted() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" Event testTask \u003d new Event(\"project meeting\", false, \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.toString(), \"[E][ ] project meeting (from: Mon 2pm to: 4pm)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":25}},{"path":"src/test/java/aj/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":" public void getTodoTask_correctInput_taskReturned() { // test that the Todo Task created have same behaviour","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"todo return book\";","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" Scanner scanner \u003d new Scanner(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" String command \u003d scanner.next().toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" String remaining \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" Task testTask \u003d parser.getTodoTask(remaining, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" assertTrue(testTask instanceof Todo); // test object returned is Todo task","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.taskName, \"return book\"); // test taskName correct","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" assertFalse(testTask.isMarked); // test isMarked set to false","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":" public void getDeadlineTask_correctInput_taskReturned() throws WrongDescriptionException { // test that the deadline Task created have same behaviour","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"deadline homework /by 2019-10-15\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" Scanner scanner \u003d new Scanner(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" String command \u003d scanner.next().toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" String remaining \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" Task testTask \u003d parser.getDeadlineTask(remaining, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" assertTrue(testTask instanceof Deadline); // test object returned is Deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.taskName, \"homework\"); // test taskName correct","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" assertFalse(testTask.isMarked); // test isMarked set to false","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.toString(), \"[D][ ] homework (by: Oct 15 2019)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":" public void getEventTask_correctInput_taskReturned() throws WrongDescriptionException { // test that the event Task created have same behaviour","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"event project meeting /from Mon 2pm /to 4pm\";","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" Scanner scanner \u003d new Scanner(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" String command \u003d scanner.next().toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" String remaining \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" Task testTask \u003d parser.getEventTask(remaining, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" assertTrue(testTask instanceof Event); // test object returned is Deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.taskName, \"project meeting\"); // test taskName correct","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" assertFalse(testTask.isMarked); // test isMarked set to false","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" assertEquals(testTask.toString(), \"[E][ ] project meeting (from: Mon 2pm to: 4pm)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AaronJT1":50}},{"path":"src/test/java/aj/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"package aj;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"public class UiTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":" public TaskList createTestTaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":" List\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"todo return book\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":" Scanner scanner \u003d new Scanner(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":" String command \u003d scanner.next().toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":" String remaining \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":" Task testTodoTask \u003d parser.getTodoTask(remaining,","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":" false);","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":" taskList.add(testTodoTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":" return new TaskList(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":" public void checkIndex_correctIndex_noExceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":" TaskList testTaskList \u003d createTestTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":" Ui testUi \u003d new Ui(testTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AaronJT1"},"content":" boolean haveException \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AaronJT1"},"content":" testUi.checkIndex(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AaronJT1"},"content":" } catch (IndexOutOfRangeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AaronJT1"},"content":" haveException \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AaronJT1"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"AaronJT1"},"content":" assertFalse(haveException);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AaronJT1"},"content":" public void checkIndex_incorrectIndex_ExceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"AaronJT1"},"content":" TaskList testTaskList \u003d createTestTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AaronJT1"},"content":" Ui testUi \u003d new Ui(testTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AaronJT1"},"content":" boolean haveException \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"AaronJT1"},"content":" testUi.checkIndex(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"AaronJT1"},"content":" } catch (IndexOutOfRangeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AaronJT1"},"content":" haveException \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"AaronJT1"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"AaronJT1"},"content":" assertTrue(haveException);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"AaronJT1"},"content":" public void checkCommand_wrongInput_EmptyDescriptionExceptionThrown() {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"AaronJT1"},"content":" TaskList testTaskList \u003d createTestTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"AaronJT1"},"content":" Ui testUi \u003d new Ui(testTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"todo\";","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AaronJT1"},"content":" boolean isCorrect \u003d false;","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"AaronJT1"},"content":" testUi.checkCommand(userInput);","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"AaronJT1"},"content":" } catch (AjException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"AaronJT1"},"content":" if (e instanceof EmptyDescriptionException) {","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"AaronJT1"},"content":" isCorrect \u003d true;","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"AaronJT1"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"AaronJT1"},"content":" assertTrue(isCorrect);","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"AaronJT1"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"AaronJT1"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"AaronJT1"},"content":" public void checkCommand_wrongInput_NoSuchCommandExceptionThrown() {","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"AaronJT1"},"content":" TaskList testTaskList \u003d createTestTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"AaronJT1"},"content":" Ui testUi \u003d new Ui(testTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"AaronJT1"},"content":" String userInput \u003d \"deadline wrong command\"; // no \u0027by\u0027 flag","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"AaronJT1"},"content":" boolean isCorrect \u003d false;","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"AaronJT1"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"AaronJT1"},"content":" testUi.checkCommand(userInput);","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"AaronJT1"},"content":" } catch (AjException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"AaronJT1"},"content":" if (e instanceof NoSuchCommandException) {","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"AaronJT1"},"content":" isCorrect \u003d true;","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"AaronJT1"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"AaronJT1"},"content":" assertTrue(isCorrect);","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"AaronJT1"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"AaronJT1"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AaronJT1":86}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AaronJT1"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"AaronJT1"},"content":"unmark 2","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"AaronJT1"},"content":"unmark 3","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"AaronJT1"},"content":"mark","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"AaronJT1"},"content":"mark 2","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"AaronJT1"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"AaronJT1"},"content":"deadline return book /by 2023-10-20","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"AaronJT1"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"AaronJT1"},"content":"mark 5","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"AaronJT1"},"content":"mark 4","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"AaronJT1"},"content":"unmark 1","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"AaronJT1"},"content":"delete 5","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"AaronJT1"},"content":"delete 7","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"AaronJT1"},"content":"delete 3","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"AaronJT1"},"content":"delete 3","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"AaronJT1"},"content":"delete 2","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"AaronJT1"},"content":"delete 1","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"AaronJT1"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"AaronJT1"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"AaronJT1"},"content":"deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"AaronJT1"},"content":"event","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"AaronJT1"},"content":"deadline return book /by 2019-10-15","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"AaronJT1"},"content":"todo return book","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"AaronJT1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"AaronJT1"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"AaronJT1"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"AaronJT1"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AaronJT1":28}},{"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":"AaronJT1"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/aj/*.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":"AaronJT1"},"content":"java -classpath ../bin Aj \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":{"AaronJT1":2,"-":36}}] diff --git a/AaronJT1_ip_master/commits.json b/AaronJT1_ip_master/commits.json index 5bbe88a9..5dc7e933 100644 --- a/AaronJT1_ip_master/commits.json +++ b/AaronJT1_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"AaronJT1":[{"date":"2023-08-19","commitResults":[{"hash":"a8e7b81f0e6cc6697f2671851c6629122deec270","isMergeCommit":false,"messageTitle":"Level-0 Increment","messageBody":"Level-0 Increment\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":6}}},{"hash":"3c082941b75920abcd94fc1f32d929ed58797a26","isMergeCommit":false,"messageTitle":"Increment Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"22183ea7be221726f295869c23511d37efe3492d","isMergeCommit":false,"messageTitle":"Increment Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}}]},{"date":"2023-08-20","commitResults":[{"hash":"cb85fb44f3b105b261c4a8b5c2b9d17f7289efb0","isMergeCommit":false,"messageTitle":"Increment Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":39}}},{"hash":"46ef6b2b36ac6a7acf4a37d809587a967d87f060","isMergeCommit":false,"messageTitle":"Increment Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":34}}}]},{"date":"2023-08-21","commitResults":[{"hash":"d6bf38677610de39ea7d01fdc0f4f1d016d8ed19","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":0,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"f26df4d325b328b5927a040e2096c3581090af3d","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":2},"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6543b2822772386137da2a137ea008b3ef30d867","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"2a627eb94f21107acff6c016617a36b972edfb1b","isMergeCommit":false,"messageTitle":"Increment Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":27}}}]},{"date":"2023-08-28","commitResults":[{"hash":"5711109054ecb80e21aa251b32e6bb97bb7787f8","isMergeCommit":false,"messageTitle":"Allow changes to be saved and loaded from hard disk","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":305,"deletions":205}}},{"hash":"17a6a33d0cb5af925b8934905b4cf1798ed57f54","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"027c12b64789b4af1160edddffd48464957e67b1","isMergeCommit":false,"messageTitle":"Allow deadline dates to be stored as LocalDate objects","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":14,"deletions":4}}},{"hash":"60539b9a88aeb7073dbe1771d036ff2a9ad82de2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"27ffb63ca52ab7267007c0ca16d3955c832cf090","isMergeCommit":false,"messageTitle":"Improve OOP structure of code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":30,"deletions":13},"java":{"insertions":343,"deletions":268}}},{"hash":"e0ea592831da7d11a753c9500caf61bc90daeb5c","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"82fa4f9ea0b45a09224c563ddc036cd197900a11","isMergeCommit":false,"messageTitle":"Enable classes to be in packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":32},"sh":{"insertions":1,"deletions":1}}},{"hash":"a381ea0bf04701b8daf2b003fd7e0e272d2fb65d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6d6d2670f9bd02279b80d0544b6f143cd48fb77a","isMergeCommit":false,"messageTitle":"Set up gradle support for project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":9,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"ff9af846459d33e58248ec67d2c814ab6d2a23d4","isMergeCommit":false,"messageTitle":"Add junit test cases","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":167,"deletions":5}}},{"hash":"cf39d58d20d94987b984dd169b24d980296386c6","isMergeCommit":false,"messageTitle":"Update build.gradle for shadowJar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"java":{"insertions":3,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d2735939d896b1c2873ff2c4a815489213c4f15b","isMergeCommit":false,"messageTitle":"Add first line of codingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"f225411aec9a2f087e483a7aa0af71b80be2e61a","isMergeCommit":false,"messageTitle":"Add firstline of javaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"df856aa92f0efe1aece9f2b954a59245c94a1559","isMergeCommit":false,"messageTitle":"Add find task by keyword feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"bc3136f0ca87e8f0beccc9a94500b588784f5dbf","isMergeCommit":false,"messageTitle":"Change name of AskCommand function to canAskCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"a8ce29ed035f57be58448b58aa095799735c073b","isMergeCommit":false,"messageTitle":"Add coding convention to code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":16}}}]},{"date":"2023-09-02","commitResults":[{"hash":"d8c7c2f4596a89ad624311e452db6ec2c674ce64","isMergeCommit":false,"messageTitle":"Add JavaDocs to all non-private classes/methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":51}}},{"hash":"1f019a1901dcad1da7d110aee99c29fe14623979","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"d4709834103f6ecd86c96e15687ed74054052cf7","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"8d712ba82e1657abb0ad1271eb7288fcb2028c21","isMergeCommit":true,"messageTitle":"Fix merge conflicts with A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"dc75b3da49646a81c76bdae5395fe9f31c53c697","isMergeCommit":false,"messageTitle":"Add a GUI for the Aj-Bot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":27,"deletions":3},"txt":{"insertions":2,"deletions":2},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":638,"deletions":199}}},{"hash":"237ce7a4b177b6d18309237a37a1354036c690fa","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"bc2685870f85b7ddfaef20e72234b3c17425fd90","isMergeCommit":false,"messageTitle":"Add assertions to key places in the code","messageBody":"Currently, there is no assertions put in place to document important\nassumptions in the code.\n\nAssertions is important to ensure workability of code and to\nreveal any potentials bugs in the logic.\n\nAdd assertions to to certain places in the code, mainly in Aj.java\n\nMost of the key logic and assumption is in Aj.java, as such most\nassertions are done there.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":15,"deletions":7}}},{"hash":"9f384b203fd761b8d50012efbea6a29daae44ebe","isMergeCommit":false,"messageTitle":"Aj.java canAskCommand function : Refactor to more intuitive name \u0027getBotResponse\u0027","messageBody":"It is important for functions to be named in way readers can understand.\n\nChange function name from \u0027canAskCommand\u0027 to \u0027getBotResponse\u0027.\n\n\u0027getBotResponse\u0027 is an intuitive name as it simply means this function\ngets bot\u0027s response.\n","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"892ebec6e153f908029191e965f9ac8a7ca67108","isMergeCommit":false,"messageTitle":"Reduce all methods to be within 30 lines of codes","messageBody":"Longer lines of codes causes readers to take longer time to process.\n\nReduce the following methods to smaller methods :\ngetBotResponse() in Aj.java, start() in Aj.java.\n\nTo reduce length of code, we define new methods to handle the\nabstration.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":260,"deletions":201}}},{"hash":"b801bceb2bf3aa4b6664b092c0bec12e0c1512cb","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AaronJT1/branch-A-CodeQuality","messageBody":"Revise code to follow code quality standards","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"afce57ec5698f151e330db679f0501d381d291dd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2a9e0c3e56ecb79137e01c39124d762f8a00f00c","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AaronJT1/branch-A-Assertions","messageBody":"Add assertions to key places in the code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"7f4c783146bbf924039f20b85ebc5a8b31a67d96","isMergeCommit":false,"messageTitle":"Add undo function for certain commands","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":57,"deletions":9}}},{"hash":"27dc1e921f7eb940977801efc99aa44e705f91eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-undo\u0027","messageBody":"","tags":["C-Undo"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"AaronJT1":{"java":1416,"md":0,"fxml":35,"sh":2,"bat":0,"gradle":29,"txt":41}},"authorContributionVariance":{"AaronJT1":59952.777},"authorDisplayNameMap":{"AaronJT1":"CS2103T-T14-2 AARO.. ERN"}} +{"authorDailyContributionsMap":{"AaronJT1":[{"date":"2023-08-19","commitResults":[{"hash":"a8e7b81f0e6cc6697f2671851c6629122deec270","isMergeCommit":false,"messageTitle":"Level-0 Increment","messageBody":"Level-0 Increment\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":6}}},{"hash":"3c082941b75920abcd94fc1f32d929ed58797a26","isMergeCommit":false,"messageTitle":"Increment Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"22183ea7be221726f295869c23511d37efe3492d","isMergeCommit":false,"messageTitle":"Increment Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}}]},{"date":"2023-08-20","commitResults":[{"hash":"cb85fb44f3b105b261c4a8b5c2b9d17f7289efb0","isMergeCommit":false,"messageTitle":"Increment Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":39}}},{"hash":"46ef6b2b36ac6a7acf4a37d809587a967d87f060","isMergeCommit":false,"messageTitle":"Increment Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":34}}}]},{"date":"2023-08-21","commitResults":[{"hash":"d6bf38677610de39ea7d01fdc0f4f1d016d8ed19","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":0,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"f26df4d325b328b5927a040e2096c3581090af3d","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":2},"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6543b2822772386137da2a137ea008b3ef30d867","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"2a627eb94f21107acff6c016617a36b972edfb1b","isMergeCommit":false,"messageTitle":"Increment Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":27}}}]},{"date":"2023-08-28","commitResults":[{"hash":"5711109054ecb80e21aa251b32e6bb97bb7787f8","isMergeCommit":false,"messageTitle":"Allow changes to be saved and loaded from hard disk","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":305,"deletions":205}}},{"hash":"17a6a33d0cb5af925b8934905b4cf1798ed57f54","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"027c12b64789b4af1160edddffd48464957e67b1","isMergeCommit":false,"messageTitle":"Allow deadline dates to be stored as LocalDate objects","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":14,"deletions":4}}},{"hash":"60539b9a88aeb7073dbe1771d036ff2a9ad82de2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"27ffb63ca52ab7267007c0ca16d3955c832cf090","isMergeCommit":false,"messageTitle":"Improve OOP structure of code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":30,"deletions":13},"java":{"insertions":343,"deletions":268}}},{"hash":"e0ea592831da7d11a753c9500caf61bc90daeb5c","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"82fa4f9ea0b45a09224c563ddc036cd197900a11","isMergeCommit":false,"messageTitle":"Enable classes to be in packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":32},"sh":{"insertions":1,"deletions":1}}},{"hash":"a381ea0bf04701b8daf2b003fd7e0e272d2fb65d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6d6d2670f9bd02279b80d0544b6f143cd48fb77a","isMergeCommit":false,"messageTitle":"Set up gradle support for project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":9,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"ff9af846459d33e58248ec67d2c814ab6d2a23d4","isMergeCommit":false,"messageTitle":"Add junit test cases","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":167,"deletions":5}}},{"hash":"cf39d58d20d94987b984dd169b24d980296386c6","isMergeCommit":false,"messageTitle":"Update build.gradle for shadowJar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"java":{"insertions":3,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d2735939d896b1c2873ff2c4a815489213c4f15b","isMergeCommit":false,"messageTitle":"Add first line of codingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"f225411aec9a2f087e483a7aa0af71b80be2e61a","isMergeCommit":false,"messageTitle":"Add firstline of javaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"df856aa92f0efe1aece9f2b954a59245c94a1559","isMergeCommit":false,"messageTitle":"Add find task by keyword feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"bc3136f0ca87e8f0beccc9a94500b588784f5dbf","isMergeCommit":false,"messageTitle":"Change name of AskCommand function to canAskCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"a8ce29ed035f57be58448b58aa095799735c073b","isMergeCommit":false,"messageTitle":"Add coding convention to code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":16}}}]},{"date":"2023-09-02","commitResults":[{"hash":"d8c7c2f4596a89ad624311e452db6ec2c674ce64","isMergeCommit":false,"messageTitle":"Add JavaDocs to all non-private classes/methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":51}}},{"hash":"1f019a1901dcad1da7d110aee99c29fe14623979","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"d4709834103f6ecd86c96e15687ed74054052cf7","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"8d712ba82e1657abb0ad1271eb7288fcb2028c21","isMergeCommit":true,"messageTitle":"Fix merge conflicts with A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"dc75b3da49646a81c76bdae5395fe9f31c53c697","isMergeCommit":false,"messageTitle":"Add a GUI for the Aj-Bot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":27,"deletions":3},"txt":{"insertions":2,"deletions":2},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":638,"deletions":199}}},{"hash":"237ce7a4b177b6d18309237a37a1354036c690fa","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"bc2685870f85b7ddfaef20e72234b3c17425fd90","isMergeCommit":false,"messageTitle":"Add assertions to key places in the code","messageBody":"Currently, there is no assertions put in place to document important\nassumptions in the code.\n\nAssertions is important to ensure workability of code and to\nreveal any potentials bugs in the logic.\n\nAdd assertions to to certain places in the code, mainly in Aj.java\n\nMost of the key logic and assumption is in Aj.java, as such most\nassertions are done there.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":15,"deletions":7}}},{"hash":"9f384b203fd761b8d50012efbea6a29daae44ebe","isMergeCommit":false,"messageTitle":"Aj.java canAskCommand function : Refactor to more intuitive name \u0027getBotResponse\u0027","messageBody":"It is important for functions to be named in way readers can understand.\n\nChange function name from \u0027canAskCommand\u0027 to \u0027getBotResponse\u0027.\n\n\u0027getBotResponse\u0027 is an intuitive name as it simply means this function\ngets bot\u0027s response.\n","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"892ebec6e153f908029191e965f9ac8a7ca67108","isMergeCommit":false,"messageTitle":"Reduce all methods to be within 30 lines of codes","messageBody":"Longer lines of codes causes readers to take longer time to process.\n\nReduce the following methods to smaller methods :\ngetBotResponse() in Aj.java, start() in Aj.java.\n\nTo reduce length of code, we define new methods to handle the\nabstration.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":260,"deletions":201}}},{"hash":"b801bceb2bf3aa4b6664b092c0bec12e0c1512cb","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AaronJT1/branch-A-CodeQuality","messageBody":"Revise code to follow code quality standards","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"d532435a9e76eae34a5ea85968c3dd5938169ae8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"afce57ec5698f151e330db679f0501d381d291dd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2a9e0c3e56ecb79137e01c39124d762f8a00f00c","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AaronJT1/branch-A-Assertions","messageBody":"Add assertions to key places in the code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"f3eb004b6900ace1dd3ee85cb847fd44f7e60240","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d7ba9e6308571e993fa3844d9e03004abe891180","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"7f4c783146bbf924039f20b85ebc5a8b31a67d96","isMergeCommit":false,"messageTitle":"Add undo function for certain commands","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":57,"deletions":9}}},{"hash":"27dc1e921f7eb940977801efc99aa44e705f91eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-undo\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"5bf34ecc6d28e12bf36d92cf13b86f69da9fdbec","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"778b777c674aaa8ae850094588a39e845c038c32","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Assertions\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4b36082d0ffbc0313162e2b2f6cc0b1d33ead5cd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"AaronJT1":{"java":1416,"md":0,"fxml":35,"sh":2,"bat":0,"gradle":29,"txt":40}},"authorContributionVariance":{"AaronJT1":55747.74},"authorDisplayNameMap":{"AaronJT1":"CS2103T-T14-2 AARO.. ERN"}} diff --git a/AndrewJanong_ip_master/authorship.json b/AndrewJanong_ip_master/authorship.json index 8b68a629..bbd71f0e 100644 --- a/AndrewJanong_ip_master/authorship.json +++ b/AndrewJanong_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":"AndrewJanong"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" mainClassName \u003d \"duke.Duke\"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AndrewJanong":15,"-":41}},{"path":"settings.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"include \u0027test\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"AndrewJanong":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeEmptyArgumentException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeInvalidDateException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeInvalidIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeUnknownCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" * The Duke program implements a","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" * chatbot to keep track of your tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" private static final Storage storage \u003d new Storage();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" private static final TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" private static final Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" * Adds a task to the task list and sends a message of the task added.","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" * A task can be a ToDo, Deadline, or Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" * @param command Task command of input.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" * @param taskInfo Info regarding the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" private static String addTask(Command command, String taskInfo)","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" throws DukeInvalidDateException {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" Task newTask;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" if (command \u003d\u003d Command.TODO) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" newTask \u003d new ToDo(taskInfo);","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.DEADLINE) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" String[] deadlineInfo \u003d taskInfo.split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" newTask \u003d new Deadline(deadlineInfo[0], deadlineInfo[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" } else { // command \u003d\u003d Command.EVENT","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" String[] eventInfo \u003d taskInfo.split(\" /from \");","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" String[] eventTime \u003d eventInfo[1].split(\" /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" newTask \u003d new Event(eventInfo[0], eventTime[0], eventTime[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" return tasks.addTask(newTask);","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" * Edits a task in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" * Editing a task can be deleting, marking, or unmarking a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"AndrewJanong"},"content":" * @param command Edit command of input.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Index of task to edit.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"AndrewJanong"},"content":" private static String editTask(Command command, int taskIndex) {","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"AndrewJanong"},"content":" if (command \u003d\u003d Command.DELETE) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"AndrewJanong"},"content":" return tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.MARK) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"AndrewJanong"},"content":" return tasks.markTask(taskIndex);","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.UNMARK) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"AndrewJanong"},"content":" return tasks.unmarkTask(taskIndex);","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"Something went wrong :(\");","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"AndrewJanong"},"content":" * Executes find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"AndrewJanong"},"content":" * Find command lists all tasks which contains a certain keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"AndrewJanong"},"content":" * @param keyword Keyword to find tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"AndrewJanong"},"content":" private static String executeFindCommand(String keyword) {","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"AndrewJanong"},"content":" return tasks.printTasksByKeyword(keyword);","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"AndrewJanong"},"content":" * Executes single commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"AndrewJanong"},"content":" * Single commands consists of: Listing all tasks, Printing goodbye message.","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"AndrewJanong"},"content":" * @param command Single command of input.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"AndrewJanong"},"content":" private static String executeSingleCommand(Command command) {","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"AndrewJanong"},"content":" String response;","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"AndrewJanong"},"content":" if (command \u003d\u003d Command.LIST) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"AndrewJanong"},"content":" response \u003d Ui.getResponse(tasks.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.BYE) {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"AndrewJanong"},"content":" response \u003d Ui.getExitMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"AndrewJanong"},"content":" response \u003d Ui.getResponse(\"Something went wrong :(\");","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"AndrewJanong"},"content":" return response;","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"AndrewJanong"},"content":" * Runs the command from the user input.","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"AndrewJanong"},"content":" * @param command Command of the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"AndrewJanong"},"content":" * @param inputs Arguments of the input.","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"AndrewJanong"},"content":" * @throws DukeException Error when executing the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"AndrewJanong"},"content":" private static String runCommandAndGetResponse(Command command, String[] inputs) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"AndrewJanong"},"content":" String response;","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"AndrewJanong"},"content":" if (command \u003d\u003d Command.BYE) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"AndrewJanong"},"content":" response \u003d Ui.getExitMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"AndrewJanong"},"content":" storage.writeTasks(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"AndrewJanong"},"content":" return response;","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.TODO || command \u003d\u003d Command.DEADLINE || command \u003d\u003d Command.EVENT) {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"AndrewJanong"},"content":" if (inputs.length \u003d\u003d 1 || inputs[1].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeEmptyArgumentException(\"OOPS!!! Argument for this command cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"AndrewJanong"},"content":" if (command \u003d\u003d Command.TODO) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"AndrewJanong"},"content":" response \u003d addTask(Command.TODO, inputs[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":132,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.DEADLINE) {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"AndrewJanong"},"content":" response \u003d addTask(Command.DEADLINE, inputs[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":134,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"AndrewJanong"},"content":" response \u003d addTask(Command.EVENT, inputs[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":136,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.DELETE) {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"AndrewJanong"},"content":" if (inputs.length \u003d\u003d 1 || inputs[1].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeEmptyArgumentException(\"OOPS!!! Argument for this command cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"AndrewJanong"},"content":" if (!tasks.isValidIndex(Integer.parseInt(inputs[1]))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidIndexException(Integer.toString(tasks.getSize()));","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"AndrewJanong"},"content":" } catch (NumberFormatException exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidIndexException(Integer.toString(tasks.getSize()));","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":150,"author":{"gitId":"AndrewJanong"},"content":" response \u003d editTask(Command.DELETE, Integer.parseInt(inputs[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":151,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.LIST) {","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"AndrewJanong"},"content":" response \u003d executeSingleCommand(Command.LIST);","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.FIND) {","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"AndrewJanong"},"content":" if (inputs.length \u003d\u003d 1 || inputs[1].equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeEmptyArgumentException(\"OOPS!!! Argument for this command cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"AndrewJanong"},"content":" response \u003d executeFindCommand(inputs[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":159,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.MARK) {","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"AndrewJanong"},"content":" if (inputs.length \u003d\u003d 1 || inputs[1].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeEmptyArgumentException(\"OOPS!!! Argument for this command cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":164,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"AndrewJanong"},"content":" if (!tasks.isValidIndex(Integer.parseInt(inputs[1]))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidIndexException(Integer.toString(tasks.getSize()));","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"AndrewJanong"},"content":" } catch (NumberFormatException exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidIndexException(Integer.toString(tasks.getSize()));","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":172,"author":{"gitId":"AndrewJanong"},"content":" response \u003d editTask(Command.MARK, Integer.parseInt(inputs[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":173,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.UNMARK) {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"AndrewJanong"},"content":" if (inputs.length \u003d\u003d 1 || inputs[1].equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeEmptyArgumentException(\"OOPS!!! Argument for this command cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":177,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":178,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":179,"author":{"gitId":"AndrewJanong"},"content":" if (!tasks.isValidIndex(Integer.parseInt(inputs[1]))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidIndexException(Integer.toString(tasks.getSize()));","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"AndrewJanong"},"content":" } catch (NumberFormatException exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidIndexException(Integer.toString(tasks.getSize()));","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":185,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":186,"author":{"gitId":"AndrewJanong"},"content":" response \u003d Duke.editTask(Command.UNMARK, Integer.parseInt(inputs[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":187,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeUnknownCommandException(inputs[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":190,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":191,"author":{"gitId":"AndrewJanong"},"content":" return response;","lastModifiedDate":"2023-09-07"},{"lineNumber":192,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":193,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":194,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":195,"author":{"gitId":"AndrewJanong"},"content":" * Gets all tasks from the data and store it in the storage.","lastModifiedDate":"2023-09-07"},{"lineNumber":196,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":197,"author":{"gitId":"AndrewJanong"},"content":" public void getTasksData() {","lastModifiedDate":"2023-09-07"},{"lineNumber":198,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":199,"author":{"gitId":"AndrewJanong"},"content":" storage.getTasksFromData(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":200,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-07"},{"lineNumber":201,"author":{"gitId":"AndrewJanong"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":202,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":203,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":204,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":205,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":206,"author":{"gitId":"AndrewJanong"},"content":" * Gets a greeting message to be sent went a user activates the chatbot.","lastModifiedDate":"2023-09-07"},{"lineNumber":207,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":208,"author":{"gitId":"AndrewJanong"},"content":" * @return Greeting message to be sent.","lastModifiedDate":"2023-09-07"},{"lineNumber":209,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":210,"author":{"gitId":"AndrewJanong"},"content":" public String getGreetingMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":211,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getGreetingMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":212,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":213,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":214,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":215,"author":{"gitId":"AndrewJanong"},"content":" * Gets the response message based on the User\u0027s input.","lastModifiedDate":"2023-09-07"},{"lineNumber":216,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":217,"author":{"gitId":"AndrewJanong"},"content":" * @param userInput User input.","lastModifiedDate":"2023-09-07"},{"lineNumber":218,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":219,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":220,"author":{"gitId":"AndrewJanong"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-07"},{"lineNumber":221,"author":{"gitId":"AndrewJanong"},"content":" String response;","lastModifiedDate":"2023-09-07"},{"lineNumber":222,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":223,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":224,"author":{"gitId":"AndrewJanong"},"content":" Command command \u003d parser.parseInput(userInput);","lastModifiedDate":"2023-09-07"},{"lineNumber":225,"author":{"gitId":"AndrewJanong"},"content":" String[] inputs \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":226,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":227,"author":{"gitId":"AndrewJanong"},"content":" response \u003d runCommandAndGetResponse(command, inputs);","lastModifiedDate":"2023-09-07"},{"lineNumber":228,"author":{"gitId":"AndrewJanong"},"content":" storage.writeTasks(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":229,"author":{"gitId":"AndrewJanong"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-09-07"},{"lineNumber":230,"author":{"gitId":"AndrewJanong"},"content":" response \u003d Ui.getResponse(exception.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":231,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":232,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":233,"author":{"gitId":"AndrewJanong"},"content":" return response;","lastModifiedDate":"2023-09-07"},{"lineNumber":234,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":235,"author":{"gitId":"AndrewJanong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":236,"author":{"gitId":"AndrewJanong"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":237,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"AndrewJanong"},"content":" storage.getTasksFromData(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(\"Shutting down...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"AndrewJanong"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"AndrewJanong"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":246,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":247,"author":{"gitId":"AndrewJanong"},"content":" String userInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":248,"author":{"gitId":"AndrewJanong"},"content":" Command command \u003d parser.parseInput(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"AndrewJanong"},"content":" String[] inputs \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":250,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":251,"author":{"gitId":"AndrewJanong"},"content":" if (Duke.runCommandAndGetResponse(command, inputs) \u003d\u003d Ui.getExitMessage()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":252,"author":{"gitId":"AndrewJanong"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":253,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":254,"author":{"gitId":"AndrewJanong"},"content":" storage.writeTasks(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":255,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":256,"author":{"gitId":"AndrewJanong"},"content":" } catch (Exception exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(exception.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":259,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":260,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":261,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":262,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"AndrewJanong":259,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import duke.gui.Main;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":13}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents a command to be executed by the chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"public enum Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" BYE,","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" TODO,","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" DEADLINE,","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" EVENT,","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" DELETE,","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" LIST,","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" MARK,","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" UNMARK,","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" FIND","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"AndrewJanong":17}},{"path":"src/main/java/duke/exceptions/DukeEmptyArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents an exception where there are no arguments in the input","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public class DukeEmptyArgumentException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" public DukeEmptyArgumentException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":12}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents an exception that might happen in the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":12}},{"path":"src/main/java/duke/exceptions/DukeInvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents an exception where the date of the task is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public class DukeInvalidDateException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" public DukeInvalidDateException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AndrewJanong":12}},{"path":"src/main/java/duke/exceptions/DukeInvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents an exception where the index of the task is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public class DukeInvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" public DukeInvalidIndexException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" super(\"OOPS!!! You currently have \" + message + \" task(s). Please enter a valid index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":12}},{"path":"src/main/java/duke/exceptions/DukeUnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents an exception where the command is unknown","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public class DukeUnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" public DukeUnknownCommandException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" super(\"OOPS!!! Sorry, but I don\u0027t think \\\"\" + message + \"\\\" is a valid command.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":12}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":61}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" duke.getTasksData();","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setStage(stage);","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":34}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" private Stage stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DukeBot.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" public void setStage(Stage s) {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" stage \u003d s;","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" DialogBox.getDukeDialog(duke.getGreetingMessage(), dukeImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":" if (input.toLowerCase().equals(\"bye\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" stage.close();","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"AndrewJanong"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"AndrewJanong"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"AndrewJanong"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":66}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeUnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" * Represents a parser to parse","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" * the users\u0027 input.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" * Parses the input of the user and returns the Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" * @param input Input of the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" * @return Command of the input.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" * @throws DukeUnknownCommandException Error when the command input is unknwon.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" public Command parseInput(String input) throws DukeUnknownCommandException {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" String[] inputs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" String command \u003d inputs[0].toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" return Command.BYE;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" return Command.TODO;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" return Command.DEADLINE;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" return Command.EVENT;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" return Command.DELETE;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" return Command.LIST;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" return Command.FIND;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" return Command.MARK;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" return Command.UNMARK;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeUnknownCommandException(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AndrewJanong":47}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeInvalidDateException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" * Represents a storage to write and read data","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" * of the users\u0027 tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" * Creates a Storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" * Folder and File of data will be created if have not before.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" public Storage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" File dataFolder \u003d new File(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" if (!dataFolder.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" dataFolder.mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" File dataFile \u003d new File(\"./data/data.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(\"Something went wrong when loading tasks :(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" * Gets data from the data file and","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" * passes it to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" * @param taskList Task list of the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" * @throws IOException Error when reading data.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" public void getTasksFromData(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" File dataFile \u003d new File(\"./data/data.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" Scanner reader \u003d new Scanner(dataFile);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"AndrewJanong"},"content":" String[] currentTask \u003d reader.nextLine().split(Pattern.quote(\"|\"), 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"AndrewJanong"},"content":" String taskType \u003d currentTask[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"AndrewJanong"},"content":" String[] taskInfo \u003d currentTask[1].split(Pattern.quote(\"|\"), 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"AndrewJanong"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"AndrewJanong"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"AndrewJanong"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"AndrewJanong"},"content":" task \u003d new ToDo(taskInfo[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"AndrewJanong"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"AndrewJanong"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"AndrewJanong"},"content":" task \u003d new Deadline(taskInfo[1], taskInfo[2]);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"AndrewJanong"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"AndrewJanong"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"AndrewJanong"},"content":" task \u003d new Event(taskInfo[1], taskInfo[2], taskInfo[3]);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"AndrewJanong"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"AndrewJanong"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"AndrewJanong"},"content":" continue;","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"AndrewJanong"},"content":" } catch (DukeInvalidDateException exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(\"Something went wrong when loading tasks :(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"AndrewJanong"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"AndrewJanong"},"content":" if (taskInfo[0].equals(\"1\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"AndrewJanong"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"AndrewJanong"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"AndrewJanong"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"AndrewJanong"},"content":" reader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"AndrewJanong"},"content":" taskList.readTasksFromStorage(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"AndrewJanong"},"content":" * Writes to the data file the current users\u0027 tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"AndrewJanong"},"content":" * @param taskList Task list of the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"AndrewJanong"},"content":" public void writeTasks(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"AndrewJanong"},"content":" FileWriter dataWriter \u003d new FileWriter(\"./data/data.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"AndrewJanong"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.getSize(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"AndrewJanong"},"content":" dataWriter.write(taskList.getTask(i).getDataRepresentation() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"AndrewJanong"},"content":" dataWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException error) {","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(\"Something went wrong when updating tasks :(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"AndrewJanong":116}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeInvalidDateException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" * A class which represents","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" * a task that needs to be done before a specific date.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" /** Due date of the deadline */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" protected LocalDate endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" * Creates a Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" * @param endTime Due date of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" public Deadline(String description, String endTime) throws DukeInvalidDateException {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" this.endTime \u003d LocalDate.parse(endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" } catch (DateTimeParseException error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidDateException(\"Date must be of the form yyyy-mm-dd.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" return \"D|\" + super.getDataRepresentation() + \"|\" + endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" * Returns s string representation of a Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" * Uses an extra [D] to represent a Deadline and the due date.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" * @return the string representation of the Deadline","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" + \" (by: \" + this.endTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":51}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeInvalidDateException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" * A class which represents","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" * a task that starts and ends at a specific date.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" /** Start time of the event */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" protected LocalDate startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" /** End time of the event */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" protected LocalDate endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" * Creates an Event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" * @param startTime Start time of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" * @param endTime End time of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" public Event(String description, String startTime, String endTime) throws DukeInvalidDateException {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" this.startTime \u003d LocalDate.parse(startTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" this.endTime \u003d LocalDate.parse(endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" } catch (DateTimeParseException error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidDateException(\"Date must be of the form yyyy-mm-dd.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" return \"E|\" + super.getDataRepresentation() + \"|\" + startTime + \"|\" + endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" * A string representation of an Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" * Uses an extra [E] to represent a Event, start time, and end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" * @return the string representation of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" + \" (from: \" + this.startTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" + \" to: \" + this.endTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":58}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * An abstract class which represents a task for Duke chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" /** Task name or description */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" /** Status or progress of a task (done or not done) */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" * Creates a Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" * A task is set to be not done when first constructed.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" * Gets the icon that represents","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" * the status of the task ([X] for done, [ ] for not done).","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" * @return The icon representing the progress of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" return \"[X]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" return \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" * Checks whether the task description contains","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" * the input keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" * @param keyword Keyword to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" * @return True if contains keyword and False otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":" public boolean hasKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"AndrewJanong"},"content":" return description.toLowerCase().contains(keyword.toLowerCase());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"AndrewJanong"},"content":" * Returns the representation of the task in data format.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"AndrewJanong"},"content":" * @return Data representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"AndrewJanong"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"AndrewJanong"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"AndrewJanong"},"content":" return \"1|\" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"AndrewJanong"},"content":" return \"0|\" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"AndrewJanong"},"content":" * Returns the String representation of a task by its status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"AndrewJanong"},"content":" * @return the String representing the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"AndrewJanong"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"AndrewJanong"},"content":" return this.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":88}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" * TaskList represents the list of tasks of the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" /** Tasks of the user */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" * Creates a TaskList object which is initially is empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" * Reads all tasks from the storage and","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" * adds them to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" * @param tasks Tasks from the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" public void readTasksFromStorage(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" * Gets the task with a specific index.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" * @return The task with that index.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" return tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" * Gets the size of the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" * @return Size of task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" * Checks whether an index is valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Index to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":" * @return Validity of the index.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" public boolean isValidIndex(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" return taskIndex \u003e 0 \u0026\u0026 taskIndex \u003c\u003d tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"AndrewJanong"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"AndrewJanong"},"content":" * Returns a message confirming the added task.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"AndrewJanong"},"content":" * @param newTask The new task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"AndrewJanong"},"content":" public String addTask(Task newTask) {","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"AndrewJanong"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"Got it. I\u0027ve added this task:\",","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"AndrewJanong"},"content":" \"\\t \" + newTask,","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"AndrewJanong"},"content":" \"Now you have \" + getSize() + \" tasks in your list. Good luck!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"AndrewJanong"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"AndrewJanong"},"content":" * Returns a message confirming the deleted task.","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"AndrewJanong"},"content":" public String deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"AndrewJanong"},"content":" Task deletedTask \u003d tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"AndrewJanong"},"content":" tasks.remove(taskIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"Noted. I\u0027ve removed this task:\",","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"AndrewJanong"},"content":" deletedTask.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"AndrewJanong"},"content":" \"Now you have \" + this.tasks.size() + \" tasks in your list. Good luck!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"AndrewJanong"},"content":" * Marks a task as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"AndrewJanong"},"content":" public String markTask(int taskIndex) {","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"AndrewJanong"},"content":" Task task \u003d this.tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"AndrewJanong"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"Nice job! I\u0027ve marked this task as done:\",","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"AndrewJanong"},"content":" \"\\t \" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"AndrewJanong"},"content":" * Unmarks a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Index of the task to be unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"AndrewJanong"},"content":" public String unmarkTask(int taskIndex) {","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"AndrewJanong"},"content":" Task task \u003d this.tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"AndrewJanong"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"What happened? I\u0027ve marked this task as not done yet:\",","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"AndrewJanong"},"content":" \"\\t \" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"AndrewJanong"},"content":" * Prints all tasks that has a certain keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"AndrewJanong"},"content":" * @param keyword Keyword the task needs to have","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"AndrewJanong"},"content":" public String printTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"AndrewJanong"},"content":" int index \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"AndrewJanong"},"content":" List\u003cString\u003e linesToPrint \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"AndrewJanong"},"content":" linesToPrint.add(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"AndrewJanong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"AndrewJanong"},"content":" if (task.hasKeyword(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"AndrewJanong"},"content":" linesToPrint.add(index + \".\" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"AndrewJanong"},"content":" index++;","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"AndrewJanong"},"content":" if (index \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"AndrewJanong"},"content":" linesToPrint.set(0, \"Cannot find any tasks with this keyword\");","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"AndrewJanong"},"content":" String[] lines \u003d new String[linesToPrint.size()];","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"AndrewJanong"},"content":" for (int i \u003d 0; i \u003c linesToPrint.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"AndrewJanong"},"content":" lines[i] \u003d linesToPrint.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(lines);","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(lines);","lastModifiedDate":"2023-09-07"},{"lineNumber":154,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"AndrewJanong"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"AndrewJanong"},"content":" String tasksList;","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"AndrewJanong"},"content":" if (getSize() \u003e 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"AndrewJanong"},"content":" tasksList \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"AndrewJanong"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"AndrewJanong"},"content":" tasksList +\u003d (\"\\t \" + i + \".\" + getTask(i) + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"AndrewJanong"},"content":" tasksList +\u003d (\"\\t Keep up the good work!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"AndrewJanong"},"content":" tasksList \u003d \"You currently have no tasks :)\";","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"AndrewJanong"},"content":" return tasksList;","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AndrewJanong":176}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * A class which represents","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" * a task without any date/time attached to it.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" * Creates a ToDo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" return \"T|\" + super.getDataRepresentation();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" * Returns the string representation of a ToDo.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" * Uses an extra [T] to represent a ToDo.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" * @return the string representation of the ToDo.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":34}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Implements the Ui of the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" * Deals with how the chatbot interacts with the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" /** A line break for chatbot responses */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" private static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" * Prints all lines in a structured manner.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" * Response printed will start and end with a line break.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" * @param lines Lines to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" public static void printLines(String ...lines) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" System.out.println(\"\\t\" + LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" System.out.println(\"\\t \" + line);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" System.out.println(\"\\t\" + LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" * Gets response string.","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" * @param lines Lines to be in the response.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" public static String getResponse(String ...lines) {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" String response \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" for (String line : lines) {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" response +\u003d (\"\\t \" + line + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" return response;","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" * Gets a greeting message for when the user opens the chatbot.","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" public static String getGreetingMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" return getResponse(\"Hello I\u0027m ADJ\", \"What can I do for you?\");","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" * Gets a goodbye message when the user exits.","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" public static String getExitMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" return getResponse(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AndrewJanong":54}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"800.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-07"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"800.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-07"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"724.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"724.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":"AndrewJanong"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"800.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"788.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":19}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeUnknownCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" public void parseInput_listCommand_success() throws DukeUnknownCommandException {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" Command listCommand \u003d Command.LIST;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" assertEquals(parser.parseInput(\"list\"), listCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" public void parseInput_invalidCommand_errorThrown() throws DukeUnknownCommandException {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" parser.parseInput(\"help\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" fail(\"Should have thrown invalid command error\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" } catch (DukeException error) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"AndrewJanong":30}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" private TaskList sampleTaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" @BeforeEach","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" public void setSampleTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" sampleTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" tasks.add(new TaskSample());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" tasks.add(new TaskSample());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" tasks.add(new TaskSample());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" sampleTaskList.readTasksFromStorage(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" public void getSize_threeTasks_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" assertEquals(sampleTaskList.getSize(), 3);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" public void addTask_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" sampleTaskList.addTask(new TaskSample());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" assertEquals(sampleTaskList.getSize(), 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" public void deleteTask_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" sampleTaskList.deleteTask(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" assertEquals(sampleTaskList.getSize(), 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" public void markTask_correctStatusIcon() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" sampleTaskList.markTask(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" assertEquals(sampleTaskList.getTask(2).getStatusIcon(), \"[X]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"AndrewJanong":46}},{"path":"src/test/java/duke/task/TaskSample.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents a sample task.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"public class TaskSample extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" * Creates a sample task for testing purposes.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" protected TaskSample() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" super(\"taskSample\");","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"AndrewJanong":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":"AndrewJanong"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" mainClassName \u003d \"duke.Duke\"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AndrewJanong":15,"-":41}},{"path":"settings.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"include \u0027test\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"AndrewJanong":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeEmptyArgumentException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeInvalidDateException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeInvalidIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeUnknownCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" * The Duke program implements a","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" * chatbot to keep track of your tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" private static final Storage storage \u003d new Storage();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" private static final TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" private static final Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" * Adds a task to the task list and sends a message of the task added.","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" * A task can be a ToDo, Deadline, or Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" * @param command Task command of input.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" * @param taskInfo Info regarding the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" private static String addTask(Command command, String taskInfo)","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" throws DukeInvalidDateException {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" Task newTask;","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" assert command \u003d\u003d Command.TODO || command \u003d\u003d Command.DEADLINE || command \u003d\u003d Command.EVENT :","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" \"Command should be a TODO, DEADLINE, or EVENT command\";","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" if (command \u003d\u003d Command.TODO) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" newTask \u003d new ToDo(taskInfo);","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.DEADLINE) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" String[] deadlineInfo \u003d taskInfo.split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" newTask \u003d new Deadline(deadlineInfo[0], deadlineInfo[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.EVENT) {","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" String[] eventInfo \u003d taskInfo.split(\" /from \");","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" String[] eventTime \u003d eventInfo[1].split(\" /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" newTask \u003d new Event(eventInfo[0], eventTime[0], eventTime[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"Something went wrong :(\");","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"AndrewJanong"},"content":" return tasks.addTask(newTask);","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"AndrewJanong"},"content":" * Edits a task in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"AndrewJanong"},"content":" * Editing a task can be deleting, marking, or unmarking a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"AndrewJanong"},"content":" * @param command Edit command of input.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Index of task to edit.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"AndrewJanong"},"content":" private static String editTask(Command command, int taskIndex) {","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"AndrewJanong"},"content":" assert taskIndex \u003e 0 : \"Task index should be a positive integer\";","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"AndrewJanong"},"content":" assert command \u003d\u003d Command.DELETE || command \u003d\u003d Command.MARK || command \u003d\u003d Command.UNMARK :","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"AndrewJanong"},"content":" \"Command should be a DELETE, MARK, or UNMARK command\";","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"AndrewJanong"},"content":" if (command \u003d\u003d Command.DELETE) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"AndrewJanong"},"content":" return tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.MARK) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"AndrewJanong"},"content":" return tasks.markTask(taskIndex);","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.UNMARK) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"AndrewJanong"},"content":" return tasks.unmarkTask(taskIndex);","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"Something went wrong :(\");","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"AndrewJanong"},"content":" * Executes find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"AndrewJanong"},"content":" * Find command lists all tasks which contains a certain keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"AndrewJanong"},"content":" * @param keyword Keyword to find tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"AndrewJanong"},"content":" private static String executeFindCommand(String keyword) {","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"AndrewJanong"},"content":" return tasks.printTasksByKeyword(keyword);","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"AndrewJanong"},"content":" * Executes single commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"AndrewJanong"},"content":" * Single commands consists of: Listing all tasks, Printing goodbye message.","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"AndrewJanong"},"content":" * @param command Single command of input.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"AndrewJanong"},"content":" private static String executeSingleCommand(Command command) {","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"AndrewJanong"},"content":" assert command \u003d\u003d Command.LIST || command \u003d\u003d Command.BYE :","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"AndrewJanong"},"content":" \"Command should be a LIST or BYE command\";","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"AndrewJanong"},"content":" if (command \u003d\u003d Command.LIST) {","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(tasks.toString());","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.BYE) {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getExitMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"Something went wrong :(\");","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"AndrewJanong"},"content":" private static void checkInput(Command command, String[] inputs) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"AndrewJanong"},"content":" ArrayList\u003cCommand\u003e argumentNeededCommands \u003d new ArrayList\u003cCommand\u003e(Arrays.asList(Command.TODO, Command.DEADLINE","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"AndrewJanong"},"content":" , Command.EVENT, Command.DELETE, Command.FIND, Command.MARK, Command.UNMARK));","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"AndrewJanong"},"content":" ArrayList\u003cCommand\u003e indexNeededCommands \u003d new ArrayList\u003cCommand\u003e(Arrays.asList(Command.DELETE, Command.MARK, Command.UNMARK));","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"AndrewJanong"},"content":" if (argumentNeededCommands.contains(command)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"AndrewJanong"},"content":" if (inputs.length \u003d\u003d 1 || inputs[1].equals(\"\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeEmptyArgumentException(\"OOPS!!! Argument for this command cannot be empty.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"AndrewJanong"},"content":" if (indexNeededCommands.contains(command)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"AndrewJanong"},"content":" if (!tasks.isValidIndex(Integer.parseInt(inputs[1]))) {","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidIndexException(Integer.toString(tasks.getSize()));","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"AndrewJanong"},"content":" } catch (NumberFormatException exception) {","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidIndexException(Integer.toString(tasks.getSize()));","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":143,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"AndrewJanong"},"content":" * Runs the command from the user input.","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"AndrewJanong"},"content":" * @param command Command of the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"AndrewJanong"},"content":" * @param inputs Arguments of the input.","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":149,"author":{"gitId":"AndrewJanong"},"content":" * @throws DukeException Error when executing the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"AndrewJanong"},"content":" private static String runCommandAndGetResponse(Command command, String[] inputs) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":152,"author":{"gitId":"AndrewJanong"},"content":" String response;","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"AndrewJanong"},"content":" checkInput(command, inputs);","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":155,"author":{"gitId":"AndrewJanong"},"content":" if (command \u003d\u003d Command.BYE) {","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"AndrewJanong"},"content":" storage.writeTasks(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"AndrewJanong"},"content":" response \u003d executeSingleCommand(command);","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"AndrewJanong"},"content":" return response;","lastModifiedDate":"2023-09-07"},{"lineNumber":159,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.TODO || command \u003d\u003d Command.DEADLINE || command \u003d\u003d Command.EVENT) {","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"AndrewJanong"},"content":" if (command \u003d\u003d Command.TODO) {","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"AndrewJanong"},"content":" response \u003d addTask(Command.TODO, inputs[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":162,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.DEADLINE) {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"AndrewJanong"},"content":" response \u003d addTask(Command.DEADLINE, inputs[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":164,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"AndrewJanong"},"content":" response \u003d addTask(Command.EVENT, inputs[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":166,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.DELETE) {","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"AndrewJanong"},"content":" response \u003d editTask(Command.DELETE, Integer.parseInt(inputs[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":169,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.LIST) {","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"AndrewJanong"},"content":" response \u003d executeSingleCommand(Command.LIST);","lastModifiedDate":"2023-09-07"},{"lineNumber":171,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.FIND) {","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"AndrewJanong"},"content":" response \u003d executeFindCommand(inputs[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":173,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.MARK) {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"AndrewJanong"},"content":" response \u003d editTask(Command.MARK, Integer.parseInt(inputs[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":175,"author":{"gitId":"AndrewJanong"},"content":" } else if (command \u003d\u003d Command.UNMARK) {","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"AndrewJanong"},"content":" response \u003d Duke.editTask(Command.UNMARK, Integer.parseInt(inputs[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":177,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeUnknownCommandException(inputs[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":180,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"AndrewJanong"},"content":" return response;","lastModifiedDate":"2023-09-07"},{"lineNumber":182,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":183,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":184,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":185,"author":{"gitId":"AndrewJanong"},"content":" * Gets all tasks from the data and store it in the storage.","lastModifiedDate":"2023-09-07"},{"lineNumber":186,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":187,"author":{"gitId":"AndrewJanong"},"content":" public void getTasksData() {","lastModifiedDate":"2023-09-07"},{"lineNumber":188,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":189,"author":{"gitId":"AndrewJanong"},"content":" storage.getTasksFromData(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":190,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-07"},{"lineNumber":191,"author":{"gitId":"AndrewJanong"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":192,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":193,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":194,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":195,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":196,"author":{"gitId":"AndrewJanong"},"content":" * Gets a greeting message to be sent went a user activates the chatbot.","lastModifiedDate":"2023-09-07"},{"lineNumber":197,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":198,"author":{"gitId":"AndrewJanong"},"content":" * @return Greeting message to be sent.","lastModifiedDate":"2023-09-07"},{"lineNumber":199,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":200,"author":{"gitId":"AndrewJanong"},"content":" public String getGreetingMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":201,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getGreetingMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":202,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":203,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":204,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":205,"author":{"gitId":"AndrewJanong"},"content":" * Gets the response message based on the User\u0027s input.","lastModifiedDate":"2023-09-07"},{"lineNumber":206,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":207,"author":{"gitId":"AndrewJanong"},"content":" * @param userInput User input.","lastModifiedDate":"2023-09-07"},{"lineNumber":208,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":209,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":210,"author":{"gitId":"AndrewJanong"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-07"},{"lineNumber":211,"author":{"gitId":"AndrewJanong"},"content":" String response;","lastModifiedDate":"2023-09-07"},{"lineNumber":212,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":213,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":214,"author":{"gitId":"AndrewJanong"},"content":" Command command \u003d parser.parseInput(userInput);","lastModifiedDate":"2023-09-07"},{"lineNumber":215,"author":{"gitId":"AndrewJanong"},"content":" String[] inputs \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":216,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":217,"author":{"gitId":"AndrewJanong"},"content":" response \u003d runCommandAndGetResponse(command, inputs);","lastModifiedDate":"2023-09-07"},{"lineNumber":218,"author":{"gitId":"AndrewJanong"},"content":" storage.writeTasks(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":219,"author":{"gitId":"AndrewJanong"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-09-07"},{"lineNumber":220,"author":{"gitId":"AndrewJanong"},"content":" response \u003d Ui.getResponse(exception.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":221,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":222,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":223,"author":{"gitId":"AndrewJanong"},"content":" return response;","lastModifiedDate":"2023-09-07"},{"lineNumber":224,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":225,"author":{"gitId":"AndrewJanong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":226,"author":{"gitId":"AndrewJanong"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":227,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"AndrewJanong"},"content":" storage.getTasksFromData(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(\"Shutting down...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"AndrewJanong"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"AndrewJanong"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":236,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":237,"author":{"gitId":"AndrewJanong"},"content":" String userInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":238,"author":{"gitId":"AndrewJanong"},"content":" Command command \u003d parser.parseInput(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"AndrewJanong"},"content":" String[] inputs \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":240,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":241,"author":{"gitId":"AndrewJanong"},"content":" if (Duke.runCommandAndGetResponse(command, inputs) \u003d\u003d Ui.getExitMessage()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":242,"author":{"gitId":"AndrewJanong"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":243,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":244,"author":{"gitId":"AndrewJanong"},"content":" storage.writeTasks(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":246,"author":{"gitId":"AndrewJanong"},"content":" } catch (Exception exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(exception.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":249,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":250,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":252,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"AndrewJanong":249,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import duke.gui.Main;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":13}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents a command to be executed by the chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"public enum Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" BYE,","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" TODO,","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" DEADLINE,","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" EVENT,","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" DELETE,","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" LIST,","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" MARK,","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" UNMARK,","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" FIND","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"AndrewJanong":17}},{"path":"src/main/java/duke/exceptions/DukeEmptyArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents an exception where there are no arguments in the input","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public class DukeEmptyArgumentException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" public DukeEmptyArgumentException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":12}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents an exception that might happen in the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":12}},{"path":"src/main/java/duke/exceptions/DukeInvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents an exception where the date of the task is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public class DukeInvalidDateException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" public DukeInvalidDateException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AndrewJanong":12}},{"path":"src/main/java/duke/exceptions/DukeInvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents an exception where the index of the task is invalid.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public class DukeInvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" public DukeInvalidIndexException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" super(\"OOPS!!! You currently have \" + message + \" task(s). Please enter a valid index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":12}},{"path":"src/main/java/duke/exceptions/DukeUnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents an exception where the command is unknown","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public class DukeUnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" public DukeUnknownCommandException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" super(\"OOPS!!! Sorry, but I don\u0027t think \\\"\" + message + \"\\\" is a valid command.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":12}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":61}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" duke.getTasksData();","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setStage(stage);","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":34}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" private Stage stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DukeBot.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" public void setStage(Stage s) {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" stage \u003d s;","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" DialogBox.getDukeDialog(duke.getGreetingMessage(), dukeImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":" if (input.toLowerCase().equals(\"bye\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" stage.close();","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"AndrewJanong"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"AndrewJanong"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"AndrewJanong"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":66}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeUnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" * Represents a parser to parse","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" * the users\u0027 input.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" * Parses the input of the user and returns the Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" * @param input Input of the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" * @return Command of the input.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" * @throws DukeUnknownCommandException Error when the command input is unknwon.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" public Command parseInput(String input) throws DukeUnknownCommandException {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" String[] inputs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" String command \u003d inputs[0].toLowerCase();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" return Command.BYE;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" return Command.TODO;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" return Command.DEADLINE;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" return Command.EVENT;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" return Command.DELETE;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" return Command.LIST;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" return Command.FIND;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" return Command.MARK;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" return Command.UNMARK;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeUnknownCommandException(command);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AndrewJanong":47}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeInvalidDateException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" * Represents a storage to write and read data","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" * of the users\u0027 tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" * Creates a Storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" * Folder and File of data will be created if have not before.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" public Storage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" File dataFolder \u003d new File(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" if (!dataFolder.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" dataFolder.mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" File dataFile \u003d new File(\"./data/data.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(\"Something went wrong when loading tasks :(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" private Task getTaskByType(String taskType, String[] taskInfo) {","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" case \"T\":","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" return new ToDo(taskInfo[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" case \"D\":","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" return new Deadline(taskInfo[1], taskInfo[2]);","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":" case \"E\":","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" return new Event(taskInfo[1], taskInfo[2], taskInfo[3]);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" return null;","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"AndrewJanong"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(\"Something went wrong when loading tasks :(\");","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"AndrewJanong"},"content":" return null;","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"AndrewJanong"},"content":" * Gets data from the data file and","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"AndrewJanong"},"content":" * passes it to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"AndrewJanong"},"content":" * @param taskList Task list of the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"AndrewJanong"},"content":" * @throws IOException Error when reading data.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"AndrewJanong"},"content":" public void getTasksFromData(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"AndrewJanong"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"AndrewJanong"},"content":" File dataFile \u003d new File(\"./data/data.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"AndrewJanong"},"content":" Scanner reader \u003d new Scanner(dataFile);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"AndrewJanong"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"AndrewJanong"},"content":" String[] currentTask \u003d reader.nextLine().split(Pattern.quote(\"|\"), 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"AndrewJanong"},"content":" String taskType \u003d currentTask[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"AndrewJanong"},"content":" String[] taskInfo \u003d currentTask[1].split(Pattern.quote(\"|\"), 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"AndrewJanong"},"content":" Task task \u003d getTaskByType(taskType, taskInfo);","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"AndrewJanong"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"AndrewJanong"},"content":" continue;","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"AndrewJanong"},"content":" if (taskInfo[0].equals(\"1\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"AndrewJanong"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"AndrewJanong"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"AndrewJanong"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"AndrewJanong"},"content":" reader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"AndrewJanong"},"content":" taskList.readTasksFromStorage(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"AndrewJanong"},"content":" * Writes to the data file the current users\u0027 tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"AndrewJanong"},"content":" * @param taskList Task list of the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"AndrewJanong"},"content":" public void writeTasks(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"AndrewJanong"},"content":" FileWriter dataWriter \u003d new FileWriter(\"./data/data.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"AndrewJanong"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.getSize(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"AndrewJanong"},"content":" dataWriter.write(taskList.getTask(i).getDataRepresentation() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"AndrewJanong"},"content":" dataWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"AndrewJanong"},"content":" } catch (IOException error) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(\"Something went wrong when updating tasks :(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"AndrewJanong":121}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeInvalidDateException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" * A class which represents","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" * a task that needs to be done before a specific date.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" /** Due date of the deadline */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" protected LocalDate endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" * Creates a Deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" * @param endTime Due date of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" public Deadline(String description, String endTime) throws DukeInvalidDateException {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" this.endTime \u003d LocalDate.parse(endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" } catch (DateTimeParseException error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidDateException(\"Date must be of the form yyyy-mm-dd.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" return \"D|\" + super.getDataRepresentation() + \"|\" + endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" * Returns s string representation of a Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" * Uses an extra [D] to represent a Deadline and the due date.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" * @return the string representation of the Deadline","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" + \" (by: \" + this.endTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":51}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeInvalidDateException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" * A class which represents","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" * a task that starts and ends at a specific date.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" /** Start time of the event */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" protected LocalDate startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" /** End time of the event */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" protected LocalDate endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" * Creates an Event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" * @param startTime Start time of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" * @param endTime End time of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" public Event(String description, String startTime, String endTime) throws DukeInvalidDateException {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" this.startTime \u003d LocalDate.parse(startTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" this.endTime \u003d LocalDate.parse(endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" } catch (DateTimeParseException error) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" throw new DukeInvalidDateException(\"Date must be of the form yyyy-mm-dd.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" return \"E|\" + super.getDataRepresentation() + \"|\" + startTime + \"|\" + endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" * A string representation of an Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" * Uses an extra [E] to represent a Event, start time, and end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" * @return the string representation of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" + \" (from: \" + this.startTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" + \" to: \" + this.endTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":58}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * An abstract class which represents a task for Duke chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" /** Task name or description */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" /** Status or progress of a task (done or not done) */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" * Creates a Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" * A task is set to be not done when first constructed.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" * Gets the icon that represents","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" * the status of the task ([X] for done, [ ] for not done).","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" * @return The icon representing the progress of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" return \"[X]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" return \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" * Checks whether the task description contains","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" * the input keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" * @param keyword Keyword to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" * @return True if contains keyword and False otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":" public boolean hasKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"AndrewJanong"},"content":" return description.toLowerCase().contains(keyword.toLowerCase());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"AndrewJanong"},"content":" * Returns the representation of the task in data format.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"AndrewJanong"},"content":" * @return Data representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"AndrewJanong"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"AndrewJanong"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"AndrewJanong"},"content":" return \"1|\" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"AndrewJanong"},"content":" return \"0|\" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"AndrewJanong"},"content":" * Returns the String representation of a task by its status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"AndrewJanong"},"content":" * @return the String representing the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"AndrewJanong"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"AndrewJanong"},"content":" return this.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":88}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" * TaskList represents the list of tasks of the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" /** Tasks of the user */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" * Creates a TaskList object which is initially is empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" * Reads all tasks from the storage and","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" * adds them to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" * @param tasks Tasks from the storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" public void readTasksFromStorage(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" * Gets the task with a specific index.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" * @return The task with that index.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" return tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" * Gets the size of the current task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":" * @return Size of task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":" * Checks whether an index is valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Index to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"AndrewJanong"},"content":" * @return Validity of the index.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"AndrewJanong"},"content":" public boolean isValidIndex(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"AndrewJanong"},"content":" return taskIndex \u003e 0 \u0026\u0026 taskIndex \u003c\u003d tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"AndrewJanong"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"AndrewJanong"},"content":" * Returns a message confirming the added task.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"AndrewJanong"},"content":" * @param newTask The new task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"AndrewJanong"},"content":" public String addTask(Task newTask) {","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"AndrewJanong"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"Got it. I\u0027ve added this task:\",","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"AndrewJanong"},"content":" \"\\t \" + newTask,","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"AndrewJanong"},"content":" \"Now you have \" + getSize() + \" tasks in your list. Good luck!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"AndrewJanong"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"AndrewJanong"},"content":" * Returns a message confirming the deleted task.","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"AndrewJanong"},"content":" public String deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"AndrewJanong"},"content":" assert taskIndex \u003e 0 : \"Task index should be a positive integer\";","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"AndrewJanong"},"content":" Task deletedTask \u003d tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"AndrewJanong"},"content":" tasks.remove(taskIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"Noted. I\u0027ve removed this task:\",","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"AndrewJanong"},"content":" deletedTask.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"AndrewJanong"},"content":" \"Now you have \" + this.tasks.size() + \" tasks in your list. Good luck!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"AndrewJanong"},"content":" * Marks a task as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"AndrewJanong"},"content":" public String markTask(int taskIndex) {","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"AndrewJanong"},"content":" assert taskIndex \u003e 0 : \"Task index should be a positive integer\";","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"AndrewJanong"},"content":" Task task \u003d this.tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"AndrewJanong"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"Nice job! I\u0027ve marked this task as done:\",","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"AndrewJanong"},"content":" \"\\t \" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"AndrewJanong"},"content":" * Unmarks a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"AndrewJanong"},"content":" * @param taskIndex Index of the task to be unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"AndrewJanong"},"content":" public String unmarkTask(int taskIndex) {","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"AndrewJanong"},"content":" assert taskIndex \u003e 0 : \"Task index should be a positive integer\";","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"AndrewJanong"},"content":" Task task \u003d this.tasks.get(taskIndex - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"AndrewJanong"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(\"What happened? I\u0027ve marked this task as not done yet:\",","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"AndrewJanong"},"content":" \"\\t \" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"AndrewJanong"},"content":" * Prints all tasks that has a certain keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"AndrewJanong"},"content":" * @param keyword Keyword the task needs to have","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"AndrewJanong"},"content":" * @return Response message to be sent by the bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"AndrewJanong"},"content":" public String printTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"AndrewJanong"},"content":" int index \u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"AndrewJanong"},"content":" List\u003cString\u003e linesToPrint \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"AndrewJanong"},"content":" linesToPrint.add(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"AndrewJanong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"AndrewJanong"},"content":" if (task.hasKeyword(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"AndrewJanong"},"content":" linesToPrint.add(index + \".\" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"AndrewJanong"},"content":" index++;","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"AndrewJanong"},"content":" if (index \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"AndrewJanong"},"content":" linesToPrint.set(0, \"Cannot find any tasks with this keyword\");","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"AndrewJanong"},"content":" String[] lines \u003d new String[linesToPrint.size()];","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"AndrewJanong"},"content":" for (int i \u003d 0; i \u003c linesToPrint.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"AndrewJanong"},"content":" lines[i] \u003d linesToPrint.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"AndrewJanong"},"content":" Ui.printLines(lines);","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"AndrewJanong"},"content":" return Ui.getResponse(lines);","lastModifiedDate":"2023-09-07"},{"lineNumber":160,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"AndrewJanong"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"AndrewJanong"},"content":" String tasksList;","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"AndrewJanong"},"content":" if (getSize() \u003e 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"AndrewJanong"},"content":" tasksList \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"AndrewJanong"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"AndrewJanong"},"content":" tasksList +\u003d (\"\\t \" + i + \".\" + getTask(i) + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"AndrewJanong"},"content":" tasksList +\u003d (\"\\t Keep up the good work!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"AndrewJanong"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"AndrewJanong"},"content":" tasksList \u003d \"You currently have no tasks :)\";","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"AndrewJanong"},"content":" return tasksList;","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AndrewJanong":182}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * A class which represents","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" * a task without any date/time attached to it.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" * Creates a ToDo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" return \"T|\" + super.getDataRepresentation();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" * Returns the string representation of a ToDo.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" * Uses an extra [T] to represent a ToDo.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" * @return the string representation of the ToDo.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AndrewJanong":34}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Implements the Ui of the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" * Deals with how the chatbot interacts with the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" * @author Andrew Daniel Janong","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" /** A line break for chatbot responses */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" private static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" * Prints all lines in a structured manner.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" * Response printed will start and end with a line break.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" * @param lines Lines to be printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" public static void printLines(String ...lines) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" System.out.println(\"\\t\" + LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" System.out.println(\"\\t \" + line);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" System.out.println(\"\\t\" + LINE);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" * Gets response string.","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" * @param lines Lines to be in the response.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" public static String getResponse(String ...lines) {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" String response \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":" for (String line : lines) {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" response +\u003d (\"\\t \" + line + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" return response;","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" * Gets a greeting message for when the user opens the chatbot.","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" public static String getGreetingMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" return getResponse(\"Hello I\u0027m ADJ\", \"What can I do for you?\");","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"AndrewJanong"},"content":" * Gets a goodbye message when the user exits.","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"AndrewJanong"},"content":" public static String getExitMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"AndrewJanong"},"content":" return getResponse(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AndrewJanong":54}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"800.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-07"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"800.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-07"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"724.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"724.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":"AndrewJanong"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"800.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"788.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"AndrewJanong":19}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"import duke.exceptions.DukeUnknownCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" public void parseInput_listCommand_success() throws DukeUnknownCommandException {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" Command listCommand \u003d Command.LIST;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" assertEquals(parser.parseInput(\"list\"), listCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" public void parseInput_invalidCommand_errorThrown() throws DukeUnknownCommandException {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" parser.parseInput(\"help\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" fail(\"Should have thrown invalid command error\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" } catch (DukeException error) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"AndrewJanong":30}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" private TaskList sampleTaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AndrewJanong"},"content":" @BeforeEach","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AndrewJanong"},"content":" public void setSampleTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AndrewJanong"},"content":" sampleTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AndrewJanong"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"AndrewJanong"},"content":" tasks.add(new TaskSample());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AndrewJanong"},"content":" tasks.add(new TaskSample());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"AndrewJanong"},"content":" tasks.add(new TaskSample());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"AndrewJanong"},"content":" sampleTaskList.readTasksFromStorage(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"AndrewJanong"},"content":" public void getSize_threeTasks_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AndrewJanong"},"content":" assertEquals(sampleTaskList.getSize(), 3);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"AndrewJanong"},"content":" public void addTask_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"AndrewJanong"},"content":" sampleTaskList.addTask(new TaskSample());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"AndrewJanong"},"content":" assertEquals(sampleTaskList.getSize(), 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"AndrewJanong"},"content":" public void deleteTask_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"AndrewJanong"},"content":" sampleTaskList.deleteTask(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AndrewJanong"},"content":" assertEquals(sampleTaskList.getSize(), 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"AndrewJanong"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AndrewJanong"},"content":" public void markTask_correctStatusIcon() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AndrewJanong"},"content":" sampleTaskList.markTask(2);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AndrewJanong"},"content":" assertEquals(sampleTaskList.getTask(2).getStatusIcon(), \"[X]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"AndrewJanong":46}},{"path":"src/test/java/duke/task/TaskSample.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AndrewJanong"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"AndrewJanong"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"AndrewJanong"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"AndrewJanong"},"content":" * Represents a sample task.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"AndrewJanong"},"content":"public class TaskSample extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AndrewJanong"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"AndrewJanong"},"content":" * Creates a sample task for testing purposes.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"AndrewJanong"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"AndrewJanong"},"content":" protected TaskSample() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"AndrewJanong"},"content":" super(\"taskSample\");","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"AndrewJanong"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"AndrewJanong"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"AndrewJanong":13}}] diff --git a/AndrewJanong_ip_master/commits.json b/AndrewJanong_ip_master/commits.json index d790ade0..6ebeca73 100644 --- a/AndrewJanong_ip_master/commits.json +++ b/AndrewJanong_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"AndrewJanong":[{"date":"2023-08-24","commitResults":[{"hash":"2f3425b57a4640422880121f27f95cde9cb9ae20","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"2194c8c219b15a4c165f46d498f5d7df49a84bd8","isMergeCommit":false,"messageTitle":"Echo feature added","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":6}}},{"hash":"51a2082f19b514081bf245a58529938db1cfa75a","isMergeCommit":false,"messageTitle":"Add, List feature added","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":2}}},{"hash":"d175a96dc84ba70336ba541fbc7597c88af3d907","isMergeCommit":false,"messageTitle":"Mark as Done feature added","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":18}}},{"hash":"08d92c962148343c99eab034b36032d013eba718","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines feature added","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":219,"deletions":43}}},{"hash":"d96418c1b66a4ee59bd6927c631cee9f3b88d863","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"7ea4799ba4b978f16f5d2ec2a3a693cbe7964b6a","isMergeCommit":false,"messageTitle":"Handle Errors by adding Exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":104,"deletions":29}}},{"hash":"ecb49b65e2ac86832350e6c3072a518658a53001","isMergeCommit":false,"messageTitle":"Delete feature added","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":29,"deletions":3}}}]},{"date":"2023-08-29","commitResults":[{"hash":"10312716601687e52993307a4edf7e501ee4b243","isMergeCommit":false,"messageTitle":"Used Enums and improved File Management","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":66}}},{"hash":"b60e74dbce0803331697ac7ffa65e6859fa04bb5","isMergeCommit":false,"messageTitle":"Save feature added","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":37}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9408b1cd6ad4d06bcca03345c4f385d538fef5f7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"d8640e91786558a981bff3aa128b31b46d0f8882","isMergeCommit":false,"messageTitle":"Dates and Times simple features added","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":27}}},{"hash":"f2e9652d044c45257c544e1a4956c1bb56c63d27","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"137bc568f5eb890a63007b928b16481ff5b27a01","isMergeCommit":false,"messageTitle":"Ui class added","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":60}}},{"hash":"fbecf6f48fd432f539216ef75dffb4a968d3ceb9","isMergeCommit":false,"messageTitle":"Added TaskList class and modified Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":97}}},{"hash":"08f5c424d60a596877233f6a1405723b7153b675","isMergeCommit":false,"messageTitle":"Added Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":21}}},{"hash":"2f637308d2209bd49591ce0cbb11b0376b5cafd5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"a07b4d824a2c8a0e6397761fa7126336c7df32db","isMergeCommit":false,"messageTitle":"Put all classes in packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":33}}},{"hash":"f5770048a86caa933045bfd7707f9f0040e5d81a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"b05915f50f193a64cf4ce5b1f53ee5552a27df83","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"9f336b0ecb652275e7c91cfa15b58bd584bac296","isMergeCommit":false,"messageTitle":"Added TaskList tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":54,"deletions":0}}},{"hash":"abb33d98a9f1fe1720cf437407a2904bd6c3b2f9","isMergeCommit":false,"messageTitle":"Added Parser tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"7010795425fbc144de5b9b5ffed8cc657ae4529e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"68a455279cdb14add8def9f6bef9737cd14190b3","isMergeCommit":false,"messageTitle":"Setup JAR file and fix data.txt creation bug","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"76bc163ea38c4449f616184234e077ef79d64fcd","isMergeCommit":false,"messageTitle":"Added JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":57}}},{"hash":"692aa7946ee05f0ef9864a080989ddc4c7baa04c","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":38}}},{"hash":"a9a7a64fd5f5f9d998b606940963771061397ed3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"6125a096167aacf91912d4ae9c1fb865acb8ef83","isMergeCommit":true,"messageTitle":"Fix merge conflict","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"3ef99f83a34c06a3fb36e49f8603d63306ae1de8","isMergeCommit":false,"messageTitle":"Add Find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}},{"hash":"94af14db1892796ddd4f44e224296d0bcfe76705","isMergeCommit":true,"messageTitle":"Fix merge conflict in Task","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"e822df501414a42714b1f2fb13bc7d8aa2e95a8f","isMergeCommit":false,"messageTitle":"Improve code style","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":52,"deletions":48}}},{"hash":"b71d68f48c7b60538e05e8df8943b3498e8efb75","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"1b30c243ec83ee38dd3c6b5f74810c85cd9f398e","isMergeCommit":false,"messageTitle":"Create Duke GUI initial setup","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":166,"deletions":0}}}]},{"date":"2023-09-07","commitResults":[{"hash":"afd454807f953f3bace03939b94f52d1e4e47fa8","isMergeCommit":false,"messageTitle":"Finish GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":6,"deletions":6},"java":{"insertions":139,"deletions":63}}},{"hash":"0e24502dac5ff76b14d57bd849771fefead06f43","isMergeCommit":false,"messageTitle":"Remove text-based UI testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":15},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"8caa41156af57edd11c435220aca7973e571c8c7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"AndrewJanong":{"java":1223,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":17,"txt":0}},"authorContributionVariance":{"AndrewJanong":43354.78},"authorDisplayNameMap":{"AndrewJanong":"CS2103T-W16-1 ANDR..NONG"}} +{"authorDailyContributionsMap":{"AndrewJanong":[{"date":"2023-08-24","commitResults":[{"hash":"2f3425b57a4640422880121f27f95cde9cb9ae20","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"2194c8c219b15a4c165f46d498f5d7df49a84bd8","isMergeCommit":false,"messageTitle":"Echo feature added","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":6}}},{"hash":"51a2082f19b514081bf245a58529938db1cfa75a","isMergeCommit":false,"messageTitle":"Add, List feature added","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":2}}},{"hash":"d175a96dc84ba70336ba541fbc7597c88af3d907","isMergeCommit":false,"messageTitle":"Mark as Done feature added","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":18}}},{"hash":"08d92c962148343c99eab034b36032d013eba718","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines feature added","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":219,"deletions":43}}},{"hash":"d96418c1b66a4ee59bd6927c631cee9f3b88d863","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"7ea4799ba4b978f16f5d2ec2a3a693cbe7964b6a","isMergeCommit":false,"messageTitle":"Handle Errors by adding Exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":104,"deletions":29}}},{"hash":"ecb49b65e2ac86832350e6c3072a518658a53001","isMergeCommit":false,"messageTitle":"Delete feature added","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":29,"deletions":3}}}]},{"date":"2023-08-29","commitResults":[{"hash":"10312716601687e52993307a4edf7e501ee4b243","isMergeCommit":false,"messageTitle":"Used Enums and improved File Management","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":66}}},{"hash":"b60e74dbce0803331697ac7ffa65e6859fa04bb5","isMergeCommit":false,"messageTitle":"Save feature added","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":37}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9408b1cd6ad4d06bcca03345c4f385d538fef5f7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"d8640e91786558a981bff3aa128b31b46d0f8882","isMergeCommit":false,"messageTitle":"Dates and Times simple features added","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":27}}},{"hash":"f2e9652d044c45257c544e1a4956c1bb56c63d27","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"137bc568f5eb890a63007b928b16481ff5b27a01","isMergeCommit":false,"messageTitle":"Ui class added","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":60}}},{"hash":"fbecf6f48fd432f539216ef75dffb4a968d3ceb9","isMergeCommit":false,"messageTitle":"Added TaskList class and modified Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":97}}},{"hash":"08f5c424d60a596877233f6a1405723b7153b675","isMergeCommit":false,"messageTitle":"Added Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":21}}},{"hash":"2f637308d2209bd49591ce0cbb11b0376b5cafd5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"a07b4d824a2c8a0e6397761fa7126336c7df32db","isMergeCommit":false,"messageTitle":"Put all classes in packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":33}}},{"hash":"f5770048a86caa933045bfd7707f9f0040e5d81a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"b05915f50f193a64cf4ce5b1f53ee5552a27df83","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"9f336b0ecb652275e7c91cfa15b58bd584bac296","isMergeCommit":false,"messageTitle":"Added TaskList tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":54,"deletions":0}}},{"hash":"abb33d98a9f1fe1720cf437407a2904bd6c3b2f9","isMergeCommit":false,"messageTitle":"Added Parser tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"7010795425fbc144de5b9b5ffed8cc657ae4529e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"68a455279cdb14add8def9f6bef9737cd14190b3","isMergeCommit":false,"messageTitle":"Setup JAR file and fix data.txt creation bug","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"76bc163ea38c4449f616184234e077ef79d64fcd","isMergeCommit":false,"messageTitle":"Added JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":57}}},{"hash":"692aa7946ee05f0ef9864a080989ddc4c7baa04c","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":38}}},{"hash":"a9a7a64fd5f5f9d998b606940963771061397ed3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"6125a096167aacf91912d4ae9c1fb865acb8ef83","isMergeCommit":true,"messageTitle":"Fix merge conflict","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"3ef99f83a34c06a3fb36e49f8603d63306ae1de8","isMergeCommit":false,"messageTitle":"Add Find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}},{"hash":"94af14db1892796ddd4f44e224296d0bcfe76705","isMergeCommit":true,"messageTitle":"Fix merge conflict in Task","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"e822df501414a42714b1f2fb13bc7d8aa2e95a8f","isMergeCommit":false,"messageTitle":"Improve code style","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":52,"deletions":48}}},{"hash":"b71d68f48c7b60538e05e8df8943b3498e8efb75","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"1b30c243ec83ee38dd3c6b5f74810c85cd9f398e","isMergeCommit":false,"messageTitle":"Create Duke GUI initial setup","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":166,"deletions":0}}}]},{"date":"2023-09-07","commitResults":[{"hash":"afd454807f953f3bace03939b94f52d1e4e47fa8","isMergeCommit":false,"messageTitle":"Finish GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":6,"deletions":6},"java":{"insertions":139,"deletions":63}}},{"hash":"0e24502dac5ff76b14d57bd849771fefead06f43","isMergeCommit":false,"messageTitle":"Remove text-based UI testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":15},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"8caa41156af57edd11c435220aca7973e571c8c7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"38db15e87ce2bc94aea195c8abdc19824e5f0dca","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Without making assertion checks, ensuring the correctness of the assumptions made in the application can be quite challenging.\n\nAssert reassures the assumption made in the program.\n\nTo check the command assumption for command exceution functions, assertions can be used to reassure that the command used in each function matches what is needed.\n\nAssertion can also be useful to reassure the index input of task edit functions with the assumption that the input index is a valid index.\n\nUtilizing the Java assert statement serves as an effective method for conducting runtime validations within a program. This enables the early detection of unforeseen issues and failures during the development phase.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":12}}},{"hash":"ed8440da964d1055e5655a2f7bb8ac09f31b8098","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":72}}},{"hash":"ababf497e7586a3f5e5248b77ac4b4d12d433f31","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Assertions\u0027","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"2a937f747cef78149a6126a82c9b8e1a2ae0f8d0","isMergeCommit":true,"messageTitle":"Fix merge conflict","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"AndrewJanong":{"java":1224,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":17,"txt":0}},"authorContributionVariance":{"AndrewJanong":33669.133},"authorDisplayNameMap":{"AndrewJanong":"CS2103T-W16-1 ANDR..NONG"}} diff --git a/AustinHuang1203_ip_master/authorship.json b/AustinHuang1203_ip_master/authorship.json index 23682215..52f21d55 100644 --- a/AustinHuang1203_ip_master/authorship.json +++ b/AustinHuang1203_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AustinHuang1203":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":"AustinHuang1203"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"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":"AustinHuang1203"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"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":"AustinHuang1203"},"content":" mainClass.set(\"duke.Launcher\")","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":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AustinHuang1203":21,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" * duke.Deadline class","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" * Stores the due date as by","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" * @param name set the name of the deadline","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" * @param by set the due date","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" * @return","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" public Deadline(String name, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" this.by \u003d LocalDate.parse(by, inputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" * default display for this type","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" * @return the display of the obj","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" public String display() {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" if (isDone) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" return \"[D][X] \" + this.name + \" (Due By: \" + by.format(outputFormatter) + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" return \"[D][] \" + this.name + \" (Due By: \" + by.format(outputFormatter) + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":44}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" * Class for the dialogbox formatting in the javafx","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" private Label text;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" * Constructor for dialog box","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" * @param l the label","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" * @param iv the imageview to take in","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" text \u003d l;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AustinHuang1203":57}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" * The main class to run","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" private Scene scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" * Main method to start the program","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" * @param args main func","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" String name \u003d \"Termina\";","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" System.out.println(\"Hello, I am your chatbot!\\nMy name is \" + name + \"\\nHow may I help?\");","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" Storage load \u003d new Storage(\"tasks.ser\");","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" TaskList items \u003d new TaskList(load.loadDataFromFile());","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" ui.run(items, load, parser);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" System.out.println(\"Byeeee! Use me again please!\");","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" String name \u003d \"Termina\";","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"AustinHuang1203"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"AustinHuang1203"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"AustinHuang1203"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"AustinHuang1203"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"AustinHuang1203"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"AustinHuang1203"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AustinHuang1203"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"AustinHuang1203"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"AustinHuang1203"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"AustinHuang1203"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"AustinHuang1203"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"AustinHuang1203"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"AustinHuang1203"},"content":" Label startText \u003d new Label(\"Hello, I am your chatbot!\\nMy name is \" + name + \"\\nHow may I help?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"AustinHuang1203"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"AustinHuang1203"},"content":" DialogBox.getDukeDialog(startText, new ImageView(duke))","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"AustinHuang1203"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"AustinHuang1203"},"content":" // more code to be added here later","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"AustinHuang1203"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"AustinHuang1203"},"content":" handleUserInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"AustinHuang1203"},"content":" });","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"AustinHuang1203"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"AustinHuang1203"},"content":" handleUserInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"AustinHuang1203"},"content":" });","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"AustinHuang1203"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"AustinHuang1203"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"AustinHuang1203"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"AustinHuang1203"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"AustinHuang1203"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"AustinHuang1203"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"AustinHuang1203"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"AustinHuang1203"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"AustinHuang1203"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"AustinHuang1203"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"AustinHuang1203"},"content":" return textToAdd;","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"AustinHuang1203"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"AustinHuang1203"},"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":133,"author":{"gitId":"AustinHuang1203"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"AustinHuang1203"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"AustinHuang1203"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"AustinHuang1203"},"content":" Label dukeText \u003d new Label(getResponse(userInput.getText()));","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"AustinHuang1203"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"AustinHuang1203"},"content":" DialogBox.getUserDialog(userText, new ImageView(user)),","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"AustinHuang1203"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(duke))","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"AustinHuang1203"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"AustinHuang1203"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"AustinHuang1203"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"AustinHuang1203"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"AustinHuang1203"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"AustinHuang1203"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"AustinHuang1203"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(10));","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"AustinHuang1203"},"content":" delay.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"AustinHuang1203"},"content":" Platform.exit();","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"AustinHuang1203"},"content":" });","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"AustinHuang1203"},"content":" delay.play();","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"AustinHuang1203"},"content":" return \"Byeeeeeeee...I will switch off in 10 seconds, goodnight!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"AustinHuang1203"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"AustinHuang1203"},"content":" Storage load \u003d new Storage(\"tasks.ser\");","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"AustinHuang1203"},"content":" TaskList items \u003d new TaskList(load.loadDataFromFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"AustinHuang1203"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"AustinHuang1203"},"content":" return ui.run1(input, items, load, parser);","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"AustinHuang1203":163,"-":3}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" * This class represents an event","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" private LocalDate start;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" private LocalDate end;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" * Default constructor to store start and end","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" * @param name of the task","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" * @param start start date","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" * @param end end date","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" public Event(String name, String start, String end) {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" this.start \u003d LocalDate.parse(start, inputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" this.end \u003d LocalDate.parse(end, inputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" * Default display to represent the event object","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" * @return gives the default display","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" public String display() {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" assert start !\u003d null : \"missing start date\";","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" assert end !\u003d null : \"missing end date\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" if (isDone) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" return \"[E][X] \" + this.name + \" (From: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" + start.format(outputFormatter) + \" To: \" + end.format(outputFormatter) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" return \"[E][] \" + this.name + \" (From: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" + start.format(outputFormatter) + \" To: \" + end.format(outputFormatter) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":47}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" Application.launch(Duke.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AustinHuang1203":12}},{"path":"src/main/java/duke/MarkPattern.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" * This class is to store patterns to match against user input","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"public class MarkPattern {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" * Empty constructor to just initialise it","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" public MarkPattern() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" * The pattern for mark","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" * @param args string to test","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the int to mark or -1 if false","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" public int mark(String args) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" Pattern pattern \u003d Pattern.compile(\"mark\\\\s*(\\\\d+)\");","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" String num \u003d matcher.group(1);","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" assert num !\u003d null : \"missing num in matcher\";","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" return Integer.parseInt(num) - 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" return -1;","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" * The pattern for unmark","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" * @param args the string to test","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" * @return return the no to unmark","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" public int unmark(String args) {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" Pattern pattern \u003d Pattern.compile(\"unmark\\\\s*(\\\\d+)\");","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" String num \u003d matcher.group(1);","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" return Integer.parseInt(num) - 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" return -1;","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" * The pattern for delete","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" * @param args the string to test","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the item to delete","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" public int del(String args) {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" Pattern pattern \u003d Pattern.compile(\"delete\\\\s*(\\\\d+)\");","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"AustinHuang1203"},"content":" String num \u003d matcher.group(1);","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"AustinHuang1203"},"content":" return Integer.parseInt(num) - 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"AustinHuang1203"},"content":" return -1;","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AustinHuang1203"},"content":" * The pattern for find1","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"AustinHuang1203"},"content":" * @param args the string to test","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the string","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AustinHuang1203"},"content":" public String find1(String args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"AustinHuang1203"},"content":" Pattern pattern \u003d Pattern.compile(\"find\\\\s+(\\\\S+)\");","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"AustinHuang1203"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"AustinHuang1203"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"AustinHuang1203"},"content":" return matcher.group(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"AustinHuang1203"},"content":" return null;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":88}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":" * This is the class to parse stuff","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":" private MarkPattern check \u003d new MarkPattern();","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" private String reply \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" private String help1 \u003d \"Hi, welcome to the help page!\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" \"Commands: list, find, mark, unmark, delete\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" \"Tasks: todo, deadline, event\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" \"For further questions, message the author on github :)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" * The constructor to init","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" public Parser() {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" public String get() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" return reply;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" * method to update the text to return","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" * @param text the text to add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" public void update(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" System.out.println(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" reply +\u003d text + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" * Enter your things to parse here","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" * @param stuff your parse items","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" * @param items your tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the modified tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" public TaskList parse(String stuff, TaskList items) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" if (stuff.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" for (int i \u003d 0; i \u003c items.getSize(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" update((i + 1) + \". \" + items.get(i).display());","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" } else if(stuff.equalsIgnoreCase(\"help\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" update(help1);","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" } else if (check.unmark(stuff) !\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":" items.get(check.unmark(stuff)).isDone \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Gg, not done with \" + items.get(check.unmark(stuff)).display());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" } else if (check.mark(stuff) !\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" items.get(check.mark(stuff)).isDone \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Yay, done with \" + items.get(check.mark(stuff)).display());","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":" } else if (check.del(stuff) !\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Deleted: \" + items.remove(check.del(stuff)).display());","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" } else if (check.find1(stuff) !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":" for (int i \u003d 0; i \u003c items.getSize(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":" if (items.get(i).display().contains(check.find1(stuff))) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":" update((i + 1) + \". \" + items.get(i).display());","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"AustinHuang1203"},"content":" if (stuff.trim().toLowerCase().startsWith(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"AustinHuang1203"},"content":" if (stuff.trim().substring(4).trim().length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Why empty???\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"AustinHuang1203"},"content":" update(\"added: \" + stuff.trim().substring(4));","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AustinHuang1203"},"content":" items.add(new ToDo(stuff.trim().substring(4)));","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"AustinHuang1203"},"content":" } else if (stuff.trim().toLowerCase().startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"AustinHuang1203"},"content":" if (!stuff.toLowerCase().contains(\"/by\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Hey!!! please use /by to indicate a deadline, dont break me please...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"AustinHuang1203"},"content":" String[] parts \u003d stuff.trim().substring(8).split(\"/by\");","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"AustinHuang1203"},"content":" if (parts[1].trim().matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"AustinHuang1203"},"content":" items.add(new Deadline(parts[0].trim(), parts[1].trim()));","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"AustinHuang1203"},"content":" update(\"added: \" + parts[0].trim() + \" (Due by: \" + parts[1].trim() + \")\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"AustinHuang1203"},"content":" update(\"wrong date...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"AustinHuang1203"},"content":" } else if (stuff.trim().toLowerCase().startsWith(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"AustinHuang1203"},"content":" if (!(stuff.toLowerCase().contains(\"/from\") \u0026\u0026 stuff.toLowerCase().contains(\"/to\"))) {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Hey! Where is your /from and /to tags??\");","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"AustinHuang1203"},"content":" String[] parts \u003d stuff.trim().substring(5).split(\"/from\");","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"AustinHuang1203"},"content":" String part1 \u003d parts[0].trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"AustinHuang1203"},"content":" String[] part23 \u003d parts[1].trim().split(\"/to\");","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"AustinHuang1203"},"content":" if (part23[0].trim().matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"AustinHuang1203"},"content":" \u0026\u0026 part23[1].trim().matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"AustinHuang1203"},"content":" items.add(new Event(part1, part23[0].trim(), part23[1].trim()));","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"AustinHuang1203"},"content":" update(\"added: \" + part1 + \" (From: \" + part23[0].trim() + \" To: \" + part23[1].trim() + \")\");","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"AustinHuang1203"},"content":" update(\"wrong date format,,,\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"AustinHuang1203"},"content":" update(\"I don\u0027t understand...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"AustinHuang1203"},"content":" return items;","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":107}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" * The storage class to handle data saving","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" private final String filepath;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" * Constructor for filepath","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" * @param filepath key in where you want to store","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" * save a arrlist to the file","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" * @param arr the arraylist it takes in","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" public void saveDataToFile(ArrayList\u003cTask\u003e arr) {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" File file \u003d new File(filepath);","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" try (ObjectOutputStream objectOut \u003d new ObjectOutputStream(new FileOutputStream(file))) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" objectOut.writeObject(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" * loads data from the saved file","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" * @return the saved arrlist","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" public ArrayList\u003cTask\u003e loadDataFromFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":" try (ObjectInputStream objectIn \u003d new ObjectInputStream(new FileInputStream(filepath))) {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" ArrayList\u003c?\u003e temp \u003d (ArrayList\u003c?\u003e) objectIn.readObject();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" for (Object obj : temp) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" if (obj instanceof Task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":" arr.add((Task) obj);","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":" } catch (IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"AustinHuang1203"},"content":" return arr;","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":69}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" * This class represents a task which is a parent class","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" public Boolean isDone;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" protected String name;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" * Constructor to init this class","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" * @param name the name of the task","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" * Default display for a task","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the display","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" public String display() {","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" assert isDone !\u003d null : \"done is not initialised\";","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" if (isDone) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" return \"[X] \" + this.name;","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" return \"[] \" + this.name;","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":37}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" * The tasklist to create","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" private final ArrayList\u003cTask\u003e items;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" * Converts arraylist to tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" * @param items takes in arraylist","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" public TaskList(ArrayList\u003cTask\u003e items) {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" this.items \u003d items;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" * gives size","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" * @return size","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" public int getSize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" return items.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" * get a specific item","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" * @param i index u want","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns that task","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" public Task get(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" assert items.get(i) instanceof Task : \"corrupted tasklist\";","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" return items.get(i);","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" * remove an item","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" * @param i the index of item to be removed","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the removed item","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" public Task remove(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" return items.remove(i);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" * add a task","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" * @param add the task to add","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" public void add(Task add) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" items.add(add);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" * converts tasklist to arr","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the arr","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":" public ArrayList\u003cTask\u003e toArray() {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" return items;","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":61}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":" * This class represents the to-do task","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" * Same as its parent constructor","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" * @param name the name of the task","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" * Default display for to-do objects","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" * @return the default display","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" public String display() {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" if (isDone) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" return \"[T][X] \" + this.name;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" return \"[T][] \" + this.name;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":29}},{"path":"src/main/java/duke/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" * The UI class to handle user interactions","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"public class UI {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" private String stuff;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" * Constructor to init the class","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" public UI() {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" * Run the UI","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" * @param items tasklist to use","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" * @param load load to use","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" * @param parser parser to use","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" public void run(TaskList items, Storage load, Parser parser) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" assert scanner !\u003d null;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" stuff \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" while (!stuff.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" items \u003d parser.parse(stuff, items);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" load.saveDataToFile(items.toArray());","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" stuff \u003d scanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" * Run the UI","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" * @param items tasklist to use","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" * @param load load to use","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" * @param parser parser to use","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" public String run1(String command, TaskList items, Storage load, Parser parser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" items \u003d parser.parse(command, items);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" String reply \u003d parser.get();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" load.saveDataToFile(items.toArray());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" return reply;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":50}},{"path":"src/test/java/duke/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"public class EventTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" public void testEventDisplayNotDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" Event event \u003d new Event(\"Conference\", \"2023-08-25\", \"2023-08-27\");","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" String expected \u003d \"[E][] Conference (From: Aug 25 2023 To: Aug 27 2023)\";","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" String result \u003d event.display();","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(expected, result, \"Event display test (not done) failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" public void testEventDisplayDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" Event event \u003d new Event(\"Party\", \"2023-08-30\", \"2023-09-01\");","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" event.isDone \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" String expected \u003d \"[E][X] Party (From: Aug 30 2023 To: Sep 01 2023)\";","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" String result \u003d event.display();","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(expected, result, \"Event display test (done) failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" public void testEventDisplayWithDifferentDateFormat() {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" Event event \u003d new Event(\"Meeting\", \"2023-12-15\", \"2023-12-20\");","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" event.isDone \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" String expected \u003d \"[E][X] Meeting (From: Dec 15 2023 To: Dec 20 2023)\";","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" String result \u003d event.display();","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(expected, result, \"Event display test (different date format) failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" public void testEventDisplay2() {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" Event event \u003d new Event(\"Workshop\", \"2023-11-05\", \"2023-11-07\");","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" String expected \u003d \"[E][] Workshop (From: Nov 05 2023 To: Nov 07 2023)\";","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" String result \u003d event.display();","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(expected, result, \"Event display test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":53}},{"path":"src/test/java/duke/MarkPatternTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"public class MarkPatternTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" public void testMarkPatternWithValidInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.mark(\"mark 5\");","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(4, result, \"Mark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" public void testMarkPatternWithDifferentInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.mark(\"mark 10\");","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(9, result, \"Mark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" public void testMarkPatternWithNoNumber() {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.mark(\"mark\");","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(-1, result, \"Mark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" public void testMarkPatternWithSpaces() {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.mark(\" mark 7 \");","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(6, result, \"Mark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" public void testUnmarkPatternWithValidInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.unmark(\"unmark 3\");","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(2, result, \"Unmark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" public void testUnmarkPatternWithDifferentInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.unmark(\"unmark 8\");","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(7, result, \"Unmark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" public void testUnmarkPatternWithNoNumber() {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.unmark(\"unmark\");","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(-1, result, \"Unmark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" public void testUnmarkPatternWithSpaces() {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.unmark(\" unmark 5 \");","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(4, result, \"Unmark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"AustinHuang1203"},"content":" public void testDeletePatternWithValidInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.del(\"delete 2\");","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(1, result, \"Delete pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"AustinHuang1203"},"content":" public void testDeletePatternWithDifferentInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.del(\"delete 7\");","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(6, result, \"Delete pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"AustinHuang1203"},"content":" public void testDeletePatternWithNoNumber() {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.del(\"delete\");","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(-1, result, \"Delete pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"AustinHuang1203"},"content":" public void testDeletePatternWithSpaces() {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.del(\" delete 3 \");","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(2, result, \"Delete pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":94}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"todo eat rice","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"deadline finish ip /by next year","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"event eat noodle /from now /to later","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"ggggggg","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"delete 1","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":3,"-":19}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AustinHuang1203":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":"AustinHuang1203"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"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":"AustinHuang1203"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"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":"AustinHuang1203"},"content":" mainClass.set(\"duke.Launcher\")","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":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AustinHuang1203":21,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"## Bot name - Termina","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-Greet (lvl 0)","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"Greets the user when the bot is opened at first","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-List (Lvl 1/2)","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"Type `list` to get the items stored in the list current.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-Bye (Lvl 1)","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"Type `bye` to exit the program. (Need to wait a few seconds for it to close)","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-Mark Done (Lvl 3)","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":"Type `mark 1` to mark item 1 as done, change the number to the item you want to mark as done. Type `unmark2` to mark item 2 as not done, change 2 to any number you want likewise.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-TaskTypes (Lvl 2/4)","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":"3 task type you can add like todo, deadline and event to the list. Details on how to use each are further below.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":"Note: Dates must be in the format yyyy-mm-dd","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":"todo - `todo code` type todo + your task name","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":"deadline - `deadline assignment /by 2022-01-01` type deadline + task name + /by + date ","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":"event - `event party /from 2022-01-01 /to 2023-01-01` type event + task name + /from + date + /to + date","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-TextUITesting (Lvl 1/2)","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":"In an older version, enabled textUItesting with sample data. Run the script to check its working.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-Error (Lvl 5)","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":"If you type input that does not make sense, the chatbot will tell you so.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-Delete (Lvl 6)","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":"Type `delete 1` to delete the first item, type `delete 2` to deleted the 2nd item and so on...","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-Save (Lvl 7)","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":"Your list data is saved in a ser file in the program and loaded on program start up so the data persists even when the program is not running. If there are errors loading the data, just delete the ser file as it might be corrupted.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-Datetime (Lvl 8)","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":"Type datetime in format yyyy-mm-dd and when you type `list` it will convert your stored datetime to mmm dd yyyy, that is 2022-01-01 is converted to Jan 01 2022. Note: In the confrimation note after you add a task, the datetime is not converted yet so you can manually check your input. It will only show the converted version after you type `list`.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-Gradle/Junit","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":"For development purposes, this uses Gradle and has junit test case.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-Find (Lvl 9)","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":"Type `find hi` to search for words that contain hi. That is type find + search term to find what you need.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-GUI (Lvl 10)","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":"Has a user friendly GUI.","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":"### Feature-Help (Lvl C-Help)","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":"Type `help` to get some basic help.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"AustinHuang1203":49,"-":14}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" * duke.Deadline class","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" * Stores the due date as by","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" * @param name set the name of the deadline","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" * @param by set the due date","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" * @return","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" public Deadline(String name, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" this.by \u003d LocalDate.parse(by, inputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" * default display for this type","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" * @return the display of the obj","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" public String display() {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" if (isDone) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" return \"[D][X] \" + this.name + \" (Due By: \" + by.format(outputFormatter) + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" return \"[D][] \" + this.name + \" (Due By: \" + by.format(outputFormatter) + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":44}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" * Class for the dialogbox formatting in the javafx","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" private Label text;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" * Constructor for dialog box","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" * @param l the label","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" * @param iv the imageview to take in","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" text \u003d l;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AustinHuang1203":57}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" * The main class to run","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" private Scene scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" * Main method to start the program","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" * @param args main func","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" String name \u003d \"Termina\";","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" System.out.println(\"Hello, I am your chatbot!\\nMy name is \" + name + \"\\nHow may I help?\");","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" Storage load \u003d new Storage(\"tasks.ser\");","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" TaskList items \u003d new TaskList(load.loadDataFromFile());","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" ui.run(items, load, parser);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" System.out.println(\"Byeeee! Use me again please!\");","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" String name \u003d \"Termina\";","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"AustinHuang1203"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"AustinHuang1203"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"AustinHuang1203"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"AustinHuang1203"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"AustinHuang1203"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"AustinHuang1203"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AustinHuang1203"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"AustinHuang1203"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"AustinHuang1203"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"AustinHuang1203"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"AustinHuang1203"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"AustinHuang1203"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"AustinHuang1203"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"AustinHuang1203"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"AustinHuang1203"},"content":" Label startText \u003d new Label(\"Hello, I am your chatbot!\\nMy name is \" + name + \"\\nHow may I help?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"AustinHuang1203"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"AustinHuang1203"},"content":" DialogBox.getDukeDialog(startText, new ImageView(duke))","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"AustinHuang1203"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"AustinHuang1203"},"content":" // more code to be added here later","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"AustinHuang1203"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"AustinHuang1203"},"content":" handleUserInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"AustinHuang1203"},"content":" });","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"AustinHuang1203"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"AustinHuang1203"},"content":" handleUserInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"AustinHuang1203"},"content":" });","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"AustinHuang1203"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"AustinHuang1203"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"AustinHuang1203"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"AustinHuang1203"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"AustinHuang1203"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"AustinHuang1203"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"AustinHuang1203"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"AustinHuang1203"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"AustinHuang1203"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"AustinHuang1203"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"AustinHuang1203"},"content":" return textToAdd;","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"AustinHuang1203"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"AustinHuang1203"},"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":133,"author":{"gitId":"AustinHuang1203"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"AustinHuang1203"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"AustinHuang1203"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"AustinHuang1203"},"content":" Label dukeText \u003d new Label(getResponse(userInput.getText()));","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"AustinHuang1203"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"AustinHuang1203"},"content":" DialogBox.getUserDialog(userText, new ImageView(user)),","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"AustinHuang1203"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(duke))","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"AustinHuang1203"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"AustinHuang1203"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"AustinHuang1203"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"AustinHuang1203"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"AustinHuang1203"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"AustinHuang1203"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"AustinHuang1203"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(10));","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"AustinHuang1203"},"content":" delay.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"AustinHuang1203"},"content":" Platform.exit();","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"AustinHuang1203"},"content":" });","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"AustinHuang1203"},"content":" delay.play();","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"AustinHuang1203"},"content":" return \"Byeeeeeeee...I will switch off in 10 seconds, goodnight!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"AustinHuang1203"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"AustinHuang1203"},"content":" Storage load \u003d new Storage(\"tasks.ser\");","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"AustinHuang1203"},"content":" TaskList items \u003d new TaskList(load.loadDataFromFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"AustinHuang1203"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"AustinHuang1203"},"content":" return ui.run1(input, items, load, parser);","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"AustinHuang1203":163,"-":3}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" * This class represents an event","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" private LocalDate start;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" private LocalDate end;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" * Default constructor to store start and end","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" * @param name of the task","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" * @param start start date","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" * @param end end date","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" public Event(String name, String start, String end) {","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" this.start \u003d LocalDate.parse(start, inputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" this.end \u003d LocalDate.parse(end, inputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" * Default display to represent the event object","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" * @return gives the default display","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" public String display() {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" assert start !\u003d null : \"missing start date\";","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" assert end !\u003d null : \"missing end date\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" if (isDone) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" return \"[E][X] \" + this.name + \" (From: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" + start.format(outputFormatter) + \" To: \" + end.format(outputFormatter) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" return \"[E][] \" + this.name + \" (From: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" + start.format(outputFormatter) + \" To: \" + end.format(outputFormatter) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":47}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" Application.launch(Duke.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AustinHuang1203":12}},{"path":"src/main/java/duke/MarkPattern.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" * This class is to store patterns to match against user input","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"public class MarkPattern {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" * Empty constructor to just initialise it","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" public MarkPattern() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" * The pattern for mark","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" * @param args string to test","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the int to mark or -1 if false","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" public int mark(String args) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" Pattern pattern \u003d Pattern.compile(\"mark\\\\s*(\\\\d+)\");","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" String num \u003d matcher.group(1);","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" assert num !\u003d null : \"missing num in matcher\";","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" return Integer.parseInt(num) - 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" return -1;","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" * The pattern for unmark","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" * @param args the string to test","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" * @return return the no to unmark","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" public int unmark(String args) {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" Pattern pattern \u003d Pattern.compile(\"unmark\\\\s*(\\\\d+)\");","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" String num \u003d matcher.group(1);","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" return Integer.parseInt(num) - 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" return -1;","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" * The pattern for delete","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" * @param args the string to test","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the item to delete","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" public int del(String args) {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" Pattern pattern \u003d Pattern.compile(\"delete\\\\s*(\\\\d+)\");","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"AustinHuang1203"},"content":" String num \u003d matcher.group(1);","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"AustinHuang1203"},"content":" return Integer.parseInt(num) - 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"AustinHuang1203"},"content":" return -1;","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AustinHuang1203"},"content":" * The pattern for find1","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"AustinHuang1203"},"content":" * @param args the string to test","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the string","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AustinHuang1203"},"content":" public String find1(String args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"AustinHuang1203"},"content":" Pattern pattern \u003d Pattern.compile(\"find\\\\s+(\\\\S+)\");","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"AustinHuang1203"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"AustinHuang1203"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"AustinHuang1203"},"content":" return matcher.group(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"AustinHuang1203"},"content":" return null;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":88}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":" * This is the class to parse stuff","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":" private MarkPattern check \u003d new MarkPattern();","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" private String reply \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" private String help1 \u003d \"Hi, welcome to the help page!\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" \"Commands: list, find, mark, unmark, delete\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" \"Tasks: todo, deadline, event\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" \"For further questions, message the author on github :)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" * The constructor to init","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" public Parser() {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" public String get() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" return reply;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" * method to update the text to return","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" * @param text the text to add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" public void update(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" System.out.println(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" reply +\u003d text + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" * Enter your things to parse here","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" * @param stuff your parse items","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" * @param items your tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the modified tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" public TaskList parse(String stuff, TaskList items) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" if (stuff.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" for (int i \u003d 0; i \u003c items.getSize(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" update((i + 1) + \". \" + items.get(i).display());","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" } else if(stuff.equalsIgnoreCase(\"help\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" update(help1);","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" } else if (check.unmark(stuff) !\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":" items.get(check.unmark(stuff)).isDone \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Gg, not done with \" + items.get(check.unmark(stuff)).display());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" } else if (check.mark(stuff) !\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" items.get(check.mark(stuff)).isDone \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Yay, done with \" + items.get(check.mark(stuff)).display());","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":" } else if (check.del(stuff) !\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Deleted: \" + items.remove(check.del(stuff)).display());","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" } else if (check.find1(stuff) !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":" for (int i \u003d 0; i \u003c items.getSize(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":" if (items.get(i).display().contains(check.find1(stuff))) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":" update((i + 1) + \". \" + items.get(i).display());","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"AustinHuang1203"},"content":" if (stuff.trim().toLowerCase().startsWith(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"AustinHuang1203"},"content":" if (stuff.trim().substring(4).trim().length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Why empty???\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"AustinHuang1203"},"content":" update(\"added: \" + stuff.trim().substring(4));","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AustinHuang1203"},"content":" items.add(new ToDo(stuff.trim().substring(4)));","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"AustinHuang1203"},"content":" } else if (stuff.trim().toLowerCase().startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"AustinHuang1203"},"content":" if (!stuff.toLowerCase().contains(\"/by\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Hey!!! please use /by to indicate a deadline, dont break me please...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"AustinHuang1203"},"content":" String[] parts \u003d stuff.trim().substring(8).split(\"/by\");","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"AustinHuang1203"},"content":" if (parts[1].trim().matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"AustinHuang1203"},"content":" items.add(new Deadline(parts[0].trim(), parts[1].trim()));","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"AustinHuang1203"},"content":" update(\"added: \" + parts[0].trim() + \" (Due by: \" + parts[1].trim() + \")\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"AustinHuang1203"},"content":" update(\"wrong date...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"AustinHuang1203"},"content":" } else if (stuff.trim().toLowerCase().startsWith(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"AustinHuang1203"},"content":" if (!(stuff.toLowerCase().contains(\"/from\") \u0026\u0026 stuff.toLowerCase().contains(\"/to\"))) {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"AustinHuang1203"},"content":" update(\"Hey! Where is your /from and /to tags??\");","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"AustinHuang1203"},"content":" String[] parts \u003d stuff.trim().substring(5).split(\"/from\");","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"AustinHuang1203"},"content":" String part1 \u003d parts[0].trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"AustinHuang1203"},"content":" String[] part23 \u003d parts[1].trim().split(\"/to\");","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"AustinHuang1203"},"content":" if (part23[0].trim().matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"AustinHuang1203"},"content":" \u0026\u0026 part23[1].trim().matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"AustinHuang1203"},"content":" items.add(new Event(part1, part23[0].trim(), part23[1].trim()));","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"AustinHuang1203"},"content":" update(\"added: \" + part1 + \" (From: \" + part23[0].trim() + \" To: \" + part23[1].trim() + \")\");","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"AustinHuang1203"},"content":" update(\"wrong date format,,,\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"AustinHuang1203"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"AustinHuang1203"},"content":" update(\"I don\u0027t understand...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"AustinHuang1203"},"content":" return items;","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":107}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" * The storage class to handle data saving","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" private final String filepath;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" * Constructor for filepath","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" * @param filepath key in where you want to store","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" * save a arrlist to the file","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" * @param arr the arraylist it takes in","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" public void saveDataToFile(ArrayList\u003cTask\u003e arr) {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" File file \u003d new File(filepath);","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" try (ObjectOutputStream objectOut \u003d new ObjectOutputStream(new FileOutputStream(file))) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" objectOut.writeObject(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" * loads data from the saved file","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" * @return the saved arrlist","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" public ArrayList\u003cTask\u003e loadDataFromFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":" try (ObjectInputStream objectIn \u003d new ObjectInputStream(new FileInputStream(filepath))) {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" ArrayList\u003c?\u003e temp \u003d (ArrayList\u003c?\u003e) objectIn.readObject();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" for (Object obj : temp) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" if (obj instanceof Task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":" arr.add((Task) obj);","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":" } catch (IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"AustinHuang1203"},"content":" return arr;","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":69}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" * This class represents a task which is a parent class","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" public Boolean isDone;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" protected String name;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" * Constructor to init this class","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" * @param name the name of the task","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" * Default display for a task","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the display","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" public String display() {","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" assert isDone !\u003d null : \"done is not initialised\";","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" if (isDone) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" return \"[X] \" + this.name;","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" return \"[] \" + this.name;","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":37}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" * The tasklist to create","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" private final ArrayList\u003cTask\u003e items;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" * Converts arraylist to tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" * @param items takes in arraylist","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" public TaskList(ArrayList\u003cTask\u003e items) {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" this.items \u003d items;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" * gives size","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" * @return size","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" public int getSize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" return items.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" * get a specific item","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" * @param i index u want","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns that task","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" public Task get(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" assert items.get(i) instanceof Task : \"corrupted tasklist\";","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" return items.get(i);","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" * remove an item","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" * @param i the index of item to be removed","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the removed item","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" public Task remove(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" return items.remove(i);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" * add a task","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" * @param add the task to add","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" public void add(Task add) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" items.add(add);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" * converts tasklist to arr","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" * @return returns the arr","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":" public ArrayList\u003cTask\u003e toArray() {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" return items;","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":61}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":" * This class represents the to-do task","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" * Same as its parent constructor","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" * @param name the name of the task","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" super(name);","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" * Default display for to-do objects","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" * @return the default display","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" public String display() {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" if (isDone) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" return \"[T][X] \" + this.name;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" return \"[T][] \" + this.name;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":29}},{"path":"src/main/java/duke/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":" * The UI class to handle user interactions","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"public class UI {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" private String stuff;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" * Constructor to init the class","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" public UI() {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" * Run the UI","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" * @param items tasklist to use","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" * @param load load to use","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" * @param parser parser to use","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" public void run(TaskList items, Storage load, Parser parser) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" assert scanner !\u003d null;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" stuff \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" while (!stuff.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" items \u003d parser.parse(stuff, items);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" load.saveDataToFile(items.toArray());","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" stuff \u003d scanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" * Run the UI","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" * @param items tasklist to use","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" * @param load load to use","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" * @param parser parser to use","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" public String run1(String command, TaskList items, Storage load, Parser parser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" items \u003d parser.parse(command, items);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" String reply \u003d parser.get();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" load.saveDataToFile(items.toArray());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" return reply;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":50}},{"path":"src/test/java/duke/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"public class EventTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" public void testEventDisplayNotDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" Event event \u003d new Event(\"Conference\", \"2023-08-25\", \"2023-08-27\");","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" String expected \u003d \"[E][] Conference (From: Aug 25 2023 To: Aug 27 2023)\";","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":" String result \u003d event.display();","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(expected, result, \"Event display test (not done) failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" public void testEventDisplayDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":" Event event \u003d new Event(\"Party\", \"2023-08-30\", \"2023-09-01\");","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" event.isDone \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" String expected \u003d \"[E][X] Party (From: Aug 30 2023 To: Sep 01 2023)\";","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" String result \u003d event.display();","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(expected, result, \"Event display test (done) failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" public void testEventDisplayWithDifferentDateFormat() {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" Event event \u003d new Event(\"Meeting\", \"2023-12-15\", \"2023-12-20\");","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" event.isDone \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":" String expected \u003d \"[E][X] Meeting (From: Dec 15 2023 To: Dec 20 2023)\";","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" String result \u003d event.display();","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(expected, result, \"Event display test (different date format) failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":" public void testEventDisplay2() {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" Event event \u003d new Event(\"Workshop\", \"2023-11-05\", \"2023-11-07\");","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" String expected \u003d \"[E][] Workshop (From: Nov 05 2023 To: Nov 07 2023)\";","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" String result \u003d event.display();","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(expected, result, \"Event display test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":53}},{"path":"src/test/java/duke/MarkPatternTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"public class MarkPatternTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":" public void testMarkPatternWithValidInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.mark(\"mark 5\");","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(4, result, \"Mark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"AustinHuang1203"},"content":" public void testMarkPatternWithDifferentInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.mark(\"mark 10\");","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(9, result, \"Mark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"AustinHuang1203"},"content":" public void testMarkPatternWithNoNumber() {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.mark(\"mark\");","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(-1, result, \"Mark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"AustinHuang1203"},"content":" public void testMarkPatternWithSpaces() {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.mark(\" mark 7 \");","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(6, result, \"Mark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"AustinHuang1203"},"content":" public void testUnmarkPatternWithValidInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.unmark(\"unmark 3\");","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(2, result, \"Unmark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"AustinHuang1203"},"content":" public void testUnmarkPatternWithDifferentInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.unmark(\"unmark 8\");","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(7, result, \"Unmark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"AustinHuang1203"},"content":" public void testUnmarkPatternWithNoNumber() {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.unmark(\"unmark\");","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(-1, result, \"Unmark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"AustinHuang1203"},"content":" public void testUnmarkPatternWithSpaces() {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.unmark(\" unmark 5 \");","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(4, result, \"Unmark pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"AustinHuang1203"},"content":" public void testDeletePatternWithValidInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.del(\"delete 2\");","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(1, result, \"Delete pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"AustinHuang1203"},"content":" public void testDeletePatternWithDifferentInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.del(\"delete 7\");","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(6, result, \"Delete pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"AustinHuang1203"},"content":" public void testDeletePatternWithNoNumber() {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.del(\"delete\");","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(-1, result, \"Delete pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"AustinHuang1203"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"AustinHuang1203"},"content":" public void testDeletePatternWithSpaces() {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"AustinHuang1203"},"content":" MarkPattern markPattern \u003d new MarkPattern();","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"AustinHuang1203"},"content":" int result \u003d markPattern.del(\" delete 3 \");","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"AustinHuang1203"},"content":" assertEquals(2, result, \"Delete pattern test failed: incorrect result\");","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"AustinHuang1203"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"AustinHuang1203"},"content":"}","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":94}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AustinHuang1203"},"content":"todo eat rice","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"AustinHuang1203"},"content":"deadline finish ip /by next year","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"AustinHuang1203"},"content":"event eat noodle /from now /to later","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"AustinHuang1203"},"content":"ggggggg","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"AustinHuang1203"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"AustinHuang1203"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"AustinHuang1203"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"AustinHuang1203"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"AustinHuang1203"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"delete 1","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"AustinHuang1203"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"AustinHuang1203"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"AustinHuang1203":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"AustinHuang1203"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"AustinHuang1203"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"AustinHuang1203"},"content":"","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"AustinHuang1203":3,"-":19}}] diff --git a/AustinHuang1203_ip_master/commits.json b/AustinHuang1203_ip_master/commits.json index 586bc5a6..2e9bfed0 100644 --- a/AustinHuang1203_ip_master/commits.json +++ b/AustinHuang1203_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"AustinHuang1203":[{"date":"2023-08-21","commitResults":[{"hash":"673562de40339b871ff0e48b01ce596d571df427","isMergeCommit":false,"messageTitle":"First commit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"0cd8d0e37f050309329dd1d21c1e94bf04d397cf","isMergeCommit":false,"messageTitle":"first","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"34d277fd261f6dd69b235fe151f89ec03e6d1a6e","isMergeCommit":false,"messageTitle":"level2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"6f6d7a88bdff75279bb6a36c1e4c81a045458daa","isMergeCommit":false,"messageTitle":"part 3 done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}},{"hash":"9093b9a275ce64432509f559a59724faa48fe67c","isMergeCommit":false,"messageTitle":"level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":14}}},{"hash":"99e0c1da49384145e1281a8760ad12ec00072c32","isMergeCommit":false,"messageTitle":"testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"e8967c511b6ed543820193787c8762918ae4df67","isMergeCommit":false,"messageTitle":"error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":12}}},{"hash":"066d8c4f9c5656df207690e023de7dbe8d94ef77","isMergeCommit":false,"messageTitle":"added delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"ea7c881e180aa11e35c32c3307047eea5916b31e","isMergeCommit":false,"messageTitle":"some edits","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":22,"deletions":1}}}]},{"date":"2023-08-26","commitResults":[{"hash":"05a841b8399a4af81894873e7eeacab9f814f160","isMergeCommit":false,"messageTitle":"Implement Level-7","messageBody":"Current state: Does not save data to hard disk and just saves it in the program memory\n\nWhy problem:Not good, does not meet task requirements and we cant save it after our program shuts down\n\nThis commit: Saves the tasklist to harddrive and loads it when you open ur program\n","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":2}}},{"hash":"9b3f7d7b27139e15c4c2b503a9445ef5ee8e81ca","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AustinHuang1203/branch-Level-7","messageBody":"Implement Level-7","fileTypesAndContributionMap":{}},{"hash":"b6d24aab755d6660344c1b79a7f91bdda55e1bdc","isMergeCommit":false,"messageTitle":"Implement Level-8","messageBody":"Current state: No date time formatter, just accepts string\n\nWhy problem:Not good as can key in anything\n\nThis commit: Fixes this by formatting date for event and deadline\n\nThis commit: Saves the tasklist to harddrive and loads it when you open ur program\n","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":14}}},{"hash":"de84025376e6200c387bcf2bc9828c88988b35b8","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AustinHuang1203/branch-Level-8","messageBody":"Implement Level-8","fileTypesAndContributionMap":{}},{"hash":"806541d1737fb745290f0b2a959bb699c352fcce","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP","messageBody":"Current state: Some OOP but can be better\n\nWhy problem:Not OOP enough!\n\nThis commit: Makes it more OOP by creating 4 new classes\n","fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":78}}},{"hash":"7b1c43c843d5a949c6a59db3681c66992a9bdf90","isMergeCommit":true,"messageTitle":"Merge pull request #3 from AustinHuang1203/branch-Level-8","messageBody":"Implement A-MoreOOP","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"7589c9cf55e3b04031daad813df89e19a3277236","isMergeCommit":false,"messageTitle":"Implement A-Packages","messageBody":"Current state: Classes not in package\n\nWhy problem: Not nice\n\nThis commit: Added classes to package\n","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":5},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3b4b51d636037a0f37b12e023ef3d9425d0aa110","isMergeCommit":false,"messageTitle":"Bug fix","messageBody":"Current state: the test file not updated\n\nWhy problem: test dosent run\n\nThis commit: fixed filepath\n","fileTypesAndContributionMap":{"bat":{"insertions":2,"deletions":1}}},{"hash":"18f92261cfc3b2ce4a2af454d730fa20bd2cc833","isMergeCommit":true,"messageTitle":"Merge pull request #4 from AustinHuang1203/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"d3d8ab5a14b9c73034aab770218ea62b8efa3995","isMergeCommit":false,"messageTitle":"Implement A-Gradle Current: Does not use gradle Why problem: Gradle is useful tool to use this fix: I added gradle and configured the run task in gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"50139be8acb89956c4f1072763b51e452800cb7a","isMergeCommit":false,"messageTitle":"Implement A-JUnit Current: No test cases Why problem: We need test cases this fix: Added test cases for 2 classes","messageBody":"","tags":["A-Packages","A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"a57c3140b0c2ca38a22bfca09e360b053824b29c","isMergeCommit":false,"messageTitle":"Implement javadoc Current: Few comments Why problem: We need documentation to understand code this fix: Added documentation","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":146,"deletions":19}}},{"hash":"45910e00aa19794b44cbcdc6bf1b19da9a1da82b","isMergeCommit":false,"messageTitle":"Implement javastyle Current: Ugly code Why problem: Not nice to read this fix: Make code look nicer and more readable Why this way: Improve efficiency and style","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":64}}},{"hash":"833b79b33103a6d4d6a5c6d64707942e9bce6c63","isMergeCommit":false,"messageTitle":"Implement Level-9 Current: No find function Why problem: Cant find item in list this fix: Added find function Why this way: Can find stuff","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"33d61c942668c2e98ddcf2fe31c85bd3512bbf1d","isMergeCommit":true,"messageTitle":"Merge pull request #5 from AustinHuang1203/branch-A-JavaDoc","messageBody":"Implement javadoc","fileTypesAndContributionMap":{}},{"hash":"264cb72577d2172e178141e0c7c1d80612e02687","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3cc18a644114b0613ccdaa3dd52e4b97baec799d","isMergeCommit":true,"messageTitle":"Merge pull request #6 from AustinHuang1203/branch-A-CodingStandard","messageBody":"Implement javastyle","fileTypesAndContributionMap":{}},{"hash":"5d3066460539851becb2c97234db086f1d2a2bee","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ef245e6b63c579496364080fa00d90ff5eeb22de","isMergeCommit":true,"messageTitle":"Merge pull request #7 from AustinHuang1203/branch-Level-9","messageBody":"Implement Level-9","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"ecbc3fef91e5eefd18cb9974ef0bd899b335b5f2","isMergeCommit":false,"messageTitle":"Implement Level-10 Current: No GUI Why problem: Hard to use and ugly as need to read from the terminal output this fix: Made a gui using javafx for the program so easier to read Why this way: Easy to use interface that is nice to look at","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"java":{"insertions":243,"deletions":17}}},{"hash":"3acf7e6c809f27f6a458d3937db516b346af89f6","isMergeCommit":true,"messageTitle":"Merge pull request #8 from AustinHuang1203/branch-Level-10","messageBody":"Implement Level-10","fileTypesAndContributionMap":{}},{"hash":"51d60c0f4ade088146dd5e98bc006550c773dfa3","isMergeCommit":false,"messageTitle":"Implement A-Checkstyle Current: No checkstyle ran Why problem: Some code violations I might have missed out on this fix: Ran the autochecker so I could resolve all the reamining issues Why this way: Easier to use than manually going through the code","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":94,"deletions":58}}}]},{"date":"2023-09-09","commitResults":[{"hash":"d32318d06b865de96cb0a5e77fdae4658d19263b","isMergeCommit":false,"messageTitle":"Implement A-Checkstyle Current: No checkstyle ran Why problem: Some code violations I might have missed out on this fix: Ran the autochecker so I could resolve all the reamining issues Why this way: Easier to use than manually going through the code","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"52e2453c92c7689c95ccabe3241e3532581e87db","isMergeCommit":false,"messageTitle":"Implement A-Assertions Current: No assertions Why problem: Without assertions, we cannot check if our code is maintaining some assumptions which could lead to dangerous bugs! this fix: Added some assertions to check assumptions at different points in code Why this way: Make sure we know if any assumptions are not being held at any point in the code as they could cause bugs","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":6,"deletions":0}}},{"hash":"cdb7bc88e6ace4ef64130328e55968bb152d207c","isMergeCommit":false,"messageTitle":"Implement A-CodeQuality Current: Good quality code but with some minor issues Why problem: There are minor lapses in code quality which can impact readability this fix: Made some minor improvements to formatting and code quality like variable name change Why this way: Complies to the given codequality standards which standardises code and makes it more readable to work on","messageBody":"","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":33}}},{"hash":"eaca37418dc74574c5176f45cd6d02570e826467","isMergeCommit":true,"messageTitle":"Merge pull request #10 from AustinHuang1203/brach-A-Assertions","messageBody":"Implement A-Assertions","fileTypesAndContributionMap":{}},{"hash":"86bfa050befec9c5d30e0b8c0a7c4e6b0e966dd7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8649977133c6aafedc4e6b7bc99b563d228932d6","isMergeCommit":true,"messageTitle":"Merge pull request #9 from AustinHuang1203/branch-A-CodeQuality","messageBody":"Implement A-CodeQuality","fileTypesAndContributionMap":{}},{"hash":"329a1057e7cd407341af07b77b8d054275448b9c","isMergeCommit":false,"messageTitle":"Implement BCD-Extension (C-Help) Current: No helppage!!! Why problem: The user cannot seek help if they need to this fix: Added a help command to display a simple help page Why this way: So the user knows what commands are available when calling help","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"AustinHuang1203":{"java":911,"md":2,"fxml":0,"sh":0,"bat":3,"gradle":21,"txt":12}},"authorContributionVariance":{"AustinHuang1203":22296.76},"authorDisplayNameMap":{"AustinHuang1203":"CS2103T-W08-1 AUST..DEYU"}} +{"authorDailyContributionsMap":{"AustinHuang1203":[{"date":"2023-08-21","commitResults":[{"hash":"673562de40339b871ff0e48b01ce596d571df427","isMergeCommit":false,"messageTitle":"First commit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"0cd8d0e37f050309329dd1d21c1e94bf04d397cf","isMergeCommit":false,"messageTitle":"first","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"34d277fd261f6dd69b235fe151f89ec03e6d1a6e","isMergeCommit":false,"messageTitle":"level2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"6f6d7a88bdff75279bb6a36c1e4c81a045458daa","isMergeCommit":false,"messageTitle":"part 3 done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}},{"hash":"9093b9a275ce64432509f559a59724faa48fe67c","isMergeCommit":false,"messageTitle":"level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":14}}},{"hash":"99e0c1da49384145e1281a8760ad12ec00072c32","isMergeCommit":false,"messageTitle":"testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"e8967c511b6ed543820193787c8762918ae4df67","isMergeCommit":false,"messageTitle":"error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":12}}},{"hash":"066d8c4f9c5656df207690e023de7dbe8d94ef77","isMergeCommit":false,"messageTitle":"added delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"ea7c881e180aa11e35c32c3307047eea5916b31e","isMergeCommit":false,"messageTitle":"some edits","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":22,"deletions":1}}}]},{"date":"2023-08-26","commitResults":[{"hash":"05a841b8399a4af81894873e7eeacab9f814f160","isMergeCommit":false,"messageTitle":"Implement Level-7","messageBody":"Current state: Does not save data to hard disk and just saves it in the program memory\n\nWhy problem:Not good, does not meet task requirements and we cant save it after our program shuts down\n\nThis commit: Saves the tasklist to harddrive and loads it when you open ur program\n","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":2}}},{"hash":"9b3f7d7b27139e15c4c2b503a9445ef5ee8e81ca","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AustinHuang1203/branch-Level-7","messageBody":"Implement Level-7","fileTypesAndContributionMap":{}},{"hash":"b6d24aab755d6660344c1b79a7f91bdda55e1bdc","isMergeCommit":false,"messageTitle":"Implement Level-8","messageBody":"Current state: No date time formatter, just accepts string\n\nWhy problem:Not good as can key in anything\n\nThis commit: Fixes this by formatting date for event and deadline\n\nThis commit: Saves the tasklist to harddrive and loads it when you open ur program\n","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":14}}},{"hash":"de84025376e6200c387bcf2bc9828c88988b35b8","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AustinHuang1203/branch-Level-8","messageBody":"Implement Level-8","fileTypesAndContributionMap":{}},{"hash":"806541d1737fb745290f0b2a959bb699c352fcce","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP","messageBody":"Current state: Some OOP but can be better\n\nWhy problem:Not OOP enough!\n\nThis commit: Makes it more OOP by creating 4 new classes\n","fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":78}}},{"hash":"7b1c43c843d5a949c6a59db3681c66992a9bdf90","isMergeCommit":true,"messageTitle":"Merge pull request #3 from AustinHuang1203/branch-Level-8","messageBody":"Implement A-MoreOOP","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"7589c9cf55e3b04031daad813df89e19a3277236","isMergeCommit":false,"messageTitle":"Implement A-Packages","messageBody":"Current state: Classes not in package\n\nWhy problem: Not nice\n\nThis commit: Added classes to package\n","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":5},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3b4b51d636037a0f37b12e023ef3d9425d0aa110","isMergeCommit":false,"messageTitle":"Bug fix","messageBody":"Current state: the test file not updated\n\nWhy problem: test dosent run\n\nThis commit: fixed filepath\n","fileTypesAndContributionMap":{"bat":{"insertions":2,"deletions":1}}},{"hash":"18f92261cfc3b2ce4a2af454d730fa20bd2cc833","isMergeCommit":true,"messageTitle":"Merge pull request #4 from AustinHuang1203/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"d3d8ab5a14b9c73034aab770218ea62b8efa3995","isMergeCommit":false,"messageTitle":"Implement A-Gradle Current: Does not use gradle Why problem: Gradle is useful tool to use this fix: I added gradle and configured the run task in gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"50139be8acb89956c4f1072763b51e452800cb7a","isMergeCommit":false,"messageTitle":"Implement A-JUnit Current: No test cases Why problem: We need test cases this fix: Added test cases for 2 classes","messageBody":"","tags":["A-Packages","A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"a57c3140b0c2ca38a22bfca09e360b053824b29c","isMergeCommit":false,"messageTitle":"Implement javadoc Current: Few comments Why problem: We need documentation to understand code this fix: Added documentation","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":146,"deletions":19}}},{"hash":"45910e00aa19794b44cbcdc6bf1b19da9a1da82b","isMergeCommit":false,"messageTitle":"Implement javastyle Current: Ugly code Why problem: Not nice to read this fix: Make code look nicer and more readable Why this way: Improve efficiency and style","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":64}}},{"hash":"833b79b33103a6d4d6a5c6d64707942e9bce6c63","isMergeCommit":false,"messageTitle":"Implement Level-9 Current: No find function Why problem: Cant find item in list this fix: Added find function Why this way: Can find stuff","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"33d61c942668c2e98ddcf2fe31c85bd3512bbf1d","isMergeCommit":true,"messageTitle":"Merge pull request #5 from AustinHuang1203/branch-A-JavaDoc","messageBody":"Implement javadoc","fileTypesAndContributionMap":{}},{"hash":"264cb72577d2172e178141e0c7c1d80612e02687","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3cc18a644114b0613ccdaa3dd52e4b97baec799d","isMergeCommit":true,"messageTitle":"Merge pull request #6 from AustinHuang1203/branch-A-CodingStandard","messageBody":"Implement javastyle","fileTypesAndContributionMap":{}},{"hash":"5d3066460539851becb2c97234db086f1d2a2bee","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ef245e6b63c579496364080fa00d90ff5eeb22de","isMergeCommit":true,"messageTitle":"Merge pull request #7 from AustinHuang1203/branch-Level-9","messageBody":"Implement Level-9","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"ecbc3fef91e5eefd18cb9974ef0bd899b335b5f2","isMergeCommit":false,"messageTitle":"Implement Level-10 Current: No GUI Why problem: Hard to use and ugly as need to read from the terminal output this fix: Made a gui using javafx for the program so easier to read Why this way: Easy to use interface that is nice to look at","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"java":{"insertions":243,"deletions":17}}},{"hash":"3acf7e6c809f27f6a458d3937db516b346af89f6","isMergeCommit":true,"messageTitle":"Merge pull request #8 from AustinHuang1203/branch-Level-10","messageBody":"Implement Level-10","fileTypesAndContributionMap":{}},{"hash":"51d60c0f4ade088146dd5e98bc006550c773dfa3","isMergeCommit":false,"messageTitle":"Implement A-Checkstyle Current: No checkstyle ran Why problem: Some code violations I might have missed out on this fix: Ran the autochecker so I could resolve all the reamining issues Why this way: Easier to use than manually going through the code","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":94,"deletions":58}}}]},{"date":"2023-09-09","commitResults":[{"hash":"d32318d06b865de96cb0a5e77fdae4658d19263b","isMergeCommit":false,"messageTitle":"Implement A-Checkstyle Current: No checkstyle ran Why problem: Some code violations I might have missed out on this fix: Ran the autochecker so I could resolve all the reamining issues Why this way: Easier to use than manually going through the code","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"52e2453c92c7689c95ccabe3241e3532581e87db","isMergeCommit":false,"messageTitle":"Implement A-Assertions Current: No assertions Why problem: Without assertions, we cannot check if our code is maintaining some assumptions which could lead to dangerous bugs! this fix: Added some assertions to check assumptions at different points in code Why this way: Make sure we know if any assumptions are not being held at any point in the code as they could cause bugs","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":6,"deletions":0}}},{"hash":"cdb7bc88e6ace4ef64130328e55968bb152d207c","isMergeCommit":false,"messageTitle":"Implement A-CodeQuality Current: Good quality code but with some minor issues Why problem: There are minor lapses in code quality which can impact readability this fix: Made some minor improvements to formatting and code quality like variable name change Why this way: Complies to the given codequality standards which standardises code and makes it more readable to work on","messageBody":"","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":33}}},{"hash":"eaca37418dc74574c5176f45cd6d02570e826467","isMergeCommit":true,"messageTitle":"Merge pull request #10 from AustinHuang1203/brach-A-Assertions","messageBody":"Implement A-Assertions","fileTypesAndContributionMap":{}},{"hash":"86bfa050befec9c5d30e0b8c0a7c4e6b0e966dd7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8649977133c6aafedc4e6b7bc99b563d228932d6","isMergeCommit":true,"messageTitle":"Merge pull request #9 from AustinHuang1203/branch-A-CodeQuality","messageBody":"Implement A-CodeQuality","fileTypesAndContributionMap":{}},{"hash":"329a1057e7cd407341af07b77b8d054275448b9c","isMergeCommit":false,"messageTitle":"Implement BCD-Extension (C-Help) Current: No helppage!!! Why problem: The user cannot seek help if they need to this fix: Added a help command to display a simple help page Why this way: So the user knows what commands are available when calling help","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}}]},{"date":"2023-09-16","commitResults":[{"hash":"de047f1a42420204b7a137983e74225d26d42b01","isMergeCommit":false,"messageTitle":"Implement A-UserGuide Current: No readme Why problem: There is no good readme instructions this fix: Updated readme Why this way: So the user has an instruction manual on how to use","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":49,"deletions":15}}}]}]},"authorFileTypeContributionMap":{"AustinHuang1203":{"java":911,"md":51,"fxml":0,"sh":0,"bat":3,"gradle":21,"txt":12}},"authorContributionVariance":{"AustinHuang1203":17865.25},"authorDisplayNameMap":{"AustinHuang1203":"CS2103T-W08-1 AUST..DEYU"}} diff --git a/CJ-Lee01_ip_master/commits.json b/CJ-Lee01_ip_master/commits.json index ce4e59a9..f5561653 100644 --- a/CJ-Lee01_ip_master/commits.json +++ b/CJ-Lee01_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"CJ-Lee01":[{"date":"2023-08-21","commitResults":[{"hash":"0d19cd21dbf2a5128bc69b8246cce182f7c0e02c","isMergeCommit":false,"messageTitle":"Changed name of bot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b74efd13263354746f94a0fe29ebccc33556e56e","isMergeCommit":false,"messageTitle":"Renamed bot back to Duke.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}},{"hash":"6d878fae36ab179e55aeb5bfe1ebcff03bb3840b","isMergeCommit":false,"messageTitle":"Added reader to the bot.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}},{"hash":"a0297391659a89ca5e5f18a06d1e426e2be9dea0","isMergeCommit":false,"messageTitle":"Added StoreList class and enum commands. For future use.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"0595d69396839c7c4b5399893407b37a5afa9e14","isMergeCommit":false,"messageTitle":"Added functionality for level 2.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":4}}},{"hash":"9869a11680af72fa394caddb800bf1a6ef236c89","isMergeCommit":false,"messageTitle":"Added Task class.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"244ba6dba84ae02ce13b280e176c72877a1dd9c3","isMergeCommit":false,"messageTitle":"Done level 3.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":6}}},{"hash":"254e50b0b328e35cfb5913822f02ce7a7ce7e411","isMergeCommit":false,"messageTitle":"Created new files for tasks.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"6788c9d1e47aa35e8dfea5be0503b6e159c3ede0","isMergeCommit":false,"messageTitle":"Created enum for task creation commands.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"d5b6efff18a964d57da627106be13dc0aab03e83","isMergeCommit":false,"messageTitle":"Modified CreateTaskCommands to be more generic. Implemented subclasses for Task.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":9}}},{"hash":"84127b4c4cbc2bfef93bdb7748ada8ed9b7a8076","isMergeCommit":false,"messageTitle":"modified Duke to handle more commands. Updated commands list to add mark and unmark.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":28}}}]},{"date":"2023-08-23","commitResults":[{"hash":"561688d0cc7c7487426166cff66b6b16a790720f","isMergeCommit":false,"messageTitle":"Fixed bug in event creation.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"eda47ff4fa811047bc1afa42e517d136e1946de0","isMergeCommit":false,"messageTitle":"Added test but idk if they work.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d202b000d8d2e4591ac6c7daa050b612cb659606","isMergeCommit":false,"messageTitle":"Implemented error handling.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":35}}},{"hash":"bb3ee61b446eaa13ffbe31fcad042531e2887dba","isMergeCommit":false,"messageTitle":"Added delete handling.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":23}}},{"hash":"fe203585e08b143d4a7b0bed39edecff00a4da82","isMergeCommit":false,"messageTitle":"Updated test files.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"0824fb3650e6842c42c5c8e6e12a5ce7e4f9c191","isMergeCommit":false,"messageTitle":"Shows the enum implementation.","messageBody":"","tags":["A-enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"f8d3b4f0fb9a3b706493c27fd17252b39631d3e8","isMergeCommit":false,"messageTitle":"Add local storage for list.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":178,"deletions":72}}},{"hash":"09acaeed40fcd6f4b0514ccba7218465ebb717b4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"ce68c99c900314165ec0ff4513c967421d00379c","isMergeCommit":false,"messageTitle":"Add datetime support for Deadlines.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":20,"deletions":3}}},{"hash":"632611cee1b0ec557577c612666df54f89121353","isMergeCommit":false,"messageTitle":"Add datetime functionality for events.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":5}}}]},{"date":"2023-08-30","commitResults":[{"hash":"d81560e3afdc382a024d349fae200470e388ed73","isMergeCommit":false,"messageTitle":"Add wrapper for parsing datetime.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"dc9c945a56c78612dcf3a7e728fa5bf3a195480e","isMergeCommit":false,"messageTitle":"Fix datetime bug.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":9}}},{"hash":"3ac0b7e2d2b9facef5ef5b2b43552295d4c45181","isMergeCommit":false,"messageTitle":"Add datetime formatting to tasks.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":15}}},{"hash":"17ed7bc968dd774f409857985575fe7d5c245a28","isMergeCommit":false,"messageTitle":"Clear duke.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5}}},{"hash":"3afce4873ddd2062790ba9d04271a5b3c094a254","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"984594f89a2223523f1e5cb7cc4ab023e5264e7c","isMergeCommit":false,"messageTitle":"Add more classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":222,"deletions":0}}},{"hash":"caeefa04834d36ee3dd504de1110c07d69eb2a79","isMergeCommit":false,"messageTitle":"Update Duke and StoreList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":6}}},{"hash":"acaa025ae8a2cd2356eb5460f9bb5d335a3021bd","isMergeCommit":false,"messageTitle":"Clean various classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":167}}},{"hash":"8869a5ad188352f64a9ab5f98f9bb0832bad1674","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-moreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3e577b1b4a48682e9731edb9117cc4f1f7fc1b8e","isMergeCommit":false,"messageTitle":"Add to duke package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":8}}},{"hash":"e03e1f354e25cc91dd4bc4590881615b86a55fcd","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8a93a12e0c2540d69d006d871775b74eb523351a","isMergeCommit":false,"messageTitle":"Move Duke under duke package","messageBody":"","tags":["A-packages"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":4}}},{"hash":"22ae77c258527d6ff112402b0d8c9918e82dff1a","isMergeCommit":false,"messageTitle":"Update files","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"e9c8068462bc81513a458188bb177808f6b5d05c","isMergeCommit":false,"messageTitle":"Edit files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"8b935246a3a770b090261eb9a3500c551740d414","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9135fab3a3e5538d696e36f0fb143afb3e8c2c52","isMergeCommit":false,"messageTitle":"Add tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":6}}},{"hash":"b6be486edf468ef7fc098fe2d7547b0d1878704f","isMergeCommit":false,"messageTitle":"Enforce code style","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":57}}}]},{"date":"2023-09-01","commitResults":[{"hash":"853c58eb908ade1c03e78fde9dcb83fad67b9bfc","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":351,"deletions":20}}},{"hash":"730b7a5254536d532082a3f9ab4ae458c0046ad1","isMergeCommit":false,"messageTitle":"Add finding function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":7}}},{"hash":"26342caf00ef2542e1e69e50d4e59059419730a4","isMergeCommit":false,"messageTitle":"Refactor instruction name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"8d5ac7927f5ca7c55db076b103627d9988692678","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"00bead8e9a1b49e89580218454e39200c71cc70f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1062bd4cc2d6ccbf98ccd7f57793e510bd793e1e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"7581d3f8a8af46740e6a2550bb114e28f93e7bac","isMergeCommit":false,"messageTitle":"Add UI. followed the tutorial.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"java":{"insertions":247,"deletions":3}}}]},{"date":"2023-09-06","commitResults":[{"hash":"96c0428c6bd7d1f391e03d35ccb19b656ae171b4","isMergeCommit":false,"messageTitle":"Add GUI.","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":127,"deletions":26}}}]},{"date":"2023-09-12","commitResults":[{"hash":"5b8826b83cf5267120db7079c336f11aa8549f8b","isMergeCommit":false,"messageTitle":"Fix MainWindow","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}},{"hash":"169d0e5f317eff7f400d635cf8cd9d5979831359","isMergeCommit":false,"messageTitle":"Add Assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"fa7ccdd2435e74cb41b6c9d5c0a6bbf542fc98eb","isMergeCommit":false,"messageTitle":"Change Task::fileString to Task::toFileString Changed name of method to improve code quality.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"3950efd32ee1e651e5c67cb58a292617110eb7a7","isMergeCommit":false,"messageTitle":"Fix issue caused by name change The change from Task::fileString to Task::toFileString broke some code.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-13","commitResults":[{"hash":"55294c3349eedf9a2a780d67b089f08d86a8721a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from CJ-Lee01/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}},{"hash":"9ffb9527ed28be3d5d370a550a6116853c9f2521","isMergeCommit":true,"messageTitle":"Merge pull request #2 from CJ-Lee01/branch-A-Assertions","messageBody":"Add Assertions","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"262cead51790f83289de42067e3ad3615bb8e86e","isMergeCommit":false,"messageTitle":"Add enum for task attributes. For future use.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"9f62202e6b8aafc99852768b540340b227f4cd1f","isMergeCommit":false,"messageTitle":"Add update functionality for tasks. Command: update \u003cindex\u003e \u003cdescription|deadline|start|end\u003e \u003cupdateInfo\u003e index represents the index shown by the list command.","messageBody":"","tags":["C-Update"],"fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":183,"deletions":101}}}]},{"date":"2023-09-16","commitResults":[{"hash":"f5e2682e92520588512a6740269c907e8f73fdd4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Update\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"827d353e21bf6ffaf8e4d5d53bd45a8cf72dd4a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/CJ-Lee01/ip","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"CJ-Lee01":{"java":1546,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":16,"txt":13}},"authorContributionVariance":{"CJ-Lee01":28210.906},"authorDisplayNameMap":{"CJ-Lee01":"CS2103T-W08-3 LEE .. JIE"}} +{"authorDailyContributionsMap":{"CJ-Lee01":[{"date":"2023-08-21","commitResults":[{"hash":"0d19cd21dbf2a5128bc69b8246cce182f7c0e02c","isMergeCommit":false,"messageTitle":"Changed name of bot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b74efd13263354746f94a0fe29ebccc33556e56e","isMergeCommit":false,"messageTitle":"Renamed bot back to Duke.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}},{"hash":"6d878fae36ab179e55aeb5bfe1ebcff03bb3840b","isMergeCommit":false,"messageTitle":"Added reader to the bot.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}},{"hash":"a0297391659a89ca5e5f18a06d1e426e2be9dea0","isMergeCommit":false,"messageTitle":"Added StoreList class and enum commands. For future use.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"0595d69396839c7c4b5399893407b37a5afa9e14","isMergeCommit":false,"messageTitle":"Added functionality for level 2.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":4}}},{"hash":"9869a11680af72fa394caddb800bf1a6ef236c89","isMergeCommit":false,"messageTitle":"Added Task class.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"244ba6dba84ae02ce13b280e176c72877a1dd9c3","isMergeCommit":false,"messageTitle":"Done level 3.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":6}}},{"hash":"254e50b0b328e35cfb5913822f02ce7a7ce7e411","isMergeCommit":false,"messageTitle":"Created new files for tasks.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"6788c9d1e47aa35e8dfea5be0503b6e159c3ede0","isMergeCommit":false,"messageTitle":"Created enum for task creation commands.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"d5b6efff18a964d57da627106be13dc0aab03e83","isMergeCommit":false,"messageTitle":"Modified CreateTaskCommands to be more generic. Implemented subclasses for Task.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":9}}},{"hash":"84127b4c4cbc2bfef93bdb7748ada8ed9b7a8076","isMergeCommit":false,"messageTitle":"modified Duke to handle more commands. Updated commands list to add mark and unmark.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":28}}}]},{"date":"2023-08-23","commitResults":[{"hash":"561688d0cc7c7487426166cff66b6b16a790720f","isMergeCommit":false,"messageTitle":"Fixed bug in event creation.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"eda47ff4fa811047bc1afa42e517d136e1946de0","isMergeCommit":false,"messageTitle":"Added test but idk if they work.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d202b000d8d2e4591ac6c7daa050b612cb659606","isMergeCommit":false,"messageTitle":"Implemented error handling.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":35}}},{"hash":"bb3ee61b446eaa13ffbe31fcad042531e2887dba","isMergeCommit":false,"messageTitle":"Added delete handling.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":23}}},{"hash":"fe203585e08b143d4a7b0bed39edecff00a4da82","isMergeCommit":false,"messageTitle":"Updated test files.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"0824fb3650e6842c42c5c8e6e12a5ce7e4f9c191","isMergeCommit":false,"messageTitle":"Shows the enum implementation.","messageBody":"","tags":["A-enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"f8d3b4f0fb9a3b706493c27fd17252b39631d3e8","isMergeCommit":false,"messageTitle":"Add local storage for list.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":178,"deletions":72}}},{"hash":"09acaeed40fcd6f4b0514ccba7218465ebb717b4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"ce68c99c900314165ec0ff4513c967421d00379c","isMergeCommit":false,"messageTitle":"Add datetime support for Deadlines.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":20,"deletions":3}}},{"hash":"632611cee1b0ec557577c612666df54f89121353","isMergeCommit":false,"messageTitle":"Add datetime functionality for events.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":5}}}]},{"date":"2023-08-30","commitResults":[{"hash":"d81560e3afdc382a024d349fae200470e388ed73","isMergeCommit":false,"messageTitle":"Add wrapper for parsing datetime.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"dc9c945a56c78612dcf3a7e728fa5bf3a195480e","isMergeCommit":false,"messageTitle":"Fix datetime bug.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":9}}},{"hash":"3ac0b7e2d2b9facef5ef5b2b43552295d4c45181","isMergeCommit":false,"messageTitle":"Add datetime formatting to tasks.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":15}}},{"hash":"17ed7bc968dd774f409857985575fe7d5c245a28","isMergeCommit":false,"messageTitle":"Clear duke.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5}}},{"hash":"3afce4873ddd2062790ba9d04271a5b3c094a254","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"984594f89a2223523f1e5cb7cc4ab023e5264e7c","isMergeCommit":false,"messageTitle":"Add more classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":222,"deletions":0}}},{"hash":"caeefa04834d36ee3dd504de1110c07d69eb2a79","isMergeCommit":false,"messageTitle":"Update Duke and StoreList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":6}}},{"hash":"acaa025ae8a2cd2356eb5460f9bb5d335a3021bd","isMergeCommit":false,"messageTitle":"Clean various classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":167}}},{"hash":"8869a5ad188352f64a9ab5f98f9bb0832bad1674","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-moreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3e577b1b4a48682e9731edb9117cc4f1f7fc1b8e","isMergeCommit":false,"messageTitle":"Add to duke package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":8}}},{"hash":"e03e1f354e25cc91dd4bc4590881615b86a55fcd","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8a93a12e0c2540d69d006d871775b74eb523351a","isMergeCommit":false,"messageTitle":"Move Duke under duke package","messageBody":"","tags":["A-packages"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":4}}},{"hash":"22ae77c258527d6ff112402b0d8c9918e82dff1a","isMergeCommit":false,"messageTitle":"Update files","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"e9c8068462bc81513a458188bb177808f6b5d05c","isMergeCommit":false,"messageTitle":"Edit files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"8b935246a3a770b090261eb9a3500c551740d414","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9135fab3a3e5538d696e36f0fb143afb3e8c2c52","isMergeCommit":false,"messageTitle":"Add tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":6}}},{"hash":"b6be486edf468ef7fc098fe2d7547b0d1878704f","isMergeCommit":false,"messageTitle":"Enforce code style","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":57}}}]},{"date":"2023-09-01","commitResults":[{"hash":"853c58eb908ade1c03e78fde9dcb83fad67b9bfc","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":351,"deletions":20}}},{"hash":"730b7a5254536d532082a3f9ab4ae458c0046ad1","isMergeCommit":false,"messageTitle":"Add finding function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":7}}},{"hash":"26342caf00ef2542e1e69e50d4e59059419730a4","isMergeCommit":false,"messageTitle":"Refactor instruction name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"8d5ac7927f5ca7c55db076b103627d9988692678","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"00bead8e9a1b49e89580218454e39200c71cc70f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1062bd4cc2d6ccbf98ccd7f57793e510bd793e1e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"7581d3f8a8af46740e6a2550bb114e28f93e7bac","isMergeCommit":false,"messageTitle":"Add UI. followed the tutorial.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"java":{"insertions":247,"deletions":3}}}]},{"date":"2023-09-06","commitResults":[{"hash":"96c0428c6bd7d1f391e03d35ccb19b656ae171b4","isMergeCommit":false,"messageTitle":"Add GUI.","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":127,"deletions":26}}}]},{"date":"2023-09-12","commitResults":[{"hash":"5b8826b83cf5267120db7079c336f11aa8549f8b","isMergeCommit":false,"messageTitle":"Fix MainWindow","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}},{"hash":"169d0e5f317eff7f400d635cf8cd9d5979831359","isMergeCommit":false,"messageTitle":"Add Assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"fa7ccdd2435e74cb41b6c9d5c0a6bbf542fc98eb","isMergeCommit":false,"messageTitle":"Change Task::fileString to Task::toFileString Changed name of method to improve code quality.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"3950efd32ee1e651e5c67cb58a292617110eb7a7","isMergeCommit":false,"messageTitle":"Fix issue caused by name change The change from Task::fileString to Task::toFileString broke some code.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-13","commitResults":[{"hash":"55294c3349eedf9a2a780d67b089f08d86a8721a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from CJ-Lee01/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}},{"hash":"9ffb9527ed28be3d5d370a550a6116853c9f2521","isMergeCommit":true,"messageTitle":"Merge pull request #2 from CJ-Lee01/branch-A-Assertions","messageBody":"Add Assertions","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"262cead51790f83289de42067e3ad3615bb8e86e","isMergeCommit":false,"messageTitle":"Add enum for task attributes. For future use.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"9f62202e6b8aafc99852768b540340b227f4cd1f","isMergeCommit":false,"messageTitle":"Add update functionality for tasks. Command: update \u003cindex\u003e \u003cdescription|deadline|start|end\u003e \u003cupdateInfo\u003e index represents the index shown by the list command.","messageBody":"","tags":["C-Update"],"fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":183,"deletions":101}}}]},{"date":"2023-09-16","commitResults":[{"hash":"f5e2682e92520588512a6740269c907e8f73fdd4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Update\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"827d353e21bf6ffaf8e4d5d53bd45a8cf72dd4a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/CJ-Lee01/ip","messageBody":"","tags":["BCD-Extension","A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"CJ-Lee01":{"java":1546,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":16,"txt":13}},"authorContributionVariance":{"CJ-Lee01":28210.906},"authorDisplayNameMap":{"CJ-Lee01":"CS2103T-W08-3 LEE .. JIE"}} diff --git a/CelestineTan03_ip_master/authorship.json b/CelestineTan03_ip_master/authorship.json index 5d5cb3c4..1fcbb459 100644 --- a/CelestineTan03_ip_master/authorship.json +++ b/CelestineTan03_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":"CelestineTan03"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"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":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"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":"CelestineTan03"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"CelestineTan03":22,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type Deadline.","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task of type Deadline.","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * @param by the deadline for the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" assert this.by !\u003d null : \"by should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" return \"D | \" + this.isDone + \" | \" + this.description + \" | \" + this.by.format(formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" * Returns the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" return \"deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" * Updates the task with the new deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" * @param description the new task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" * @param by the new deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime from, LocalDateTime to) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":79}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"CelestineTan03":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" * A chatbot that provides a to-do list function.","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the chatbot.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * Returns a reply to the user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" * @param input the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" * @return the reply to the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" public String reply(String input, Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" Parser parser \u003d new Parser(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" String firstWord \u003d parser.getCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" switch (firstWord) {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" case \"bye\":","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" this.storage.saveTasks(this.tasks.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" return this.ui.printFarewell();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" } finally {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" stage.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" // Display the stored commands","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" case \"list\":","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.getNumberOfTasks() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" return \"You do not have any tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder list \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" list.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" for (int i \u003d 0; i \u003c this.tasks.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" list.append(i + 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" list.append(\".\");","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" list.append(this.tasks.getTasks().get(i).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" list.append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" return list.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" // Add task","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.addTask(parser.getTodoTask(), \"todo\");","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.addTask(parser.getDeadlineTask(), \"deadline\");","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.addTask(parser.getEventTask(), \"event\");","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" // Mark task as done","lastModifiedDate":"2023-08-21"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" case \"mark\":","lastModifiedDate":"2023-08-21"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.markTask(parser.getTaskNumber(), \"mark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" // Mark task as not done","lastModifiedDate":"2023-08-21"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-21"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.markTask(parser.getTaskNumber(), \"unmark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" // Remove task","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" case \"delete\":","lastModifiedDate":"2023-08-22"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.removeTask(parser.getTaskNumber());","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"CelestineTan03"},"content":" // Find task","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"CelestineTan03"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.findTask(parser.getSearchKeyword());","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"CelestineTan03"},"content":" // Update a task","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"CelestineTan03"},"content":" case \"update\":","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"CelestineTan03"},"content":" int taskNumber \u003d parser.getTaskNumber();","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"CelestineTan03"},"content":" Task task \u003d this.tasks.getTasks().get(taskNumber - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"CelestineTan03"},"content":" String taskType \u003d task.getTaskType();","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"CelestineTan03"},"content":" String[] description;","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"CelestineTan03"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"CelestineTan03"},"content":" description \u003d parser.getEventTask();","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"CelestineTan03"},"content":" description \u003d parser.getDeadlineTask();","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"CelestineTan03"},"content":" description \u003d parser.getTodoTask();","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"CelestineTan03"},"content":" if (description.length \u003d\u003d 1 || description[1].isBlank()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"CelestineTan03"},"content":" description[0] \u003d description[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.updateTask(description, taskNumber);","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":137,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"CelestineTan03"},"content":" // Invalid command","lastModifiedDate":"2023-08-21"},{"lineNumber":139,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-21"},{"lineNumber":140,"author":{"gitId":"CelestineTan03"},"content":" return this.ui.printAllCommands();","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":143,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"CelestineTan03"},"content":" * The main method of the chatbot.","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"CelestineTan03"},"content":" * @param args the command line arguments.","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"CelestineTan03"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":150,"author":{"gitId":"CelestineTan03"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":152,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"CelestineTan03":149,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a DukeException.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for DukeException.","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * @param exception the type of exception.","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" public DukeException(ExceptionTypes exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" super(exception.getErrormessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"CelestineTan03":15}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type Event.","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for task of type Event.","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" * @param from the start date/time for the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * @param to the end date/time for the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" assert this.from !\u003d null : \"from should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" assert this.to !\u003d null : \"to should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(formatter) + \" to: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" return \"E | \" + this.isDone + \" | \" + this.description + \" | \" + this.from.format(formatter)","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" + \" | \" + this.to.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" * Returns the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" return \"event\";","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime by) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" * Updates the event task.","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" * @param from the start date/time for the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" * @param to the end date/time for the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":86}},{"path":"src/main/java/duke/ExceptionTypes.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents the types of exceptions.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public enum ExceptionTypes {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMANDEVENT(\"OOPS!!! Invalid command. The command for an event should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" + \"event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDEVENT(\"OOPS!!! The description of an event cannot be empty and \"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" + \"the start and end time/date cannot be empty.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMANDDEADLINE(\"OOPS!!! Invalid command. The command for a deadline should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" + \"deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDDEADLINE(\"OOPS!!! The description of a deadline cannot be empty \"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" + \"and the deadline for the deadline cannot be empty.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDTODO(\"OOPS!!! The description of a todo cannot be empty.\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" INVALIDTASKNUMBER(\"OOPS!! Invalid task number. The task number has to be from\"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" + \" one to the number of tasks in the list.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETETASKNUMBER(\"OOPS!! Task number cannot empty. Please indicate a task number\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" + \" from one to the number of tasks in the list.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" MARKEMPTYLIST(\"Add task to start marking task as done!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" UNMARKEMPTYLIST(\"Add task to start marking task as not done!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" DELETEEMPTYLIST(\"Add task to start deleting!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMAND(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" EMPTYKEYWORD(\"OOPS!!! Please enter something to search.\"),","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETEUPDATEDETAILS(\"OOPS!!! Please enter the task number and the new task details.\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" private final String errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" ExceptionTypes(String errormessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" this.errormessage \u003d errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" // A method to get the error message of the exception","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" public String getErrormessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" return this.errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"CelestineTan03":38}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" private Duke duke \u003d new Duke(\"./duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke, stage);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"CelestineTan03":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" private Stage stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" * Initializes the main window.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" DialogBox.getDukeDialog(\"Hello! I\u0027m Botty!\\nWhat can I do for you?\", dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * Sets the duke and stage for the main window.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" * @param d the duke","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" * @param stage the stage","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" public void setDuke(Duke d, Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" this.stage \u003d stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" this.duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" assert this.stage !\u003d null : \"stage should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" assert this.duke !\u003d null : \"duke should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"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":57,"author":{"gitId":"CelestineTan03"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" * Returns the response from duke.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" * @param input the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" * @return the response from duke.","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" return duke.reply(input, stage);","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"CelestineTan03":79}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a parser that parses the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" private String[] words;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a parser.","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" * @param input the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" public Parser(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" // Split string into first word and remaining words","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" this.words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * Returns the command word of the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" * @return the command word.","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" return this.words[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" public String[] getTodoTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDTODO);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" return new String[]{this.words[1]};","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" * Returns the description of the deadline task.","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" * @return the description of the deadline task.","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" public String[] getDeadlineTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" } else if (this.words[1].contains(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" String[] description \u003d this.words[1].split(\" /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" if (description.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" assert this.words.length \u003e 1 \u0026\u0026 !this.words[1].contains(\"/by\") : \"Invalid user input\";","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" * Returns the description of the event task.","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" * @return the description of the event task.","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" public String[] getEventTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" } else if (this.words[1].contains(\"/from\") \u0026\u0026 this.words[1].contains(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" String[] description \u003d this.words[1].split(\" /from \");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" if (description.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" String[] interval \u003d description[1].split(\" /to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" if (interval.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" return new String[]{description[0], interval[0], interval[1]};","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" assert this.words.length \u003e 1 \u0026\u0026 !this.words[1].contains(\"/from\") \u0026\u0026 !this.words[1].contains(\"/to\")","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" : \"Invalid user input\";","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" * Returns the task number of the task to be marked as done or deleted.","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" * @return the task number.","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" public int getTaskNumber() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETETASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" assert this.words.length \u003e 1 : \"Invalid user input\";","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" if (words[1].contains(\" \")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" String[] taskNumber \u003d words[1].split(\" \");","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" return Integer.parseInt(taskNumber[0]);","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" return Integer.parseInt(words[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"CelestineTan03"},"content":" * Returns the keyword to search for.","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"CelestineTan03"},"content":" * @return the keyword.","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"CelestineTan03"},"content":" public String getSearchKeyword() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.EMPTYKEYWORD);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"CelestineTan03"},"content":" assert this.words.length \u003e 1 : \"Invalid user input\";","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"CelestineTan03"},"content":" return this.words[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":113}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" * Represents a storage for the chatbot.","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" private final String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter outputFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the storage.","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" * @param filePath the path to the file.","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" this.path \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" this.outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" // Create file if file does not exist","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" if (!file.createNewFile()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" this.load();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * Saves the tasks to the file.","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * @throws IOException if there is an error writing to the file.","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" public void saveTasks(List\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" FileWriter writer \u003d new FileWriter(this.path);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" writer.write(task.toFileFormat() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" * Loads the tasks from the file.","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * @return the list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" * @throws IOException if there is an error reading from the file.","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" public List\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(this.path));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" String nextTask \u003d reader.readLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" while (nextTask !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" String[] taskDescription \u003d nextTask.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" String isDone \u003d taskDescription[1].strip();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" String description \u003d taskDescription[2].strip();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" switch (taskDescription[0].strip()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Deadline(description,","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" LocalDateTime.parse(taskDescription[3].strip(), this.outputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Event(description, LocalDateTime.parse(taskDescription[3].strip(),","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" this.outputFormatter), LocalDateTime.parse(taskDescription[4].strip(), this.outputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" if (isDone.equals(\"true\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" int index \u003d tasks.size() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" nextTask \u003d reader.readLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" assert nextTask \u003d\u003d null : \"There are still tasks to be read\";","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" reader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":93}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" assert this.description !\u003d null : \"description should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" * Checks if the task has been completed and","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" * return the status icon of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" * @return the status icon of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" // Mark a task as done","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" // Mark a task as not done","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" abstract String toFileFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" * Returns the type of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" * @return the type of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" abstract String getTaskType();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" * Updates the todo task.","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" public abstract void updateTask(String description) throws DukeException;","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" * Updates the deadline task.","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" * @param by the deadline for the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" public abstract void updateTask(String description, LocalDateTime by) throws DukeException;","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" * Updates the event task.","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" * @param from the start date/time for the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" * @param to the end date/time for the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" public abstract void updateTask(String description, LocalDateTime from, LocalDateTime to) throws DukeException;","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":93}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" // The list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" // The formatter for the date and time","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter inputFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the task list if an initial list exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" this.inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the task list if an initial list does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" this.inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * @return the number of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" * @return the list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * Returns a success message when a task has been successfully added.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" * @return the success message.","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" public String printAddTaskSuccessMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.get(this.tasks.size() - 1).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Now you have \");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" return message.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" * Returns a success message when a task has been successfully deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" * @return the success message.","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" public String printRemoveTaskSuccessMessage(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" message.append(task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Now you have \");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" return message.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the task details and add the task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" * @param task the task description.","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" * @param typeOfTask the type of the task to be added.","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" public String addTask(String[] task, String typeOfTask) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" switch (typeOfTask) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Event(task[0], LocalDateTime.parse(task[1], this.inputFormatter),","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"CelestineTan03"},"content":" LocalDateTime.parse(task[2], this.inputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"CelestineTan03"},"content":" return \"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\";","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"CelestineTan03"},"content":" return printAddTaskSuccessMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Todo(task[0]));","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"CelestineTan03"},"content":" return printAddTaskSuccessMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Deadline(task[0], LocalDateTime.parse(task[1], this.inputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"CelestineTan03"},"content":" return \"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\";","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"CelestineTan03"},"content":" return printAddTaskSuccessMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the command to delete a task","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"CelestineTan03"},"content":" * and remove the task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"CelestineTan03"},"content":" * @param taskNumber the task number of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"CelestineTan03"},"content":" public String removeTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.DELETEEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"CelestineTan03"},"content":" assert taskNumber \u003e 0 \u0026\u0026 taskNumber \u003c\u003d this.tasks.size() : \"Invalid task number\";","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"CelestineTan03"},"content":" Task task \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"CelestineTan03"},"content":" return printRemoveTaskSuccessMessage(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the task command to mark or unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"CelestineTan03"},"content":" * a task and mark the task as done or mark a task as","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"CelestineTan03"},"content":" * not done.","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"CelestineTan03"},"content":" * @param taskNumber the task number of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"CelestineTan03"},"content":" * @param action to mark or unmark the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"CelestineTan03"},"content":" public String markTask(int taskNumber, String action) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"CelestineTan03"},"content":" switch(action) {","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"CelestineTan03"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.MARKEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder markedMessage \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"CelestineTan03"},"content":" markedMessage.append(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"CelestineTan03"},"content":" Task markTask \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"CelestineTan03"},"content":" markTask.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"CelestineTan03"},"content":" markedMessage.append(markTask.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"CelestineTan03"},"content":" return markedMessage.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"CelestineTan03"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.UNMARKEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder unmarkedMessage \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"CelestineTan03"},"content":" unmarkedMessage.append(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"CelestineTan03"},"content":" Task unmarkTask \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"CelestineTan03"},"content":" unmarkTask.markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"CelestineTan03"},"content":" unmarkedMessage.append(unmarkTask.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"CelestineTan03"},"content":" return unmarkedMessage.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the keyword and find the tasks that","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"CelestineTan03"},"content":" * contains the keyword and print the tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"CelestineTan03"},"content":" * @param keyword the keyword to be searched.","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"CelestineTan03"},"content":" public String findTask(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"CelestineTan03"},"content":" return \"There are no matching tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"CelestineTan03"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"CelestineTan03"},"content":" List\u003cTask\u003e newTasks \u003d tasks.stream()","lastModifiedDate":"2023-09-11"},{"lineNumber":195,"author":{"gitId":"CelestineTan03"},"content":" .filter(task -\u003e task.toString().contains(keyword) || task.getTaskType().contains(keyword))","lastModifiedDate":"2023-09-11"},{"lineNumber":196,"author":{"gitId":"CelestineTan03"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-11"},{"lineNumber":197,"author":{"gitId":"CelestineTan03"},"content":" if (newTasks.isEmpty()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":198,"author":{"gitId":"CelestineTan03"},"content":" return \"There are no matching tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-11"},{"lineNumber":201,"author":{"gitId":"CelestineTan03"},"content":" stringBuilder.append(\"Here are the matching task(s) in your list:\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":202,"author":{"gitId":"CelestineTan03"},"content":" for (Task task : newTasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":203,"author":{"gitId":"CelestineTan03"},"content":" stringBuilder.append(count);","lastModifiedDate":"2023-09-11"},{"lineNumber":204,"author":{"gitId":"CelestineTan03"},"content":" stringBuilder.append(\". \");","lastModifiedDate":"2023-09-11"},{"lineNumber":205,"author":{"gitId":"CelestineTan03"},"content":" stringBuilder.append(task.toString());","lastModifiedDate":"2023-09-11"},{"lineNumber":206,"author":{"gitId":"CelestineTan03"},"content":" stringBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":207,"author":{"gitId":"CelestineTan03"},"content":" count++;","lastModifiedDate":"2023-09-11"},{"lineNumber":208,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":209,"author":{"gitId":"CelestineTan03"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-11"},{"lineNumber":210,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the task details and task number","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"CelestineTan03"},"content":" * and update the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":215,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":216,"author":{"gitId":"CelestineTan03"},"content":" * @param task the task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":217,"author":{"gitId":"CelestineTan03"},"content":" * @param taskNumber the task number.","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-12"},{"lineNumber":219,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":220,"author":{"gitId":"CelestineTan03"},"content":" public String updateTask(String[] task, int taskNumber) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":221,"author":{"gitId":"CelestineTan03"},"content":" Task oldTask \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"CelestineTan03"},"content":" String taskType \u003d oldTask.getTaskType();","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"CelestineTan03"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-09-12"},{"lineNumber":225,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"CelestineTan03"},"content":" oldTask.updateTask(task[0], LocalDateTime.parse(task[1], this.inputFormatter),","lastModifiedDate":"2023-09-12"},{"lineNumber":227,"author":{"gitId":"CelestineTan03"},"content":" LocalDateTime.parse(task[2], this.inputFormatter));","lastModifiedDate":"2023-09-12"},{"lineNumber":228,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-09-12"},{"lineNumber":229,"author":{"gitId":"CelestineTan03"},"content":" return \"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\";","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":231,"author":{"gitId":"CelestineTan03"},"content":" return \"Task updated successfully\";","lastModifiedDate":"2023-09-12"},{"lineNumber":232,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-09-12"},{"lineNumber":233,"author":{"gitId":"CelestineTan03"},"content":" oldTask.updateTask(task[0]);","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"CelestineTan03"},"content":" return \"Task updated successfully\";","lastModifiedDate":"2023-09-12"},{"lineNumber":235,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-12"},{"lineNumber":236,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":237,"author":{"gitId":"CelestineTan03"},"content":" oldTask.updateTask(task[0], LocalDateTime.parse(task[1], this.inputFormatter));","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-09-12"},{"lineNumber":239,"author":{"gitId":"CelestineTan03"},"content":" return \"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\";","lastModifiedDate":"2023-09-12"},{"lineNumber":240,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":241,"author":{"gitId":"CelestineTan03"},"content":" return \"Task updated successfully\";","lastModifiedDate":"2023-09-12"},{"lineNumber":242,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":243,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-09-12"},{"lineNumber":244,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":245,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":246,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":246}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type todo","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task of type todo.","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" return \"T | \" + this.isDone + \" | \" + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * Returns the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" return \"todo\";","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" * Updates the task with the new description.","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" * @param description the new description.","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description) {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime by) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime from, LocalDateTime to) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":68}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents the user interface of the chatbot.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" // Print the farewell message","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" public String printFarewell() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" * Print all the available commands.","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" public String printAllCommands() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder commands \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"OOPS!!! Invalid command. Try the following commands instead:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e todo \u003ctask\u003e\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e list\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e mark \u003ctask number\u003e\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e unmark \u003ctask number\u003e\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e delete \u003ctask number\u003e\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e find \u003ckeyword\u003e\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e bye\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" return commands.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":30}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" minHeight\u003d\"-Infinity\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"CelestineTan03":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"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-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"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":"CelestineTan03"},"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":"CelestineTan03"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"CelestineTan03":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * Represents a test for Parser class","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" public void testGetCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"todo\", new Parser(\"todo sleep\").getCommand());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" public void testGetTodoTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"todo\"}, new Parser(\"todo\").getTodoTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" public void testIncompleteCommandDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"deadline\"}, new Parser(\"deadline\").getDeadlineTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of a deadline cannot be empty and\"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" + \" the deadline for the deadline cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" public void testInvalidCommandDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"deadline\", \"sleep\"}, new Parser(\"deadline sleep /by\").getDeadlineTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! Invalid command. The command for a deadline should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" + \"deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" public void testIncompleteCommandEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"event\"}, new Parser(\"event\").getEventTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of an event cannot be empty and the start\"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" + \" and end time/date cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" public void testInvalidCommandEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"event\", \"sleep\"}, new Parser(\"event sleep /from\").getEventTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! Invalid command. The command for an event should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" + \"event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":71}},{"path":"src/test/java/duke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" * Represents a test for Todo class","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" public void testToStringConversion() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"[T][ ] sleep\", new Todo(\"sleep\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" public void testToFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"T | false | sleep\", new Todo(\"sleep\").toFileFormat());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"todo sleep","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"event meeting /from 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"event meeting /from 2023-10-10 14:00 /to 2023-10-10 16:00","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"deadline lecture quiz /by 9pm","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"deadline lecture quiz /by 2023-10-05 23:59","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"find","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"find sleep","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"mark","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"mark -2","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":"unmark 10","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":"unmark","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"delete -4","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":"delete","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":"add task","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"CelestineTan03":26}},{"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":"CelestineTan03"},"content":"# delete stored data from previous run","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"if [ -e \"./duke.txt\" ]","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"then","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" rm ./duke.txt","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"fi","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":"java -classpath ../bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"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":{"CelestineTan03":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":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"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":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"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":"CelestineTan03"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"CelestineTan03":22,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type Deadline.","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task of type Deadline.","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * @param by the deadline for the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" assert this.by !\u003d null : \"by should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" return \"D | \" + this.isDone + \" | \" + this.description + \" | \" + this.by.format(formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" * Returns the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" return \"deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" * Updates the task with the new deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" * @param description the new task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" * @param by the new deadline.","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime from, LocalDateTime to) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":79}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"CelestineTan03":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" * A chatbot that provides a to-do list function.","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the chatbot.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * Returns a reply to the user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" * @param input the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" * @return the reply to the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" public String reply(String input, Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" Parser parser \u003d new Parser(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" String firstWord \u003d parser.getCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" switch (firstWord) {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" case \"bye\":","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" this.storage.saveTasks(this.tasks.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" return this.ui.printFarewell();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" } finally {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" stage.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" // Display the stored commands","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" case \"list\":","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.getNumberOfTasks() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" return \"You do not have any tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder list \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" list.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" for (int i \u003d 0; i \u003c this.tasks.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" list.append(i + 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" list.append(\".\");","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" list.append(this.tasks.getTasks().get(i).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" list.append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" return list.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" // Add task","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.addTask(parser.getTodoTask(), \"todo\");","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.addTask(parser.getDeadlineTask(), \"deadline\");","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.addTask(parser.getEventTask(), \"event\");","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" // Mark task as done","lastModifiedDate":"2023-08-21"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" case \"mark\":","lastModifiedDate":"2023-08-21"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.markTask(parser.getTaskNumber(), \"mark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" // Mark task as not done","lastModifiedDate":"2023-08-21"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-21"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.markTask(parser.getTaskNumber(), \"unmark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" // Remove task","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" case \"delete\":","lastModifiedDate":"2023-08-22"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.removeTask(parser.getTaskNumber());","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"CelestineTan03"},"content":" // Find task","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"CelestineTan03"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.findTask(parser.getSearchKeyword());","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"CelestineTan03"},"content":" // Update a task","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"CelestineTan03"},"content":" case \"update\":","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"CelestineTan03"},"content":" int taskNumber \u003d parser.getTaskNumber();","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"CelestineTan03"},"content":" Task task \u003d this.tasks.getTasks().get(taskNumber - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"CelestineTan03"},"content":" String taskType \u003d task.getTaskType();","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"CelestineTan03"},"content":" String[] description;","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"CelestineTan03"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"CelestineTan03"},"content":" description \u003d parser.getEventTask();","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"CelestineTan03"},"content":" description \u003d parser.getDeadlineTask();","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"CelestineTan03"},"content":" description \u003d parser.getTodoTask();","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"CelestineTan03"},"content":" if (description.length \u003d\u003d 1 || description[1].isBlank()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"CelestineTan03"},"content":" description[0] \u003d description[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.updateTask(description, taskNumber);","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"CelestineTan03"},"content":" return exception.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":137,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"CelestineTan03"},"content":" // Invalid command","lastModifiedDate":"2023-08-21"},{"lineNumber":139,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-21"},{"lineNumber":140,"author":{"gitId":"CelestineTan03"},"content":" return this.ui.printAllCommands();","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":143,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"CelestineTan03"},"content":" * The main method of the chatbot.","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"CelestineTan03"},"content":" * @param args the command line arguments.","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"CelestineTan03"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":150,"author":{"gitId":"CelestineTan03"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":152,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"CelestineTan03":149,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a DukeException.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for DukeException.","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * @param exception the type of exception.","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" public DukeException(ExceptionTypes exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" super(exception.getErrormessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"CelestineTan03":15}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type Event.","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for task of type Event.","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" * @param from the start date/time for the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * @param to the end date/time for the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" assert this.from !\u003d null : \"from should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" assert this.to !\u003d null : \"to should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(formatter) + \" to: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" return \"E | \" + this.isDone + \" | \" + this.description + \" | \" + this.from.format(formatter)","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" + \" | \" + this.to.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" * Returns the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" return \"event\";","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime by) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" * Updates the event task.","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" * @param from the start date/time for the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" * @param to the end date/time for the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":86}},{"path":"src/main/java/duke/ExceptionTypes.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents the types of exceptions.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public enum ExceptionTypes {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMANDEVENT(\"OOPS!!! Invalid command. The command for an event should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" + \"event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDEVENT(\"OOPS!!! The description of an event cannot be empty and \"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" + \"the start and end time/date cannot be empty.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMANDDEADLINE(\"OOPS!!! Invalid command. The command for a deadline should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" + \"deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDDEADLINE(\"OOPS!!! The description of a deadline cannot be empty \"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" + \"and the deadline for the deadline cannot be empty.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDTODO(\"OOPS!!! The description of a todo cannot be empty.\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" INVALIDTASKNUMBER(\"OOPS!! Invalid task number. The task number has to be from\"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" + \" one to the number of tasks in the list.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETETASKNUMBER(\"OOPS!! Task number cannot empty. Please indicate a task number\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" + \" from one to the number of tasks in the list.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" MARKEMPTYLIST(\"Add task to start marking task as done!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" UNMARKEMPTYLIST(\"Add task to start marking task as not done!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" DELETEEMPTYLIST(\"Add task to start deleting!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMAND(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" EMPTYKEYWORD(\"OOPS!!! Please enter something to search.\"),","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETEUPDATEDETAILS(\"OOPS!!! Please enter the task number and the new task details.\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" private final String errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" ExceptionTypes(String errormessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" this.errormessage \u003d errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" // A method to get the error message of the exception","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" public String getErrormessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" return this.errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"CelestineTan03":38}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" private Duke duke \u003d new Duke(\"./duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke, stage);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"CelestineTan03":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" private Stage stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" * Initializes the main window.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" DialogBox.getDukeDialog(\"Hello! I\u0027m Botty!\\nWhat can I do for you?\", dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * Sets the duke and stage for the main window.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" * @param d the duke","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" * @param stage the stage","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" public void setDuke(Duke d, Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" this.stage \u003d stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" this.duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" assert this.stage !\u003d null : \"stage should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" assert this.duke !\u003d null : \"duke should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"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":57,"author":{"gitId":"CelestineTan03"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" * Returns the response from duke.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" * @param input the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" * @return the response from duke.","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" return duke.reply(input, stage);","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"CelestineTan03":79}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a parser that parses the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" private String[] words;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a parser.","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" * @param input the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" public Parser(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" // Split string into first word and remaining words","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" this.words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * Returns the command word of the user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" * @return the command word.","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" return this.words[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" public String[] getTodoTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDTODO);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" return new String[]{this.words[1]};","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" * Returns the description of the deadline task.","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" * @return the description of the deadline task.","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" public String[] getDeadlineTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" } else if (this.words[1].contains(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" String[] description \u003d this.words[1].split(\" /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" if (description.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" assert this.words.length \u003e 1 \u0026\u0026 !this.words[1].contains(\"/by\") : \"Invalid user input\";","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" * Returns the description of the event task.","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" * @return the description of the event task.","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" public String[] getEventTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" } else if (this.words[1].contains(\"/from\") \u0026\u0026 this.words[1].contains(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" String[] description \u003d this.words[1].split(\" /from \");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" if (description.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" String[] interval \u003d description[1].split(\" /to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" if (interval.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" return new String[]{description[0], interval[0], interval[1]};","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" assert this.words.length \u003e 1 \u0026\u0026 (!this.words[1].contains(\"/from\") || !this.words[1].contains(\"/to\"))","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" : \"Invalid user input\";","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" * Returns the task number of the task to be marked as done or deleted.","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" * @return the task number.","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" public int getTaskNumber() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETETASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" assert this.words.length \u003e 1 : \"Invalid user input\";","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" if (words[1].contains(\" \")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" String[] taskNumber \u003d words[1].split(\" \");","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" return Integer.parseInt(taskNumber[0]);","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" return Integer.parseInt(words[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"CelestineTan03"},"content":" * Returns the keyword to search for.","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"CelestineTan03"},"content":" * @return the keyword.","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid.","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"CelestineTan03"},"content":" public String getSearchKeyword() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.EMPTYKEYWORD);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"CelestineTan03"},"content":" assert this.words.length \u003e 1 : \"Invalid user input\";","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"CelestineTan03"},"content":" return this.words[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":113}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" * Represents a storage for the chatbot.","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" private final String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter outputFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the storage.","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" * @param filePath the path to the file.","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" this.path \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" this.outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" // Create file if file does not exist","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" if (!file.createNewFile()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" this.load();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * Saves the tasks to the file.","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * @throws IOException if there is an error writing to the file.","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" public void saveTasks(List\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" FileWriter writer \u003d new FileWriter(this.path);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" writer.write(task.toFileFormat() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" * Loads the tasks from the file.","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * @return the list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" * @throws IOException if there is an error reading from the file.","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" public List\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(this.path));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" String nextTask \u003d reader.readLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" while (nextTask !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" String[] taskDescription \u003d nextTask.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" String isDone \u003d taskDescription[1].strip();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" String description \u003d taskDescription[2].strip();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" switch (taskDescription[0].strip()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Deadline(description,","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" LocalDateTime.parse(taskDescription[3].strip(), this.outputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Event(description, LocalDateTime.parse(taskDescription[3].strip(),","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" this.outputFormatter), LocalDateTime.parse(taskDescription[4].strip(), this.outputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" if (isDone.equals(\"true\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" int index \u003d tasks.size() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" nextTask \u003d reader.readLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" assert nextTask \u003d\u003d null : \"There are still tasks to be read\";","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" reader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":93}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" assert this.description !\u003d null : \"description should not be null\";","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" * Checks if the task has been completed and","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" * return the status icon of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" * @return the status icon of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" // Mark a task as done","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" // Mark a task as not done","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" abstract String toFileFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" * Returns the type of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" * @return the type of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" abstract String getTaskType();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" * Updates the todo task.","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" public abstract void updateTask(String description) throws DukeException;","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" * Updates the deadline task.","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" * @param by the deadline for the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" public abstract void updateTask(String description, LocalDateTime by) throws DukeException;","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" * Updates the event task.","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" * @param from the start date/time for the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" * @param to the end date/time for the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" public abstract void updateTask(String description, LocalDateTime from, LocalDateTime to) throws DukeException;","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":93}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" // The list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" // The formatter for the date and time","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter inputFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the task list if an initial list exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" this.inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the task list if an initial list does not exist.","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" this.inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * @return the number of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" * @return the list of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * Returns a success message when a task has been successfully added.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" * @return the success message.","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" public String printAddTaskSuccessMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.get(this.tasks.size() - 1).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Now you have \");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" return message.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" * Returns a success message when a task has been successfully deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" * @return the success message.","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" public String printRemoveTaskSuccessMessage(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" message.append(task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Now you have \");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" return message.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the task details and add the task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" * @param task the task description.","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" * @param typeOfTask the type of the task to be added.","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" public String addTask(String[] task, String typeOfTask) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" switch (typeOfTask) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Event(task[0], LocalDateTime.parse(task[1], this.inputFormatter),","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"CelestineTan03"},"content":" LocalDateTime.parse(task[2], this.inputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"CelestineTan03"},"content":" return \"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\";","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"CelestineTan03"},"content":" return printAddTaskSuccessMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Todo(task[0]));","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"CelestineTan03"},"content":" return printAddTaskSuccessMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Deadline(task[0], LocalDateTime.parse(task[1], this.inputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"CelestineTan03"},"content":" return \"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\";","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"CelestineTan03"},"content":" return printAddTaskSuccessMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the command to delete a task","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"CelestineTan03"},"content":" * and remove the task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"CelestineTan03"},"content":" * @param taskNumber the task number of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"CelestineTan03"},"content":" public String removeTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.DELETEEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"CelestineTan03"},"content":" assert taskNumber \u003e 0 \u0026\u0026 taskNumber \u003c\u003d this.tasks.size() : \"Invalid task number\";","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"CelestineTan03"},"content":" Task task \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"CelestineTan03"},"content":" return printRemoveTaskSuccessMessage(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the task command to mark or unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"CelestineTan03"},"content":" * a task and mark the task as done or mark a task as","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"CelestineTan03"},"content":" * not done.","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"CelestineTan03"},"content":" * @param taskNumber the task number of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"CelestineTan03"},"content":" * @param action to mark or unmark the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"CelestineTan03"},"content":" public String markTask(int taskNumber, String action) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"CelestineTan03"},"content":" switch(action) {","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"CelestineTan03"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.MARKEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder markedMessage \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"CelestineTan03"},"content":" markedMessage.append(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"CelestineTan03"},"content":" Task markTask \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"CelestineTan03"},"content":" markTask.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"CelestineTan03"},"content":" markedMessage.append(markTask.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"CelestineTan03"},"content":" return markedMessage.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"CelestineTan03"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.UNMARKEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder unmarkedMessage \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"CelestineTan03"},"content":" unmarkedMessage.append(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"CelestineTan03"},"content":" Task unmarkTask \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"CelestineTan03"},"content":" unmarkTask.markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"CelestineTan03"},"content":" unmarkedMessage.append(unmarkTask.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"CelestineTan03"},"content":" return unmarkedMessage.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the keyword and find the tasks that","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"CelestineTan03"},"content":" * contains the keyword and print the tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"CelestineTan03"},"content":" * @param keyword the keyword to be searched.","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"CelestineTan03"},"content":" public String findTask(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":190,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"CelestineTan03"},"content":" return \"There are no matching tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":192,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"CelestineTan03"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"CelestineTan03"},"content":" List\u003cTask\u003e newTasks \u003d tasks.stream()","lastModifiedDate":"2023-09-11"},{"lineNumber":195,"author":{"gitId":"CelestineTan03"},"content":" .filter(task -\u003e task.toString().contains(keyword) || task.getTaskType().contains(keyword))","lastModifiedDate":"2023-09-11"},{"lineNumber":196,"author":{"gitId":"CelestineTan03"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-11"},{"lineNumber":197,"author":{"gitId":"CelestineTan03"},"content":" if (newTasks.isEmpty()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":198,"author":{"gitId":"CelestineTan03"},"content":" return \"There are no matching tasks in the list.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-11"},{"lineNumber":201,"author":{"gitId":"CelestineTan03"},"content":" stringBuilder.append(\"Here are the matching task(s) in your list:\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":202,"author":{"gitId":"CelestineTan03"},"content":" for (Task task : newTasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":203,"author":{"gitId":"CelestineTan03"},"content":" stringBuilder.append(count);","lastModifiedDate":"2023-09-11"},{"lineNumber":204,"author":{"gitId":"CelestineTan03"},"content":" stringBuilder.append(\". \");","lastModifiedDate":"2023-09-11"},{"lineNumber":205,"author":{"gitId":"CelestineTan03"},"content":" stringBuilder.append(task.toString());","lastModifiedDate":"2023-09-11"},{"lineNumber":206,"author":{"gitId":"CelestineTan03"},"content":" stringBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":207,"author":{"gitId":"CelestineTan03"},"content":" count++;","lastModifiedDate":"2023-09-11"},{"lineNumber":208,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":209,"author":{"gitId":"CelestineTan03"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-11"},{"lineNumber":210,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the task details and task number","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"CelestineTan03"},"content":" * and update the task.","lastModifiedDate":"2023-09-12"},{"lineNumber":215,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":216,"author":{"gitId":"CelestineTan03"},"content":" * @param task the task details.","lastModifiedDate":"2023-09-12"},{"lineNumber":217,"author":{"gitId":"CelestineTan03"},"content":" * @param taskNumber the task number.","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command.","lastModifiedDate":"2023-09-12"},{"lineNumber":219,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":220,"author":{"gitId":"CelestineTan03"},"content":" public String updateTask(String[] task, int taskNumber) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":221,"author":{"gitId":"CelestineTan03"},"content":" Task oldTask \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"CelestineTan03"},"content":" String taskType \u003d oldTask.getTaskType();","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"CelestineTan03"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-09-12"},{"lineNumber":225,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"CelestineTan03"},"content":" oldTask.updateTask(task[0], LocalDateTime.parse(task[1], this.inputFormatter),","lastModifiedDate":"2023-09-12"},{"lineNumber":227,"author":{"gitId":"CelestineTan03"},"content":" LocalDateTime.parse(task[2], this.inputFormatter));","lastModifiedDate":"2023-09-12"},{"lineNumber":228,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-09-12"},{"lineNumber":229,"author":{"gitId":"CelestineTan03"},"content":" return \"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\";","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":231,"author":{"gitId":"CelestineTan03"},"content":" return \"Task updated successfully\";","lastModifiedDate":"2023-09-12"},{"lineNumber":232,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-09-12"},{"lineNumber":233,"author":{"gitId":"CelestineTan03"},"content":" oldTask.updateTask(task[0]);","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"CelestineTan03"},"content":" return \"Task updated successfully\";","lastModifiedDate":"2023-09-12"},{"lineNumber":235,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-12"},{"lineNumber":236,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":237,"author":{"gitId":"CelestineTan03"},"content":" oldTask.updateTask(task[0], LocalDateTime.parse(task[1], this.inputFormatter));","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-09-12"},{"lineNumber":239,"author":{"gitId":"CelestineTan03"},"content":" return \"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\";","lastModifiedDate":"2023-09-12"},{"lineNumber":240,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":241,"author":{"gitId":"CelestineTan03"},"content":" return \"Task updated successfully\";","lastModifiedDate":"2023-09-12"},{"lineNumber":242,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-09-12"},{"lineNumber":243,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-09-12"},{"lineNumber":244,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":245,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":246,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":246}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type todo","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task of type todo.","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * Returns the string representation of the task in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format.","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" return \"T | \" + this.isDone + \" | \" + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * Returns the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" return \"todo\";","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" * Updates the task with the new description.","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" * @param description the new description.","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description) {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime by) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" public void updateTask(String description, LocalDateTime from, LocalDateTime to) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETEUPDATEDETAILS);","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":68}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents the user interface of the chatbot.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" // Print the farewell message","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" public String printFarewell() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" * Print all the available commands.","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" public String printAllCommands() {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder commands \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"OOPS!!! Invalid command. Try the following commands instead:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e todo \u003ctask\u003e\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e list\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e mark \u003ctask number\u003e\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e unmark \u003ctask number\u003e\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e delete \u003ctask number\u003e\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e find \u003ckeyword\u003e\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" commands.append(\"\u003e bye\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" return commands.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":30}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" minHeight\u003d\"-Infinity\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"CelestineTan03":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"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-05"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"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":"CelestineTan03"},"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":"CelestineTan03"},"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":"CelestineTan03"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"CelestineTan03":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * Represents a test for Parser class","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" public void testGetCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"todo\", new Parser(\"todo sleep\").getCommand());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" public void testGetTodoTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"todo\"}, new Parser(\"todo\").getTodoTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" public void testIncompleteCommandDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"deadline\"}, new Parser(\"deadline\").getDeadlineTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of a deadline cannot be empty and\"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" + \" the deadline for the deadline cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" public void testInvalidCommandDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"deadline\", \"sleep\"}, new Parser(\"deadline sleep /by\").getDeadlineTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! Invalid command. The command for a deadline should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" + \"deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" public void testIncompleteCommandEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"event\"}, new Parser(\"event\").getEventTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of an event cannot be empty and the start\"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" + \" and end time/date cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" public void testInvalidCommandEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"event\", \"sleep\"}, new Parser(\"event sleep /from\").getEventTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! Invalid command. The command for an event should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" + \"event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":71}},{"path":"src/test/java/duke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" * Represents a test for Todo class","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" public void testToStringConversion() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"[T][ ] sleep\", new Todo(\"sleep\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" public void testToFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"T | false | sleep\", new Todo(\"sleep\").toFileFormat());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"todo sleep","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"event meeting /from 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"event meeting /from 2023-10-10 14:00 /to 2023-10-10 16:00","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"deadline lecture quiz /by 9pm","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"deadline lecture quiz /by 2023-10-05 23:59","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"find","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"find sleep","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"mark","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"mark -2","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":"unmark 10","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":"unmark","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"delete -4","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":"delete","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":"add task","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"CelestineTan03":26}},{"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":"CelestineTan03"},"content":"# delete stored data from previous run","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"if [ -e \"./duke.txt\" ]","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"then","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" rm ./duke.txt","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"fi","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":"java -classpath ../bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"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":{"CelestineTan03":8,"-":36}}] diff --git a/CelestineTan03_ip_master/commits.json b/CelestineTan03_ip_master/commits.json index 0d7a0130..49d6c28c 100644 --- a/CelestineTan03_ip_master/commits.json +++ b/CelestineTan03_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"CelestineTan03":[{"date":"2023-08-21","commitResults":[{"hash":"c9d815d867ac39c6f14cddb86cdb95f8a4b8ac9b","isMergeCommit":false,"messageTitle":"Rename chatbot and make chatbot greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"452735866ed65367eddb8600aabad358b606e835","isMergeCommit":false,"messageTitle":"Chatbot now echos user\u0027s command","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"e8854359fd0bcdb00ff02e6aff17d512684689f9","isMergeCommit":false,"messageTitle":"Add list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"7c862be0853d87015956278fccb64c225ff0276d","isMergeCommit":false,"messageTitle":"Add the ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":5}}},{"hash":"f3dbb859ac7703392bfd57f11df5a40addfcd0ae","isMergeCommit":false,"messageTitle":"Add support for tracking ToDos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":32}}}]},{"date":"2023-08-22","commitResults":[{"hash":"8bf452611252e8fdfe9c95f10c2c3f89c636529a","isMergeCommit":false,"messageTitle":"Test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":55,"deletions":52}}},{"hash":"31f2c9f5db4ac35df255cb6bd3124b0cba76c725","isMergeCommit":false,"messageTitle":"Add input validation","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":68,"deletions":19}}},{"hash":"6367ed81c74c1d1878ba02e4e32be686cb370bf0","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":50,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"39a876eba2c13af8be29bc21a7eecd39cca50bca","isMergeCommit":false,"messageTitle":"Update error handling and add javadoc","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":214,"deletions":66}}}]},{"date":"2023-08-28","commitResults":[{"hash":"dc130cbf0a2aeac45d785d60f14359b50e698d1f","isMergeCommit":false,"messageTitle":"feat: add the ability to save data","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":4}}}]},{"date":"2023-08-29","commitResults":[{"hash":"1558e9309921801d11d4220510e2e28b6bafec37","isMergeCommit":false,"messageTitle":"Add date and time feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":125,"deletions":103}}}]},{"date":"2023-08-30","commitResults":[{"hash":"de716081744f46ad60f61341424aafbc80248797","isMergeCommit":false,"messageTitle":"refactor: extract Ui, Storage, Parser, TaskList classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":395,"deletions":325}}},{"hash":"accbfd8c2c04000e1d473e5a7b27988ad1e3ea32","isMergeCommit":false,"messageTitle":"Add package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"1a8d0d568f85551d9ce791992058c158e2afdbd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"576740df4bd14c629e9f6207c35c6b229690f5f1","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":0}}},{"hash":"b4cc4feb64d0756c6b8e4c87ab6c62aac685ac7a","isMergeCommit":false,"messageTitle":"Create JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"607f5f0fdad3e64ebac8f93d7e417f3f581b9578","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":1}}},{"hash":"1d148e0193ece363b98a9b04b97020dd503f9cd3","isMergeCommit":false,"messageTitle":"Update code to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":1}}},{"hash":"d700e6fcd3fe3d28338740157b7143c6af235fb2","isMergeCommit":false,"messageTitle":"feat: find task by searching for keyword","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":77,"deletions":6}}},{"hash":"f25547fbac6b5f91e2f9c452e9f17d668817c80e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"52fd869228fa0fe57cf9334fdd96785f9faa54bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Deadline.java\n#\tsrc/main/java/duke/Event.java\n#\tsrc/main/java/duke/Task.java\n#\tsrc/main/java/duke/Todo.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"a8c4096e493a62d55a7d034d0640eab318a164e1","isMergeCommit":false,"messageTitle":"fix: text-ui-test fail due to previous test data stored and input to wrong program","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":7,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"157ff6d9b6f764c1261897623ffa85841ae8b90e","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":49,"deletions":28}}}]},{"date":"2023-09-05","commitResults":[{"hash":"a96f4d68ac37226fd36e04a12d31f897aeafba78","isMergeCommit":false,"messageTitle":"Add a GUI to the chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":310,"deletions":145}}}]},{"date":"2023-09-11","commitResults":[{"hash":"a21a41d6187726f913b023e167da8b4329286721","isMergeCommit":false,"messageTitle":"Generate new JAR file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":17}}},{"hash":"89dc3eff8be6ee33f57e4e458bafca11e7fd8471","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"b4c8a3d02d32f09dc6200eba74002344426d5077","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Javadoc comments are not following the Java coding standard.\n\nLet\u0027s,\n- add punctuation behind every parameter description\n- start the first sentence in method header comments\nin the form \"Returns...\", \"Adds...\"\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":94}}},{"hash":"4f5144b07d774738cfb0bdd57b9cbde2ac22304b","isMergeCommit":false,"messageTitle":"Use Streams","messageBody":"Tasks are filtered using for loop.\n\nLet\u0027s filter tasks using stream.\n","tags":["A-Streams","A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":14}}},{"hash":"97ad51319dc4bb5587ca7da060e5752f055c8b3a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from CelestineTan03/Branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"2993649baabb463d8ea15a5ae0a0675039ed3e83","isMergeCommit":true,"messageTitle":"Merge pull request #2 from CelestineTan03/Branch-A-CodeQuality","messageBody":"Improve code quality\r\n\r\nJavadoc comments are not following the Java coding standard.\r\n\r\nLet\u0027s,\r\n- add punctuation behind every parameter description\r\n- start the first sentence in method header comments in the form \"Returns...\", \"Adds...\"","fileTypesAndContributionMap":{}},{"hash":"a8a71315a911b27b93a30b832c8e646da22019c3","isMergeCommit":true,"messageTitle":"Merge pull request #3 from CelestineTan03/Branch-A-Streams","messageBody":"Use Streams\r\n\r\nTasks are filtered using for loop.\r\n\r\nLet\u0027s filter tasks using stream.","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"0eea58319c6449a193701a5d7b9583fab869cde4","isMergeCommit":false,"messageTitle":"feat: update task","messageBody":"Users can only add or delete task.\n\nIt will be easier if users can edit the existing task if there are any changes.\n\nLet\u0027s add an update task feature.\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":6}}}]}]},"authorFileTypeContributionMap":{"CelestineTan03":{"java":1274,"md":0,"fxml":35,"sh":8,"bat":0,"gradle":22,"txt":26}},"authorContributionVariance":{"CelestineTan03":55151.25},"authorDisplayNameMap":{"CelestineTan03":"CS2103T-W08-1 CELE..TONG"}} +{"authorDailyContributionsMap":{"CelestineTan03":[{"date":"2023-08-21","commitResults":[{"hash":"c9d815d867ac39c6f14cddb86cdb95f8a4b8ac9b","isMergeCommit":false,"messageTitle":"Rename chatbot and make chatbot greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"452735866ed65367eddb8600aabad358b606e835","isMergeCommit":false,"messageTitle":"Chatbot now echos user\u0027s command","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"e8854359fd0bcdb00ff02e6aff17d512684689f9","isMergeCommit":false,"messageTitle":"Add list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"7c862be0853d87015956278fccb64c225ff0276d","isMergeCommit":false,"messageTitle":"Add the ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":5}}},{"hash":"f3dbb859ac7703392bfd57f11df5a40addfcd0ae","isMergeCommit":false,"messageTitle":"Add support for tracking ToDos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":32}}}]},{"date":"2023-08-22","commitResults":[{"hash":"8bf452611252e8fdfe9c95f10c2c3f89c636529a","isMergeCommit":false,"messageTitle":"Test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":55,"deletions":52}}},{"hash":"31f2c9f5db4ac35df255cb6bd3124b0cba76c725","isMergeCommit":false,"messageTitle":"Add input validation","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":68,"deletions":19}}},{"hash":"6367ed81c74c1d1878ba02e4e32be686cb370bf0","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":50,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"39a876eba2c13af8be29bc21a7eecd39cca50bca","isMergeCommit":false,"messageTitle":"Update error handling and add javadoc","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":214,"deletions":66}}}]},{"date":"2023-08-28","commitResults":[{"hash":"dc130cbf0a2aeac45d785d60f14359b50e698d1f","isMergeCommit":false,"messageTitle":"feat: add the ability to save data","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":4}}}]},{"date":"2023-08-29","commitResults":[{"hash":"1558e9309921801d11d4220510e2e28b6bafec37","isMergeCommit":false,"messageTitle":"Add date and time feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":125,"deletions":103}}}]},{"date":"2023-08-30","commitResults":[{"hash":"de716081744f46ad60f61341424aafbc80248797","isMergeCommit":false,"messageTitle":"refactor: extract Ui, Storage, Parser, TaskList classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":395,"deletions":325}}},{"hash":"accbfd8c2c04000e1d473e5a7b27988ad1e3ea32","isMergeCommit":false,"messageTitle":"Add package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"1a8d0d568f85551d9ce791992058c158e2afdbd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"576740df4bd14c629e9f6207c35c6b229690f5f1","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":0}}},{"hash":"b4cc4feb64d0756c6b8e4c87ab6c62aac685ac7a","isMergeCommit":false,"messageTitle":"Create JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"607f5f0fdad3e64ebac8f93d7e417f3f581b9578","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":1}}},{"hash":"1d148e0193ece363b98a9b04b97020dd503f9cd3","isMergeCommit":false,"messageTitle":"Update code to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":1}}},{"hash":"d700e6fcd3fe3d28338740157b7143c6af235fb2","isMergeCommit":false,"messageTitle":"feat: find task by searching for keyword","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":77,"deletions":6}}},{"hash":"f25547fbac6b5f91e2f9c452e9f17d668817c80e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"52fd869228fa0fe57cf9334fdd96785f9faa54bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Deadline.java\n#\tsrc/main/java/duke/Event.java\n#\tsrc/main/java/duke/Task.java\n#\tsrc/main/java/duke/Todo.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"a8c4096e493a62d55a7d034d0640eab318a164e1","isMergeCommit":false,"messageTitle":"fix: text-ui-test fail due to previous test data stored and input to wrong program","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":7,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"157ff6d9b6f764c1261897623ffa85841ae8b90e","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":49,"deletions":28}}}]},{"date":"2023-09-05","commitResults":[{"hash":"a96f4d68ac37226fd36e04a12d31f897aeafba78","isMergeCommit":false,"messageTitle":"Add a GUI to the chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":310,"deletions":145}}}]},{"date":"2023-09-11","commitResults":[{"hash":"a21a41d6187726f913b023e167da8b4329286721","isMergeCommit":false,"messageTitle":"Generate new JAR file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":17}}},{"hash":"89dc3eff8be6ee33f57e4e458bafca11e7fd8471","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"b4c8a3d02d32f09dc6200eba74002344426d5077","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Javadoc comments are not following the Java coding standard.\n\nLet\u0027s,\n- add punctuation behind every parameter description\n- start the first sentence in method header comments\nin the form \"Returns...\", \"Adds...\"\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":94}}},{"hash":"4f5144b07d774738cfb0bdd57b9cbde2ac22304b","isMergeCommit":false,"messageTitle":"Use Streams","messageBody":"Tasks are filtered using for loop.\n\nLet\u0027s filter tasks using stream.\n","tags":["A-Streams","A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":14}}},{"hash":"97ad51319dc4bb5587ca7da060e5752f055c8b3a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from CelestineTan03/Branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"2993649baabb463d8ea15a5ae0a0675039ed3e83","isMergeCommit":true,"messageTitle":"Merge pull request #2 from CelestineTan03/Branch-A-CodeQuality","messageBody":"Improve code quality\r\n\r\nJavadoc comments are not following the Java coding standard.\r\n\r\nLet\u0027s,\r\n- add punctuation behind every parameter description\r\n- start the first sentence in method header comments in the form \"Returns...\", \"Adds...\"","fileTypesAndContributionMap":{}},{"hash":"a8a71315a911b27b93a30b832c8e646da22019c3","isMergeCommit":true,"messageTitle":"Merge pull request #3 from CelestineTan03/Branch-A-Streams","messageBody":"Use Streams\r\n\r\nTasks are filtered using for loop.\r\n\r\nLet\u0027s filter tasks using stream.","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"0eea58319c6449a193701a5d7b9583fab869cde4","isMergeCommit":false,"messageTitle":"feat: update task","messageBody":"Users can only add or delete task.\n\nIt will be easier if users can edit the existing task if there are any changes.\n\nLet\u0027s add an update task feature.\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":6}}}]},{"date":"2023-09-16","commitResults":[{"hash":"80a52ef62eff1c404a4021d143b2e9fd460e82f8","isMergeCommit":false,"messageTitle":"fix: incorrect assertion","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"CelestineTan03":{"java":1274,"md":0,"fxml":35,"sh":8,"bat":0,"gradle":22,"txt":26}},"authorContributionVariance":{"CelestineTan03":49595.65},"authorDisplayNameMap":{"CelestineTan03":"CS2103T-W08-1 CELE..TONG"}} diff --git a/ChangruHenryQian_ip_master/authorship.json b/ChangruHenryQian_ip_master/authorship.json index af58d961..b58e790b 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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-09"},{"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":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":"mainClassName \u003d \"duke.Launcher\"","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"-":41,"ChangruHenryQian":21}},{"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":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" protected String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" Parser parser \u003d new Parser(input, this.storage, this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" String response \u003d parser.parse();","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" return response;","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":1,"ChangruHenryQian":63}},{"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/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":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":32}},{"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":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":53}},{"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(\"delete\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" return this.taskList.deleteTask(Integer.valueOf(command.split(\" \")[1]) - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"bye\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" this.isEnd \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" return Ui.farewellMessage();","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 {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printException(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" return \"Invalid command.\";","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-15"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new Event from the command.","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" private Event createEventFromCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate startTime \u003d LocalDate.parse(command.split(\" /from \", 2)[1]","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" .split(\" /to \", 2)[0]);","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate endTime \u003d LocalDate.parse(command.split(\" /to \", 2)[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /from \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" Event newEvent \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" return newEvent;","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new Deadline from the command.","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new Deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" private Deadline createDeadlineFromCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate deadline \u003d LocalDate.parse(command.split(\" /by \", 2)[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /by \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" Deadline newDeadline \u003d new Deadline(name, deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":" return newDeadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the new ToDo from the command.","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The new ToDo.","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"ChangruHenryQian"},"content":" private ToDo createToDoFromCommand() {","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"ChangruHenryQian"},"content":" if (command.split(\" \", 2).length \u003d\u003d 1) {","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\" OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"ChangruHenryQian"},"content":" ToDo newToDo \u003d new ToDo(command.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"ChangruHenryQian"},"content":" return newToDo;","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"ChangruHenryQian"},"content":" * Returns if the parser is ended.","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"ChangruHenryQian"},"content":" public boolean isEnd() {","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"ChangruHenryQian"},"content":" return this.isEnd;","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":102}},{"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 {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unknown task type.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"ChangruHenryQian"},"content":" }","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":" * Creates the Event from the storage input.","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"ChangruHenryQian"},"content":" * @param input The input line.","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"ChangruHenryQian"},"content":" * @param description The description of the Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"ChangruHenryQian"},"content":" * @param isComplete Whether the Event is completed.","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"ChangruHenryQian"},"content":" private Event createEventFromStorage(String input, String description, boolean isComplete) {","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate start \u003d LocalDate.parse(input.split(\" \\\\| \")[3],","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"ChangruHenryQian"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate end \u003d LocalDate.parse(input.split(\" \\\\| \")[4],","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"ChangruHenryQian"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"ChangruHenryQian"},"content":" return new Event(description, isComplete, start, end);","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"ChangruHenryQian"},"content":" * Creates the Deadline from the storage input.","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"ChangruHenryQian"},"content":" * @param input The input line.","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"ChangruHenryQian"},"content":" * @param description The description of the Deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"ChangruHenryQian"},"content":" * @param isComplete Whether the Deadline is completed.","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"ChangruHenryQian"},"content":" * @return The Event.","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"ChangruHenryQian"},"content":" private Deadline createDeadlineFromStorage(String input, String description, boolean isComplete) {","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate d \u003d LocalDate.parse(input.split(\" \\\\| \")[3],","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"ChangruHenryQian"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"ChangruHenryQian"},"content":" return new Deadline(description, isComplete, d);","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"ChangruHenryQian"},"content":" * Adds the last task in the task list to file.","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"ChangruHenryQian"},"content":" * @param list The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws DukeException If unable to write to file.","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"ChangruHenryQian"},"content":" public void addTheLastTaskToFile(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"ChangruHenryQian"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"ChangruHenryQian"},"content":" if (list.size() !\u003d 1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(list.size() - 1).toTxt());","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"ChangruHenryQian"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unable to write to file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"ChangruHenryQian"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"ChangruHenryQian"},"content":" * Rewrites the whole file with the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"ChangruHenryQian"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"ChangruHenryQian"},"content":" * @param list The task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"ChangruHenryQian"},"content":" * @throws DukeException If unable to write to file.","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"ChangruHenryQian"},"content":" public void rewriteFile(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"ChangruHenryQian"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"ChangruHenryQian"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"ChangruHenryQian"},"content":" if (i !\u003d list.size() - 1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(i).toTxt());","lastModifiedDate":"2023-09-15"},{"lineNumber":155,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"ChangruHenryQian"},"content":" continue;","lastModifiedDate":"2023-09-15"},{"lineNumber":157,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(i).toTxt());","lastModifiedDate":"2023-09-15"},{"lineNumber":159,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"ChangruHenryQian"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unable to write to file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":166}},{"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-05"}],"authorContributionMap":{"ChangruHenryQian":90}},{"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-10"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-09"},{"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":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":"mainClassName \u003d \"duke.Launcher\"","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"-":41,"ChangruHenryQian":21}},{"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":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" protected String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" Parser parser \u003d new Parser(input, this.storage, this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" String response \u003d parser.parse();","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" return response;","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":1,"ChangruHenryQian":63}},{"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":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":32}},{"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":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ChangruHenryQian":53}},{"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-10"},{"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 e92ba1f6..5710bb91 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":{}}]}]},"authorFileTypeContributionMap":{"ChangruHenryQian":{"java":920,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":21,"txt":6}},"authorContributionVariance":{"ChangruHenryQian":23791.129},"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}}}]}]},"authorFileTypeContributionMap":{"ChangruHenryQian":{"java":988,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":21,"txt":6}},"authorContributionVariance":{"ChangruHenryQian":22998.46},"authorDisplayNameMap":{"ChangruHenryQian":"CS2103T-T11-1 QIAN..NGRU"}} diff --git a/DonovanJJ_ip_master/authorship.json b/DonovanJJ_ip_master/authorship.json index e1f48fb5..ae73b7a8 100644 --- a/DonovanJJ_ip_master/authorship.json +++ b/DonovanJJ_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DonovanJJ":2,"-":22}},{"path":"Users/donovan/Documents/Modules/CS2103T/ip/data/ipOutput.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"T|0|borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"D|0|return book|Sunday","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"D|0|return book|2 Dec 2019","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":3}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DonovanJJ":20,"-":40}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" private DialogBox(String text, Image img, String color) {","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" dialog.setStyle(\"-fx-text-fill: \" + color);","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" return new DialogBox(text, img, \"#259911\");","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" var db \u003d new DialogBox(text, img, \"black\");","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":62}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the bot application.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class Duke {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" private String outputPath;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" private Storage data;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" private Ui ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the bot object.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @param filePath String represetation of the relative path","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" this.data \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" this.outputPath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" this.tasks \u003d new TaskList(this.data.loadOutputFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" * Obtains the response by notDuke based on the user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * @param input The string that the user has entered","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" * @return String response of the string input","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" if (!Parser.parsable(input)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" return this.ui.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" if (this.outputPath.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" this.ui.emptyFilePath();","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" return Parser.parse(input, ui, this.tasks, this.data);","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":48}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Class that encapsulates the starting point of the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * Launches the chat application.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * @param args","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":17}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" private Duke duke \u003d new Duke(\"./ipOutput.txt\");","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * Starts up the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * @param stage the primary stage for this application, onto which the application scene can be set.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" } catch (IllegalStateException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":38}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/babyYoda.jpeg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/yoda.jpeg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" DialogBox.getDukeDialog(\"Hello I\u0027m notDuke! What can I do for you?\", dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" * Sets the Duke instance.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" * @param d duke instance","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" if (response.equals(\"Bye. Hope to see you again soon!\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(2));","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" delay.setOnFinished(event -\u003e Platform.exit());","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" delay.play();","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":68}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the logic of analysing the user\u0027s String input.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * Decides on what should be done next based on it","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * Checks if input string is parsable or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * @param input The input string to check","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if the input string is not equal to \"bye\"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" public static boolean parsable(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" return !input.equals(\"bye\");","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" * Creates the tasks based on String input.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" * @param input String input by user","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @return A task object of the appropriate subclass (Deadlines, Events, Todos)","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" * @throws Exception If the input string is not valid","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" public static Task createTask(String input) throws Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" // Splits based on white spaces, identifies based on the relevant /...","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" String[] arrStrings \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" String command \u003d arrStrings[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" return createDeadline(arrStrings);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" return createTodo(arrStrings);","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" return createEvent(arrStrings);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" private static Event createEvent (String[] arrStrings) throws Exception {","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" String from \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" String to \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" boolean completedName \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" boolean completedFrom \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings[i].equals(\"/from\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" completedName \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" } else if (arrStrings[i].equals(\"/to\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" completedFrom \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" } else if (!completedFrom \u0026\u0026 completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" from +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" } else if (completedFrom \u0026\u0026 completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" to +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" name \u003d name.substring(0, name.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" from \u003d from.substring(0, from.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" to \u003d to.substring(0, to.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" return new Event(name, from, to);","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" private static Todo createTodo(String[] arrStrings) throws Exception {","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" name \u003d name.substring(0, name.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" return new Todo(name);","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" * Create a new Deadline object based on the String input which has been split into parts.","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" * @param arrStrings Array of String which has been split from the user input","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" * @return new Deadline Object","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" * @throws Exception When the user did not input any name for the task","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" private static Deadline createDeadline(String[] arrStrings) throws Exception {","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" String deadline \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" boolean completedName \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings[i].equals(\"/by\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" completedName \u003d true;","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" continue;","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" if (completedName) {","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" deadline +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" continue;","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" if (!completedName) {","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"Invalid deadline task!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" name \u003d name.substring(0, name.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" deadline \u003d deadline.substring(0, deadline.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" return new Deadline(name, deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" * Parse the input string by splitting based on whtiespaces.","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" * Sorts the string based on its command","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" * @param input The input string representing the task given by user","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" * @param ui The user interface responsible for sending outputs to the screen","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList ArrayList that stores the tasks loaded from memory","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":" * @param storage Storage that can be written to or read from","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":" public static String parse(String input, Ui ui, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":" assert taskList !\u003d null : \"Should not parse without a taskList!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"DonovanJJ"},"content":" assert storage !\u003d null : \"Should not parse without a storage!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"DonovanJJ"},"content":" assert ui !\u003d null : \"Should not parse without a ui!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"DonovanJJ"},"content":" // Splits the input based on whitespaces.","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"DonovanJJ"},"content":" String command \u003d input.split(\"\\\\s+\")[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage \u003d getResponseMessage(input, ui, taskList, command);","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"DonovanJJ"},"content":" storage.updateTasks(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"DonovanJJ"},"content":" assert responseMessage.equals(\"\") : \"Message returned should never be nothing!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"DonovanJJ"},"content":" private static String getResponseMessage(String input, Ui ui, TaskList taskList, String command) {","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"DonovanJJ"},"content":" switch (command) {","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"DonovanJJ"},"content":" case \"list\":","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.listTask(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"DonovanJJ"},"content":" case \"mark\":","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d markTask(input, ui, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"DonovanJJ"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d unmarkTask(input, ui, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"DonovanJJ"},"content":" case \"delete\":","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d deleteTask(input, ui, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"DonovanJJ"},"content":" case \"find\":","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d findTask(input, ui, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"DonovanJJ"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"DonovanJJ"},"content":" Task task \u003d createTask(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"DonovanJJ"},"content":" boolean isDuplicate \u003d taskList.isDuplicateTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"DonovanJJ"},"content":" if (task !\u003d null \u0026\u0026 !isDuplicate) {","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"DonovanJJ"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayAddTask(task, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayDuplicateTask();","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.showExceptionError(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"DonovanJJ"},"content":" private static String findTask(String input, Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"DonovanJJ"},"content":" String word \u003d input.split(\"\\\\s+\")[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e matchingList \u003d taskList.find(word);","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayMatchingTask(matchingList);","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":180,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":181,"author":{"gitId":"DonovanJJ"},"content":" private static String markTask(String input, Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"DonovanJJ"},"content":" int choice;","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d getChoice(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"DonovanJJ"},"content":" taskList.mark(choice);","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayMarkTask(taskList, choice);","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"DonovanJJ"},"content":" private static String unmarkTask(String input, Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":192,"author":{"gitId":"DonovanJJ"},"content":" int choice;","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d getChoice(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"DonovanJJ"},"content":" taskList.unmark(choice);","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayUnmarkTask(taskList, choice);","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"DonovanJJ"},"content":" private static String deleteTask(String input, Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"DonovanJJ"},"content":" int choice;","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d getChoice(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"DonovanJJ"},"content":" Task removedTask \u003d taskList.delete(choice);","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayDeleteTask(removedTask, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":208,"author":{"gitId":"DonovanJJ"},"content":" private static int getChoice(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":209,"author":{"gitId":"DonovanJJ"},"content":" int choice;","lastModifiedDate":"2023-09-10"},{"lineNumber":210,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d Integer.parseInt(input.split(\"\\\\s+\")[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":211,"author":{"gitId":"DonovanJJ"},"content":" return choice;","lastModifiedDate":"2023-09-10"},{"lineNumber":212,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":213,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":213}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import java.util.function.Consumer;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the Persistent data storage of the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * Data is stored in a text file for convenience","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private String outputPath;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" this.outputPath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" * Creates the output file if does not exist. Also creates directories that are missing.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @return File filePointer to output file","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" public File createOutputFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" File filePointer \u003d new File(this.outputPath);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" if (filePointer.exists()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" return filePointer;","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" createOutputDirFile(filePointer);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" return filePointer;","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" * Creates the output directory and file if they do not exist.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" * @param filePointer Pointer to the preferred output location","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" private void createOutputDirFile(File filePointer) {","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" File directory \u003d new File(new File(this.outputPath).getParent());","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" directory.mkdirs();","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" filePointer.createNewFile();","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" * Loads the data from the Storage memory to the temporary Tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList Contains the list of Task objects loaded from memory","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" * @throws FileNotFoundException If no file is found at the filepath specified","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e loadOutputFile() throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" File filePointer \u003d this.createOutputFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" Scanner storageScanner \u003d new Scanner(filePointer);","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e arrList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" loadStorageByLine(storageScanner, arrList);","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" storageScanner.close();","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" assert arrList !\u003d null : \"Array list read from storage can be empty but NOT NULL!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" return arrList;","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" * Reads and insert task into the array list line by line from storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" * @param storageScanner Scanner that reads in input line by line","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList Array list to insert tasks into","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" private static void loadStorageByLine(Scanner storageScanner, ArrayList\u003cTask\u003e arrList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" while (storageScanner.hasNext()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" String item \u003d storageScanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" if (!item.equals(\"\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" // process the item","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" // T|1|read book","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" String[] itemParts \u003d item.split(\"\\\\|\");","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" insertTask(arrList, itemParts);","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" * Creates respective tasks based on the user input split into parts.","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList arraylist to add the task to","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" * @param itemParts Parts of the String representation of task in the storage","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" private static void insertTask(ArrayList\u003cTask\u003e arrList, String[] itemParts) {","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" boolean itemComplete \u003d itemParts[1].equals(\"0\");","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d itemParts[2];","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" switch (itemParts[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Todo(name, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" String deadline \u003d itemParts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Deadline(name, deadline, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" String from \u003d itemParts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" String to \u003d itemParts[4];","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Event(name, from, to, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(\"Invalid Event format in storage!\");","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(\"Error when reading file\");","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":" * Writes the data from TaskList to permanent storage at the file output location.","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList TaskList object that encapsulates the arraylist data structure, contains the updated tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"DonovanJJ"},"content":" public void updateTasks(TaskList taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"DonovanJJ"},"content":" FileWriter writer \u003d new FileWriter(outputPath, false);","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"DonovanJJ"},"content":" Consumer\u003cTask\u003e storeTask \u003d task -\u003e task.writeToFile(writer);","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"DonovanJJ"},"content":" taskList.getArrList().forEach(storeTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"DonovanJJ"},"content":" writer.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":141}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" * Represents the temporary storage used when running the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private ArrayList\u003cTask\u003e arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * Constructs TaskList instance to store list of Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList ArrayList containing Tasks of the user","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" public TaskList(ArrayList\u003cTask\u003e arrList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" this.arrList \u003d arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" * Returns the encapsulated ArrayList.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList Containing the Task objects","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e getArrList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * Returnst he size of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" * @return int Size of list of tasks from the ArrayList","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" public int size() {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" * Marks and updates the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" * @param choice Number input from the user, deciding which task index to mark (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" public void mark(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.get(choice - 1).markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" * Un-marks and updates the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" * @param choice Number input from the user, deciding which task index to un-mark (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" public void unmark(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.get(choice - 1).markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" * Add task to the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task object to be added to the tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" * Delete task of particular choice from the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the choice of task to be removed from tasklist (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" * @return Task that has been deleted","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" public Task delete(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.remove(choice - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" * Returns a list of tasks that contain the word as the name.","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" * @param word String input by user representing the task name to correspond to","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList of tasks that corresponds to the word input","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e find(String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" Predicate\u003cTask\u003e findName \u003d task -\u003e task.containsName(word);","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e tempList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" for (Task task : this.arrList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" if (findName.test(task)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" tempList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" return tempList;","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" * Checks if there is a duplicate existing task.","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task to check with in the taskList","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" * @return booleam, true if there is a equal task is found, else false","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" public boolean isDuplicateTask(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" for (Task existingTask : this.arrList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" if (existingTask.equals(task)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" * Returns the String representation of the selected Task choice that is shown when listed.","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the choice of task to represent from tasklist (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" * @return String representation of the Task in the tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" public String taskToString(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.get(choice - 1).toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":122}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the response and User Interface of the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" private final String EXIT_MESSAGE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" * UI constructor.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" public Ui() {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" * Prints the error message in an exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" * @param e Exception which message should be printed out","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" public String showExceptionError(Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" return String.format(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * Print that the file path is empty.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" * */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" public void emptyFilePath() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(\"File path is empty!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" * Prints out the exit message when user exits the program.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" public String exit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" return this.EXIT_MESSAGE;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" * Prints the String representation of tasks in the given tasklist with numbering for choice.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList Tasklist to be listed from","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" public String listTask(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e arrList \u003d taskList.getArrList();","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" message \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" for (Task task : arrList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" counter++;","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" message +\u003d String.format(\"%d.%s\\n\", counter, task.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" return message;","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when user marks a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks Tasklist containing the task to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the user\u0027s choice of task to mark","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" public String displayMarkTask(TaskList tasks, int choice) {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" + tasks.taskToString(choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when user unmarks a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks Tasklist containing the task to be unmarked","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the user\u0027s choice of task to mark","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" public String displayUnmarkTask(TaskList tasks, int choice) {","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" + tasks.taskToString(choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when a user deletes a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" * @param removedTask Task that is removed","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks The list of tasks that the task was removed from","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" public String displayDeleteTask(Task removedTask, TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" + \" %s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" + \"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" removedTask.toString(), tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when a user adds a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" * @param addedTask Task that is added","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks The list of tasks that the task was removed from","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" public String displayAddTask(Task addedTask, TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" + \" %s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" + \"Now you have %d tasks in the list.\\n\", addedTask.toString(), tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" * Prints the Task that is found using the Find function.","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList List of tasks to display","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" public String displayMatchingTask(ArrayList\u003cTask\u003e arrList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" int size \u003d arrList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" String msg \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" if (size \u003e 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" msg +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c\u003d size; i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" msg +\u003d String.format(\"%d.%s\\n\", i, arrList.get(i - 1).toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" return msg;","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":" * Returns a string to tell user that the duplicate task is rejected.","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"DonovanJJ"},"content":" * @return String response message to duplicate task","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"DonovanJJ"},"content":" public String displayDuplicateTask() {","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage \u003d \"This is a duplicate task!\\nTask was not added\";","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":135}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the Deadline Task.","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private String deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @param deadline String representaiton for the deadline of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d Deadline.processStringDeadline(deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" * Constructs a Deadline Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" * @param deadline String representaiton for the deadline of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value for when the Deadline task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" public Deadline(String name, String deadline, boolean isComplete) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d Deadline.processStringDeadline(deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" private static String processStringDeadline(String deadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(deadline, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy\");","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" deadline \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" return deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" return deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" * Checks if task and another object are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task to be compared against","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both tasks are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" Deadline temp \u003d (Deadline) task;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" return temp.deadline.equals(this.deadline) \u0026\u0026 this.getName().equals(temp.getName());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" * Write the Deadline object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"D\" + \"|\" + marking + \"|\" + super.getName() + \"|\" + this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the String representation of the Deadline object.","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" * @return String","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[D]%s %s (by: %s)\", super.getMarking(), super.name, this.deadline);","lastModifiedDate":"2023-08-20"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":93}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the task.Events Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private String from;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" private String to;","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * Constructs Event Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * @param from String representation for when the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" * @param to String representation for when the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" public Event(String name, String from, String to) throws Exception {","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" if (!Event.isValidDates(from, to)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"Event start date should be before the end date!\");","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" };","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" * Constructs Event Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * @param name name String representation for the name of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" * @param from String representation for when the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" * @param to String representation for when the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value to show if Event has been marked as complete","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" public Event(String name, String from, String to, boolean isComplete) throws Exception {","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" if (!Event.isValidDates(from, to)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"Event start date should be before the end date!\");","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" };","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" private String getTo() {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" return this.to;","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" private String getFrom() {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" return this.from;","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" * Verifies if the dates, from is before to.","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" * Dates not in \"d/M/yyyy HHmm\" format are accepted automatically","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" * @param from String representation of the Event start datetime","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" * @param to String representation of the Event end datetime","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" * @return true if valid start and end datetime, otherwise false","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" private static boolean isValidDates(String from, String to) {","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" LocalDateTime fromDate \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" LocalDateTime toDate \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" if (fromDate.isBefore(toDate)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" // The dates are not of the date format","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" * Checks if both objects are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task object to be compared agianst","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both objects are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" return this.to.equals(eventTask.getTo()) \u0026\u0026 this.getName().equals(eventTask.getName())","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" \u0026\u0026 this.from.equals(eventTask.getFrom());","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" * Write the Event object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"E\" + \"|\" + marking + \"|\" + super.getName() + \"|\" + this.from + \"|\" + this.to);","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the String representation of the task.Events object.","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" * @return String","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[E]%s %s (from: %s to: %s)\", super.getMarking(), super.name, this.from, this.to);","lastModifiedDate":"2023-08-20"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":124}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the abstract concept of a Task.","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" protected boolean isComplete;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" protected String name;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" protected Task(String name) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" * @param name String represetnationf or the name of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value representing if the Task has been marked as complete","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" public Task(String name, boolean isComplete) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d isComplete;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" * Check if task is complete.","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * @return boolean. True if completed","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" public boolean isComplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" return this.isComplete;","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" * Marks the task to be completed.","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" public void markDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" * Marks the task to be incomplete.","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" * Obtains the String representation of whether task is completed.","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" * @return String. Symbol of completion","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" public String getMarking() {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" if (isComplete()) {","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" return \"[X]\";","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" return \"[ ]\";","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" * Returns the name of the Task Object.","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" * @return String representation of its name","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" public String getName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" return this.name;","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" * Checks if given word String is a substring of its name.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" * @param word String repreentingt the name substring they are looking for","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if word is a substring of the name","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" public Boolean containsName(String word) {","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" return this.name.contains(word);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" abstract public void writeToFile(FileWriter fileWriter);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":87}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" * Emcapsulates a Todo task","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" public Todo(String name, boolean isComplete) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * Checks if both objects are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" * @param o Object to be compared against","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both objects are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" if (o instanceof Todo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" Todo task \u003d (Todo) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" return super.getName().equals(task.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" * Write the Todo object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"T\" + \"|\" + marking + \"|\" + super.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the string representation of the Todo Object.","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" * @return String Represents the Todo","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[T]%s %s\", super.getMarking(), super.name);","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":62}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":19}},{"path":"src/test/java/duke/DeadlinesTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"public class DeadlinesTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" public void stringRepresentation_validDayDeadline_repTest() {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" Deadline task \u003d new Deadline(\"Testname1\", \"Tuesday\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"[D][ ] Testname1 (by: Tuesday)\", task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" public void stringRepresentation_validDateDeadline_repTest() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" Deadline task \u003d new Deadline(\"Testname1\", \"2/12/2019 1800\");","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"[D][ ] Testname1 (by: 2 Dec 2019)\", task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":22}},{"path":"src/test/java/duke/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class EventTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_fromBeforeToAfter_validDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" assertDoesNotThrow(() -\u003e {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" new Event(\"event1\", \"12/4/2022 1500\", \"12/6/2022 1500\");","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" });","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_fromBeforeToAfterSameDay_validDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" assertDoesNotThrow(() -\u003e new Event(\"event1\", \"12/2/2022 1500\", \"12/2/2022 1600\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_fromAfterToBeforeSameDay_invalidDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" assertThrows(Exception.class, () -\u003e new Event(\"event1\", \"12/2/2022 1600\", \"12/2/2022 1300\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_fromToEqual_invalidDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" assertThrows(Exception.class, () -\u003e new Event(\"event1\", \"12/2/2022 1300\", \"12/2/2022 1300\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_fromAfterToBefore_invalidDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" assertThrows(Exception.class, () -\u003e new Event(\"event1\", \"12/6/2022 1500\", \"12/2/2022 1500\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_nonDateFormat_validDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" assertDoesNotThrow(() -\u003e new Event(\"event1\", \"Mon 12dec\", \"Tuesday 11nov\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_singleNonDateFormat_validDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" assertDoesNotThrow(() -\u003e new Event(\"event1\", \"Mon 12dec\", \"12/2/2022 1500\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"DonovanJJ":48}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_invalidTodoArgument_exceptionThrown() {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"todo\";","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" Parser.createTask(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validTodo_successfulToDoCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"todo read book\";","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Todo(\"read book\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validDeadline_successfulDeadlineCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book /by Sunday\";","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book\", \"Sunday\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_missingByClauseDeadline_invalidExceptionThrown() {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book Sunday\";","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book Sunday\", \"Sunday\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"Invalid deadline task!\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validDate_successfulDeadlineDatCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book /by 2/12/2019 1800\";","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book\", \"2 Dec 2019\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"Invalid deadline task!\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validEvent_successfulEventCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"event project meeting /from Mon 2pm /to 4pm\";","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Event(\"project meeting\", \"Mon 2pm\", \"4pm\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":71}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"task","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"delete 3","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"DonovanJJ":13}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DonovanJJ":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DonovanJJ":2,"-":22}},{"path":"Users/donovan/Documents/Modules/CS2103T/ip/data/ipOutput.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"T|0|borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"D|0|return book|Sunday","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"D|0|return book|2 Dec 2019","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":3}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DonovanJJ":20,"-":40}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"# TaskBuddy User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"TaskBuddy is a chatbot that helps to maange tasks which you can communicate with using a command line interface(CLI) like GUI","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"All you need is java 11 installed in your device and your good to go!","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"### Listing all tasks: ```list```","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"Lists all tasks in your task list. ","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"Format: ```list```","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"### Adding a todo task: ```todo```","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"Adds a todo task to your task list. ","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"Format: ```todo TASK_NAME``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"* ```todo sweeping floor``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"* ```todo shower```","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":"### Adding an event task: ```event```","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":"Adds a event to your task list. ","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":"Format: ```event EVENT_NAME /from START_DATE /to END_DATE ``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"* ```event project meeting /from Mon 2pm /to 4pm``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":"* ```event project meeting /from 12/2/2023 1500 /to 14/3/2023```","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":"### Adding a deadline task: ```deadline```","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":"Adds a deadline task to your task list. ","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"Format: ```deadline TASK_NAME /by DEADLINE``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":"* ```deadline do homework /by no idea :-p``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":"* ```deadline wash dishes /by asap```","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":"### Delete an existing task: ```delete``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"Deletes a task from your task list. Use ```list``` to obtain the index of the task ","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":"Format: ```delete TASK_INDEX``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":"* ```delete 1```","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":"* ```delete 2```","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":"### Exiting the program: ```bye```","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":"Exit the program. Tasks are automatically saved!","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"Format: ```bye```","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":"* ```bye```","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":"### `todo` - Creates a todo task","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"Adds a todo task to your task list. ","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":"Example of usage: ","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":"```todo sweep the floor```","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" [T][] sweep the floor","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":"Now you have 3 tasks in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":59,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2019-07-29"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":"### `event` - Creates an event task","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"Adds a event to your task list. ","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2019-07-29"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":"```event project meeting /from 12/2/2023 1500 /to 14/3/2023``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":"Got it. I\u0027ve added this task.","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" [E][] project meeting (from: 12/2/2023 1500 to: 14/3/2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":"Now you have 4 tasks in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":"### `deadline` - Creates a deadline task","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":"Adds a deadline task to your task list. ","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":"```deadline TASK_NAME /by DEADLINE``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" [D][] wash dishes (by: asap)","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":"Now you have 5 tasks in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":"### `list` - Lists all tasks in your list","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":"Displays all your task in your list. ","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":"Can be used to show the task index required for deletion/marking ","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":"Example of usage: ","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":"```list```","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":"List of all tasks in the list at the moment: ","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":"1.[T][] Wipe the bookshelf","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":"2.[T][X] Do homework","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":"3.[E][] project meeting (from: 12/2/2023 1500 to: 14/3/2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":"4.[D][] wash dishes (by: asap)","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":"### `delete` - Deletes an existing task in the list","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":"Deletes a task from your task list. Use ```list``` to obtain the index of the task ","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":"Example of usage: ","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":"```delete TASK_INDEX``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":"Noted. I\u0027ve removed this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" [T][] sweep the floor","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":"Now you have 4 tasks in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":"### `mark` - Marks a task as complete in the list","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":"Marks a task in your task list as complete. Use ```list``` to obtain the index of the task ","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":"Example of usage: ","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":"```mark 3```","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":"Expected outcome: ","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":"The third task in the list is marked","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":"nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":"[E][X] project meeting (from: 12/2/2023 1500 to: 14/3/2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":"### `unmark` - Marks a task as incomplete in the list","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":"Marks a task in your task list as incomplete. Use ```list``` to obtain the index of the task ","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":"Example of usage: ","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":"```unmark 3```","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":"Expected outcome: ","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":"The third task in the list is unmarked","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":"OK, I\u0027ve marked this task as not done yet:","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":"[E][] project meeting (from: 12/2/2023 1500 to: 14/3/2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"DonovanJJ"},"content":"### `bye` - Exits the program","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"DonovanJJ"},"content":"Exit the program. Tasks are automatically saved! ","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"DonovanJJ"},"content":"Example of usage: ","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"DonovanJJ"},"content":"```bye``` ","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"DonovanJJ"},"content":"Expected outcome: ","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"DonovanJJ"},"content":"Displays a goodbye message and closes the application after a delay","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"DonovanJJ"},"content":"* ```Bye. Hope to see you again soon!```","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"DonovanJJ":113,"-":23}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" private DialogBox(String text, Image img, String color) {","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" dialog.setStyle(\"-fx-text-fill: \" + color);","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" return new DialogBox(text, img, \"#259911\");","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" var db \u003d new DialogBox(text, img, \"black\");","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":62}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the bot application.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class Duke {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" private String outputPath;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" private Storage data;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" private Ui ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the bot object.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @param filePath String represetation of the relative path","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" this.data \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" this.outputPath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" this.tasks \u003d new TaskList(this.data.loadOutputFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" * Obtains the response by notDuke based on the user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * @param input The string that the user has entered","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" * @return String response of the string input","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" if (!Parser.parsable(input)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" return this.ui.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" if (this.outputPath.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" this.ui.emptyFilePath();","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" return Parser.parse(input, ui, this.tasks, this.data);","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":48}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Class that encapsulates the starting point of the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * Launches the chat application.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * @param args","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":17}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" private Duke duke \u003d new Duke(\"./ipOutput.txt\");","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * Starts up the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * @param stage the primary stage for this application, onto which the application scene can be set.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" stage.setTitle(\"TaskBuddy\");","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" } catch (IllegalStateException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":39}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/keanu.jpeg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/robot.jpeg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" DialogBox.getDukeDialog(\"Hello I\u0027m TaskBuddy! What can I do for you?\", dukeImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" * Sets the Duke instance.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" * @param d duke instance","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" if (response.equals(\"Bye. Hope to see you again soon!\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(2));","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" delay.setOnFinished(event -\u003e Platform.exit());","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" delay.play();","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":67}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the logic of analysing the user\u0027s String input.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * Decides on what should be done next based on it","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * Checks if input string is parsable or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * @param input The input string to check","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if the input string is not equal to \"bye\"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" public static boolean parsable(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" return !input.equals(\"bye\");","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" * Creates the tasks based on String input.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" * @param input String input by user","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @return A task object of the appropriate subclass (Deadlines, Events, Todos)","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" * @throws Exception If the input string is not valid","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" public static Task createTask(String input) throws Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" // Splits based on white spaces, identifies based on the relevant /...","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" String[] arrStrings \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" String command \u003d arrStrings[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" return createDeadline(arrStrings);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" return createTodo(arrStrings);","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" return createEvent(arrStrings);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" private static Event createEvent (String[] arrStrings) throws Exception {","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" String from \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" String to \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" boolean completedName \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" boolean completedFrom \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings[i].equals(\"/from\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" completedName \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" } else if (arrStrings[i].equals(\"/to\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" completedFrom \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" } else if (!completedFrom \u0026\u0026 completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" from +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" } else if (completedFrom \u0026\u0026 completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" to +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" name \u003d name.substring(0, name.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" from \u003d from.substring(0, from.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" to \u003d to.substring(0, to.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" return new Event(name, from, to);","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" private static Todo createTodo(String[] arrStrings) throws Exception {","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" name \u003d name.substring(0, name.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" return new Todo(name);","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" * Create a new Deadline object based on the String input which has been split into parts.","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" * @param arrStrings Array of String which has been split from the user input","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" * @return new Deadline Object","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" * @throws Exception When the user did not input any name for the task","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" private static Deadline createDeadline(String[] arrStrings) throws Exception {","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" String deadline \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" boolean completedName \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings[i].equals(\"/by\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" completedName \u003d true;","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" continue;","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" if (completedName) {","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" deadline +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" continue;","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" if (!completedName) {","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"Invalid deadline task!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" name \u003d name.substring(0, name.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" deadline \u003d deadline.substring(0, deadline.length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" return new Deadline(name, deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" * Parse the input string by splitting based on whtiespaces.","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" * Sorts the string based on its command","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" * @param input The input string representing the task given by user","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" * @param ui The user interface responsible for sending outputs to the screen","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList ArrayList that stores the tasks loaded from memory","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":" * @param storage Storage that can be written to or read from","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":" public static String parse(String input, Ui ui, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":" assert taskList !\u003d null : \"Should not parse without a taskList!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"DonovanJJ"},"content":" assert storage !\u003d null : \"Should not parse without a storage!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"DonovanJJ"},"content":" assert ui !\u003d null : \"Should not parse without a ui!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"DonovanJJ"},"content":" // Splits the input based on whitespaces.","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"DonovanJJ"},"content":" String command \u003d input.split(\"\\\\s+\")[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage \u003d getResponseMessage(input, ui, taskList, command);","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"DonovanJJ"},"content":" storage.updateTasks(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"DonovanJJ"},"content":" assert responseMessage.equals(\"\") : \"Message returned should never be nothing!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"DonovanJJ"},"content":" private static String getResponseMessage(String input, Ui ui, TaskList taskList, String command) {","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"DonovanJJ"},"content":" switch (command) {","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"DonovanJJ"},"content":" case \"list\":","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.listTask(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"DonovanJJ"},"content":" case \"mark\":","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d markTask(input, ui, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"DonovanJJ"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d unmarkTask(input, ui, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"DonovanJJ"},"content":" case \"delete\":","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d deleteTask(input, ui, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"DonovanJJ"},"content":" case \"find\":","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d findTask(input, ui, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"DonovanJJ"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"DonovanJJ"},"content":" Task task \u003d createTask(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"DonovanJJ"},"content":" boolean isDuplicate \u003d taskList.isDuplicateTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"DonovanJJ"},"content":" if (task !\u003d null \u0026\u0026 !isDuplicate) {","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"DonovanJJ"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayAddTask(task, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayDuplicateTask();","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.showExceptionError(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"DonovanJJ"},"content":" private static String findTask(String input, Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"DonovanJJ"},"content":" String word \u003d input.split(\"\\\\s+\")[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e matchingList \u003d taskList.find(word);","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayMatchingTask(matchingList);","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":180,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":181,"author":{"gitId":"DonovanJJ"},"content":" private static String markTask(String input, Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"DonovanJJ"},"content":" int choice;","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d getChoice(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"DonovanJJ"},"content":" taskList.mark(choice);","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayMarkTask(taskList, choice);","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"DonovanJJ"},"content":" private static String unmarkTask(String input, Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":192,"author":{"gitId":"DonovanJJ"},"content":" int choice;","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d getChoice(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"DonovanJJ"},"content":" taskList.unmark(choice);","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayUnmarkTask(taskList, choice);","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"DonovanJJ"},"content":" private static String deleteTask(String input, Ui ui, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"DonovanJJ"},"content":" int choice;","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d getChoice(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"DonovanJJ"},"content":" Task removedTask \u003d taskList.delete(choice);","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"DonovanJJ"},"content":" responseMessage \u003d ui.displayDeleteTask(removedTask, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":208,"author":{"gitId":"DonovanJJ"},"content":" private static int getChoice(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":209,"author":{"gitId":"DonovanJJ"},"content":" int choice;","lastModifiedDate":"2023-09-10"},{"lineNumber":210,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d Integer.parseInt(input.split(\"\\\\s+\")[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":211,"author":{"gitId":"DonovanJJ"},"content":" return choice;","lastModifiedDate":"2023-09-10"},{"lineNumber":212,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":213,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":213}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import java.util.function.Consumer;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the Persistent data storage of the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * Data is stored in a text file for convenience","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private String outputPath;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" this.outputPath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" * Creates the output file if does not exist. Also creates directories that are missing.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @return File filePointer to output file","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" public File createOutputFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" File filePointer \u003d new File(this.outputPath);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" if (filePointer.exists()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" return filePointer;","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" createOutputDirFile(filePointer);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" return filePointer;","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" * Creates the output directory and file if they do not exist.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" * @param filePointer Pointer to the preferred output location","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" private void createOutputDirFile(File filePointer) {","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" File directory \u003d new File(new File(this.outputPath).getParent());","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" directory.mkdirs();","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" filePointer.createNewFile();","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" * Loads the data from the Storage memory to the temporary Tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList Contains the list of Task objects loaded from memory","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" * @throws FileNotFoundException If no file is found at the filepath specified","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e loadOutputFile() throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" File filePointer \u003d this.createOutputFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" Scanner storageScanner \u003d new Scanner(filePointer);","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e arrList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" loadStorageByLine(storageScanner, arrList);","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" storageScanner.close();","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" assert arrList !\u003d null : \"Array list read from storage can be empty but NOT NULL!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" return arrList;","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" * Reads and insert task into the array list line by line from storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" * @param storageScanner Scanner that reads in input line by line","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList Array list to insert tasks into","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" private static void loadStorageByLine(Scanner storageScanner, ArrayList\u003cTask\u003e arrList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" while (storageScanner.hasNext()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" String item \u003d storageScanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" if (!item.equals(\"\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" // process the item","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" // T|1|read book","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" String[] itemParts \u003d item.split(\"\\\\|\");","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" insertTask(arrList, itemParts);","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" * Creates respective tasks based on the user input split into parts.","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList arraylist to add the task to","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" * @param itemParts Parts of the String representation of task in the storage","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" private static void insertTask(ArrayList\u003cTask\u003e arrList, String[] itemParts) {","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" boolean itemComplete \u003d itemParts[1].equals(\"0\");","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d itemParts[2];","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" switch (itemParts[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Todo(name, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" String deadline \u003d itemParts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Deadline(name, deadline, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" String from \u003d itemParts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" String to \u003d itemParts[4];","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Event(name, from, to, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(\"Invalid Event format in storage!\");","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(\"Error when reading file\");","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":" * Writes the data from TaskList to permanent storage at the file output location.","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList TaskList object that encapsulates the arraylist data structure, contains the updated tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"DonovanJJ"},"content":" public void updateTasks(TaskList taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"DonovanJJ"},"content":" FileWriter writer \u003d new FileWriter(outputPath, false);","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"DonovanJJ"},"content":" Consumer\u003cTask\u003e storeTask \u003d task -\u003e task.writeToFile(writer);","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"DonovanJJ"},"content":" taskList.getArrList().forEach(storeTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"DonovanJJ"},"content":" writer.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":141}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" * Represents the temporary storage used when running the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private ArrayList\u003cTask\u003e arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * Constructs TaskList instance to store list of Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList ArrayList containing Tasks of the user","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" public TaskList(ArrayList\u003cTask\u003e arrList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" this.arrList \u003d arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" * Returns the encapsulated ArrayList.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList Containing the Task objects","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e getArrList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * Returnst he size of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" * @return int Size of list of tasks from the ArrayList","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" public int size() {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" * Marks and updates the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" * @param choice Number input from the user, deciding which task index to mark (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" public void mark(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.get(choice - 1).markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" * Un-marks and updates the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" * @param choice Number input from the user, deciding which task index to un-mark (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" public void unmark(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.get(choice - 1).markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" * Add task to the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task object to be added to the tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" * Delete task of particular choice from the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the choice of task to be removed from tasklist (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" * @return Task that has been deleted","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" public Task delete(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.remove(choice - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" * Returns a list of tasks that contain the word as the name.","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" * @param word String input by user representing the task name to correspond to","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList of tasks that corresponds to the word input","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e find(String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" Predicate\u003cTask\u003e findName \u003d task -\u003e task.containsName(word);","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e tempList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" for (Task task : this.arrList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" if (findName.test(task)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" tempList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" return tempList;","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" * Checks if there is a duplicate existing task.","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task to check with in the taskList","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" * @return booleam, true if there is a equal task is found, else false","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" public boolean isDuplicateTask(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" for (Task existingTask : this.arrList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" if (existingTask.equals(task)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" * Returns the String representation of the selected Task choice that is shown when listed.","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the choice of task to represent from tasklist (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" * @return String representation of the Task in the tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" public String taskToString(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.get(choice - 1).toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":122}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the response and User Interface of the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" private final String EXIT_MESSAGE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" * UI constructor.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" public Ui() {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" * Prints the error message in an exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" * @param e Exception which message should be printed out","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" public String showExceptionError(Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" return String.format(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * Print that the file path is empty.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" * */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" public void emptyFilePath() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(\"File path is empty!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" * Prints out the exit message when user exits the program.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" public String exit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" return this.EXIT_MESSAGE;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" * Prints the String representation of tasks in the given tasklist with numbering for choice.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList Tasklist to be listed from","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" public String listTask(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e arrList \u003d taskList.getArrList();","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" message \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" for (Task task : arrList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" counter++;","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" message +\u003d String.format(\"%d.%s\\n\", counter, task.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" return message;","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when user marks a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks Tasklist containing the task to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the user\u0027s choice of task to mark","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" public String displayMarkTask(TaskList tasks, int choice) {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" + tasks.taskToString(choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when user unmarks a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks Tasklist containing the task to be unmarked","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the user\u0027s choice of task to mark","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" public String displayUnmarkTask(TaskList tasks, int choice) {","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" + tasks.taskToString(choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when a user deletes a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" * @param removedTask Task that is removed","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks The list of tasks that the task was removed from","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" public String displayDeleteTask(Task removedTask, TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" + \" %s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" + \"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" removedTask.toString(), tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when a user adds a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" * @param addedTask Task that is added","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks The list of tasks that the task was removed from","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" public String displayAddTask(Task addedTask, TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" + \" %s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" + \"Now you have %d tasks in the list.\\n\", addedTask.toString(), tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" * Prints the Task that is found using the Find function.","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList List of tasks to display","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" public String displayMatchingTask(ArrayList\u003cTask\u003e arrList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" int size \u003d arrList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" String msg \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" if (size \u003e 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" msg +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c\u003d size; i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" msg +\u003d String.format(\"%d.%s\\n\", i, arrList.get(i - 1).toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" return msg;","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":" * Returns a string to tell user that the duplicate task is rejected.","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"DonovanJJ"},"content":" * @return String response message to duplicate task","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"DonovanJJ"},"content":" public String displayDuplicateTask() {","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"DonovanJJ"},"content":" String responseMessage \u003d \"This is a duplicate task!\\nTask was not added\";","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"DonovanJJ"},"content":" return responseMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":135}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the Deadline Task.","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private String deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @param deadline String representaiton for the deadline of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d Deadline.processStringDeadline(deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" * Constructs a Deadline Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" * @param deadline String representaiton for the deadline of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value for when the Deadline task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" public Deadline(String name, String deadline, boolean isComplete) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d Deadline.processStringDeadline(deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" private static String processStringDeadline(String deadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(deadline, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy\");","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" deadline \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" return deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" return deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" * Checks if task and another object are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task to be compared against","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both tasks are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" Deadline temp \u003d (Deadline) task;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" return temp.deadline.equals(this.deadline) \u0026\u0026 this.getName().equals(temp.getName());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" * Write the Deadline object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"D\" + \"|\" + marking + \"|\" + super.getName() + \"|\" + this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the String representation of the Deadline object.","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" * @return String","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[D]%s %s (by: %s)\", super.getMarking(), super.name, this.deadline);","lastModifiedDate":"2023-08-20"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":93}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the task.Events Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private String from;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" private String to;","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * Constructs Event Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * @param from String representation for when the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" * @param to String representation for when the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" public Event(String name, String from, String to) throws Exception {","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" if (!Event.isValidDates(from, to)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"Event start date should be before the end date!\");","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" };","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" * Constructs Event Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * @param name name String representation for the name of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" * @param from String representation for when the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" * @param to String representation for when the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value to show if Event has been marked as complete","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" public Event(String name, String from, String to, boolean isComplete) throws Exception {","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" if (!Event.isValidDates(from, to)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"Event start date should be before the end date!\");","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" };","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" private String getTo() {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" return this.to;","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" private String getFrom() {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" return this.from;","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" * Verifies if the dates, from is before to.","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" * Dates not in \"d/M/yyyy HHmm\" format are accepted automatically","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" * @param from String representation of the Event start datetime","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" * @param to String representation of the Event end datetime","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" * @return true if valid start and end datetime, otherwise false","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" private static boolean isValidDates(String from, String to) {","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" LocalDateTime fromDate \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" LocalDateTime toDate \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" if (fromDate.isBefore(toDate)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" // The dates are not of the date format","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" * Checks if both objects are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task object to be compared agianst","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both objects are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" return this.to.equals(eventTask.getTo()) \u0026\u0026 this.getName().equals(eventTask.getName())","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" \u0026\u0026 this.from.equals(eventTask.getFrom());","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" * Write the Event object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"E\" + \"|\" + marking + \"|\" + super.getName() + \"|\" + this.from + \"|\" + this.to);","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the String representation of the task.Events object.","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" * @return String","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[E]%s %s (from: %s to: %s)\", super.getMarking(), super.name, this.from, this.to);","lastModifiedDate":"2023-08-20"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":124}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the abstract concept of a Task.","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" protected boolean isComplete;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" protected String name;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" protected Task(String name) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" * @param name String represetnationf or the name of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value representing if the Task has been marked as complete","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" public Task(String name, boolean isComplete) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d isComplete;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" * Check if task is complete.","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * @return boolean. True if completed","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" public boolean isComplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" return this.isComplete;","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" * Marks the task to be completed.","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" public void markDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" * Marks the task to be incomplete.","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" * Obtains the String representation of whether task is completed.","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" * @return String. Symbol of completion","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" public String getMarking() {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" if (isComplete()) {","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" return \"[X]\";","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" return \"[ ]\";","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" * Returns the name of the Task Object.","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" * @return String representation of its name","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" public String getName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" return this.name;","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" * Checks if given word String is a substring of its name.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" * @param word String repreentingt the name substring they are looking for","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if word is a substring of the name","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" public Boolean containsName(String word) {","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" return this.name.contains(word);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" abstract public void writeToFile(FileWriter fileWriter);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":87}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" * Emcapsulates a Todo task","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" public Todo(String name, boolean isComplete) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * Checks if both objects are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" * @param o Object to be compared against","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both objects are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" if (o instanceof Todo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" Todo task \u003d (Todo) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" return super.getName().equals(task.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" * Write the Todo object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"T\" + \"|\" + marking + \"|\" + super.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the string representation of the Todo Object.","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" * @return String Represents the Todo","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[T]%s %s\", super.getMarking(), super.name);","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":62}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"800.0\" prefWidth\u003d\"900.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-16"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"760.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"50.0\" prefWidth\u003d\"750.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"750.0\" layoutY\u003d\"750.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"150.0\" text\u003d\"Send\" textAlignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" \u003cFont name\u003d\"System Bold\" size\u003d\"27.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"750.0\" prefWidth\u003d\"900.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" layoutY\u003d\"50.0\" prefHeight\u003d\"750.0\" prefWidth\u003d\"900.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":23}},{"path":"src/test/java/duke/DeadlinesTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"public class DeadlinesTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" public void stringRepresentation_validDayDeadline_repTest() {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" Deadline task \u003d new Deadline(\"Testname1\", \"Tuesday\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"[D][ ] Testname1 (by: Tuesday)\", task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" public void stringRepresentation_validDateDeadline_repTest() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" Deadline task \u003d new Deadline(\"Testname1\", \"2/12/2019 1800\");","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"[D][ ] Testname1 (by: 2 Dec 2019)\", task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":22}},{"path":"src/test/java/duke/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class EventTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_fromBeforeToAfter_validDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" assertDoesNotThrow(() -\u003e {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" new Event(\"event1\", \"12/4/2022 1500\", \"12/6/2022 1500\");","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" });","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_fromBeforeToAfterSameDay_validDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" assertDoesNotThrow(() -\u003e new Event(\"event1\", \"12/2/2022 1500\", \"12/2/2022 1600\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_fromAfterToBeforeSameDay_invalidDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" assertThrows(Exception.class, () -\u003e new Event(\"event1\", \"12/2/2022 1600\", \"12/2/2022 1300\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_fromToEqual_invalidDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" assertThrows(Exception.class, () -\u003e new Event(\"event1\", \"12/2/2022 1300\", \"12/2/2022 1300\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_fromAfterToBefore_invalidDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" assertThrows(Exception.class, () -\u003e new Event(\"event1\", \"12/6/2022 1500\", \"12/2/2022 1500\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_nonDateFormat_validDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" assertDoesNotThrow(() -\u003e new Event(\"event1\", \"Mon 12dec\", \"Tuesday 11nov\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" public void verifyDatesInputEventCreation_singleNonDateFormat_validDate() {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" assertDoesNotThrow(() -\u003e new Event(\"event1\", \"Mon 12dec\", \"12/2/2022 1500\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"DonovanJJ":48}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_invalidTodoArgument_exceptionThrown() {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"todo\";","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" Parser.createTask(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validTodo_successfulToDoCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"todo read book\";","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Todo(\"read book\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validDeadline_successfulDeadlineCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book /by Sunday\";","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book\", \"Sunday\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_missingByClauseDeadline_invalidExceptionThrown() {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book Sunday\";","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book Sunday\", \"Sunday\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"Invalid deadline task!\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validDate_successfulDeadlineDatCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book /by 2/12/2019 1800\";","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book\", \"2 Dec 2019\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"Invalid deadline task!\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validEvent_successfulEventCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"event project meeting /from Mon 2pm /to 4pm\";","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Event(\"project meeting\", \"Mon 2pm\", \"4pm\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":71}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"task","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"delete 3","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"DonovanJJ":13}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DonovanJJ":1,"-":20}}] diff --git a/DonovanJJ_ip_master/commits.json b/DonovanJJ_ip_master/commits.json index 251cec8c..e6e31fbe 100644 --- a/DonovanJJ_ip_master/commits.json +++ b/DonovanJJ_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"DonovanJJ":[{"date":"2023-08-20","commitResults":[{"hash":"5e38a4d8e0641b11872b24146d7cf50b53125a13","isMergeCommit":false,"messageTitle":"Added: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"bd304dbb255980847976cf653f77744436851f3d","isMergeCommit":false,"messageTitle":"Added: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"02a8c75a510ea9002b30319631a4721a075f615f","isMergeCommit":false,"messageTitle":"Added: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"8a03511f859ffc9212b667fa4af7178c55424841","isMergeCommit":false,"messageTitle":"Added: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":13}}},{"hash":"051c9413060800e539aaf840520b3d54b584a510","isMergeCommit":false,"messageTitle":"Added: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":39},"sh":{"insertions":0,"deletions":0}}},{"hash":"ed6872fbd6ccb4f3a9c873bb70688da107677ed9","isMergeCommit":false,"messageTitle":"Added: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"a7b5917a371d21204f792bbf09f7c9fdf35fe59a","isMergeCommit":false,"messageTitle":"Added: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"java":{"insertions":105,"deletions":35}}}]},{"date":"2023-08-24","commitResults":[{"hash":"bbe280b9766cf338186532c48293b869674796b5","isMergeCommit":false,"messageTitle":"Added: TextUITesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-26","commitResults":[{"hash":"57388d6282610c27deaed4bfd48d53d2f0a802b9","isMergeCommit":false,"messageTitle":"Add Level-7 Save Updated the code to read and write from an output file This saves progress made by the user for the next session","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":173,"deletions":2}}},{"hash":"d8425455f2caa0c58e705230c1358591199a91db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027 Added Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"007df569174570c043b61cc1d6ee89eb8fc68fea","isMergeCommit":false,"messageTitle":"Add support for date, time for deadlines Updated the deadline class to support it","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":62}}},{"hash":"3c341e414ae90c6bf1a396413a68997bc1d5ff0c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027 Add date, time format identification and display","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"00a921c8784d636fd823f66219757f1b0e084293","isMergeCommit":false,"messageTitle":"Redesign OOP Ui, Storage, Parser, TaskList class have been added","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":372,"deletions":187}}},{"hash":"90880ee2bc6f347b549864b6dff60055ca25aba6","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027 Merge: A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9ab10d415dcbce7831f9f5016b5f32f446b9f140","isMergeCommit":false,"messageTitle":"Add packges duke and task task - contains the different task classes, duke contains the main logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":156},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"2f0e5583a9ab3f6221f113868a5fe6c27bdbd4e9","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027 Merge A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"9f9eeca5f9e57dacc5d74e66872f5a228bb4bb3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 Merge add-support-gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"bf29c6c5371f7dfe774235ee026eb2aa58f44c0e","isMergeCommit":false,"messageTitle":"Add Junit for Deadlines and Parser method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":0}}},{"hash":"2795a87cbdc7514308e97dd86db0b47fe9df6995","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-Junit\u0027 Merge Junit cases","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"66180ac7019f1e7d7f790952ad8ffdf584809a19","isMergeCommit":false,"messageTitle":"Add JavaDocs to all files for better documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":199,"deletions":58}}},{"hash":"d3465621fe245b2aed7ad3191af1243c17f17f13","isMergeCommit":false,"messageTitle":"Updated code structure to adhere to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":8}}},{"hash":"637ececb3fbeeb3f6b2389c8d09772a02e986b7d","isMergeCommit":false,"messageTitle":"Add minor changes to code to adhere to standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":44}}},{"hash":"bcca04cf7abe0870dd0e1660ef78ce8f4dd836d0","isMergeCommit":false,"messageTitle":"Add Find Functionality Users can search for substrings of the task name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":29}}},{"hash":"b0b7e8fdef0e92ede676b84c6e5889c2c10bcf24","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JavaDoc\u0027 Merge Javadoc for better documentation of code","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"07f8616dad3c0dc791ae080782f395441793a6f0","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"401794e2d03e501664002730f899d12f62311cec","isMergeCommit":true,"messageTitle":"Resolved merge conflict with Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"125f24083e0847449ca5e0987437aa80d084ae09","isMergeCommit":false,"messageTitle":"Update file path to use relative paths","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"8ba08d060b31e50c07fdbbba61504c3f8316d6ed","isMergeCommit":false,"messageTitle":"Update build gradle to remove bug in main file location","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"944a640cacf5d5f3b943b7b33410e73a95400a4b","isMergeCommit":false,"messageTitle":"Corrected the equals method for Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}}]},{"date":"2023-09-02","commitResults":[{"hash":"3a78dbc373f82844b79b13709a5d9acd0bdbf65a","isMergeCommit":false,"messageTitle":"Edit Code to comply with the code styling guidelines","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":137,"deletions":59}}}]},{"date":"2023-09-03","commitResults":[{"hash":"faa2549a79830bf49813a50f3eb101cde1759622","isMergeCommit":false,"messageTitle":"Add GUI with JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":201,"deletions":18}}}]},{"date":"2023-09-06","commitResults":[{"hash":"cd8a40b40fb107ef7792dc2f0ac591b049f3d695","isMergeCommit":false,"messageTitle":"Update gradle entry path","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":13,"deletions":2}}}]},{"date":"2023-09-07","commitResults":[{"hash":"aaa43e427d8aa84b45c036d23d6a99aa3371425c","isMergeCommit":false,"messageTitle":"Update Duke to only launch from the launcer. Removed the CLI version of the application","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":95}}},{"hash":"9864b00e3d616dfcb6d5ee30a2c3d47905f00e56","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-10\u0027 Merge with GUI branch","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"b265939bb81d5beded712d2097b8e7dba3cc6701","isMergeCommit":false,"messageTitle":"Updated coding standard based on feedback received","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":14}}}]},{"date":"2023-09-10","commitResults":[{"hash":"aa04c5f142d6d185a88ae88f6830447e32488ce0","isMergeCommit":false,"messageTitle":"Add Java Assertions","messageBody":"The code may not function correctly due to underlying assumptions such as return messages are non-empty and the parser always have initialised ui, storage, tasklist.\n\nUtilised Java assertions to check for valid values\n\nEnsures that the underlying assumptions always hold true\n","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"245a352b273c549c40403ec64edbc87c36db8da3","isMergeCommit":false,"messageTitle":"Update Code Quality","messageBody":"Long methods were used and SLAP was not adhered to\n\nRefractoring of code and regression testing was conducted to create more levels of abbstraction to simplify long methods\n\nReadability of code is improved\n","fileTypesAndContributionMap":{"java":{"insertions":201,"deletions":114}}},{"hash":"bc733313766367189ba27e94d4b39ae2af7be065","isMergeCommit":true,"messageTitle":"Merge pull request #2 from DonovanJJ/branch-A-CodeQuality","messageBody":"Update Code Quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"582c430b954064d33b717cc8a0b4b629ec535593","isMergeCommit":true,"messageTitle":"Merged Codequality and assertions, fixed conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c848f2ce1adb5289ca748f9bf56b1da32b642d8b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from DonovanJJ/branch-A-Assertions","messageBody":"Add Java Assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"04d382e0e099507cc1796832874ce07832007b80","isMergeCommit":false,"messageTitle":"Add duplicate task detection","messageBody":"Duplicate tasks were being accepted by the chat bot, this can cause anormally in behaviour\n\nCreated a new method that loops through the storage array list.\nChecks if any task is equal to the added task\"\n","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":22}}}]},{"date":"2023-09-15","commitResults":[{"hash":"d402863421a71acb2ca6d2eeddf380583f38cf17","isMergeCommit":false,"messageTitle":"Add JUnit test for Event object creation","messageBody":"","tags":["A-MoreTesting"],"fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"DonovanJJ":{"java":1351,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":20,"txt":16}},"authorContributionVariance":{"DonovanJJ":65666.055},"authorDisplayNameMap":{"DonovanJJ":"CS2103T-T15-3 CHAN.. JUN"}} +{"authorDailyContributionsMap":{"DonovanJJ":[{"date":"2023-08-20","commitResults":[{"hash":"5e38a4d8e0641b11872b24146d7cf50b53125a13","isMergeCommit":false,"messageTitle":"Added: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"bd304dbb255980847976cf653f77744436851f3d","isMergeCommit":false,"messageTitle":"Added: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"02a8c75a510ea9002b30319631a4721a075f615f","isMergeCommit":false,"messageTitle":"Added: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"8a03511f859ffc9212b667fa4af7178c55424841","isMergeCommit":false,"messageTitle":"Added: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":13}}},{"hash":"051c9413060800e539aaf840520b3d54b584a510","isMergeCommit":false,"messageTitle":"Added: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":39},"sh":{"insertions":0,"deletions":0}}},{"hash":"ed6872fbd6ccb4f3a9c873bb70688da107677ed9","isMergeCommit":false,"messageTitle":"Added: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"a7b5917a371d21204f792bbf09f7c9fdf35fe59a","isMergeCommit":false,"messageTitle":"Added: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"java":{"insertions":105,"deletions":35}}}]},{"date":"2023-08-24","commitResults":[{"hash":"bbe280b9766cf338186532c48293b869674796b5","isMergeCommit":false,"messageTitle":"Added: TextUITesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-26","commitResults":[{"hash":"57388d6282610c27deaed4bfd48d53d2f0a802b9","isMergeCommit":false,"messageTitle":"Add Level-7 Save Updated the code to read and write from an output file This saves progress made by the user for the next session","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":173,"deletions":2}}},{"hash":"d8425455f2caa0c58e705230c1358591199a91db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027 Added Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"007df569174570c043b61cc1d6ee89eb8fc68fea","isMergeCommit":false,"messageTitle":"Add support for date, time for deadlines Updated the deadline class to support it","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":62}}},{"hash":"3c341e414ae90c6bf1a396413a68997bc1d5ff0c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027 Add date, time format identification and display","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"00a921c8784d636fd823f66219757f1b0e084293","isMergeCommit":false,"messageTitle":"Redesign OOP Ui, Storage, Parser, TaskList class have been added","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":372,"deletions":187}}},{"hash":"90880ee2bc6f347b549864b6dff60055ca25aba6","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027 Merge: A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9ab10d415dcbce7831f9f5016b5f32f446b9f140","isMergeCommit":false,"messageTitle":"Add packges duke and task task - contains the different task classes, duke contains the main logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":156},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"2f0e5583a9ab3f6221f113868a5fe6c27bdbd4e9","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027 Merge A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"9f9eeca5f9e57dacc5d74e66872f5a228bb4bb3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 Merge add-support-gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"bf29c6c5371f7dfe774235ee026eb2aa58f44c0e","isMergeCommit":false,"messageTitle":"Add Junit for Deadlines and Parser method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":0}}},{"hash":"2795a87cbdc7514308e97dd86db0b47fe9df6995","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-Junit\u0027 Merge Junit cases","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"66180ac7019f1e7d7f790952ad8ffdf584809a19","isMergeCommit":false,"messageTitle":"Add JavaDocs to all files for better documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":199,"deletions":58}}},{"hash":"d3465621fe245b2aed7ad3191af1243c17f17f13","isMergeCommit":false,"messageTitle":"Updated code structure to adhere to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":8}}},{"hash":"637ececb3fbeeb3f6b2389c8d09772a02e986b7d","isMergeCommit":false,"messageTitle":"Add minor changes to code to adhere to standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":44}}},{"hash":"bcca04cf7abe0870dd0e1660ef78ce8f4dd836d0","isMergeCommit":false,"messageTitle":"Add Find Functionality Users can search for substrings of the task name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":29}}},{"hash":"b0b7e8fdef0e92ede676b84c6e5889c2c10bcf24","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JavaDoc\u0027 Merge Javadoc for better documentation of code","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"07f8616dad3c0dc791ae080782f395441793a6f0","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"401794e2d03e501664002730f899d12f62311cec","isMergeCommit":true,"messageTitle":"Resolved merge conflict with Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"125f24083e0847449ca5e0987437aa80d084ae09","isMergeCommit":false,"messageTitle":"Update file path to use relative paths","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"8ba08d060b31e50c07fdbbba61504c3f8316d6ed","isMergeCommit":false,"messageTitle":"Update build gradle to remove bug in main file location","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"944a640cacf5d5f3b943b7b33410e73a95400a4b","isMergeCommit":false,"messageTitle":"Corrected the equals method for Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}}]},{"date":"2023-09-02","commitResults":[{"hash":"3a78dbc373f82844b79b13709a5d9acd0bdbf65a","isMergeCommit":false,"messageTitle":"Edit Code to comply with the code styling guidelines","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":137,"deletions":59}}}]},{"date":"2023-09-03","commitResults":[{"hash":"faa2549a79830bf49813a50f3eb101cde1759622","isMergeCommit":false,"messageTitle":"Add GUI with JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":201,"deletions":18}}}]},{"date":"2023-09-06","commitResults":[{"hash":"cd8a40b40fb107ef7792dc2f0ac591b049f3d695","isMergeCommit":false,"messageTitle":"Update gradle entry path","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":13,"deletions":2}}}]},{"date":"2023-09-07","commitResults":[{"hash":"aaa43e427d8aa84b45c036d23d6a99aa3371425c","isMergeCommit":false,"messageTitle":"Update Duke to only launch from the launcer. Removed the CLI version of the application","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":95}}},{"hash":"9864b00e3d616dfcb6d5ee30a2c3d47905f00e56","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-10\u0027 Merge with GUI branch","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"b265939bb81d5beded712d2097b8e7dba3cc6701","isMergeCommit":false,"messageTitle":"Updated coding standard based on feedback received","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":14}}}]},{"date":"2023-09-10","commitResults":[{"hash":"aa04c5f142d6d185a88ae88f6830447e32488ce0","isMergeCommit":false,"messageTitle":"Add Java Assertions","messageBody":"The code may not function correctly due to underlying assumptions such as return messages are non-empty and the parser always have initialised ui, storage, tasklist.\n\nUtilised Java assertions to check for valid values\n\nEnsures that the underlying assumptions always hold true\n","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"245a352b273c549c40403ec64edbc87c36db8da3","isMergeCommit":false,"messageTitle":"Update Code Quality","messageBody":"Long methods were used and SLAP was not adhered to\n\nRefractoring of code and regression testing was conducted to create more levels of abbstraction to simplify long methods\n\nReadability of code is improved\n","fileTypesAndContributionMap":{"java":{"insertions":201,"deletions":114}}},{"hash":"bc733313766367189ba27e94d4b39ae2af7be065","isMergeCommit":true,"messageTitle":"Merge pull request #2 from DonovanJJ/branch-A-CodeQuality","messageBody":"Update Code Quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"582c430b954064d33b717cc8a0b4b629ec535593","isMergeCommit":true,"messageTitle":"Merged Codequality and assertions, fixed conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c848f2ce1adb5289ca748f9bf56b1da32b642d8b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from DonovanJJ/branch-A-Assertions","messageBody":"Add Java Assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"04d382e0e099507cc1796832874ce07832007b80","isMergeCommit":false,"messageTitle":"Add duplicate task detection","messageBody":"Duplicate tasks were being accepted by the chat bot, this can cause anormally in behaviour\n\nCreated a new method that loops through the storage array list.\nChecks if any task is equal to the added task\"\n","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":22}}}]},{"date":"2023-09-15","commitResults":[{"hash":"d402863421a71acb2ca6d2eeddf380583f38cf17","isMergeCommit":false,"messageTitle":"Add JUnit test for Event object creation","messageBody":"","tags":["A-MoreTesting"],"fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":8}}}]},{"date":"2023-09-16","commitResults":[{"hash":"314fa670f854df53b56c932cd7da61cf64be8f36","isMergeCommit":false,"messageTitle":"Update README.md to contain a brief userguide","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":10,"deletions":6},"java":{"insertions":4,"deletions":4},"md":{"insertions":118,"deletions":11}}},{"hash":"8caae1a441939124755398fe1e4c962bd8b04f1a","isMergeCommit":true,"messageTitle":"Merge branch \u0027Ui.png\u0027","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"DonovanJJ":{"java":1351,"md":115,"fxml":39,"sh":0,"bat":1,"gradle":20,"txt":16}},"authorContributionVariance":{"DonovanJJ":63518.793},"authorDisplayNameMap":{"DonovanJJ":"CS2103T-T15-3 CHAN.. JUN"}} diff --git a/Gabriel4357_ip_master/commits.json b/Gabriel4357_ip_master/commits.json index 286a7729..c9b41141 100644 --- a/Gabriel4357_ip_master/commits.json +++ b/Gabriel4357_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Gabriel4357":[{"date":"2023-08-21","commitResults":[{"hash":"b46faf6e0d755b86dd1468d59ce8534ae83c6f42","isMergeCommit":false,"messageTitle":"changed name, and removed tag","messageBody":"","tags":["v0.1"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"f7403e4cde07bc0e34fa6b7edb057458767223e4","isMergeCommit":false,"messageTitle":"implement initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}},{"hash":"f8f088e950953d45d101db5a259b55daa6c575be","isMergeCommit":false,"messageTitle":"improved skeletal version","messageBody":"","tags":["v1.0"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":3}}},{"hash":"beabc39662a0bc7c5a6c2177fbe6ebeff615f72d","isMergeCommit":false,"messageTitle":"customisation added","messageBody":"","tags":["v1.1"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"a3b4904f67c9ff976d555edb04eed39ea30ec697","isMergeCommit":false,"messageTitle":"use of formatted string","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"93625133452617cad66e0a2e1ad013df91c0ee8e","isMergeCommit":false,"messageTitle":"added an array and counter variable","messageBody":"","tags":["v2.0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}},{"hash":"d8284cbba7af305b5297574b34a82298ee95432b","isMergeCommit":false,"messageTitle":"added useful methods","messageBody":"","tags":["v2.1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"e6a8d71cd3035d446176631c7c50d6900319729f","isMergeCommit":false,"messageTitle":"logic added","messageBody":"","tags":["v2.2","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":1}}},{"hash":"6732150c3fc208aec23ff144fbbc869c2f7ea677","isMergeCommit":false,"messageTitle":"added task class","messageBody":"","tags":["v3.0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"c50af9222b7e3c541d6540c7b11bbea901541ca2","isMergeCommit":false,"messageTitle":"duke package created","messageBody":"","tags":["v3.1"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"340a2408bbdc6db37f18b937abe6a7ee34062423","isMergeCommit":false,"messageTitle":"task class updated","messageBody":"","tags":["v3.2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"7c7d1cbe6cdc842525485a3d87226da84b8f7eb4","isMergeCommit":false,"messageTitle":"updated logic in duke","messageBody":"","tags":["v3.3"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":32}}},{"hash":"a0d875fe607ccae2f1c23dea5c4141b1f5b41ae7","isMergeCommit":false,"messageTitle":"logic of mark and unmark added","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"74fa5e8841222c42ad21f872fc8186455805239e","isMergeCommit":false,"messageTitle":"new types of tasks added","messageBody":"","tags":["v4.0"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"346c8825e71896cc1e0feec9a6ac1dc4abaf96ad","isMergeCommit":false,"messageTitle":"logic of duke revamped","messageBody":"","tags":["v4.1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":14}}},{"hash":"8ba05dc972faa0f5171a394648d35bc186a9339a","isMergeCommit":false,"messageTitle":"todo logic ready","messageBody":"","tags":["v4.2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":14}}},{"hash":"8c518d1a6349ed95a727ee4b36981299afa4e698","isMergeCommit":false,"messageTitle":"deadline logic ready","messageBody":"","tags":["v4.3"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"238ac4abc741b1ecccf3930553b45927c2a7b372","isMergeCommit":false,"messageTitle":"event logic working","messageBody":"","tags":["v4.4"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":3}}},{"hash":"adaf0c87a46e4f272db2d5b9384eb927fb563981","isMergeCommit":false,"messageTitle":"tests set up","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"sh":{"insertions":1,"deletions":1}}},{"hash":"1826abb1452cd13a99957e2c5430c4c73e78ffc1","isMergeCommit":false,"messageTitle":"UI Test done","messageBody":"","tags":["v5.0","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":14,"deletions":8},"sh":{"insertions":1,"deletions":1}}},{"hash":"59499079b7d2861801dbce68c6b2ea72452f4ca5","isMergeCommit":false,"messageTitle":"clean up logic","messageBody":"","tags":["v5.1"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":105}}},{"hash":"21750337ed2e81907cc4712d683fdf4e890b63be","isMergeCommit":false,"messageTitle":"use arraylist now, and finish delete","messageBody":"","tags":["v6.0"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":16}}}]},{"date":"2023-08-23","commitResults":[{"hash":"ec5172a9c433e4f547752f92ad2a9c1eeccf133f","isMergeCommit":false,"messageTitle":"both errors added","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":15}}},{"hash":"8b0464c8bb104205e5ed1e40b4e0b3d1fde0df21","isMergeCommit":true,"messageTitle":"delete added","messageBody":"","tags":["v-6.1"],"fileTypesAndContributionMap":{}},{"hash":"ab93c40d7c0a5868a3768fd744fb2b92a1d30d5e","isMergeCommit":false,"messageTitle":"bugs fixed","messageBody":"","tags":["v6.2","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":34}}},{"hash":"15b523510fbaa2e98fb1e18fffb98a11b8edb123","isMergeCommit":false,"messageTitle":"final changes","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}}]},{"date":"2023-08-27","commitResults":[{"hash":"0a36aabbb47eca0cd0fb47798fa8ca635b73d3c8","isMergeCommit":false,"messageTitle":"Refactor the method name to printline()","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":20}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c70f969abb7577191a0e5936182c78352d0c5890","isMergeCommit":false,"messageTitle":"Use a file to track past data.","messageBody":"Cannot save a list of items.\n\nCan store past data is needed as a to-do application.\n\nLet\u0027s,\n*create a file that commands will be written to\n* read from that file and calls the commands at the start of each run\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":115,"deletions":30}}},{"hash":"14e527c106c86ba4c28f1d0d103c56239cd40631","isMergeCommit":false,"messageTitle":"Align code to match coding style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":7}}},{"hash":"05f7b6c06f079e473112b312628c2a71838bb500","isMergeCommit":true,"messageTitle":"Fix merge conflict","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6ede75c9da00fbde07f4a7c639a217d7cfd7e862","isMergeCommit":false,"messageTitle":"Introduce LocalTimeDate into the application","messageBody":"Event and Deadline class uses Strings as their parameters.\n\nUsing actual times will be more accurate to a todo application.\n\nLet\u0027s\n*change the strings into LocalTimeDates\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":44,"deletions":19}}},{"hash":"fc193cc33b264db66ed1e696182542947a5b6df8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Introduce LocalTimeDate into the application\n","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e0f719e496f4c1d5597d9d22860516c62f753bdc","isMergeCommit":false,"messageTitle":"Remove counter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":24}}},{"hash":"c7534cf69d2fad227e00aa8d46d09c48db643758","isMergeCommit":false,"messageTitle":"Change code to include even more OOP than before.","messageBody":"Let\u0027s\n*add ui, storage, parser, and tasklist as a means of abstraction\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":322,"deletions":238}}},{"hash":"d3dae88ba98032efb40f45967eb924158e955a52","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"* branch-A-MoreOOP:\n Change code to include even more OOP than before.\n Remove counter\n","fileTypesAndContributionMap":{}},{"hash":"70fa4e81c96cd868e5f49f596d17433642bac400","isMergeCommit":false,"messageTitle":"Touch up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":13}}},{"hash":"43b20e8dc9398068bd4234b1d61d36b1cea9cf65","isMergeCommit":false,"messageTitle":"Add package \u0027duke\u0027","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"0d9f8f372b2003f2793e4b8a40bccb775edf0870","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"* branch-A-Packages:\n Add package \u0027duke\u0027\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"3be3950613ba6718edda97f66cd895ec16c57aae","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"e4c3245b328d01bb6b8dff455b0ae77a2378677d","isMergeCommit":false,"messageTitle":"Add Gradle to the working project.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":1},"java":{"insertions":0,"deletions":1}}},{"hash":"06ea9ba06fb5902e8d4d36cc757906846ad3d81b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle-\u0027","messageBody":"* branch-A-Gradle-:\n Add Gradle to the working project.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"96c4b597fd5e21b78510020dc58a9fb10800020c","isMergeCommit":false,"messageTitle":"Add more OOP into code.","messageBody":"UI does not handle all interactions with user.\n\nAbstracted out Parser sending messages to user and leaving it to\nUI to send the responses.\n\nLet\u0027s,\n*add a method sendMessage() in UI to handle the sending\nof messages to user.\n","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":29}}},{"hash":"21853fb0790925d1a1cddb015fd68526250028dd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"* branch-A-MoreOOP:\n Add more OOP into code.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"06f0c9c18dcf2eb54e4a75966e7b48fb17e9a85f","isMergeCommit":false,"messageTitle":"Fix merge conflict","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":66,"deletions":13}}},{"hash":"b87f0429315ba46a415668df0fe79ff911165a14","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"No testings done to test the methods and classes\n\nHaving automated test cases makes it easier to spot\nbugs when the code changes.\n\nLet\u0027s,\n*add JUnit tests: ParserTest,\nTaskTest and TaskListTest\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":72,"deletions":2}}},{"hash":"bdcbe472b2395fa865041129ae1bac0bfeb2e2fb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"* branch-A-JUnit:\n Add JUnit Tests\n Fix merge conflict\n","tags":["A-JUnit-"],"fileTypesAndContributionMap":{}},{"hash":"08966b24ad3e2ca204a94cfa91ff096692bfcece","isMergeCommit":false,"messageTitle":"Package the app as a Jar file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"59a8dcc5b0df54c6c44bfc2e044d0be48b6e77f3","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":9}}},{"hash":"afb25d1eba3a90888bce92a4cfe8b216f28fd5b9","isMergeCommit":false,"messageTitle":"Fix code to coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":10}}},{"hash":"7909aaadc4819aea998f3d0db42bdd1173d3226a","isMergeCommit":false,"messageTitle":"Add a find command","messageBody":"Not possible to find a few tasks that contains\na particular string\n\nFind command makes it easier\nto find particular tasks\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":40,"deletions":0}}},{"hash":"e6dc0de4d3664bcca2a11aab917592ec3ec50487","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"* branch-A-Jar:\n Package the app as a Jar file\n","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"1a82cf415544c7bb4e94afc0de6428578e34ce12","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"* branch-A-JavaDoc:\n Add JavaDocs\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"6aea1b9e03c84a6aefdcce4869514f37e98684e6","isMergeCommit":true,"messageTitle":"Merge conflict fixed","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"bd419950a7408d19fa862970a3703a8f69548d1c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Add a find command\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"f379128e54c19c18c561660a55ebcce1bb5a25d7","isMergeCommit":false,"messageTitle":"Fix bug on not quitting on \u0027bye\u0027 command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":165,"deletions":158}}}]},{"date":"2023-09-05","commitResults":[{"hash":"a4a6b860cccd2a75123375905fd5dc43d74bd905","isMergeCommit":false,"messageTitle":"Change parse to return a String instead","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"txt":{"insertions":5,"deletions":0},"java":{"insertions":151,"deletions":126}}},{"hash":"9eaf8e16f58a4eb96e12c5a6b6764c4c5ca9e7e8","isMergeCommit":false,"messageTitle":"Implement a working GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"fxml":{"insertions":40,"deletions":0},"java":{"insertions":181,"deletions":12}}}]},{"date":"2023-09-06","commitResults":[{"hash":"a0b8e708f9400a183f079405e8883468b4df03bc","isMergeCommit":false,"messageTitle":"Refine GUI and add more errors thrown","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":17},"java":{"insertions":88,"deletions":69}}},{"hash":"71e7ae84038f1c002798469e90fa64291209245d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"* branch-Level-10:\n Refine GUI and add more errors thrown\n Implement a working GUI\n Change parse to return a String instead\n","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"84dae9a13761d4a990708c480c8a56c8ad555c0a","isMergeCommit":false,"messageTitle":"Add assertions to the code.","messageBody":"Hard to detect errors made by programmer.\n\nHaving assertions help detect bugs in code and test\ncurrent assumptions.\n\nLet\u0027s,\n*add assertions to check if our assumptions on\nlength of splitText is true\n*add assertions to check if certain variables are\nnon null\n","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0},"txt":{"insertions":24,"deletions":0},"java":{"insertions":16,"deletions":4}}},{"hash":"b6521e8b8ba6dc2104724ca9e170a5c82a814eea","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Gabriel4357/branch-A-Assertions","messageBody":"Add assertions to the code.","fileTypesAndContributionMap":{}},{"hash":"c16beb90d7d31ce543b3bfb5a8e6e27a8a85f68a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Gabriel4357/ip","messageBody":"* \u0027master\u0027 of https://github.com/Gabriel4357/ip:\n Add assertions to the code.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"026c0527294d36bada0056b9224fe31355629445","isMergeCommit":false,"messageTitle":"Extract methods out partially","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":41}}},{"hash":"161b8d9a26aca6b05101b16bf33c7bb72078dcc8","isMergeCommit":false,"messageTitle":"Extract out Commands for parse method","messageBody":"Parser class contains parse method which is extremely long\nof 200 lines.\n\nTo ensure code quality, methods should avoid\nbeing too long and convoluted.\n\nLet\u0027s\n*extract out all of the code into separate commands into\ndifferent classes\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":285,"deletions":184}}},{"hash":"c7b1658aa186864b519e8a00b5df4dc7467da127","isMergeCommit":false,"messageTitle":"Refactor the code","messageBody":"Code quality is poor in certain parts of the code.\n\nMakes it hard for readers to comprehend the code.\n\nLet\u0027s\n*refactor using Guard Clauses\n*refactor using Reverse Conditional\n*refactor by giving variables to boolean expressions\n","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":16,"deletions":12}}},{"hash":"add854fe08e451f6c85d0c06786f6a2508cd0c20","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7835af10c4340f261660934b3487bd01df619ba3","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Gabriel4357/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}},{"hash":"e1d344ef28657fe7bc1f71c224b576016f81e828","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-BCD-Extension","messageBody":"* master:\n Refactor the code\n Extract out Commands for parse method\n Extract methods out partially\n Add assertions to the code.\n","fileTypesAndContributionMap":{}},{"hash":"522336eca3ae76db74898bd09328af439363068b","isMergeCommit":false,"messageTitle":"Sort tasks based on Tag and Dates","messageBody":"Tasks are sorted based on recency of adding to the TaskList.\n\nBeing able to sort task based on the dates will be much more useful\nand less messy in general.\n\nLet\u0027s\n*add two comparators to help us compare events\n*add a sorting command to carry out the sort\n","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":80,"deletions":3}}},{"hash":"f265e0449d5506831df0e32dfa507bf1d4dcd62a","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Gabriel4357/branch-BCD-Extension","messageBody":"Branch bcd extension","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"0219ee6b7105ae084de2196a8710eb1708e269b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Gabriel4357/ip","messageBody":"* \u0027master\u0027 of https://github.com/Gabriel4357/ip:\n Sort tasks based on Tag and Dates\n","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Gabriel4357":{"java":1200,"md":0,"fxml":40,"sh":2,"bat":0,"gradle":18,"txt":22}},"authorContributionVariance":{"Gabriel4357":60325.973},"authorDisplayNameMap":{"Gabriel4357":"CS2103T-T13-3 GABR.. HAO"}} +{"authorDailyContributionsMap":{"Gabriel4357":[{"date":"2023-08-21","commitResults":[{"hash":"b46faf6e0d755b86dd1468d59ce8534ae83c6f42","isMergeCommit":false,"messageTitle":"changed name, and removed tag","messageBody":"","tags":["v0.1"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"f7403e4cde07bc0e34fa6b7edb057458767223e4","isMergeCommit":false,"messageTitle":"implement initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}},{"hash":"f8f088e950953d45d101db5a259b55daa6c575be","isMergeCommit":false,"messageTitle":"improved skeletal version","messageBody":"","tags":["v1.0"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":3}}},{"hash":"beabc39662a0bc7c5a6c2177fbe6ebeff615f72d","isMergeCommit":false,"messageTitle":"customisation added","messageBody":"","tags":["v1.1"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"a3b4904f67c9ff976d555edb04eed39ea30ec697","isMergeCommit":false,"messageTitle":"use of formatted string","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"93625133452617cad66e0a2e1ad013df91c0ee8e","isMergeCommit":false,"messageTitle":"added an array and counter variable","messageBody":"","tags":["v2.0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}},{"hash":"d8284cbba7af305b5297574b34a82298ee95432b","isMergeCommit":false,"messageTitle":"added useful methods","messageBody":"","tags":["v2.1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"e6a8d71cd3035d446176631c7c50d6900319729f","isMergeCommit":false,"messageTitle":"logic added","messageBody":"","tags":["v2.2","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":1}}},{"hash":"6732150c3fc208aec23ff144fbbc869c2f7ea677","isMergeCommit":false,"messageTitle":"added task class","messageBody":"","tags":["v3.0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"c50af9222b7e3c541d6540c7b11bbea901541ca2","isMergeCommit":false,"messageTitle":"duke package created","messageBody":"","tags":["v3.1"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"340a2408bbdc6db37f18b937abe6a7ee34062423","isMergeCommit":false,"messageTitle":"task class updated","messageBody":"","tags":["v3.2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"7c7d1cbe6cdc842525485a3d87226da84b8f7eb4","isMergeCommit":false,"messageTitle":"updated logic in duke","messageBody":"","tags":["v3.3"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":32}}},{"hash":"a0d875fe607ccae2f1c23dea5c4141b1f5b41ae7","isMergeCommit":false,"messageTitle":"logic of mark and unmark added","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"74fa5e8841222c42ad21f872fc8186455805239e","isMergeCommit":false,"messageTitle":"new types of tasks added","messageBody":"","tags":["v4.0"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"346c8825e71896cc1e0feec9a6ac1dc4abaf96ad","isMergeCommit":false,"messageTitle":"logic of duke revamped","messageBody":"","tags":["v4.1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":14}}},{"hash":"8ba05dc972faa0f5171a394648d35bc186a9339a","isMergeCommit":false,"messageTitle":"todo logic ready","messageBody":"","tags":["v4.2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":14}}},{"hash":"8c518d1a6349ed95a727ee4b36981299afa4e698","isMergeCommit":false,"messageTitle":"deadline logic ready","messageBody":"","tags":["v4.3"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"238ac4abc741b1ecccf3930553b45927c2a7b372","isMergeCommit":false,"messageTitle":"event logic working","messageBody":"","tags":["v4.4"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":3}}},{"hash":"adaf0c87a46e4f272db2d5b9384eb927fb563981","isMergeCommit":false,"messageTitle":"tests set up","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"sh":{"insertions":1,"deletions":1}}},{"hash":"1826abb1452cd13a99957e2c5430c4c73e78ffc1","isMergeCommit":false,"messageTitle":"UI Test done","messageBody":"","tags":["v5.0","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":14,"deletions":8},"sh":{"insertions":1,"deletions":1}}},{"hash":"59499079b7d2861801dbce68c6b2ea72452f4ca5","isMergeCommit":false,"messageTitle":"clean up logic","messageBody":"","tags":["v5.1"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":105}}},{"hash":"21750337ed2e81907cc4712d683fdf4e890b63be","isMergeCommit":false,"messageTitle":"use arraylist now, and finish delete","messageBody":"","tags":["v6.0"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":16}}}]},{"date":"2023-08-23","commitResults":[{"hash":"ec5172a9c433e4f547752f92ad2a9c1eeccf133f","isMergeCommit":false,"messageTitle":"both errors added","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":15}}},{"hash":"8b0464c8bb104205e5ed1e40b4e0b3d1fde0df21","isMergeCommit":true,"messageTitle":"delete added","messageBody":"","tags":["v-6.1"],"fileTypesAndContributionMap":{}},{"hash":"ab93c40d7c0a5868a3768fd744fb2b92a1d30d5e","isMergeCommit":false,"messageTitle":"bugs fixed","messageBody":"","tags":["v6.2","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":34}}},{"hash":"15b523510fbaa2e98fb1e18fffb98a11b8edb123","isMergeCommit":false,"messageTitle":"final changes","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}}]},{"date":"2023-08-27","commitResults":[{"hash":"0a36aabbb47eca0cd0fb47798fa8ca635b73d3c8","isMergeCommit":false,"messageTitle":"Refactor the method name to printline()","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":20}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c70f969abb7577191a0e5936182c78352d0c5890","isMergeCommit":false,"messageTitle":"Use a file to track past data.","messageBody":"Cannot save a list of items.\n\nCan store past data is needed as a to-do application.\n\nLet\u0027s,\n*create a file that commands will be written to\n* read from that file and calls the commands at the start of each run\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":115,"deletions":30}}},{"hash":"14e527c106c86ba4c28f1d0d103c56239cd40631","isMergeCommit":false,"messageTitle":"Align code to match coding style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":7}}},{"hash":"05f7b6c06f079e473112b312628c2a71838bb500","isMergeCommit":true,"messageTitle":"Fix merge conflict","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6ede75c9da00fbde07f4a7c639a217d7cfd7e862","isMergeCommit":false,"messageTitle":"Introduce LocalTimeDate into the application","messageBody":"Event and Deadline class uses Strings as their parameters.\n\nUsing actual times will be more accurate to a todo application.\n\nLet\u0027s\n*change the strings into LocalTimeDates\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":44,"deletions":19}}},{"hash":"fc193cc33b264db66ed1e696182542947a5b6df8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Introduce LocalTimeDate into the application\n","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e0f719e496f4c1d5597d9d22860516c62f753bdc","isMergeCommit":false,"messageTitle":"Remove counter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":24}}},{"hash":"c7534cf69d2fad227e00aa8d46d09c48db643758","isMergeCommit":false,"messageTitle":"Change code to include even more OOP than before.","messageBody":"Let\u0027s\n*add ui, storage, parser, and tasklist as a means of abstraction\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":322,"deletions":238}}},{"hash":"d3dae88ba98032efb40f45967eb924158e955a52","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"* branch-A-MoreOOP:\n Change code to include even more OOP than before.\n Remove counter\n","fileTypesAndContributionMap":{}},{"hash":"70fa4e81c96cd868e5f49f596d17433642bac400","isMergeCommit":false,"messageTitle":"Touch up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":13}}},{"hash":"43b20e8dc9398068bd4234b1d61d36b1cea9cf65","isMergeCommit":false,"messageTitle":"Add package \u0027duke\u0027","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"0d9f8f372b2003f2793e4b8a40bccb775edf0870","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"* branch-A-Packages:\n Add package \u0027duke\u0027\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"3be3950613ba6718edda97f66cd895ec16c57aae","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"e4c3245b328d01bb6b8dff455b0ae77a2378677d","isMergeCommit":false,"messageTitle":"Add Gradle to the working project.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":1},"java":{"insertions":0,"deletions":1}}},{"hash":"06ea9ba06fb5902e8d4d36cc757906846ad3d81b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle-\u0027","messageBody":"* branch-A-Gradle-:\n Add Gradle to the working project.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"96c4b597fd5e21b78510020dc58a9fb10800020c","isMergeCommit":false,"messageTitle":"Add more OOP into code.","messageBody":"UI does not handle all interactions with user.\n\nAbstracted out Parser sending messages to user and leaving it to\nUI to send the responses.\n\nLet\u0027s,\n*add a method sendMessage() in UI to handle the sending\nof messages to user.\n","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":29}}},{"hash":"21853fb0790925d1a1cddb015fd68526250028dd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"* branch-A-MoreOOP:\n Add more OOP into code.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"06f0c9c18dcf2eb54e4a75966e7b48fb17e9a85f","isMergeCommit":false,"messageTitle":"Fix merge conflict","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":66,"deletions":13}}},{"hash":"b87f0429315ba46a415668df0fe79ff911165a14","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"No testings done to test the methods and classes\n\nHaving automated test cases makes it easier to spot\nbugs when the code changes.\n\nLet\u0027s,\n*add JUnit tests: ParserTest,\nTaskTest and TaskListTest\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":72,"deletions":2}}},{"hash":"bdcbe472b2395fa865041129ae1bac0bfeb2e2fb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"* branch-A-JUnit:\n Add JUnit Tests\n Fix merge conflict\n","tags":["A-JUnit-"],"fileTypesAndContributionMap":{}},{"hash":"08966b24ad3e2ca204a94cfa91ff096692bfcece","isMergeCommit":false,"messageTitle":"Package the app as a Jar file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"59a8dcc5b0df54c6c44bfc2e044d0be48b6e77f3","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":9}}},{"hash":"afb25d1eba3a90888bce92a4cfe8b216f28fd5b9","isMergeCommit":false,"messageTitle":"Fix code to coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":10}}},{"hash":"7909aaadc4819aea998f3d0db42bdd1173d3226a","isMergeCommit":false,"messageTitle":"Add a find command","messageBody":"Not possible to find a few tasks that contains\na particular string\n\nFind command makes it easier\nto find particular tasks\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":40,"deletions":0}}},{"hash":"e6dc0de4d3664bcca2a11aab917592ec3ec50487","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"* branch-A-Jar:\n Package the app as a Jar file\n","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"1a82cf415544c7bb4e94afc0de6428578e34ce12","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"* branch-A-JavaDoc:\n Add JavaDocs\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"6aea1b9e03c84a6aefdcce4869514f37e98684e6","isMergeCommit":true,"messageTitle":"Merge conflict fixed","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"bd419950a7408d19fa862970a3703a8f69548d1c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Add a find command\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"f379128e54c19c18c561660a55ebcce1bb5a25d7","isMergeCommit":false,"messageTitle":"Fix bug on not quitting on \u0027bye\u0027 command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":165,"deletions":158}}}]},{"date":"2023-09-05","commitResults":[{"hash":"a4a6b860cccd2a75123375905fd5dc43d74bd905","isMergeCommit":false,"messageTitle":"Change parse to return a String instead","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"txt":{"insertions":5,"deletions":0},"java":{"insertions":151,"deletions":126}}},{"hash":"9eaf8e16f58a4eb96e12c5a6b6764c4c5ca9e7e8","isMergeCommit":false,"messageTitle":"Implement a working GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"fxml":{"insertions":40,"deletions":0},"java":{"insertions":181,"deletions":12}}}]},{"date":"2023-09-06","commitResults":[{"hash":"a0b8e708f9400a183f079405e8883468b4df03bc","isMergeCommit":false,"messageTitle":"Refine GUI and add more errors thrown","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":17},"java":{"insertions":88,"deletions":69}}},{"hash":"71e7ae84038f1c002798469e90fa64291209245d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"* branch-Level-10:\n Refine GUI and add more errors thrown\n Implement a working GUI\n Change parse to return a String instead\n","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"84dae9a13761d4a990708c480c8a56c8ad555c0a","isMergeCommit":false,"messageTitle":"Add assertions to the code.","messageBody":"Hard to detect errors made by programmer.\n\nHaving assertions help detect bugs in code and test\ncurrent assumptions.\n\nLet\u0027s,\n*add assertions to check if our assumptions on\nlength of splitText is true\n*add assertions to check if certain variables are\nnon null\n","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0},"txt":{"insertions":24,"deletions":0},"java":{"insertions":16,"deletions":4}}},{"hash":"b6521e8b8ba6dc2104724ca9e170a5c82a814eea","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Gabriel4357/branch-A-Assertions","messageBody":"Add assertions to the code.","fileTypesAndContributionMap":{}},{"hash":"c16beb90d7d31ce543b3bfb5a8e6e27a8a85f68a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Gabriel4357/ip","messageBody":"* \u0027master\u0027 of https://github.com/Gabriel4357/ip:\n Add assertions to the code.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"026c0527294d36bada0056b9224fe31355629445","isMergeCommit":false,"messageTitle":"Extract methods out partially","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":41}}},{"hash":"161b8d9a26aca6b05101b16bf33c7bb72078dcc8","isMergeCommit":false,"messageTitle":"Extract out Commands for parse method","messageBody":"Parser class contains parse method which is extremely long\nof 200 lines.\n\nTo ensure code quality, methods should avoid\nbeing too long and convoluted.\n\nLet\u0027s\n*extract out all of the code into separate commands into\ndifferent classes\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":285,"deletions":184}}},{"hash":"c7b1658aa186864b519e8a00b5df4dc7467da127","isMergeCommit":false,"messageTitle":"Refactor the code","messageBody":"Code quality is poor in certain parts of the code.\n\nMakes it hard for readers to comprehend the code.\n\nLet\u0027s\n*refactor using Guard Clauses\n*refactor using Reverse Conditional\n*refactor by giving variables to boolean expressions\n","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":16,"deletions":12}}},{"hash":"add854fe08e451f6c85d0c06786f6a2508cd0c20","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7835af10c4340f261660934b3487bd01df619ba3","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Gabriel4357/branch-A-CodeQuality","messageBody":"Branch a code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"e1d344ef28657fe7bc1f71c224b576016f81e828","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-BCD-Extension","messageBody":"* master:\n Refactor the code\n Extract out Commands for parse method\n Extract methods out partially\n Add assertions to the code.\n","fileTypesAndContributionMap":{}},{"hash":"522336eca3ae76db74898bd09328af439363068b","isMergeCommit":false,"messageTitle":"Sort tasks based on Tag and Dates","messageBody":"Tasks are sorted based on recency of adding to the TaskList.\n\nBeing able to sort task based on the dates will be much more useful\nand less messy in general.\n\nLet\u0027s\n*add two comparators to help us compare events\n*add a sorting command to carry out the sort\n","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":80,"deletions":3}}},{"hash":"f265e0449d5506831df0e32dfa507bf1d4dcd62a","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Gabriel4357/branch-BCD-Extension","messageBody":"Branch bcd extension","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"0219ee6b7105ae084de2196a8710eb1708e269b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Gabriel4357/ip","messageBody":"* \u0027master\u0027 of https://github.com/Gabriel4357/ip:\n Sort tasks based on Tag and Dates\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"ca25a5a029367579f54bcde326e2e6cebe4799b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodeQuality\u0027 of https://github.com/Gabriel4357/ip into branch-A-CodeQuality","messageBody":"* \u0027branch-A-CodeQuality\u0027 of https://github.com/Gabriel4357/ip:\n Add assertions to the code.\n","fileTypesAndContributionMap":{}},{"hash":"b9701415a33284c9843133e1147730e7569ecd5e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodeQuality\u0027","messageBody":"* branch-A-CodeQuality:\n","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Gabriel4357":{"java":1200,"md":0,"fxml":40,"sh":2,"bat":0,"gradle":18,"txt":22}},"authorContributionVariance":{"Gabriel4357":56212.793},"authorDisplayNameMap":{"Gabriel4357":"CS2103T-T13-3 GABR.. HAO"}} diff --git a/Goh-Li-Ting_ip_master/authorship.json b/Goh-Li-Ting_ip_master/authorship.json index 68f25485..36bdf37e 100644 --- a/Goh-Li-Ting_ip_master/authorship.json +++ b/Goh-Li-Ting_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"mainClassName \u003d \u0027chatbuddy.ChatBuddy\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" toolVersion \u003d \u002710.12.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" mainClass.set(\"chatbuddy.ChatBuddy\")","lastModifiedDate":"2023-09-01"},{"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":"Goh-Li-Ting"},"content":" archiveFileName \u003d \u0027chatBuddy.jar\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" archiveBaseName \u003d \"chatBuddy\"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":61,"author":{"gitId":"-"},"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":42,"Goh-Li-Ting":23}},{"path":"src/main/java/chatbuddy/ChatBuddy.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ExitCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ChatBuddy is a chatbot that helps a user keep track of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ChatBuddy {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of ChatBuddy with a specified filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param filePath The filepath of the file to save task data in.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" public ChatBuddy(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getWelcome() {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showWelcome();","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" * Saves the data and returns the exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" public String saveAndGetExitMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" ExitCommand exitCommand \u003d new ExitCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" return exitCommand.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the response of the command executed from the input.","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The response of the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" return command.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Goh-Li-Ting":67}},{"path":"src/main/java/chatbuddy/ChatBuddyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ChatBuddyException represents exceptions in the ChatBuddy application. */","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ChatBuddyException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a ChatBuddyException.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public ChatBuddyException(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"OOPS!!! \" + description;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" return toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":25}},{"path":"src/main/java/chatbuddy/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" public static DialogBox getChatBuddyDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":61}},{"path":"src/main/java/chatbuddy/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" * A Launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":12}},{"path":"src/main/java/chatbuddy/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" * A GUI for Chat Buddy using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private ChatBuddy chatBuddy \u003d new ChatBuddy(\"data/tasks.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" private FXMLLoader fxmlLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setChatBuddy(chatBuddy);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" public void stop() {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" String exitMessage \u003d chatBuddy.saveAndGetExitMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().showMessage(exitMessage);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":38}},{"path":"src/main/java/chatbuddy/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" private ChatBuddy chatBuddy;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" private Image chatBuddyImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaChatBuddy.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" public void initialize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" public void setChatBuddy(ChatBuddy c) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" chatBuddy \u003d c;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" showMessage(chatBuddy.getWelcome());","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" String response \u003d chatBuddy.getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" DialogBox.getChatBuddyDialog(response, chatBuddyImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" dialogContainer.getChildren().add(DialogBox.getChatBuddyDialog(message, chatBuddyImage));","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":57}},{"path":"src/main/java/chatbuddy/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * The TaskList represents a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * Tasks can be added or delete from the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" * Tasks in the list can be mark as done or not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The list of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Returns an instance of a TaskList that has no tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an instance of a TaskList with the list of inputted tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The tasks that the TaskList should contain.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the size of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The size of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" public int getSize() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" return tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" * Checks if the task number is valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task number is valid if it is within the range of available task.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task number is invalid if the task number exceeds the number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number to check for.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" private void checkValidTaskNumber(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskNum \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number. There are only \"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" + getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" * Adds a task to the back of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task to add to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" * Deletes the task with the given task number from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task object that is deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task deleteTask(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" // delete task from list","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" * Marks the task with the given task number as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task that was marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task markTaskAsDone(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" // mark task as done","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" * Marks the task with the given task number as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task that was marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task markTaskAsNotDone(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":" // mark task as done","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a list of strings representing the task in the format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of strings representing the task in the format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cString\u003e getTaskStringsToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Goh-Li-Ting"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskString \u003d task.getInformationForSaving();","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Goh-Li-Ting"},"content":" taskStrings.add(taskString);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskStrings;","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a list of strings representing the task in the format for printing.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of strings representing the task in the format for printing.","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cString\u003e getTaskStringsToPrint() {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Goh-Li-Ting"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Goh-Li-Ting"},"content":" taskStrings.add(task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskStrings;","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Goh-Li-Ting"},"content":" * Finds a list of tasks containing the given keyword in their description.","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A TaskList containing a list of tasks that contains the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList getMatchingTasks(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Goh-Li-Ting"},"content":" return new TaskList(tasks.stream()","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Goh-Li-Ting"},"content":" .filter(task -\u003e task.containKeyword(keyword))","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Goh-Li-Ting"},"content":" .collect(Collectors.toCollection(ArrayList::new)));","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":155}},{"path":"src/main/java/chatbuddy/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/** Command is an abstract class that represents commands that can be executed. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" * Executes the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param ui The ui used to handle interactions with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param storage The storage used to load and save tasks in a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A string representing the message to display to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the execution of the command has an error.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":20}},{"path":"src/main/java/chatbuddy/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/** DeadlineCommand represents a command to create a deadline task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a DeadlineCommand with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" public DeadlineCommand(String taskDescription, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" Deadline deadline \u003d new Deadline(taskDescription, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskAddition(deadline, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":34}},{"path":"src/main/java/chatbuddy/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** DeleteCommand represents a command to delete a task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a delete command with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.deleteTask(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskDeletion(task, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":28}},{"path":"src/main/java/chatbuddy/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/** EventCommand represents a command to create an event task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a EventCommand with the given description, \u0027from\u0027 and \u0027to\u0027 datetimes.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param from The datetime that the event starts from.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param to The datetime that the events ends at.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public EventCommand(String taskDescription, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" Event event \u003d new Event(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskAddition(event, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":37}},{"path":"src/main/java/chatbuddy/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ExitCommand represents a command to exit the chatbot. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showExit();","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":18}},{"path":"src/main/java/chatbuddy/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** FindCommand represents a command to find a list of tasks containing a keyword. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a FindCommand with the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" TaskList matchingTasks \u003d tasks.getMatchingTasks(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d matchingTasks.getTaskStringsToPrint();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskList(taskStrings, \"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Goh-Li-Ting":31}},{"path":"src/main/java/chatbuddy/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ListCommand represents a command to show the list of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToPrint();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskList(taskStrings, \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":19}},{"path":"src/main/java/chatbuddy/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** MarkCommand represents a command to mark a task as done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a MarkCommand with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public MarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.markTaskAsDone(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showMarkTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** TodoCommand represents a command to create a todo task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a TodoCommand with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public TodoCommand(String taskDescription) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo todo \u003d new ToDo(taskDescription);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskAddition(todo, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":30}},{"path":"src/main/java/chatbuddy/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** UnmarkCommand represents a command to mark a task as not done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of an UnmarkCommand with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.markTaskAsNotDone(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showUnmarkTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.DeadlineCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.EventCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.TodoCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parser represents a class to handle the parsing of user commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parser can also parse task data from storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter for deadline inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_INPUT_DEADLINE \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter for event datetime inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_INPUT_EVENT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parses the user command and returns a Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param commandString The command inputted by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The command to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the command is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" public static Command parse(String commandString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] commandArray \u003d commandString.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" String command \u003d commandArray[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" String args \u003d commandArray.length \u003e 1 ? commandArray[1] : \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddTodo(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddDeadline(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddEvent(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareDelete(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareMark(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareUnmark(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a TodoCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The TodoCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description of the task is empty or consists only of whitespace.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" private static TodoCommand prepareAddTodo(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" if (args.trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" return new TodoCommand(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a DeadlineCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description and deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The DeadlineCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description or deadline of the task is empty or consists only of whitespace.","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" private static DeadlineCommand prepareAddDeadline(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] arr \u003d args.split(\" /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d arr[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" // check validity of arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskDescription.equals(\"\") || arr.length \u003d\u003d 1 || arr[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input deadlines in the format \"","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027deadline [task description] /by [deadline in dd/MM/yyyy]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description and deadline cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Goh-Li-Ting"},"content":" // parse deadline string to LocalDate object","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate date \u003d parseDate(arr[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Goh-Li-Ting"},"content":" return new DeadlineCommand(taskDescription, date);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an EventCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description,","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Goh-Li-Ting"},"content":" * the \u0027from\u0027 datetime and the \u0027to\u0027 datetime task.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The EventCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description, \u0027from\u0027 or \u0027to\u0027 datetime is empty of consists only of whitespaces.","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Goh-Li-Ting"},"content":" private static EventCommand prepareAddEvent(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Goh-Li-Ting"},"content":" // check validity of arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] arr \u003d args.split(\" /from \");","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d arr[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskDescription.equals(\"\") || arr.length \u003d\u003d 1 || arr[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input events in the format \"","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027event [task description] /from [dd/MM/yyyy HHmm] /to [dd/MM/yyyy HHmm]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description, from datetime and to datetime cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] dateTimeArgs \u003d arr[1].trim().split(\" /to \");","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Goh-Li-Ting"},"content":" if (dateTimeArgs[0].trim().equals(\"\") || dateTimeArgs.length \u003d\u003d 1 || dateTimeArgs[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input events in the format \"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027event [task description] /from [dd/MM/yyyy HHmm] /to [dd/MM/yyyy HHmm]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description, from datetime and to datetime cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Goh-Li-Ting"},"content":" // parse date time arguments to LocalDateTime object","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime from \u003d parseDateTime(dateTimeArgs[0].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime to \u003d parseDateTime(dateTimeArgs[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Goh-Li-Ting"},"content":" return new EventCommand(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a DeleteCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The DeleteCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Goh-Li-Ting"},"content":" private static DeleteCommand prepareDelete(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"Goh-Li-Ting"},"content":" return new DeleteCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a MarkCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The MarkCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"Goh-Li-Ting"},"content":" private static MarkCommand prepareMark(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"Goh-Li-Ting"},"content":" return new MarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an UnmarkCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The UnmarkCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"Goh-Li-Ting"},"content":" private static UnmarkCommand prepareUnmark(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"Goh-Li-Ting"},"content":" return new UnmarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a LocalDate object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param dateString The string representing the date in the format dd/MM/yyyy.","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The LocalDate object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"Goh-Li-Ting"},"content":" private static LocalDate parseDate(String dateString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate date \u003d LocalDate.parse(dateString, FORMATTER_INPUT_DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"Goh-Li-Ting"},"content":" return date;","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input the deadline date in the format dd/MM/yyyy.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a LocalDateTime object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param dateTimeString The string representing the datetime in the format dd/MM/yyyy HHmm.","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The LocalDateTime object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"Goh-Li-Ting"},"content":" private static LocalDateTime parseDateTime(String dateTimeString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(dateTimeString, FORMATTER_INPUT_EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"Goh-Li-Ting"},"content":" return dateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input the datetime in the format dd/MM/yyyy HHmm.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":228,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a Task object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":229,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":230,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskString The string representing the task in saved format.","lastModifiedDate":"2023-09-02"},{"lineNumber":231,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The Task object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":234,"author":{"gitId":"Goh-Li-Ting"},"content":" public static Task parseToTask(String taskString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] taskData \u003d taskString.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskType \u003d taskData[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isCompleted \u003d taskData[1].equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d taskData[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"Goh-Li-Ting"},"content":" // create task object","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d new ToDo(taskDescription);","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"Goh-Li-Ting"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate by \u003d parseDate(taskData[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d new Deadline(taskDescription, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"Goh-Li-Ting"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime from \u003d parseDateTime(taskData[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime to \u003d parseDateTime(taskData[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d new Event(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"Goh-Li-Ting"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error parsing data from file\");","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"Goh-Li-Ting"},"content":" // update completion status","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"Goh-Li-Ting"},"content":" if (isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":262}},{"path":"src/main/java/chatbuddy/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Storage represents a class to handle operations relating to the local storage of task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * Data from TaskList can be saved into or loaded from the local storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The filepath of the file containing the task data. */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a Storage object with the given filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param filePath The filepath of the file containing the task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" * Loads the task data from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If there is an error creating or finding the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cTask\u003e load() throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" // load file from hard disk","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for existence of parentDirectory and file","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" if (!parentDirectory.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" parentDirectory.mkdir();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error creating data file.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" // load data from file","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" Scanner fileScanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" // populate task array","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d Parser.parseToTask(fileScanner.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Data file not found.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" * Saves the task data into the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" * Date in the file is overwritten.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The list of tasks to save.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If there is an error saving data into the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" public void save(TaskList tasks) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" FileWriter fileWriter \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToSave();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" for (String taskString : taskStrings) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" fileWriter.write(taskString + System.lineSeparator());","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error saving data into file.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":92}},{"path":"src/main/java/chatbuddy/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Deadline represents a Deadline object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * A deadline is a task that has a deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for date inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATE_INPUT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for date outputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATE_OUTPUT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The deadline of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a Deadline object with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the task is due within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the deadline is due within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" return by.isBefore(LocalDate.now().plus(1, ChronoUnit.WEEKS));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(FORMATTER_DATE_OUTPUT) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns deadline task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is D | [1 if completed, 0 if not completed] | [task description] | [by].","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The deadline task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"D | \" + super.getInformationForSaving() + \" | \" + by.format(FORMATTER_DATE_INPUT);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":57}},{"path":"src/main/java/chatbuddy/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Event represents an Event object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * An event is a task that has a \u0027from\u0027 datetime and a \u0027to\u0027 datetime.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for datetime inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATETIME_INPUT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for datetime outputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATETIME_OUTPUT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The \u0027from\u0027 datetime of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The \u0027to\u0027 datetime of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Constructor to create an Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The task description.","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param from The task\u0027s start date/time in the format dd/MM/yyyy HHmm.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param to The task\u0027s end date/time in the format.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the event starts within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the event starts within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" return from.isBefore(LocalDateTime.now().plus(1, ChronoUnit.WEEKS));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" \"[E]%1s (from: %2s to: %3s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" from.format(FORMATTER_DATETIME_OUTPUT),","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" to.format(FORMATTER_DATETIME_OUTPUT)","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns deadline task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is E | [1 if completed, 0 if not completed] | [task description] | [from] | [to].","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The event task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" \"E | %1s | %2s | %3s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" super.getInformationForSaving(),","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" from.format(FORMATTER_DATETIME_INPUT),","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" to.format(FORMATTER_DATETIME_INPUT));","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":70}},{"path":"src/main/java/chatbuddy/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" * Task represents a Task object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" * A task has a description and a boolean representing whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The description of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The boolean representing whether the task is done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates a Task object with a given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task object is not done by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Marks the task as done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Marks the task as not done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the status icon of the task based on whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The status icon of the task. Returns X if task is done, else returns an empty space.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the task is due or an event starts within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if task is due or starts within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(\"[%1s] %2s\", getStatusIcon(), description);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is [1 if completed, 0 if not completed] | [task description].","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(\"%1s | %2s\", isDone ? \"1\" : \"0\", description);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" * Checks if the description of the task contains the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the description contains the keyword, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean containKeyword(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":77}},{"path":"src/main/java/chatbuddy/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" * ToDo represents a ToDo object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" * A todo object is a task and has a description and a boolean representing whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a ToDo object with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns todo task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is T | [1 if completed, 0 if not completed] | [task description].","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The todo task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"T | \" + super.getInformationForSaving();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":33}},{"path":"src/main/java/chatbuddy/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * The Ui class handles interactions with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * It reads inputs from the users and output messages to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"Hello! I\u0027m Chat Buddy!\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"Bye. Hope to see you again soon!\\nPlease close the interface to exit!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a string representing a list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskStrings The list of tasks represented by Strings.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param message The message to print before the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A string representing a list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showTaskList(ArrayList\u003cString\u003e taskStrings, String message) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" StringBuilder sb \u003d new StringBuilder(message);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" sb.append(System.lineSeparator());","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" for (int i \u003d 0; i \u003c taskStrings.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskString \u003d taskStrings.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" sb.append(String.format(\"%1s. %2s\\n\", i + 1, taskString));","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" return sb.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a confirmation message about the addition of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param totalNumOfTasks The number of tasks after the task was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A confirmation message about the addition of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showTaskAddition(Task task, int totalNumOfTasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\nNow you have \" + totalNumOfTasks + \" tasks in the list.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a confirmation message about the deletion of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param totalNumOfTasks The number of tasks after the task was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A confirmation message about the deletion of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showTaskDeletion(Task task, int totalNumOfTasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task + \"\\nNow you have \" + totalNumOfTasks + \" tasks in the list.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a confirmation message about a task being marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A confirmation message about a task being marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showMarkTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task;","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a confirmation message about a task being marked as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A confirmation message about a task being marked as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showUnmarkTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task;","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":89}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"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-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" minHeight\u003d\"-Infinity\"/\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"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\"chatbuddy.MainWindow\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Type your command here\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"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-09"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"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-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":19}},{"path":"src/test/java/chatbuddy/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public void getTaskStringsToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" // set up task list","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo taskOne \u003d new ToDo(\"task1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo taskTwo \u003d new ToDo(\"task2\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(taskOne);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(taskTwo);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" taskTwo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToSave();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(2, taskStrings.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"T | 0 | task1\", taskStrings.get(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"T | 1 | task2\", taskStrings.get(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":27}},{"path":"src/test/java/chatbuddy/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_listCommandWord_listCommandReturned() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(ListCommand.class, command.getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(\"list abcdefg\");","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(ListCommand.class, command.getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_invalidCommandWord_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"hi\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"Bye\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_missingTodoDescription_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"todo \");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_invalidDeadlineInput_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" String errorMessage \u003d \"OOPS!!! Please input deadlines in the format \"","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027deadline [task description] /by [deadline in dd/MM/yyyy]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description and deadline cannot be empty.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" String dateFormatErrorMessage \u003d \"OOPS!!! Please input the deadline date in the format dd/MM/yyyy.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline \");","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline /by\");","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline xx /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline task /by Sunday\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(dateFormatErrorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline task /by 01/09/2023 2359\");","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(dateFormatErrorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":107}},{"path":"src/test/java/chatbuddy/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class EventTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" // create event object","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime from \u003d LocalDateTime.parse(\"01/09/2023 1000\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime to \u003d LocalDateTime.parse(\"01/09/2023 1732\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private Event event \u003d new Event(\"event1\", from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" public void getInformationForSaving() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"E | 0 | event1 | 01/09/2023 1000 | 01/09/2023 1732\", event.getInformationForSaving());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":20}},{"path":"src/test/java/chatbuddy/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private Task todo \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private Task deadline \u003d new Deadline(\"return book\",","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate.parse(\"23/09/2023\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" private Task event \u003d new Event(","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" \"go out\",","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime.parse(\"01/09/2023 1000\", dateTimeFormatter),","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime.parse(\"01/09/2023 1732\", dateTimeFormatter)","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, deadline.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, event.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" todo.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" deadline.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" event.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, deadline.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, event.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":44}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"todo buy groceries","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"deadline do homework /by 02/09/2023","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"event birthday party /from 03/09/2023 1400 /to 03/09/2023 1700","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"deadline return book /by 10/12/2023","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"todo read book","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"unmark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"find book","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\chatbuddy\\*.java","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"java -classpath ..\\bin chatbuddy.ChatBuddy \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":19,"Goh-Li-Ting":2}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"mainClassName \u003d \u0027chatbuddy.ChatBuddy\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" toolVersion \u003d \u002710.12.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" mainClass.set(\"chatbuddy.ChatBuddy\")","lastModifiedDate":"2023-09-01"},{"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":"Goh-Li-Ting"},"content":" archiveFileName \u003d \u0027chatBuddy.jar\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" archiveBaseName \u003d \"chatBuddy\"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":61,"author":{"gitId":"-"},"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":42,"Goh-Li-Ting":23}},{"path":"src/main/java/chatbuddy/ChatBuddy.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ExitCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ChatBuddy is a chatbot that helps a user keep track of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ChatBuddy {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of ChatBuddy with a specified filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param filePath The filepath of the file to save task data in.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" public ChatBuddy(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getWelcome() {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showWelcome();","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" * Saves the data and returns the exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" public String saveAndGetExitMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" ExitCommand exitCommand \u003d new ExitCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" return exitCommand.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the response of the command executed from the input.","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The response of the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" return command.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Goh-Li-Ting":67}},{"path":"src/main/java/chatbuddy/ChatBuddyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ChatBuddyException represents exceptions in the ChatBuddy application. */","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ChatBuddyException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a ChatBuddyException.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public ChatBuddyException(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"OOPS!!! \" + description;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" return toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":25}},{"path":"src/main/java/chatbuddy/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" public static DialogBox getChatBuddyDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":61}},{"path":"src/main/java/chatbuddy/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" * A Launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":12}},{"path":"src/main/java/chatbuddy/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" * A GUI for Chat Buddy using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private ChatBuddy chatBuddy \u003d new ChatBuddy(\"data/tasks.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" private FXMLLoader fxmlLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setChatBuddy(chatBuddy);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" public void stop() {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" String exitMessage \u003d chatBuddy.saveAndGetExitMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().showMessage(exitMessage);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":38}},{"path":"src/main/java/chatbuddy/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" private ChatBuddy chatBuddy;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" private Image chatBuddyImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaChatBuddy.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" public void initialize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" public void setChatBuddy(ChatBuddy c) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" chatBuddy \u003d c;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" showMessage(chatBuddy.getWelcome());","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" String response \u003d chatBuddy.getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" DialogBox.getChatBuddyDialog(response, chatBuddyImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" dialogContainer.getChildren().add(DialogBox.getChatBuddyDialog(message, chatBuddyImage));","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":57}},{"path":"src/main/java/chatbuddy/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * The TaskList represents a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * Tasks can be added or delete from the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" * Tasks in the list can be mark as done or not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The list of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Returns an instance of a TaskList that has no tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an instance of a TaskList with the list of inputted tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The tasks that the TaskList should contain.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the size of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The size of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" public int getSize() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" return tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" * Checks if the task number is valid.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task number is valid if it is within the range of available task.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task number is invalid if the task number exceeds the number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number to check for.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" private void checkValidTaskNumber(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskNum \u003c\u003d 0 || taskNum \u003e tasks.size()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number. There are only \"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" + getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" * Adds a task to the back of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task to add to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" assert(tasks.get(tasks.size() - 1).equals(task));","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" * Deletes the task with the given task number from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task object that is deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task deleteTask(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" // delete task from list","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" assert(!tasks.contains(task));","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" * Marks the task with the given task number as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task that was marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task markTaskAsDone(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" assert(taskNum \u003e 0 \u0026\u0026 taskNum \u003c\u003d tasks.size());","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" // mark task as done","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" * Marks the task with the given task number as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task that was marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task markTaskAsNotDone(int taskNum) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Goh-Li-Ting"},"content":" // check for valid task number","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Goh-Li-Ting"},"content":" checkValidTaskNumber(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Goh-Li-Ting"},"content":" assert(taskNum \u003e 0 \u0026\u0026 taskNum \u003c\u003d tasks.size());","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"Goh-Li-Ting"},"content":" // mark task as done","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskIndex \u003d taskNum - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a list of strings representing the task in the format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of strings representing the task in the format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cString\u003e getTaskStringsToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Goh-Li-Ting"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskString \u003d task.getInformationForSaving();","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Goh-Li-Ting"},"content":" taskStrings.add(taskString);","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskStrings;","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a list of strings representing the task in the format for printing.","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of strings representing the task in the format for printing.","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cString\u003e getTaskStringsToPrint() {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Goh-Li-Ting"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Goh-Li-Ting"},"content":" taskStrings.add(task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskStrings;","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Goh-Li-Ting"},"content":" * Finds a list of tasks containing the given keyword in their description.","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A TaskList containing a list of tasks that contains the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Goh-Li-Ting"},"content":" public TaskList getMatchingTasks(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Goh-Li-Ting"},"content":" return new TaskList(tasks.stream()","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Goh-Li-Ting"},"content":" .filter(task -\u003e task.containKeyword(keyword))","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Goh-Li-Ting"},"content":" .collect(Collectors.toCollection(ArrayList::new)));","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":161}},{"path":"src/main/java/chatbuddy/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/** Command is an abstract class that represents commands that can be executed. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" * Executes the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param ui The ui used to handle interactions with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param storage The storage used to load and save tasks in a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A string representing the message to display to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the execution of the command has an error.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":20}},{"path":"src/main/java/chatbuddy/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/** DeadlineCommand represents a command to create a deadline task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a DeadlineCommand with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" public DeadlineCommand(String taskDescription, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" Deadline deadline \u003d new Deadline(taskDescription, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskAddition(deadline, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":34}},{"path":"src/main/java/chatbuddy/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** DeleteCommand represents a command to delete a task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a delete command with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.deleteTask(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskDeletion(task, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":28}},{"path":"src/main/java/chatbuddy/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"/** EventCommand represents a command to create an event task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a EventCommand with the given description, \u0027from\u0027 and \u0027to\u0027 datetimes.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param from The datetime that the event starts from.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param to The datetime that the events ends at.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public EventCommand(String taskDescription, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" Event event \u003d new Event(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskAddition(event, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":37}},{"path":"src/main/java/chatbuddy/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ExitCommand represents a command to exit the chatbot. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showExit();","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":18}},{"path":"src/main/java/chatbuddy/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** FindCommand represents a command to find a list of tasks containing a keyword. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a FindCommand with the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" TaskList matchingTasks \u003d tasks.getMatchingTasks(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d matchingTasks.getTaskStringsToPrint();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskList(taskStrings, \"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Goh-Li-Ting":31}},{"path":"src/main/java/chatbuddy/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** ListCommand represents a command to show the list of tasks. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToPrint();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskList(taskStrings, \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":19}},{"path":"src/main/java/chatbuddy/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** MarkCommand represents a command to mark a task as done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a MarkCommand with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public MarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.markTaskAsDone(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showMarkTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** TodoCommand represents a command to create a todo task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private String taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a TodoCommand with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public TodoCommand(String taskDescription) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskDescription \u003d taskDescription;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo todo \u003d new ToDo(taskDescription);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showTaskAddition(todo, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":30}},{"path":"src/main/java/chatbuddy/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"/** UnmarkCommand represents a command to mark a task as not done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private int taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of an UnmarkCommand with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskNum The task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws ChatBuddyException {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d tasks.markTaskAsNotDone(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" return ui.showUnmarkTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":29}},{"path":"src/main/java/chatbuddy/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.DeadlineCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.EventCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.TodoCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parser represents a class to handle the parsing of user commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parser can also parse task data from storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter for deadline inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_INPUT_DEADLINE \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter for event datetime inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_INPUT_EVENT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * Parses the user command and returns a Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param commandString The command inputted by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The command to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the command is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" public static Command parse(String commandString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] commandArray \u003d commandString.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" String command \u003d commandArray[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" String args \u003d commandArray.length \u003e 1 ? commandArray[1] : \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddTodo(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddDeadline(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareAddEvent(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareDelete(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareMark(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" return prepareUnmark(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a TodoCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The TodoCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description of the task is empty or consists only of whitespace.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" private static TodoCommand prepareAddTodo(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isDescriptionEmpty \u003d args.trim().equals(\"\");","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" if (isDescriptionEmpty) {","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" return new TodoCommand(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a DeadlineCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description and deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The DeadlineCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description or deadline of the task is empty or consists only of whitespace.","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" private static DeadlineCommand prepareAddDeadline(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] arr \u003d args.split(\" /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d arr[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" // check validity of arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isDescriptionEmpty \u003d taskDescription.equals(\"\");","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isDeadlineGiven \u003d arr.length \u003e 1 \u0026\u0026 !arr[1].trim().equals(\"\");","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":" if (isDescriptionEmpty || !isDeadlineGiven) {","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input deadlines in the format \"","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027deadline [task description] /by [deadline in dd/MM/yyyy]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description and deadline cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Goh-Li-Ting"},"content":" // parse deadline string to LocalDate object","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate date \u003d parseDate(arr[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Goh-Li-Ting"},"content":" return new DeadlineCommand(taskDescription, date);","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an EventCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the description,","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Goh-Li-Ting"},"content":" * the \u0027from\u0027 datetime and the \u0027to\u0027 datetime task.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The EventCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the description, \u0027from\u0027 or \u0027to\u0027 datetime is empty of consists only of whitespaces.","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Goh-Li-Ting"},"content":" private static EventCommand prepareAddEvent(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Goh-Li-Ting"},"content":" // check validity of arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] arr \u003d args.split(\" /from \");","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d arr[0].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isDescriptionEmpty \u003d taskDescription.equals(\"\");","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isFromKeywordGiven \u003d arr.length \u003e 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"Goh-Li-Ting"},"content":" if (isDescriptionEmpty || !isFromKeywordGiven) {","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input events in the format \"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027event [task description] /from [dd/MM/yyyy HHmm] /to [dd/MM/yyyy HHmm]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description, from datetime and to datetime cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] dateTimeArgs \u003d arr[1].trim().split(\" /to \");","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isFromGiven \u003d !dateTimeArgs[0].trim().equals(\"\");","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isToGiven \u003d dateTimeArgs.length \u003e 1 \u0026\u0026 !dateTimeArgs[1].trim().equals(\"\");","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"Goh-Li-Ting"},"content":" if (!isFromGiven || !isToGiven) {","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input events in the format \"","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027event [task description] /from [dd/MM/yyyy HHmm] /to [dd/MM/yyyy HHmm]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description, from datetime and to datetime cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Goh-Li-Ting"},"content":" // parse date time arguments to LocalDateTime object","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime from \u003d parseDateTime(dateTimeArgs[0].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime to \u003d parseDateTime(dateTimeArgs[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"Goh-Li-Ting"},"content":" return new EventCommand(taskDescription, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a DeleteCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The DeleteCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"Goh-Li-Ting"},"content":" private static DeleteCommand prepareDelete(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"Goh-Li-Ting"},"content":" return new DeleteCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a MarkCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The MarkCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"Goh-Li-Ting"},"content":" private static MarkCommand prepareMark(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"Goh-Li-Ting"},"content":" return new MarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an UnmarkCommand based on the arguments provided by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param args The arguments provided by the user. This should be the task number of the task to mark as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The UnmarkCommand to execute.","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the task number is not a numerical number.","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"Goh-Li-Ting"},"content":" private static UnmarkCommand prepareUnmark(String args) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"Goh-Li-Ting"},"content":" int taskNum \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"Goh-Li-Ting"},"content":" return new UnmarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input a valid task number in digits (e.g. 1).\");","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a LocalDate object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param dateString The string representing the date in the format dd/MM/yyyy.","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The LocalDate object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"Goh-Li-Ting"},"content":" private static LocalDate parseDate(String dateString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate date \u003d LocalDate.parse(dateString, FORMATTER_INPUT_DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"Goh-Li-Ting"},"content":" return date;","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input the deadline date in the format dd/MM/yyyy.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":221,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a LocalDateTime object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":223,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param dateTimeString The string representing the datetime in the format dd/MM/yyyy HHmm.","lastModifiedDate":"2023-09-02"},{"lineNumber":224,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The LocalDateTime object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":225,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":226,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":227,"author":{"gitId":"Goh-Li-Ting"},"content":" private static LocalDateTime parseDateTime(String dateTimeString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(dateTimeString, FORMATTER_INPUT_EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"Goh-Li-Ting"},"content":" return dateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Please input the datetime in the format dd/MM/yyyy HHmm.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":237,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a Task object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskString The string representing the task in saved format.","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The Task object parsed from the input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the input string is in the wrong format.","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"Goh-Li-Ting"},"content":" public static Task parseToTask(String taskString) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"Goh-Li-Ting"},"content":" String[] taskData \u003d taskString.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskType \u003d taskData[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"Goh-Li-Ting"},"content":" boolean isCompleted \u003d taskData[1].equals(\"1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskDescription \u003d taskData[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"Goh-Li-Ting"},"content":" // create task object","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"Goh-Li-Ting"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d createToDo(taskDescription);","lastModifiedDate":"2023-09-16"},{"lineNumber":253,"author":{"gitId":"Goh-Li-Ting"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d createDeadline(taskDescription, taskData[3]);","lastModifiedDate":"2023-09-16"},{"lineNumber":255,"author":{"gitId":"Goh-Li-Ting"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"Goh-Li-Ting"},"content":" task \u003d createEvent(taskDescription, taskData[3], taskData[4]);","lastModifiedDate":"2023-09-16"},{"lineNumber":257,"author":{"gitId":"Goh-Li-Ting"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error parsing data from file\");","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"Goh-Li-Ting"},"content":" // update completion status","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"Goh-Li-Ting"},"content":" if (isCompleted) {","lastModifiedDate":"2023-09-01"},{"lineNumber":263,"author":{"gitId":"Goh-Li-Ting"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":264,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"Goh-Li-Ting"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":268,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":269,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":270,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a ToDo object with the given task description.","lastModifiedDate":"2023-09-16"},{"lineNumber":271,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":272,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDescription The description of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":273,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A ToDo object with the given task description.","lastModifiedDate":"2023-09-16"},{"lineNumber":274,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":275,"author":{"gitId":"Goh-Li-Ting"},"content":" private static ToDo createToDo(String taskDescription) {","lastModifiedDate":"2023-09-16"},{"lineNumber":276,"author":{"gitId":"Goh-Li-Ting"},"content":" return new ToDo(taskDescription);","lastModifiedDate":"2023-09-16"},{"lineNumber":277,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":278,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":279,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":280,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a Deadline object with the given description and deadline.","lastModifiedDate":"2023-09-16"},{"lineNumber":281,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":282,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDesc The description of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":283,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param deadline The string representing the deadline of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":284,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A Deadline object with the given description and deadline.","lastModifiedDate":"2023-09-16"},{"lineNumber":285,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the deadline is not given in the correct format.","lastModifiedDate":"2023-09-16"},{"lineNumber":286,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":287,"author":{"gitId":"Goh-Li-Ting"},"content":" private static Task createDeadline(String taskDesc, String deadline) throws ChatBuddyException {","lastModifiedDate":"2023-09-16"},{"lineNumber":288,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate by \u003d parseDate(deadline);","lastModifiedDate":"2023-09-16"},{"lineNumber":289,"author":{"gitId":"Goh-Li-Ting"},"content":" return new Deadline(taskDesc, by);","lastModifiedDate":"2023-09-16"},{"lineNumber":290,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":291,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":292,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":293,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns an Event object with the given description, from and to datetime.","lastModifiedDate":"2023-09-16"},{"lineNumber":294,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":295,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskDesc The description of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":296,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param fromString The string representing the start date and time of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":297,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param toString The string representing the end date and time of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":298,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The Event object with the given description, from and to datetime.","lastModifiedDate":"2023-09-16"},{"lineNumber":299,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the from or to date time is not in the correct format.","lastModifiedDate":"2023-09-16"},{"lineNumber":300,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":301,"author":{"gitId":"Goh-Li-Ting"},"content":" private static Task createEvent(String taskDesc, String fromString, String toString) throws ChatBuddyException {","lastModifiedDate":"2023-09-16"},{"lineNumber":302,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime from \u003d parseDateTime(fromString);","lastModifiedDate":"2023-09-16"},{"lineNumber":303,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime to \u003d parseDateTime(toString);","lastModifiedDate":"2023-09-16"},{"lineNumber":304,"author":{"gitId":"Goh-Li-Ting"},"content":" return new Event(taskDesc, from, to);","lastModifiedDate":"2023-09-16"},{"lineNumber":305,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":306,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":306}},{"path":"src/main/java/chatbuddy/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.parser.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * Storage represents a class to handle operations relating to the local storage of task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" * Data from TaskList can be saved into or loaded from the local storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The filepath of the file containing the task data. */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a Storage object with the given filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param filePath The filepath of the file containing the task data.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" * Loads the task data from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If there is an error creating or finding the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" public ArrayList\u003cTask\u003e load() throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" File file \u003d getFile();","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cTask\u003e taskList \u003d getTasks(file);","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns file based on filePath.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The file with the given filePath.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If there is an error creating the file if the file does not exist.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" private File getFile() throws ChatBuddyException {","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" if (!parentDirectory.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" parentDirectory.mkdir();","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error creating data file.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" return file;","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a list of tasks based on the data in the file.","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param file The file to read the data from.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A list of tasks based on the data in the file.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If the file is not found.","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" private ArrayList\u003cTask\u003e getTasks(File file) throws ChatBuddyException {","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" Scanner fileScanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" Task task \u003d Parser.parseToTask(fileScanner.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Data file not found.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" * Saves the task data into the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" * Date in the file is overwritten.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param tasks The list of tasks to save.","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws ChatBuddyException If there is an error saving data into the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" public void save(TaskList tasks) throws ChatBuddyException {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" FileWriter fileWriter \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToSave();","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" writeListToFile(fileWriter, taskStrings);","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" throw new ChatBuddyException(\"Error saving data into file.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"Goh-Li-Ting"},"content":" * Adds list of strings to a file.","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param fileWriter The filewriter used to write the strings into the file.","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskStrings The list of strings to add to the file.","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"Goh-Li-Ting"},"content":" * @throws IOException If there is an error writing the string to the file.","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"Goh-Li-Ting"},"content":" private void writeListToFile(FileWriter fileWriter, ArrayList\u003cString\u003e taskStrings) throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"Goh-Li-Ting"},"content":" for (String taskString : taskStrings) {","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"Goh-Li-Ting"},"content":" fileWriter.write(taskString + System.lineSeparator());","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":122}},{"path":"src/main/java/chatbuddy/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Deadline represents a Deadline object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * A deadline is a task that has a deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for date inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATE_INPUT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for date outputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATE_OUTPUT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The deadline of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a Deadline object with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the task is due within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the deadline is due within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" return by.isBefore(LocalDate.now().plus(1, ChronoUnit.WEEKS));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(FORMATTER_DATE_OUTPUT) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns deadline task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is D | [1 if completed, 0 if not completed] | [task description] | [by].","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The deadline task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"D | \" + super.getInformationForSaving() + \" | \" + by.format(FORMATTER_DATE_INPUT);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":57}},{"path":"src/main/java/chatbuddy/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * Event represents an Event object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * An event is a task that has a \u0027from\u0027 datetime and a \u0027to\u0027 datetime.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for datetime inputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATETIME_INPUT \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The formatter used for datetime outputs. */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private static final DateTimeFormatter FORMATTER_DATETIME_OUTPUT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The \u0027from\u0027 datetime of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The \u0027to\u0027 datetime of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Constructor to create an Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The task description.","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param from The task\u0027s start date/time in the format dd/MM/yyyy HHmm.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param to The task\u0027s end date/time in the format.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the event starts within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the event starts within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" return from.isBefore(LocalDateTime.now().plus(1, ChronoUnit.WEEKS));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" \"[E]%1s (from: %2s to: %3s)\",","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" from.format(FORMATTER_DATETIME_OUTPUT),","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" to.format(FORMATTER_DATETIME_OUTPUT)","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns deadline task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is E | [1 if completed, 0 if not completed] | [task description] | [from] | [to].","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The event task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" \"E | %1s | %2s | %3s\",","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" super.getInformationForSaving(),","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" from.format(FORMATTER_DATETIME_INPUT),","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" to.format(FORMATTER_DATETIME_INPUT));","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":70}},{"path":"src/main/java/chatbuddy/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" * Task represents a Task object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" * A task has a description and a boolean representing whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The description of the task. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" /** The boolean representing whether the task is done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates a Task object with a given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * The task object is not done by default.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Marks the task as done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" /** Marks the task as not done. */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the status icon of the task based on whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The status icon of the task. Returns X if task is done, else returns an empty space.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a boolean representing whether the task is due or an event starts within a week.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if task is due or starts within a week, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean isWithinAWeek() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(\"[%1s] %2s\", getStatusIcon(), description);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is [1 if completed, 0 if not completed] | [task description].","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" return String.format(\"%1s | %2s\", isDone ? \"1\" : \"0\", description);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" * Checks if the description of the task contains the given keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return True if the description contains the keyword, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" public boolean containKeyword(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":77}},{"path":"src/main/java/chatbuddy/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":" * ToDo represents a ToDo object in ChatBuddy.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":" * A todo object is a task and has a description and a boolean representing whether the task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" * Creates an instance of a ToDo object with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns todo task information in format for saving.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * The format is T | [1 if completed, 0 if not completed] | [task description].","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The todo task information in format for saving.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" public String getInformationForSaving() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"T | \" + super.getInformationForSaving();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":33}},{"path":"src/main/java/chatbuddy/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":" * The Ui class handles interactions with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":" * It reads inputs from the users and output messages to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"Hello! I\u0027m Chat Buddy!\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns the exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"Bye. Hope to see you again soon!\\nPlease close the interface to exit!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a string representing a list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskStrings The list of tasks represented by Strings.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param message The message to print before the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A string representing a list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showTaskList(ArrayList\u003cString\u003e taskStrings, String message) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" StringBuilder sb \u003d new StringBuilder(message);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" sb.append(System.lineSeparator());","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" addTaskStringsToStringBuilder(taskStrings, sb);","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" return sb.toString();","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":" * Adds task strings to the string builder.","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param taskStrings The list of tasks represented by Strings.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param sb The StringBuilder to append the strings to.","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" private void addTaskStringsToStringBuilder(ArrayList\u003cString\u003e taskStrings, StringBuilder sb) {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" for (int i \u003d 0; i \u003c taskStrings.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" String taskString \u003d taskStrings.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" sb.append(String.format(\"%1s. %2s\\n\", i + 1, taskString));","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a confirmation message about the addition of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param totalNumOfTasks The number of tasks after the task was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A confirmation message about the addition of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showTaskAddition(Task task, int totalNumOfTasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\nNow you have \" + totalNumOfTasks + \" tasks in the list.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a confirmation message about the deletion of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param totalNumOfTasks The number of tasks after the task was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A confirmation message about the deletion of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showTaskDeletion(Task task, int totalNumOfTasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task + \"\\nNow you have \" + totalNumOfTasks + \" tasks in the list.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a confirmation message about a task being marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A confirmation message about a task being marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showMarkTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task;","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" * Returns a confirmation message about a task being marked as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" * @return A confirmation message about a task being marked as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" public String showUnmarkTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task;","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":99}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"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-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" minHeight\u003d\"-Infinity\"/\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"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\"chatbuddy.MainWindow\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Type your command here\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"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-09"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"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-09"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Goh-Li-Ting":19}},{"path":"src/test/java/chatbuddy/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" public void getTaskStringsToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" // set up task list","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo taskOne \u003d new ToDo(\"task1\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" ToDo taskTwo \u003d new ToDo(\"task2\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(taskOne);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" tasks.addTask(taskTwo);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" taskTwo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" ArrayList\u003cString\u003e taskStrings \u003d tasks.getTaskStringsToSave();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(2, taskStrings.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"T | 0 | task1\", taskStrings.get(0));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"T | 1 | task2\", taskStrings.get(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":27}},{"path":"src/test/java/chatbuddy/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.ChatBuddyException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"import chatbuddy.command.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_listCommandWord_listCommandReturned() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(ListCommand.class, command.getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" Command command \u003d Parser.parse(\"list abcdefg\");","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(ListCommand.class, command.getClass());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_invalidCommandWord_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"hi\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"Bye\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_missingTodoDescription_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"todo \");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Goh-Li-Ting"},"content":" public void parse_invalidDeadlineInput_chatBuddyExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Goh-Li-Ting"},"content":" String errorMessage \u003d \"OOPS!!! Please input deadlines in the format \"","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"\u0027deadline [task description] /by [deadline in dd/MM/yyyy]\u0027.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Goh-Li-Ting"},"content":" + \"The task description and deadline cannot be empty.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Goh-Li-Ting"},"content":" String dateFormatErrorMessage \u003d \"OOPS!!! Please input the deadline date in the format dd/MM/yyyy.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline \");","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline /by\");","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline xx /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(errorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline task /by Sunday\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(dateFormatErrorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Goh-Li-Ting"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Goh-Li-Ting"},"content":" Parser.parse(\"deadline task /by 01/09/2023 2359\");","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Goh-Li-Ting"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Goh-Li-Ting"},"content":" } catch (ChatBuddyException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(dateFormatErrorMessage, e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":107}},{"path":"src/test/java/chatbuddy/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"public class EventTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":" // create event object","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime from \u003d LocalDateTime.parse(\"01/09/2023 1000\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private LocalDateTime to \u003d LocalDateTime.parse(\"01/09/2023 1732\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" private Event event \u003d new Event(\"event1\", from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" public void getInformationForSaving() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(\"E | 0 | event1 | 01/09/2023 1000 | 01/09/2023 1732\", event.getInformationForSaving());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":20}},{"path":"src/test/java/chatbuddy/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"package chatbuddy.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":" private Task todo \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Goh-Li-Ting"},"content":" private Task deadline \u003d new Deadline(\"return book\",","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDate.parse(\"23/09/2023\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Goh-Li-Ting"},"content":" private DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Goh-Li-Ting"},"content":" private Task event \u003d new Event(","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":" \"go out\",","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime.parse(\"01/09/2023 1000\", dateTimeFormatter),","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Goh-Li-Ting"},"content":" LocalDateTime.parse(\"01/09/2023 1732\", dateTimeFormatter)","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Goh-Li-Ting"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Goh-Li-Ting"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Goh-Li-Ting"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Goh-Li-Ting"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, deadline.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(true, event.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Goh-Li-Ting"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Goh-Li-Ting"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Goh-Li-Ting"},"content":" todo.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Goh-Li-Ting"},"content":" deadline.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Goh-Li-Ting"},"content":" event.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Goh-Li-Ting"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, todo.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, deadline.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Goh-Li-Ting"},"content":" assertEquals(false, event.isDone);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Goh-Li-Ting"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Goh-Li-Ting"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Goh-Li-Ting":44}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Goh-Li-Ting"},"content":"todo buy groceries","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Goh-Li-Ting"},"content":"deadline do homework /by 02/09/2023","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Goh-Li-Ting"},"content":"event birthday party /from 03/09/2023 1400 /to 03/09/2023 1700","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Goh-Li-Ting"},"content":"deadline return book /by 10/12/2023","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Goh-Li-Ting"},"content":"mark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Goh-Li-Ting"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Goh-Li-Ting"},"content":"todo read book","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Goh-Li-Ting"},"content":"unmark 4","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Goh-Li-Ting"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"find book","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Goh-Li-Ting"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Goh-Li-Ting"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Goh-Li-Ting":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Goh-Li-Ting"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\chatbuddy\\*.java","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Goh-Li-Ting"},"content":"java -classpath ..\\bin chatbuddy.ChatBuddy \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":19,"Goh-Li-Ting":2}}] diff --git a/Goh-Li-Ting_ip_master/commits.json b/Goh-Li-Ting_ip_master/commits.json index 891af404..1e319f63 100644 --- a/Goh-Li-Ting_ip_master/commits.json +++ b/Goh-Li-Ting_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Goh-Li-Ting":[{"date":"2023-08-23","commitResults":[{"hash":"51a9ed294f76d758b0492c4d5ec3e7650cbd0d14","isMergeCommit":false,"messageTitle":"Add greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"77c936ed3640f5aa2db09fecdd866d532cff02ce","isMergeCommit":false,"messageTitle":"Add ability to echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"0b86517ee7e89a8ada0b606b7574db2efb185232","isMergeCommit":false,"messageTitle":"Add ability to add tasks to list and display list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":3}}},{"hash":"b00566faedc7693f45ac7a5ef049f0ae53ff46df","isMergeCommit":false,"messageTitle":"Add ability to mark as done and not done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":5}}},{"hash":"ba315951960c89ae8cdb02f5462ea4b3646fa87f","isMergeCommit":false,"messageTitle":"Add todo, event and deadline tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":151,"deletions":10}}},{"hash":"ee740f323639a6968328bfccde17f76a7a7cf6cf","isMergeCommit":false,"messageTitle":"Add text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"081d2c122284616b24658d732740a16f5c081f8a","isMergeCommit":false,"messageTitle":"Add error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":22}}},{"hash":"a2b11215bdddd8c8622e6edebee9531891ca1803","isMergeCommit":false,"messageTitle":"Add ability to delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":36,"deletions":20}}}]},{"date":"2023-08-30","commitResults":[{"hash":"9353d334cb242b0128314c02295f5225bbbd26d3","isMergeCommit":false,"messageTitle":"Add ability to save tasks and retrieve saved tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":180,"deletions":54}}},{"hash":"cfdaac379a8317ffc633fa695eb596d9c61e92fd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1ac6ce15befa330090524025a462e23ea41d24a6","isMergeCommit":false,"messageTitle":"Add datetime format to deadline and event","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":47,"deletions":13}}},{"hash":"1fb50d4433782137bb153df3b25bbff0bfb48822","isMergeCommit":false,"messageTitle":"Add ability to get deadlines/events within a week","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":12}}},{"hash":"21e28b28becb0b6ccb4e4a9a4cce53b857efc3d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"33c6a28dd68c80ec55f573ffbceaea0e71561034","isMergeCommit":false,"messageTitle":"Abstract out classes for OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":559,"deletions":377}}},{"hash":"0956f91098f1964af81dbba01d173e9214c608db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d387888547c12caa70f02cbe767846d15bce888b","isMergeCommit":false,"messageTitle":"Organise classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":6},"bat":{"insertions":2,"deletions":2}}},{"hash":"ab3ac453fc505436939bc4cde431dd5f879936f8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"ea87dd115ebb669ca515c29d51cf2832d661fec4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6cd9a63857f98c1420c92344906df9a74c4b4228","isMergeCommit":false,"messageTitle":"Set up gradle to run ChatBuddy using gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"a5a12e6faf5f32644f9e69bc7efd2743578f47a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"5b3bd788891d2eabfe40014f56175a3630489c85","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":199,"deletions":1}}},{"hash":"05e9a7eeff874a19803835c1c6388d53d229f717","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"0255c4540be0e155274d5a6a5ab751c680620e4f","isMergeCommit":false,"messageTitle":"Package app as JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"cddc90c4866428b6637c84fad36fc563cc2f13d5","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":326,"deletions":51}}},{"hash":"5f76b46540847e85adb22a09219dc0ad8928c5ba","isMergeCommit":false,"messageTitle":"Add ability to find tasks by keyword","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":58,"deletions":0}}},{"hash":"3d5f2d3d0ac24128b235657e039aaa09cf48c59f","isMergeCommit":false,"messageTitle":"Change code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"e912d3fdf3140ee48918aa8fd766d299f7899626","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"919d41a3040972ff83f9b1171b9dcd47ea06ddc6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"508aa944fa3c15b0211580692ee7577111cc9b09","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"33cdb2764e9cb92e3d833d178ca6021fe90658f5","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":73,"deletions":73}}},{"hash":"d0a3f7fac22bfcddae87aa232b0b5743204e600f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"e5a615ffe3f2eaf79046e7f7c9ec327823ecba30","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":262,"deletions":121}}},{"hash":"3e3b4280ed8d5c4f3e6b05acae84d3ffcf441534","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Goh-Li-Ting":{"java":1568,"md":0,"fxml":36,"sh":0,"bat":2,"gradle":23,"txt":12}},"authorContributionVariance":{"Goh-Li-Ting":85816.55},"authorDisplayNameMap":{"Goh-Li-Ting":"CS2103T-T14-1 GOH ..TING"}} +{"authorDailyContributionsMap":{"Goh-Li-Ting":[{"date":"2023-08-23","commitResults":[{"hash":"51a9ed294f76d758b0492c4d5ec3e7650cbd0d14","isMergeCommit":false,"messageTitle":"Add greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"77c936ed3640f5aa2db09fecdd866d532cff02ce","isMergeCommit":false,"messageTitle":"Add ability to echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"0b86517ee7e89a8ada0b606b7574db2efb185232","isMergeCommit":false,"messageTitle":"Add ability to add tasks to list and display list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":3}}},{"hash":"b00566faedc7693f45ac7a5ef049f0ae53ff46df","isMergeCommit":false,"messageTitle":"Add ability to mark as done and not done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":5}}},{"hash":"ba315951960c89ae8cdb02f5462ea4b3646fa87f","isMergeCommit":false,"messageTitle":"Add todo, event and deadline tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":151,"deletions":10}}},{"hash":"ee740f323639a6968328bfccde17f76a7a7cf6cf","isMergeCommit":false,"messageTitle":"Add text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"081d2c122284616b24658d732740a16f5c081f8a","isMergeCommit":false,"messageTitle":"Add error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":22}}},{"hash":"a2b11215bdddd8c8622e6edebee9531891ca1803","isMergeCommit":false,"messageTitle":"Add ability to delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":36,"deletions":20}}}]},{"date":"2023-08-30","commitResults":[{"hash":"9353d334cb242b0128314c02295f5225bbbd26d3","isMergeCommit":false,"messageTitle":"Add ability to save tasks and retrieve saved tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":180,"deletions":54}}},{"hash":"cfdaac379a8317ffc633fa695eb596d9c61e92fd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1ac6ce15befa330090524025a462e23ea41d24a6","isMergeCommit":false,"messageTitle":"Add datetime format to deadline and event","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":47,"deletions":13}}},{"hash":"1fb50d4433782137bb153df3b25bbff0bfb48822","isMergeCommit":false,"messageTitle":"Add ability to get deadlines/events within a week","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":12}}},{"hash":"21e28b28becb0b6ccb4e4a9a4cce53b857efc3d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"33c6a28dd68c80ec55f573ffbceaea0e71561034","isMergeCommit":false,"messageTitle":"Abstract out classes for OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":559,"deletions":377}}},{"hash":"0956f91098f1964af81dbba01d173e9214c608db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d387888547c12caa70f02cbe767846d15bce888b","isMergeCommit":false,"messageTitle":"Organise classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":6},"bat":{"insertions":2,"deletions":2}}},{"hash":"ab3ac453fc505436939bc4cde431dd5f879936f8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"ea87dd115ebb669ca515c29d51cf2832d661fec4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6cd9a63857f98c1420c92344906df9a74c4b4228","isMergeCommit":false,"messageTitle":"Set up gradle to run ChatBuddy using gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"a5a12e6faf5f32644f9e69bc7efd2743578f47a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"5b3bd788891d2eabfe40014f56175a3630489c85","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":199,"deletions":1}}},{"hash":"05e9a7eeff874a19803835c1c6388d53d229f717","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"0255c4540be0e155274d5a6a5ab751c680620e4f","isMergeCommit":false,"messageTitle":"Package app as JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"cddc90c4866428b6637c84fad36fc563cc2f13d5","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":326,"deletions":51}}},{"hash":"5f76b46540847e85adb22a09219dc0ad8928c5ba","isMergeCommit":false,"messageTitle":"Add ability to find tasks by keyword","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":58,"deletions":0}}},{"hash":"3d5f2d3d0ac24128b235657e039aaa09cf48c59f","isMergeCommit":false,"messageTitle":"Change code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"e912d3fdf3140ee48918aa8fd766d299f7899626","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"919d41a3040972ff83f9b1171b9dcd47ea06ddc6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"508aa944fa3c15b0211580692ee7577111cc9b09","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"33cdb2764e9cb92e3d833d178ca6021fe90658f5","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":73,"deletions":73}}},{"hash":"d0a3f7fac22bfcddae87aa232b0b5743204e600f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"e5a615ffe3f2eaf79046e7f7c9ec327823ecba30","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":262,"deletions":121}}},{"hash":"3e3b4280ed8d5c4f3e6b05acae84d3ffcf441534","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"a8568d10ca7d7d8851aaf6873aa99d6dda06a1d0","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"No assertions are used in TaskList.\n\nAssertions can help to identity bugs in code.\n\nAdd assertions to TaskList to check that\n* the task number is valid if the code reaches the point to mark as done or not done\n* the new task is successfully added to the back of the taskList\n* the deleted task is no longer inside the taskList at the end of the function\n\nSuch assertions help to check that the functions work as intended.\n","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"5ac1a00d15df5ec64e8e8f2ab3ba11ca5d309761","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Goh-Li-Ting/branch-A-Assertions","messageBody":"Add assertions to TaskList.java","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"cc52afe83b9904caeb025c5c94ef3391b1a4cc21","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0d38a92c9eb9356d083cfe6d32ce73da22f5b879","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"The current code is not of good quality.\nComplicated expressions are used and SLAP is not followed for some methods.\n\nImprove code quality in Parser.java, Storage.java and Ui.java.\n* Extract code to follow SLAP and make code more readable\n* Change some complicated expressions to named booleans\n\nImproving code quality makes the code easier to read.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":19}}},{"hash":"a0e66ca840ec681006e4b4016805bd22ddf9add0","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Goh-Li-Ting/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Goh-Li-Ting":{"java":1658,"md":0,"fxml":36,"sh":0,"bat":2,"gradle":23,"txt":12}},"authorContributionVariance":{"Goh-Li-Ting":68926.49},"authorDisplayNameMap":{"Goh-Li-Ting":"CS2103T-T14-1 GOH ..TING"}} diff --git a/Heran9_ip_master/commits.json b/Heran9_ip_master/commits.json index 82664d1c..ea290e9e 100644 --- a/Heran9_ip_master/commits.json +++ b/Heran9_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Heran9":[{"date":"2023-08-24","commitResults":[{"hash":"def15047cbfd90dcf8973cbd5fe6511fc1328213","isMergeCommit":false,"messageTitle":"add Moss.java, remove Duke.java","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"902371b5c96c0f21a2687209d40bfc8e01c7bc60","isMergeCommit":false,"messageTitle":"add echo, make it a parrot","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"19798a3508fba4addc1fabb7f9d6d6e318a0f662","isMergeCommit":false,"messageTitle":"add Add, List make it a little notebook","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}},{"hash":"e8a08b43fe6ebbcf9db0269cad471d66f084bc16","isMergeCommit":false,"messageTitle":"add Task class, change the message type String to Task, make it can be marked or unmarked.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":3}}},{"hash":"0761fcd2b9cccc4a8a212d2b314cbd261b64cb9c","isMergeCommit":false,"messageTitle":"add different tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":2}}},{"hash":"5e4925d31264fde3c4b5d990649986ce476c86c9","isMergeCommit":false,"messageTitle":"automate test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"282985301c285a0d630545db88c7b38870c1d766","isMergeCommit":false,"messageTitle":"add exception handler","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":36}}},{"hash":"ccf4acba1bba98d50fde197f5a9cdd951453c9e8","isMergeCommit":false,"messageTitle":"add command delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"d2cd25148fc61821e136c2ec0dc347f657bc0957","isMergeCommit":false,"messageTitle":"add more javadocs","messageBody":"","tags":["Level-6(modified)"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":2}}},{"hash":"e5856b6e9031cba9c19cf3b92057f77730e27085","isMergeCommit":false,"messageTitle":"removed emoji, there are some errors happened when using emoji in the string sentence at the automate test stage, dk why this happens","messageBody":"","tags":["Level-6(modified-1)"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}}]},{"date":"2023-08-31","commitResults":[{"hash":"6672936fd519c410ea2f854b0493ff5ab6191a8d","isMergeCommit":false,"messageTitle":"read and write file","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":106,"deletions":6}}},{"hash":"4c37f51963ee1f798c706ac39e9b3bbdef4c7380","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"59d739509f057b1ee4b47ae430a77552baf42933","isMergeCommit":false,"messageTitle":"add datetime","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5},"java":{"insertions":36,"deletions":17}}},{"hash":"9663f19f6e970b457ab2867e8fa568c016bec468","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6a5046e6cf7686e76c199f768458670c20438ba5","isMergeCommit":false,"messageTitle":"make it more oop","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":183,"deletions":147}}},{"hash":"b2b231f9b716834a6e795308f456ac5064e3a5cf","isMergeCommit":false,"messageTitle":"put all in a package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":8}}},{"hash":"da886a161f447e4776505d50fe0f2d6b9d4868b3","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"1eb4e85842bf9b43e562803770812b49997a00c9","isMergeCommit":false,"messageTitle":"Junit test","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":2},"txt":{"insertions":1,"deletions":4},"java":{"insertions":175,"deletions":23}}},{"hash":"784fafce3e2f692a7cd921542ec42596f3c98a5d","isMergeCommit":false,"messageTitle":"create a jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"94205b01c4037b152a2b616f53012f6d06aec0f2","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":210,"deletions":42}}},{"hash":"3eb84d7f4ed860c699b75e14a49d34c6c8d5919d","isMergeCommit":false,"messageTitle":"fit Java coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":93,"deletions":49}}},{"hash":"ef0ba879bda3a899759c9fc53f949e1c9be60cb7","isMergeCommit":false,"messageTitle":"add find tasks","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":37,"deletions":8}}},{"hash":"04e1ef0225f0ec366c13381adef6cfc9a457901e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"51f4dd82d1c9202729968e2e851796fb35ee1e7d","isMergeCommit":true,"messageTitle":"deal with the conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a8bc15ec526e8f00dac3b83f2cb0acc0db06144b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"d60901fd23df37791acb52facde56327ccdb6b3d","isMergeCommit":false,"messageTitle":"fix small bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"817510521bbdf6a4991adde571020be10a059b49","isMergeCommit":false,"messageTitle":"Implement GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"txt":{"insertions":0,"deletions":2},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":385,"deletions":57}}},{"hash":"ae46fa392622ebb3416ba849c0dc1179ef141a56","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"e5e8c0f79b7cd2adf8dc6820452f29b501cfe4e0","isMergeCommit":false,"messageTitle":"Add assertions to document and validate assumptions in Storage class","messageBody":"In this commit, we have added `assert` statements at various key points\nin the `Storage` class to document and validate important assumptions.\nThese assertions enhance the robustness and maintainability of the code\nby explicitly checking conditions that should be true during execution.\n\nThe assertions provide clear feedback in case any assumptions are\nviolated, making it easier to identify and fix issues during development\nand maintenance.\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"55cf05f12402bae7d623eff30e86d988a75dbaee","isMergeCommit":false,"messageTitle":"Remove some redundant code and delete some unused import statement.","messageBody":"Make some attributes final to make it safier.\n\nChange a lot including remove redudant attribute, modify the constrcuter\nsince it is actually unnecessary.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":70}}},{"hash":"6b4c9f76087132771ec10cb117069a80cbca467d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Heran9/branch-A-Assertions","messageBody":"Add assertions to document and validate assumptions in Storage class","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"4e9ed3983255d758c61b4f493f95238616cd1dad","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b9892ce7cedcd934e4a03376a5bfda0eee79e020","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Heran9/branch-A-CodeQuality","messageBody":"Branch a code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"ba4a6f73790717c74e564b73d8891973de641255","isMergeCommit":false,"messageTitle":"Fix bugs by incorrect merges on github","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-09-15","commitResults":[{"hash":"134ff13c48dec6b951af9a3f99c4d1bdad95e728","isMergeCommit":false,"messageTitle":"add extension C-help","messageBody":"","tags":["C-Help"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Heran9":{"java":1139,"md":0,"fxml":35,"sh":0,"bat":1,"gradle":20,"txt":14}},"authorContributionVariance":{"Heran9":34141.777},"authorDisplayNameMap":{"Heran9":"CS2103T-F10-4 LANG..ERAN"}} +{"authorDailyContributionsMap":{"Heran9":[{"date":"2023-08-24","commitResults":[{"hash":"def15047cbfd90dcf8973cbd5fe6511fc1328213","isMergeCommit":false,"messageTitle":"add Moss.java, remove Duke.java","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"902371b5c96c0f21a2687209d40bfc8e01c7bc60","isMergeCommit":false,"messageTitle":"add echo, make it a parrot","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"19798a3508fba4addc1fabb7f9d6d6e318a0f662","isMergeCommit":false,"messageTitle":"add Add, List make it a little notebook","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}},{"hash":"e8a08b43fe6ebbcf9db0269cad471d66f084bc16","isMergeCommit":false,"messageTitle":"add Task class, change the message type String to Task, make it can be marked or unmarked.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":3}}},{"hash":"0761fcd2b9cccc4a8a212d2b314cbd261b64cb9c","isMergeCommit":false,"messageTitle":"add different tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":2}}},{"hash":"5e4925d31264fde3c4b5d990649986ce476c86c9","isMergeCommit":false,"messageTitle":"automate test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"282985301c285a0d630545db88c7b38870c1d766","isMergeCommit":false,"messageTitle":"add exception handler","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":36}}},{"hash":"ccf4acba1bba98d50fde197f5a9cdd951453c9e8","isMergeCommit":false,"messageTitle":"add command delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"d2cd25148fc61821e136c2ec0dc347f657bc0957","isMergeCommit":false,"messageTitle":"add more javadocs","messageBody":"","tags":["Level-6(modified)"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":2}}},{"hash":"e5856b6e9031cba9c19cf3b92057f77730e27085","isMergeCommit":false,"messageTitle":"removed emoji, there are some errors happened when using emoji in the string sentence at the automate test stage, dk why this happens","messageBody":"","tags":["Level-6(modified-1)"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}}]},{"date":"2023-08-31","commitResults":[{"hash":"6672936fd519c410ea2f854b0493ff5ab6191a8d","isMergeCommit":false,"messageTitle":"read and write file","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":106,"deletions":6}}},{"hash":"4c37f51963ee1f798c706ac39e9b3bbdef4c7380","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"59d739509f057b1ee4b47ae430a77552baf42933","isMergeCommit":false,"messageTitle":"add datetime","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5},"java":{"insertions":36,"deletions":17}}},{"hash":"9663f19f6e970b457ab2867e8fa568c016bec468","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6a5046e6cf7686e76c199f768458670c20438ba5","isMergeCommit":false,"messageTitle":"make it more oop","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":183,"deletions":147}}},{"hash":"b2b231f9b716834a6e795308f456ac5064e3a5cf","isMergeCommit":false,"messageTitle":"put all in a package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":8}}},{"hash":"da886a161f447e4776505d50fe0f2d6b9d4868b3","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"1eb4e85842bf9b43e562803770812b49997a00c9","isMergeCommit":false,"messageTitle":"Junit test","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":2},"txt":{"insertions":1,"deletions":4},"java":{"insertions":175,"deletions":23}}},{"hash":"784fafce3e2f692a7cd921542ec42596f3c98a5d","isMergeCommit":false,"messageTitle":"create a jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"94205b01c4037b152a2b616f53012f6d06aec0f2","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":210,"deletions":42}}},{"hash":"3eb84d7f4ed860c699b75e14a49d34c6c8d5919d","isMergeCommit":false,"messageTitle":"fit Java coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":93,"deletions":49}}},{"hash":"ef0ba879bda3a899759c9fc53f949e1c9be60cb7","isMergeCommit":false,"messageTitle":"add find tasks","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":37,"deletions":8}}},{"hash":"04e1ef0225f0ec366c13381adef6cfc9a457901e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"51f4dd82d1c9202729968e2e851796fb35ee1e7d","isMergeCommit":true,"messageTitle":"deal with the conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a8bc15ec526e8f00dac3b83f2cb0acc0db06144b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"d60901fd23df37791acb52facde56327ccdb6b3d","isMergeCommit":false,"messageTitle":"fix small bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"817510521bbdf6a4991adde571020be10a059b49","isMergeCommit":false,"messageTitle":"Implement GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"txt":{"insertions":0,"deletions":2},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":385,"deletions":57}}},{"hash":"ae46fa392622ebb3416ba849c0dc1179ef141a56","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"e5e8c0f79b7cd2adf8dc6820452f29b501cfe4e0","isMergeCommit":false,"messageTitle":"Add assertions to document and validate assumptions in Storage class","messageBody":"In this commit, we have added `assert` statements at various key points\nin the `Storage` class to document and validate important assumptions.\nThese assertions enhance the robustness and maintainability of the code\nby explicitly checking conditions that should be true during execution.\n\nThe assertions provide clear feedback in case any assumptions are\nviolated, making it easier to identify and fix issues during development\nand maintenance.\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"55cf05f12402bae7d623eff30e86d988a75dbaee","isMergeCommit":false,"messageTitle":"Remove some redundant code and delete some unused import statement.","messageBody":"Make some attributes final to make it safier.\n\nChange a lot including remove redudant attribute, modify the constrcuter\nsince it is actually unnecessary.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":70}}},{"hash":"6b4c9f76087132771ec10cb117069a80cbca467d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Heran9/branch-A-Assertions","messageBody":"Add assertions to document and validate assumptions in Storage class","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"4e9ed3983255d758c61b4f493f95238616cd1dad","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b9892ce7cedcd934e4a03376a5bfda0eee79e020","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Heran9/branch-A-CodeQuality","messageBody":"Branch a code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"ba4a6f73790717c74e564b73d8891973de641255","isMergeCommit":false,"messageTitle":"Fix bugs by incorrect merges on github","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-09-15","commitResults":[{"hash":"134ff13c48dec6b951af9a3f99c4d1bdad95e728","isMergeCommit":false,"messageTitle":"add extension C-help","messageBody":"","tags":["C-Help","BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Heran9":{"java":1139,"md":0,"fxml":35,"sh":0,"bat":1,"gradle":20,"txt":14}},"authorContributionVariance":{"Heran9":34141.777},"authorDisplayNameMap":{"Heran9":"CS2103T-F10-4 LANG..ERAN"}} diff --git a/JasonRay168_ip_master/authorship.json b/JasonRay168_ip_master/authorship.json index 513828c8..344ac0b9 100644 --- a/JasonRay168_ip_master/authorship.json +++ b/JasonRay168_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":"JasonRay168"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-31"},{"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":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"\tString javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"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":"JasonRay168"},"content":" mainClass.set(\"echobot.Launcher\")","lastModifiedDate":"2023-09-06"},{"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":"JasonRay168"},"content":" archiveBaseName \u003d \"echobot\"","lastModifiedDate":"2023-09-06"},{"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":{"-":40,"JasonRay168":18}},{"path":"src/main/java/echobot/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * The class representing a dialog box","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a dialog box","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" * @param text String of the dialog box","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" * @param img Image shown beside the label","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" * Flips EchoBot\u0027s dialog box","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" * Creates a dialog box for the user","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" * @param l Label of the dialog box","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" * @param iv Image shown beside the label","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" * @return A dialog box for the user input","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" public static DialogBox getUserDialog(String l, Image iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" * Creates a dialog box for the chatbot","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" * @param l Label of the dialog box","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" * @param iv Image shown beside the label","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" * @return A dialog box for the chatbot\u0027s output","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" public static DialogBox getEchoBotDialog(String l, Image iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"JasonRay168":80}},{"path":"src/main/java/echobot/EchoBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import echobot.utilities.Input;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import echobot.utilities.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import echobot.utilities.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import echobot.utilities.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import echobot.utilities.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" * The main class for EchoBot Chatbot","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"public class EchoBot {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" /** Variable to show if EchoBot is running or not */","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" private static boolean isRunning \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" /** File path to the tasks.txt */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" public static final String FILE_PATH \u003d \"./tasks.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store task list */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle list of tasks operations */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user interactions */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user inputs */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of EchoBot chatbot","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" public EchoBot() {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" if (storage.fileExists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList(storage.loadTasksData());","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" Input parsedInput \u003d parser.parse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" String output \u003d parser.handleInput(tasks, parsedInput, ui);","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" tasks.overwriteTasksData(storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":"\t * Starts the current session","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":"\tpublic static void startBot() {","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":"\t\tisRunning \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":"\t/** Ends the current session */","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":"\tpublic static void stopBot() {","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":"\t\tisRunning \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" public boolean isRunning() {","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" return isRunning;","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":83}},{"path":"src/main/java/echobot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":" * A launcher class to workaround classpath issues","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"JasonRay168":12}},{"path":"src/main/java/echobot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" private EchoBot echobot \u003d new EchoBot();","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" EchoBot.startBot();","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setEchoBot(echobot);","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().greetUser();","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"JasonRay168":33}},{"path":"src/main/java/echobot/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" private EchoBot echobot;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.jpg\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.jpg\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" public void setEchoBot(EchoBot echobot) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" this.echobot \u003d echobot;","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" String dukeText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" DialogBox.getUserDialog(userText, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" DialogBox.getEchoBotDialog(dukeText, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" if (!echobot.isRunning()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" System.exit(0);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" public void greetUser() {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" echobot.startBot();","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" String greetings \u003d \"Welcome, User\\n\" + \"What would you like to do?\";","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" DialogBox.getEchoBotDialog(greetings, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" return echobot.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"JasonRay168":68}},{"path":"src/main/java/echobot/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Parent exception for all custom exceptions","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/EmptyListException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the list is empty","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class EmptyListException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public EmptyListException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the input command doesn\u0027t exist","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/InvalidCommandSyntaxException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the command is typed wrongly","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidCommandSyntaxException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidCommandSyntaxException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task number is out of bounds","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidTaskNumberException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/InvalidTaskTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates there is missing information on time inputs","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidTaskTimeException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidTaskTimeException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/MissingTaskDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task is missing its description","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskDescriptionException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/MissingTaskNameException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task has no name","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskNameException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskNameException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/MissingTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates no number was inputted","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskNumberException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/utilities/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Deadline task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /** Deadline of a deadline task */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" * Creates new instance of a deadline task","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" * @param deadline Deadline of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.DEADLINE, \"(by: \" + deadline + \")\");","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" public String getDeadline() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" return this.deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":25}},{"path":"src/main/java/echobot/utilities/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Event task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /** Start time of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" /** End time of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" private String endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of an event task","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * @param startDate Start time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" * @param endDate End time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" public Event(String name, String startDate, String endDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.EVENT, \"(from: \" + startDate + \" to: \" + endDate + \")\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" public String getStart() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" return this.startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public String getEnd() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" return this.endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":34}},{"path":"src/main/java/echobot/utilities/Input.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Deals with storing input data","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Input {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the command section of the input string */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String command;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the full input */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" private String fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the number of words inside the input */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" private int wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of an Input object","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" * @param command The name of the command to be called","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full String input typed in by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" * @param wordLength The number of words in the input","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" public Input(String command, String fullInput, int wordLength) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" this.fullInput \u003d fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" this.wordLength \u003d wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" return this.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" public int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" return this.wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" public String getFullInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" return this.fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":41}},{"path":"src/main/java/echobot/utilities/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" * Deals with making sense of user commands","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" * Parses the user input to identify its important parts","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * @param input The user input","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" * @return Input object containing key points of the user input","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" public Input parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" String[] split \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" String command \u003d split[0].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" int length \u003d split.length;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" return new Input(command, input, length);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * Parses and formats the date input into another format","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" * @param strDate Date in String format","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" * @return Date in \"MMM dd yyyy\" format","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" public String formatDate(String strDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" String result;","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" LocalDate parseDate \u003d LocalDate.parse(strDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" result \u003d parseDate.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" result \u003d \"Invalid date\";","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" return result;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" * Handles the various cases of user inputs","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" * @param tasks TaskList object that contains the list","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" * @param input Input object that contains parsed user input","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" * @param ui Ui where the helper functions are located","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" * @return True or false signifying breaking or continuing the loop","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" public String handleInput(TaskList tasks, Input input, Ui ui) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" int numberOfWords \u003d input.getLength();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" case \"list\":","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showList(tasks, numberOfWords);","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showManipulateTasks(tasks, command, fullInput, numberOfWords);","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" case \"todo\":","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showAddToDo(tasks, fullInput, numberOfWords);","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showAddDeadline(tasks, fullInput, numberOfWords, this);","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" case \"event\":","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showAddEvent(tasks, fullInput, numberOfWords, this);","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" case \"find\":","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showFind(tasks, fullInput, numberOfWords);","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" case \"bye\":","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showBye(numberOfWords);","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandException(\"No such command exists\");","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" output \u003d e.getMessage() + \"\\nPlease be careful next time\";","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":92}},{"path":"src/main/java/echobot/utilities/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" * Handles loading and saving tasks into the tasks.txt file","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store relative file path */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" private File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" /** Variable to check if File already exists */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" private boolean isCreated;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" * Creates new Storage objects to store filpath and file","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" * @param filePath Path of the tasks.txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" this.isCreated \u003d !file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! IOException\" + e);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" * Overwrites existing data in tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" * @param tasks List of tasks that will overwrite the data in the file","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" FileOutputStream fos \u003d new FileOutputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" ObjectOutputStream oos \u003d new ObjectOutputStream(fos);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" oos.writeObject(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" oos.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" oos.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! File is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * Loads the data from tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * @return A list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" public ArrayList\u003cTask\u003e loadTasksData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" FileInputStream fis \u003d new FileInputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" ObjectInputStream ois \u003d new ObjectInputStream(fis);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d (ArrayList\u003cTask\u003e) ois.readObject();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" ois.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"File is not found\\n\" + \"Please be careful next time\");","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"e.getMessage()\\n\" + \"Please be careful next time\");","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" } catch (ClassNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"Class is not found\\n\" + \"Please be careful next time\");","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" * Checks whether file already exists or not","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" * @return Value of isCreated","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" public boolean fileExists() {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" return this.isCreated;","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":86}},{"path":"src/main/java/echobot/utilities/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":" * Class for tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" /** Name of task */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" private String name;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" /** Task description, including time */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" /** Variable to reflect whether a task is finished */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" /** Type of task, can be either a todo, deadline, or event */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" private Type type;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" * @param type Type of task","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" * @param description Task description, which includes by, to, and from","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" public Task(String name, Type type, String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" this.description \u003d description.equals(\"\") ? description : \"\\n\\t\" + description;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as done","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" * @return String output after marking as done","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" public String markAsDone() {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" return \"You have marked this task as done\\n\" + \"\\t\" + this.convertToString();","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as not done","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" * @return String output after marking as not done","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" public String markAsNotDone() {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" return \"You have marked this task as not done\\n\" + \"\\t\" + this.convertToString();","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * Converts the task object to a String text for display","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * @return the String representation of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" public String convertToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" return \"[\" + this.getType().charAt(0) + \"]\"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" + \"[\" + (this.isDone() ? \"X\" : \" \") + \"] \"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" + this.getName() + this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" public String getName() {","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" return this.name;","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" public String getType() {","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" return this.type.name();","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"JasonRay168":78}},{"path":"src/main/java/echobot/utilities/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.InvalidTaskNumberException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Contains the task list and its operations","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the tasks */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" * Creates a TaskList with a predefined list","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * @param tasks List to be stored inside the local list variable","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" * Creates a TaskList with an empty list","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" * Manipulates the data of existing tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" * Includes marking, unmarking, and deleting tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput Full String input by user","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" * @param command First word of input that signifies the command to be run","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" * @param beginIndex Beginning index of the command description excluding the command itself","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" * @return String output of task manipulated","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskNumberException If task number is out of bounds","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" public String manipulateTasks(String fullInput, String command, int beginIndex) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" int taskNum \u003d Integer.parseInt(fullInput.substring(beginIndex));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" if (taskNum \u003e this.getSize() || taskNum \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskNumberException(\"The task number you specify does not exist\");","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" output \u003d getTask(taskNum - 1).markAsDone();","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" output \u003d getTask(taskNum - 1).markAsNotDone();","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" output \u003d deleteTask(this.getTask(taskNum - 1));","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" * Adds a todo task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" * @return String output of todo task added","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" public String addToDo(String taskName) {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" ToDo task \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"You have added a task:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"\\t[T][ ] \" + taskName + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"There are now \" + tasks.size() + \" tasks in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" * Adds a deadline task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" * @param deadline Deadline date of task","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" * @return String output of deadline task added","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" public String addDeadline(String taskName, String deadline) {","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" Deadline task \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"You have added a task:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"\\t[D][ ] \" + taskName + \"\\n\\t(by: \" + deadline + \")\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"There are now \" + this.getSize() + \" tasks in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" * Adds an event task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":" * @param startDate Start date of task","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":" * @param endDate End date of task","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" * @return String output of event task added","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" public String addEvent(String taskName, String startDate, String endDate) {","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" Event task \u003d new Event(taskName, startDate, endDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"You have added a task:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"\\t[E][ ] \" + taskName + \"\\n\\t(from: \" + startDate + \" to: \" + endDate + \")\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"There are now \" + tasks.size() + \" tasks in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":" * Deletes a task from the list","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":" * @param task Task to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":" * @return String output after deleting","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":" public String deleteTask(Task task) {","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"You have deleted a task:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"\\t\" + task.convertToString() + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"There are now \" + this.getSize() + \" tasks in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" * Copies and filters the task list to only display tasks with the keyword mentioned","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":" * @param keyword The keyword that will be compared to the task names","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" * @return The filtered list","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" public ArrayList\u003cTask\u003e filterTaskName(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasksCopied \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" tasksCopied.removeIf(task -\u003e !task.getName().toLowerCase().contains(keyword.toLowerCase()));","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":" return tasksCopied;","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"JasonRay168"},"content":" * Overwrites the current list with the list stored in hard drive","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"JasonRay168"},"content":" * @param storage Storage object that points to the stored file","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"JasonRay168"},"content":" storage.overwriteTasksData(this.tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"JasonRay168"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"JasonRay168"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"JasonRay168"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"JasonRay168"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":157}},{"path":"src/main/java/echobot/utilities/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Todo task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a ToDo task","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.TODO, \"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/utilities/Type.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Enum class to declare types of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public enum Type {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" TODO,","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" DEADLINE,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" EVENT;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/echobot/utilities/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import echobot.EchoBot;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.EmptyListException;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.InvalidCommandSyntaxException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.InvalidTaskNumberException;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.InvalidTaskTimeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.MissingTaskDescriptionException;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.MissingTaskNameException;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.MissingTaskNumberException;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" * Handles user interaction","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" /** Variable to detect user input */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" * Prints greetings to the user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" public void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"Welcome. My name is Duke\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"What will you do today?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" * Allows users to type in their inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" * @return Input as String","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" public String startInputSession() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" return sc.nextLine().trim();","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" * Shows the contents of the list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing tasks","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidCommandSyntaxException If there are words after the \"list\" command","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" public String showList(TaskList tasks, int numberOfWords)","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" throws InvalidCommandSyntaxException {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003e 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027list\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" if (tasks.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" return \"List is empty\";","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 1; i \u003c tasks.getSize() + 1; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" Task current \u003d tasks.getTask(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" output.append(i).append(\". \").append(current.convertToString()).append(\"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" return output.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" * Shows output text when a task is marked, unmarked, or deleted","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" * @param command The first word of the input","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing changed task mark","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNumberException If the command is not followed by any number","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" * @throws EmptyListException If the list of tasks is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskNumberException If the task number to be manipulated does not exist","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" public String showManipulateTasks(TaskList tasks, String command, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskNumberException, EmptyListException, InvalidTaskNumberException {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNumberException(\"Task number cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" } else if (tasks.getSize() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" throw new EmptyListException(\"List is currently empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" output \u003d tasks.manipulateTasks(fullInput, \"mark\", 5);","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" output \u003d tasks.manipulateTasks(fullInput, \"unmark\", 7);","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" output \u003d tasks.manipulateTasks(fullInput, \"delete\", 7);","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when a todo task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing added todo task","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" public String showAddToDo(TaskList tasks, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d fullInput.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":" return tasks.addToDo(taskName);","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when a deadline task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":" * @param parser The parser to parse dates","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing added deadline task","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNameException If the task name is not specified","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskTimeException If there are missing or more than one deadlines","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":" public String showAddDeadline(TaskList tasks, String fullInput, int numberOfWords, Parser parser)","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException, MissingTaskNameException, InvalidTaskTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Deadline task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(9).split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(\"Deadline task must have exactly one deadline using /by tag\");","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Deadline task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"JasonRay168"},"content":" String strDeadline \u003d taskDesc[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"JasonRay168"},"content":" String deadline \u003d parser.formatDate(strDeadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"JasonRay168"},"content":" if (!deadline.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"JasonRay168"},"content":" return tasks.addDeadline(taskName, deadline);","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"JasonRay168"},"content":" return \"\\nDate needs to be in the form of yyyy-mm-dd\";","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when an event task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"JasonRay168"},"content":" * @param parser The parser to parse dates","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing added event task","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNameException If the task name is not specified","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskTimeException If there are missing or more than one start or end dates","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"JasonRay168"},"content":" public String showAddEvent(TaskList tasks, String fullInput, int numberOfWords, Parser parser)","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException, MissingTaskNameException, InvalidTaskTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Event task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(6).split(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one start and one end dates\"","lastModifiedDate":"2023-09-08"},{"lineNumber":174,"author":{"gitId":"JasonRay168"},"content":" + \"using one /from and one /to tags, in that order\");","lastModifiedDate":"2023-09-08"},{"lineNumber":175,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"JasonRay168"},"content":" String[] fromAndTo \u003d taskDesc[1].split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"JasonRay168"},"content":" if (fromAndTo.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one start and one end dates\"","lastModifiedDate":"2023-09-08"},{"lineNumber":181,"author":{"gitId":"JasonRay168"},"content":" + \"using one /from and one /to tags, in that order\");","lastModifiedDate":"2023-09-08"},{"lineNumber":182,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Event task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"JasonRay168"},"content":" String strStart \u003d fromAndTo[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"JasonRay168"},"content":" String strEnd \u003d fromAndTo[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"JasonRay168"},"content":" String start \u003d parser.formatDate(strStart);","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"JasonRay168"},"content":" if (!start.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"JasonRay168"},"content":" String end \u003d parser.formatDate(strEnd);","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"JasonRay168"},"content":" if (!end.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":192,"author":{"gitId":"JasonRay168"},"content":" return tasks.addEvent(taskName, start, end);","lastModifiedDate":"2023-09-08"},{"lineNumber":193,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":194,"author":{"gitId":"JasonRay168"},"content":" return \"\\nDate needs to be in the form of yyyy-mm-dd\";","lastModifiedDate":"2023-09-08"},{"lineNumber":195,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":196,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":197,"author":{"gitId":"JasonRay168"},"content":" return \"\\nDate needs to be in the form of yyyy-mm-dd\";","lastModifiedDate":"2023-09-08"},{"lineNumber":198,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":199,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":200,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":201,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"JasonRay168"},"content":" * Shows text output of the result for searching tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":204,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":205,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":206,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing found tasks with specified keywords","lastModifiedDate":"2023-09-08"},{"lineNumber":208,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":209,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":210,"author":{"gitId":"JasonRay168"},"content":" public String showFind(TaskList tasks, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-08"},{"lineNumber":211,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":212,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":213,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"JasonRay168"},"content":" String taskToBeFound \u003d fullInput.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasksFiltered \u003d tasks.filterTaskName(taskToBeFound);","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"JasonRay168"},"content":" int size \u003d tasksFiltered.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"JasonRay168"},"content":" if (size \u003e 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"JasonRay168"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":220,"author":{"gitId":"JasonRay168"},"content":" output.append(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-08"},{"lineNumber":221,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"JasonRay168"},"content":" output.append(\"\\n\").append(i + 1).append(\". \").append(tasksFiltered.get(i).convertToString());","lastModifiedDate":"2023-09-08"},{"lineNumber":223,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":224,"author":{"gitId":"JasonRay168"},"content":" return output.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":225,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":226,"author":{"gitId":"JasonRay168"},"content":" return \"There are no matching tasks in your list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":227,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":228,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":229,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":230,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":231,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when the user exits the chatbot","lastModifiedDate":"2023-09-03"},{"lineNumber":232,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":233,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":234,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing goodbye","lastModifiedDate":"2023-09-08"},{"lineNumber":235,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidCommandSyntaxException If there are words after the \"bye\" command","lastModifiedDate":"2023-09-03"},{"lineNumber":236,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":237,"author":{"gitId":"JasonRay168"},"content":" public String showBye(int numberOfWords)","lastModifiedDate":"2023-09-08"},{"lineNumber":238,"author":{"gitId":"JasonRay168"},"content":" throws InvalidCommandSyntaxException {","lastModifiedDate":"2023-09-03"},{"lineNumber":239,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003e 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":240,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027bye\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"JasonRay168"},"content":" EchoBot.stopBot();","lastModifiedDate":"2023-09-08"},{"lineNumber":243,"author":{"gitId":"JasonRay168"},"content":" return \"I hope you enjoy my service. Thank you and goodbye\";","lastModifiedDate":"2023-09-08"},{"lineNumber":244,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":245}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"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-08"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" \u003cLabel fx:id\u003d\"dialog\" lineSpacing\u003d\"1.0\" text\u003d\"Label [ ] [X]\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" \u003cFont name\u003d\"Gill Sans MT\" size\u003d\"12.5\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" \u003cInsets left\u003d\"8.0\" right\u003d\"8.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" \u003c/HBox.margin\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"80.0\" fitWidth\u003d\"80.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"JasonRay168":26}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"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\"echobot.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Type in your command\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" \u003cFont name\u003d\"Gill Sans MT\" size\u003d\"12.5\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" \u003cFont name\u003d\"Gill Sans MT\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"JasonRay168":26}},{"path":"src/test/java/echobot/utilities/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" public void test1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"todo eat\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"todo eat\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" public void test2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"event camp /from 2023-03-05 /to 2023-03-06\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 6);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"event camp /from 2023-03-05 /to 2023-03-06\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" public void test3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"hello world, nice to meet you all\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"hello\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 7);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"hello world, nice to meet you all\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" public void test4() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" String formattedDate \u003d parser.formatDate(\"2023-09-03\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" assertEquals(formattedDate, \"Sep 03 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" public void test5() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" String formattedDate \u003d parser.formatDate(\"August 23, 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" assertEquals(formattedDate, \"Invalid date\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":54}},{"path":"src/test/java/echobot/utilities/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" public void test1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" Task task \u003d new Task(\"homework\", Type.DEADLINE, \" (by: Aug 03 2023)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" assertEquals(task.isDone(), true);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" assertEquals(task.isDone(), false);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" String stringRepresentation \u003d task.convertToString();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" assertEquals(\"[D][X] homework (by: Aug 03 2023)\", stringRepresentation);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"todo borrow book from the library","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"deadline return book to library /by 2023-04-24","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"deadline submit homework by 2023-04-24","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"event concert /from 2023-03-24 /to 2023-03-26","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"event project meeting /from 2023-04-24 to 2023-04-25","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"event /from 2023-04-24 /to 2023-04-25","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"delete 1","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"mark","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"unmark","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"delete","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"mark 100","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"unmark 0","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"delete -3","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":28}},{"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":"JasonRay168"},"content":"javac -cp ..\\src\\main\\java\\ -Xlint:none -d ..\\bin ..\\src\\main\\java\\echobot\\*.java","lastModifiedDate":"2023-09-06"},{"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":"JasonRay168"},"content":"java -classpath ..\\bin echobot.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":19,"JasonRay168":2}},{"path":"tasks.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"JasonRay168":0}}] +[{"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":"JasonRay168"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-31"},{"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":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"\tString javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"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":"JasonRay168"},"content":" mainClass.set(\"echobot.Launcher\")","lastModifiedDate":"2023-09-06"},{"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":"JasonRay168"},"content":" archiveBaseName \u003d \"echobot\"","lastModifiedDate":"2023-09-06"},{"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":"JasonRay168"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":40,"JasonRay168":19}},{"path":"src/main/java/echobot/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" * The class representing a dialog box","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a dialog box","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * @param text String of the dialog box","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" * @param img Image shown beside the label","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" * Flips EchoBot\u0027s dialog box","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * Creates a dialog box for the user","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * @param l Label of the dialog box","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" * @param iv Image shown beside the label","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" * @return A dialog box for the user input","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" public static DialogBox getUserDialog(String l, Image iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" * Creates a dialog box for the chatbot","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" * @param l Label of the dialog box","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" * @param iv Image shown beside the label","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" * @return A dialog box for the chatbot\u0027s output","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" public static DialogBox getEchoBotDialog(String l, Image iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"JasonRay168":79}},{"path":"src/main/java/echobot/EchoBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.File;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import echobot.utilities.Input;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import echobot.utilities.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import echobot.utilities.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import echobot.utilities.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import echobot.utilities.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import java.io.File;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" * The main class for EchoBot Chatbot","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"public class EchoBot {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" /** Variable to show if EchoBot is running or not */","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" private static boolean isRunning \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" /** File path to the tasks.txt */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" private static final String FILE_PATH \u003d \"./tasks.txt\";","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store task list */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle list of tasks operations */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user interactions */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user inputs */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of EchoBot chatbot","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" public EchoBot() {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" if (storage.fileExists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList(storage.loadTasksData());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" File txtFile \u003d new File(FILE_PATH);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" assert txtFile.exists();","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" Input parsedInput \u003d parser.parse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" String output \u003d parser.handleInput(tasks, parsedInput, ui);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" File txtFile \u003d new File(FILE_PATH);","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" assert txtFile.exists();","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" tasks.overwriteTasksData(storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" * Starts the current session","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" public static void startBot() {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" isRunning \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" /** Ends the current session */","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" public static void stopBot() {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" isRunning \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" public boolean isRunning() {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" return isRunning;","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":80}},{"path":"src/main/java/echobot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":" * A launcher class to workaround classpath issues","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"JasonRay168":12}},{"path":"src/main/java/echobot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" private EchoBot echobot \u003d new EchoBot();","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" EchoBot.startBot();","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setEchoBot(echobot);","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().greetUser();","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"JasonRay168":33}},{"path":"src/main/java/echobot/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" private EchoBot echobot;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.jpg\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.jpg\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" public void setEchoBot(EchoBot echobot) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" this.echobot \u003d echobot;","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" String dukeText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" DialogBox.getUserDialog(userText, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" DialogBox.getEchoBotDialog(dukeText, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" if (!echobot.isRunning()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" System.exit(0);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" * Outputs greetings by chatbot at the start of the app","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" public void greetUser() {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" EchoBot.startBot();","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" String greetings \u003d \"Welcome, User\\n\" + \"What would you like to do?\";","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" DialogBox.getEchoBotDialog(greetings, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" return echobot.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"JasonRay168":65}},{"path":"src/main/java/echobot/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Parent exception for all custom exceptions","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/EmptyListException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the list is empty","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class EmptyListException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public EmptyListException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the input command doesn\u0027t exist","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/InvalidCommandSyntaxException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the command is typed wrongly","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidCommandSyntaxException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidCommandSyntaxException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task number is out of bounds","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidTaskNumberException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/InvalidTaskTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates there is missing information on time inputs","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidTaskTimeException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidTaskTimeException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/MissingTaskDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task is missing its description","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskDescriptionException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/MissingTaskNameException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task has no name","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskNameException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskNameException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/exceptions/MissingTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates no number was inputted","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskNumberException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/utilities/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Deadline task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" * Creates new instance of a deadline task","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" * @param deadline Deadline of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.DEADLINE, \"(by: \" + deadline + \")\");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":17}},{"path":"src/main/java/echobot/utilities/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Event task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of an event task","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" * @param startDate Start time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" * @param endDate End time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" public Event(String name, String startDate, String endDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.EVENT, \"(from: \" + startDate + \" to: \" + endDate + \")\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":18}},{"path":"src/main/java/echobot/utilities/Input.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Deals with storing input data","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Input {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the command section of the input string */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String command;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the full input */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" private String fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the number of words inside the input */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" private int wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of an Input object","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" * @param command The name of the command to be called","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full String input typed in by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" * @param wordLength The number of words in the input","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" public Input(String command, String fullInput, int wordLength) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" this.fullInput \u003d fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" this.wordLength \u003d wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" return this.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" public int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" return this.wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" public String getFullInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" return this.fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":41}},{"path":"src/main/java/echobot/utilities/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" * Deals with making sense of user commands","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" * Parses the user input to identify its important parts","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * @param input The user input","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" * @return Input object containing key points of the user input","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" public Input parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" String[] split \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" String command \u003d split[0].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" int length \u003d split.length;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" return new Input(command, input, length);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * Parses and formats the date input into another format","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" * @param strDate Date in String format","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" * @return Date in \"MMM dd yyyy\" format","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" public String formatDate(String strDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" String result;","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" LocalDate parseDate \u003d LocalDate.parse(strDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" result \u003d parseDate.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" result \u003d \"Invalid date\";","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" return result;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" * Handles the various cases of user inputs","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" * @param tasks TaskList object that contains the list","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" * @param input Input object that contains parsed user input","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" * @param ui Ui where the helper functions are located","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" * @return True or false signifying breaking or continuing the loop","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" public String handleInput(TaskList tasks, Input input, Ui ui) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" String output;","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" int numberOfWords \u003d input.getLength();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" case \"list\":","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showList(tasks, numberOfWords);","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showManipulateTasks(tasks, command, fullInput, numberOfWords);","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" case \"todo\":","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showAddToDo(tasks, fullInput, numberOfWords);","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showAddDeadline(tasks, fullInput, numberOfWords, this);","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" case \"event\":","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showAddEvent(tasks, fullInput, numberOfWords, this);","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" case \"find\":","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showFind(tasks, fullInput, numberOfWords);","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" case \"bye\":","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" output \u003d ui.showBye(numberOfWords);","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandException(\"No such command exists\");","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" output \u003d e.getMessage() + \"\\nPlease try again\";","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":92}},{"path":"src/main/java/echobot/utilities/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" * Handles loading and saving tasks into the tasks.txt file","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store relative file path */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" private File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" /** Variable to check if File already exists */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" private boolean isCreated;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" * Creates new Storage objects to store filpath and file","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" * @param filePath Path of the tasks.txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" this.isCreated \u003d !file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! IOException\" + e);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" * Overwrites existing data in tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" * @param tasks List of tasks that will overwrite the data in the file","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" FileOutputStream fos \u003d new FileOutputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" ObjectOutputStream oos \u003d new ObjectOutputStream(fos);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" oos.writeObject(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" oos.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" oos.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! File is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * Loads the data from tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * @return A list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" public ArrayList\u003cTask\u003e loadTasksData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" FileInputStream fis \u003d new FileInputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" ObjectInputStream ois \u003d new ObjectInputStream(fis);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d (ArrayList\u003cTask\u003e) ois.readObject();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" ois.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"File is not found\\n\" + \"Please be careful next time\");","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"e.getMessage()\\n\" + \"Please be careful next time\");","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" } catch (ClassNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"Class is not found\\n\" + \"Please be careful next time\");","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" * Checks whether file already exists or not","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" * @return Value of isCreated","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" public boolean fileExists() {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" return this.isCreated;","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":86}},{"path":"src/main/java/echobot/utilities/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":" * Class for tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" /** Name of task */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" private String name;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" /** Task description, including time */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" /** Variable to reflect whether a task is finished */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" /** Type of task, can be either a todo, deadline, or event */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" private Type type;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" * @param type Type of task","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" * @param description Task description, which includes by, to, and from","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" public Task(String name, Type type, String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" this.description \u003d description.equals(\"\") ? description : \"\\n\\t\" + description;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as done","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" * @return String output after marking as done","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" public String markAsDone() {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" return \"You have marked this task as done\\n\" + \"\\t\" + this.convertToString();","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as not done","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" * @return String output after marking as not done","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" public String markAsNotDone() {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" return \"You have marked this task as not done\\n\" + \"\\t\" + this.convertToString();","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * Converts the task object to a String text for display","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * @return the String representation of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" public String convertToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" return \"[\" + this.getType().charAt(0) + \"]\"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" + \"[\" + (this.isDone() ? \"X\" : \" \") + \"] \"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" + this.getName() + this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" public String getName() {","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" return this.name;","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" public String getType() {","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" return this.type.name();","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"JasonRay168":78}},{"path":"src/main/java/echobot/utilities/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.InvalidTaskNumberException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Contains the task list and its operations","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the tasks */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" * Creates a TaskList with a predefined list","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * @param tasks List to be stored inside the local list variable","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" * Creates a TaskList with an empty list","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" * Manipulates the data of existing tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" * Includes marking, unmarking, and deleting tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput Full String input by user","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" * @param command First word of input that signifies the command to be run","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" * @param beginIndex Beginning index of the command description excluding the command itself","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" * @return String output of task manipulated","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskNumberException If task number is out of bounds","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" public String manipulateTasks(String fullInput, String command, int beginIndex) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" int taskNum \u003d Integer.parseInt(fullInput.substring(beginIndex));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" if (taskNum \u003e this.getSize() || taskNum \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskNumberException(\"The task number you specify does not exist\");","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" output \u003d getTask(taskNum - 1).markAsDone();","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" output \u003d getTask(taskNum - 1).markAsNotDone();","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" output \u003d deleteTask(this.getTask(taskNum - 1));","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" * Adds a todo task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" * @return String output of todo task added","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" public String addToDo(String taskName) {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" ToDo task \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"You have added a task:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"\\t[T][ ] \" + taskName + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"There are now \" + tasks.size() + \" tasks in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" * Adds a deadline task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" * @param deadline Deadline date of task","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" * @return String output of deadline task added","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" public String addDeadline(String taskName, String deadline) {","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" Deadline task \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"You have added a task:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"\\t[D][ ] \" + taskName + \"\\n\\t(by: \" + deadline + \")\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"There are now \" + this.getSize() + \" tasks in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" * Adds an event task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":" * @param startDate Start date of task","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":" * @param endDate End date of task","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" * @return String output of event task added","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" public String addEvent(String taskName, String startDate, String endDate) {","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" Event task \u003d new Event(taskName, startDate, endDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"You have added a task:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"\\t[E][ ] \" + taskName + \"\\n\\t(from: \" + startDate + \" to: \" + endDate + \")\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"There are now \" + tasks.size() + \" tasks in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":" * Deletes a task from the list","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":" * @param task Task to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":" * @return String output after deleting","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":" public String deleteTask(Task task) {","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"You have deleted a task:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"\\t\" + task.convertToString() + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":" output +\u003d \"There are now \" + this.getSize() + \" tasks in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" * Copies and filters the task list to only display tasks with the keyword mentioned","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":" * @param keyword The keyword that will be compared to the task names","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" * @return The filtered list","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" public ArrayList\u003cTask\u003e filterTaskName(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasksCopied \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" tasksCopied.removeIf(task -\u003e !task.getName().toLowerCase().contains(keyword.toLowerCase()));","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":" return tasksCopied;","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"JasonRay168"},"content":" * Overwrites the current list with the list stored in hard drive","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"JasonRay168"},"content":" * @param storage Storage object that points to the stored file","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"JasonRay168"},"content":" storage.overwriteTasksData(this.tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"JasonRay168"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"JasonRay168"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"JasonRay168"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"JasonRay168"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":157}},{"path":"src/main/java/echobot/utilities/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Todo task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a ToDo task","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.TODO, \"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/echobot/utilities/Type.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Enum class to declare types of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public enum Type {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" TODO,","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" DEADLINE,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" EVENT","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/echobot/utilities/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import echobot.EchoBot;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.EmptyListException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.InvalidCommandSyntaxException;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.InvalidTaskNumberException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.InvalidTaskTimeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.MissingTaskDescriptionException;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.MissingTaskNameException;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"import echobot.exceptions.MissingTaskNumberException;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" * Handles user interaction","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" * Shows the contents of the list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing tasks","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidCommandSyntaxException If there are words after the \"list\" command","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" public String showList(TaskList tasks, int numberOfWords)","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" throws InvalidCommandSyntaxException {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003e 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027list\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" if (tasks.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" return \"List is empty\";","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 1; i \u003c tasks.getSize() + 1; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" Task current \u003d tasks.getTask(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" output.append(i).append(\". \").append(current.convertToString()).append(\"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" return output.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" * Shows output text when a task is marked, unmarked, or deleted","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" * @param command The first word of the input","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing changed task mark","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNumberException If the command is not followed by any number","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" * @throws EmptyListException If the list of tasks is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskNumberException If the task number to be manipulated does not exist","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" public String showManipulateTasks(TaskList tasks, String command, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskNumberException, EmptyListException, InvalidTaskNumberException {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNumberException(\"Task number cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" } else if (tasks.getSize() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" throw new EmptyListException(\"List is currently empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" output \u003d tasks.manipulateTasks(fullInput, \"mark\", 5);","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" output \u003d tasks.manipulateTasks(fullInput, \"unmark\", 7);","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" output \u003d tasks.manipulateTasks(fullInput, \"delete\", 7);","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" return output;","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when a todo task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing added todo task","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" public String showAddToDo(TaskList tasks, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d fullInput.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":" return tasks.addToDo(taskName);","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when a deadline task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" * @param parser The parser to parse dates","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing added deadline task","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNameException If the task name is not specified","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskTimeException If there are missing or more than one deadlines","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" public String showAddDeadline(TaskList tasks, String fullInput, int numberOfWords, Parser parser)","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException, MissingTaskNameException, InvalidTaskTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Deadline task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(9).split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(\"Deadline task must have exactly one deadline using /by tag\");","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Deadline task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":" String strDeadline \u003d taskDesc[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" String deadline \u003d parser.formatDate(strDeadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":" if (!deadline.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" return tasks.addDeadline(taskName, deadline);","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":" return \"\\nDate needs to be in the form of yyyy-mm-dd\";","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when an event task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":" * @param parser The parser to parse dates","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing added event task","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNameException If the task name is not specified","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskTimeException If there are missing or more than one start or end dates","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"JasonRay168"},"content":" public String showAddEvent(TaskList tasks, String fullInput, int numberOfWords, Parser parser)","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException, MissingTaskNameException, InvalidTaskTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Event task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(6).split(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one start and one end dates\"","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"JasonRay168"},"content":" + \"using one /from and one /to tags, in that order\");","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"JasonRay168"},"content":" String[] fromAndTo \u003d taskDesc[1].split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"JasonRay168"},"content":" if (fromAndTo.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one start and one end dates\"","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"JasonRay168"},"content":" + \"using one /from and one /to tags, in that order\");","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Event task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"JasonRay168"},"content":" String strStart \u003d fromAndTo[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"JasonRay168"},"content":" String strEnd \u003d fromAndTo[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"JasonRay168"},"content":" String start \u003d parser.formatDate(strStart);","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"JasonRay168"},"content":" if (!start.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"JasonRay168"},"content":" String end \u003d parser.formatDate(strEnd);","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"JasonRay168"},"content":" if (!end.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"JasonRay168"},"content":" return tasks.addEvent(taskName, start, end);","lastModifiedDate":"2023-09-08"},{"lineNumber":172,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":173,"author":{"gitId":"JasonRay168"},"content":" return \"\\nDate needs to be in the form of yyyy-mm-dd\";","lastModifiedDate":"2023-09-08"},{"lineNumber":174,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":176,"author":{"gitId":"JasonRay168"},"content":" return \"\\nDate needs to be in the form of yyyy-mm-dd\";","lastModifiedDate":"2023-09-08"},{"lineNumber":177,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"JasonRay168"},"content":" * Shows text output of the result for searching tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing found tasks with specified keywords","lastModifiedDate":"2023-09-08"},{"lineNumber":187,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"JasonRay168"},"content":" public String showFind(TaskList tasks, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-08"},{"lineNumber":190,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":192,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"JasonRay168"},"content":" String taskToBeFound \u003d fullInput.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasksFiltered \u003d tasks.filterTaskName(taskToBeFound);","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"JasonRay168"},"content":" int size \u003d tasksFiltered.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"JasonRay168"},"content":" if (size \u003e 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"JasonRay168"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":199,"author":{"gitId":"JasonRay168"},"content":" output.append(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-08"},{"lineNumber":200,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"JasonRay168"},"content":" output.append(\"\\n\").append(i + 1).append(\". \").append(tasksFiltered.get(i).convertToString());","lastModifiedDate":"2023-09-08"},{"lineNumber":202,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"JasonRay168"},"content":" return output.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":204,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"JasonRay168"},"content":" return \"There are no matching tasks in your list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":206,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":208,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":209,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":210,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when the user exits the chatbot","lastModifiedDate":"2023-09-03"},{"lineNumber":211,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":212,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":213,"author":{"gitId":"JasonRay168"},"content":" * @return String output showing goodbye","lastModifiedDate":"2023-09-08"},{"lineNumber":214,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidCommandSyntaxException If there are words after the \"bye\" command","lastModifiedDate":"2023-09-03"},{"lineNumber":215,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"JasonRay168"},"content":" public String showBye(int numberOfWords)","lastModifiedDate":"2023-09-08"},{"lineNumber":217,"author":{"gitId":"JasonRay168"},"content":" throws InvalidCommandSyntaxException {","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003e 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":219,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027bye\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"JasonRay168"},"content":" EchoBot.stopBot();","lastModifiedDate":"2023-09-08"},{"lineNumber":222,"author":{"gitId":"JasonRay168"},"content":" return \"I hope you enjoy my service. Thank you and goodbye\";","lastModifiedDate":"2023-09-08"},{"lineNumber":223,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":224}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"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-08"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" \u003cLabel fx:id\u003d\"dialog\" lineSpacing\u003d\"1.0\" text\u003d\"Label [ ] [X]\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" \u003cFont name\u003d\"Gill Sans MT\" size\u003d\"12.5\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" \u003cInsets left\u003d\"8.0\" right\u003d\"8.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" \u003c/HBox.margin\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"80.0\" fitWidth\u003d\"80.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"JasonRay168":26}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"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\"echobot.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Type in your command\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" \u003cFont name\u003d\"Gill Sans MT\" size\u003d\"12.5\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" \u003cFont name\u003d\"Gill Sans MT\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"JasonRay168":26}},{"path":"src/test/java/echobot/utilities/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" public void test1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"todo eat\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"todo eat\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" public void test2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"event camp /from 2023-03-05 /to 2023-03-06\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 6);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"event camp /from 2023-03-05 /to 2023-03-06\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" public void test3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"hello world, nice to meet you all\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"hello\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 7);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"hello world, nice to meet you all\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" public void test4() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" String formattedDate \u003d parser.formatDate(\"2023-09-03\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" assertEquals(formattedDate, \"Sep 03 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" public void test5() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" String formattedDate \u003d parser.formatDate(\"August 23, 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" assertEquals(formattedDate, \"Invalid date\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":54}},{"path":"src/test/java/echobot/utilities/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package echobot.utilities;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" public void test1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" Task task \u003d new Task(\"homework\", Type.DEADLINE, \" (by: Aug 03 2023)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" assertEquals(task.isDone(), true);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" assertEquals(task.isDone(), false);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" String stringRepresentation \u003d task.convertToString();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" assertEquals(\"[D][X] homework\\n\\t (by: Aug 03 2023)\", stringRepresentation);","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"todo borrow book from the library","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"deadline return book to library /by 2023-04-24","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"deadline submit homework by 2023-04-24","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"event concert /from 2023-03-24 /to 2023-03-26","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"event project meeting /from 2023-04-24 to 2023-04-25","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"event /from 2023-04-24 /to 2023-04-25","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"delete 1","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"mark","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"unmark","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"delete","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"mark 100","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"unmark 0","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"delete -3","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":28}},{"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":"JasonRay168"},"content":"javac -cp ..\\src\\main\\java\\ -Xlint:none -d ..\\bin ..\\src\\main\\java\\echobot\\*.java","lastModifiedDate":"2023-09-06"},{"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":"JasonRay168"},"content":"java -classpath ..\\bin echobot.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":19,"JasonRay168":2}},{"path":"tasks.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"JasonRay168":0}}] diff --git a/JasonRay168_ip_master/commits.json b/JasonRay168_ip_master/commits.json index 241140be..a2fac21c 100644 --- a/JasonRay168_ip_master/commits.json +++ b/JasonRay168_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"JasonRay168":[{"date":"2023-08-22","commitResults":[{"hash":"2fe8ea4515a1094286c9c5a82cd5c7ba98199827","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"377800027b5ec44860ab38e8efd1e86217fa7f06","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a6fb4787cebb3ea538d8c9ae6e31eb82df5df261","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":5}}},{"hash":"486510d70b5e8034ca64b595dd88c2a0e738d93c","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":19}}},{"hash":"970ed344a77435ad47f951d56371d5f97474ea8b","isMergeCommit":false,"messageTitle":"Mark and Unmark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":13}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a5061df6df65e8158ec50d49c4b38c954d45f27c","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":210,"deletions":38}}},{"hash":"5add6b7ef4fdd669757e06c57c4f3093791132f5","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0},"java":{"insertions":40,"deletions":59},"bat":{"insertions":1,"deletions":1}}},{"hash":"c50606ec5fe8bf786f0327152d4bebb370e51b0e","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":161,"deletions":120}}},{"hash":"1ecc7db65dbb1f18528eb9c60d86080e0cfd40b5","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1},"java":{"insertions":38,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8482f620556fbff2d483f9a14a4a41c04884004e","isMergeCommit":false,"messageTitle":"Change tabs into spaces and rename the chatbot to Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":369,"deletions":269}}}]},{"date":"2023-08-29","commitResults":[{"hash":"668e58046e898e7b40e1759c76f2bc35fef55959","isMergeCommit":false,"messageTitle":"Store task list in hard drive","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":137}}},{"hash":"e7767b732999af4eec113aebb3418c3993e0c808","isMergeCommit":true,"messageTitle":"Merge branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"7b897aa326b656b314fb8520ea91384cef98d35a","isMergeCommit":false,"messageTitle":"Support date inputs for deadline and event tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"ffd5f30d2773f8ea4a4efae0fdf798004e0c51be","isMergeCommit":true,"messageTitle":"Merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"35226321d59ca43d124a664339bc97bb0edef26f","isMergeCommit":false,"messageTitle":"Separate Duke class main functions to several classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":5},"java":{"insertions":399,"deletions":267},"bat":{"insertions":1,"deletions":1}}},{"hash":"362fb86d5f9d5959d964ef2b6172513d0929e7b3","isMergeCommit":false,"messageTitle":"Create packages for classes","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":5}}}]},{"date":"2023-08-31","commitResults":[{"hash":"4c5fc5096a93c01297208408bb1b6665991bc8a8","isMergeCommit":false,"messageTitle":"Move most error handling from Ui to other classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":185}}},{"hash":"3a2a103ff540e1c904941d9f62d264c5950f841f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc84b11cf8979cf68816fde27cdedeb92e1b9c9f","isMergeCommit":true,"messageTitle":"Merged add-gradle-support branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3db334c8efc4b05b045532a646ab29a30e915fdd","isMergeCommit":false,"messageTitle":"Add gradle support to execute run and build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":43,"deletions":22},"bat":{"insertions":1,"deletions":1}}},{"hash":"fec1c5597fa951f2edb4c3648c0b7f43146d4426","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0}}},{"hash":"70f92ccde23a1b604e23006ae4363cb0fd5387ff","isMergeCommit":true,"messageTitle":"Merge branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"e5e66c5f442c0f4693c8c317169fa21c9bf9f1d0","isMergeCommit":true,"messageTitle":"Merge master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ae2dfe8e770462b0828e7655b67d8a515f53b59a","isMergeCommit":true,"messageTitle":"Merge branch-A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"c608b909c4d3ded24d140ec4583b7ef4b697950f","isMergeCommit":false,"messageTitle":"Fix faulty runtest.bat","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1}}},{"hash":"828e6c4d6f88b2e745781105b9262e76740f7d27","isMergeCommit":false,"messageTitle":"Fix runtest.bat compilation errors and update EXPECTED.TXT","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"f4fabe1b43b61aeb4f2bcd4f8c73c99c07327384","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to java files under duke package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":59}}},{"hash":"cdb035f2d57f24df8173e3dd6802b4eaa192f7aa","isMergeCommit":false,"messageTitle":"Make code follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":59}}},{"hash":"45c1941cc0dd0c68c4686ff3314742b0e82b8b27","isMergeCommit":false,"messageTitle":"Allow users to search for task names by searching for a keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":14}}},{"hash":"58dbf9271eda50713bcd670d9caa0dd982e95cce","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8114c86d978842e73f232eb0765cb30c687a9379","isMergeCommit":true,"messageTitle":"Handle merge conflicts after merging A-JavaDoc and A-CodingStandard branches","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"346452bf22610cc170fb0622d92e127164bd2e29","isMergeCommit":true,"messageTitle":"Handle merge conflicts after merging branch-Level-9","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"4164e13d0fed5bc19774d54a58f773050a04ca3c","isMergeCommit":false,"messageTitle":"Declare multiple helper methods to handle user input in Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":109}}}]},{"date":"2023-09-04","commitResults":[{"hash":"dc72ee080beb7c253477a0ddaee0a986e99f5c2a","isMergeCommit":false,"messageTitle":"Add JavaFX, Launcher, and update Gradle build file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"java":{"insertions":52,"deletions":1}}},{"hash":"b305f1dd180065c8439e680819242f39be2b1529","isMergeCommit":false,"messageTitle":"Allow Duke to echo the user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":7}}},{"hash":"08f3c479f1188c46e8d44a8a6d72ba08a4e588ae","isMergeCommit":false,"messageTitle":"Fix current checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":108}}},{"hash":"409d1366143b17c22d3886fa85da449141f00a73","isMergeCommit":true,"messageTitle":"Merge branch-A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"6f9ff9e6a3330ad05b07cffe2de5704c64d6896b","isMergeCommit":true,"messageTitle":"Merge master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a9c199879bbb5f53cb8117535f49d267fff838a6","isMergeCommit":false,"messageTitle":"Add dialog boxes and stock pictures","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":28}}},{"hash":"7f107d6900a347d864ffafa5eaf21a788b432ad6","isMergeCommit":false,"messageTitle":"Flip Duke\u0027s chat outputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":16}}}]},{"date":"2023-09-06","commitResults":[{"hash":"581070f1d4133e423e719482c5d781a204b187aa","isMergeCommit":false,"messageTitle":"Changed package name to echobot and class name to EchoBot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":81,"deletions":55},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-08","commitResults":[{"hash":"4a29cf9bdbdf1144d1164a291f4644dbe7c73ff6","isMergeCommit":false,"messageTitle":"Add FXML support","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":388,"deletions":232}}},{"hash":"574e1e09d134e443cd69424fb535d16ef6ccc7b3","isMergeCommit":false,"messageTitle":"Update FXML tag","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":5}}},{"hash":"ed8fdd54a4afbaa75bcfde2cda13f1a1d12583c2","isMergeCommit":false,"messageTitle":"Fix issues with FXML support","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":103}}},{"hash":"fae5f86d0c186589c0697d3b1fd470cf94326f34","isMergeCommit":false,"messageTitle":"Edit MainWindow and DialogBox FXML configurations","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":23,"deletions":6},"java":{"insertions":7,"deletions":7}}},{"hash":"08366d141adcf7b7f1baa6eb03cfe4c7e47359ad","isMergeCommit":true,"messageTitle":"Merge branch-Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"JasonRay168":{"java":1267,"md":0,"fxml":52,"sh":0,"bat":2,"gradle":18,"txt":28}},"authorContributionVariance":{"JasonRay168":81746.85},"authorDisplayNameMap":{"JasonRay168":"CS2103T-W12-1 JASO.. RAY"}} +{"authorDailyContributionsMap":{"JasonRay168":[{"date":"2023-08-22","commitResults":[{"hash":"2fe8ea4515a1094286c9c5a82cd5c7ba98199827","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"377800027b5ec44860ab38e8efd1e86217fa7f06","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a6fb4787cebb3ea538d8c9ae6e31eb82df5df261","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":5}}},{"hash":"486510d70b5e8034ca64b595dd88c2a0e738d93c","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":19}}},{"hash":"970ed344a77435ad47f951d56371d5f97474ea8b","isMergeCommit":false,"messageTitle":"Mark and Unmark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":13}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a5061df6df65e8158ec50d49c4b38c954d45f27c","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":210,"deletions":38}}},{"hash":"5add6b7ef4fdd669757e06c57c4f3093791132f5","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0},"java":{"insertions":40,"deletions":59},"bat":{"insertions":1,"deletions":1}}},{"hash":"c50606ec5fe8bf786f0327152d4bebb370e51b0e","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":161,"deletions":120}}},{"hash":"1ecc7db65dbb1f18528eb9c60d86080e0cfd40b5","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1},"java":{"insertions":38,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8482f620556fbff2d483f9a14a4a41c04884004e","isMergeCommit":false,"messageTitle":"Change tabs into spaces and rename the chatbot to Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":369,"deletions":269}}}]},{"date":"2023-08-29","commitResults":[{"hash":"668e58046e898e7b40e1759c76f2bc35fef55959","isMergeCommit":false,"messageTitle":"Store task list in hard drive","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":137}}},{"hash":"e7767b732999af4eec113aebb3418c3993e0c808","isMergeCommit":true,"messageTitle":"Merge branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"7b897aa326b656b314fb8520ea91384cef98d35a","isMergeCommit":false,"messageTitle":"Support date inputs for deadline and event tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"ffd5f30d2773f8ea4a4efae0fdf798004e0c51be","isMergeCommit":true,"messageTitle":"Merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"35226321d59ca43d124a664339bc97bb0edef26f","isMergeCommit":false,"messageTitle":"Separate Duke class main functions to several classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":5},"java":{"insertions":399,"deletions":267},"bat":{"insertions":1,"deletions":1}}},{"hash":"362fb86d5f9d5959d964ef2b6172513d0929e7b3","isMergeCommit":false,"messageTitle":"Create packages for classes","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":5}}}]},{"date":"2023-08-31","commitResults":[{"hash":"4c5fc5096a93c01297208408bb1b6665991bc8a8","isMergeCommit":false,"messageTitle":"Move most error handling from Ui to other classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":185}}},{"hash":"3a2a103ff540e1c904941d9f62d264c5950f841f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc84b11cf8979cf68816fde27cdedeb92e1b9c9f","isMergeCommit":true,"messageTitle":"Merged add-gradle-support branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3db334c8efc4b05b045532a646ab29a30e915fdd","isMergeCommit":false,"messageTitle":"Add gradle support to execute run and build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":43,"deletions":22},"bat":{"insertions":1,"deletions":1}}},{"hash":"fec1c5597fa951f2edb4c3648c0b7f43146d4426","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0}}},{"hash":"70f92ccde23a1b604e23006ae4363cb0fd5387ff","isMergeCommit":true,"messageTitle":"Merge branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"e5e66c5f442c0f4693c8c317169fa21c9bf9f1d0","isMergeCommit":true,"messageTitle":"Merge master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ae2dfe8e770462b0828e7655b67d8a515f53b59a","isMergeCommit":true,"messageTitle":"Merge branch-A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"c608b909c4d3ded24d140ec4583b7ef4b697950f","isMergeCommit":false,"messageTitle":"Fix faulty runtest.bat","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1}}},{"hash":"828e6c4d6f88b2e745781105b9262e76740f7d27","isMergeCommit":false,"messageTitle":"Fix runtest.bat compilation errors and update EXPECTED.TXT","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"f4fabe1b43b61aeb4f2bcd4f8c73c99c07327384","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to java files under duke package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":59}}},{"hash":"cdb035f2d57f24df8173e3dd6802b4eaa192f7aa","isMergeCommit":false,"messageTitle":"Make code follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":59}}},{"hash":"45c1941cc0dd0c68c4686ff3314742b0e82b8b27","isMergeCommit":false,"messageTitle":"Allow users to search for task names by searching for a keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":14}}},{"hash":"58dbf9271eda50713bcd670d9caa0dd982e95cce","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8114c86d978842e73f232eb0765cb30c687a9379","isMergeCommit":true,"messageTitle":"Handle merge conflicts after merging A-JavaDoc and A-CodingStandard branches","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"346452bf22610cc170fb0622d92e127164bd2e29","isMergeCommit":true,"messageTitle":"Handle merge conflicts after merging branch-Level-9","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"4164e13d0fed5bc19774d54a58f773050a04ca3c","isMergeCommit":false,"messageTitle":"Declare multiple helper methods to handle user input in Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":109}}}]},{"date":"2023-09-04","commitResults":[{"hash":"dc72ee080beb7c253477a0ddaee0a986e99f5c2a","isMergeCommit":false,"messageTitle":"Add JavaFX, Launcher, and update Gradle build file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"java":{"insertions":52,"deletions":1}}},{"hash":"b305f1dd180065c8439e680819242f39be2b1529","isMergeCommit":false,"messageTitle":"Allow Duke to echo the user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":7}}},{"hash":"08f3c479f1188c46e8d44a8a6d72ba08a4e588ae","isMergeCommit":false,"messageTitle":"Fix current checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":108}}},{"hash":"409d1366143b17c22d3886fa85da449141f00a73","isMergeCommit":true,"messageTitle":"Merge branch-A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"6f9ff9e6a3330ad05b07cffe2de5704c64d6896b","isMergeCommit":true,"messageTitle":"Merge master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a9c199879bbb5f53cb8117535f49d267fff838a6","isMergeCommit":false,"messageTitle":"Add dialog boxes and stock pictures","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":28}}},{"hash":"7f107d6900a347d864ffafa5eaf21a788b432ad6","isMergeCommit":false,"messageTitle":"Flip Duke\u0027s chat outputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":16}}}]},{"date":"2023-09-06","commitResults":[{"hash":"581070f1d4133e423e719482c5d781a204b187aa","isMergeCommit":false,"messageTitle":"Changed package name to echobot and class name to EchoBot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":81,"deletions":55},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-08","commitResults":[{"hash":"4a29cf9bdbdf1144d1164a291f4644dbe7c73ff6","isMergeCommit":false,"messageTitle":"Add FXML support","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":388,"deletions":232}}},{"hash":"574e1e09d134e443cd69424fb535d16ef6ccc7b3","isMergeCommit":false,"messageTitle":"Update FXML tag","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":5}}},{"hash":"ed8fdd54a4afbaa75bcfde2cda13f1a1d12583c2","isMergeCommit":false,"messageTitle":"Fix issues with FXML support","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":103}}},{"hash":"fae5f86d0c186589c0697d3b1fd470cf94326f34","isMergeCommit":false,"messageTitle":"Edit MainWindow and DialogBox FXML configurations","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":23,"deletions":6},"java":{"insertions":7,"deletions":7}}},{"hash":"08366d141adcf7b7f1baa6eb03cfe4c7e47359ad","isMergeCommit":true,"messageTitle":"Merge branch-Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"925e72b81dde4fa0cad25e4c7a1994d284fb4e77","isMergeCommit":false,"messageTitle":"Change error message sligthly to prepare for JAR release","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-16","commitResults":[{"hash":"a606846f45e86b451c739293f4f4672259f762d6","isMergeCommit":false,"messageTitle":"Add assertions to check if text file exists","messageBody":"There might be instances where the txt file might be accidentally delete by user.\n\nHence, assertions is added to assert that the file exists when loading the file and when overwriting the file.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":36}}},{"hash":"4b9471cb448183142c0e396cb73ca3e15e0a626d","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Some fields and methods are unused, some methods are just too long, and some declarations are obsolete.\n\nThus, removing unused and obsolete parts and shortening down methods to adhere to SLAP will improve code quality.\n","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":119}}},{"hash":"75823d58dec9817b9b80d9a0b2f908e3a75a025d","isMergeCommit":true,"messageTitle":"Merge branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3a6e282f26db9de4870b312e62c6e8bca4d92698","isMergeCommit":true,"messageTitle":"Merge master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"021b30aa774b5cb6de8c3909eb011fcd5796b9b8","isMergeCommit":true,"messageTitle":"Merge branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"JasonRay168":{"java":1215,"md":0,"fxml":52,"sh":0,"bat":2,"gradle":19,"txt":28}},"authorContributionVariance":{"JasonRay168":70609.375},"authorDisplayNameMap":{"JasonRay168":"CS2103T-W12-1 JASO.. RAY"}} diff --git a/Kb-Tay_ip_master/authorship.json b/Kb-Tay_ip_master/authorship.json index 8be89ba4..2258f0c9 100644 --- a/Kb-Tay_ip_master/authorship.json +++ b/Kb-Tay_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"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":{"Kb-Tay":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":"Kb-Tay"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"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":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"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":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kb-Tay":21,"-":43}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"T | 0 | borrow book","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"D | 0 | 2103 ip | Sep 15 2023 12.00PM","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"E | 0 | hello | Sep 15 2023 12.00AM-Sep 15 2023 12.00PM","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kb-Tay":3}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" public void endBot() {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" dialog.setDisable(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":63}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * Starts the GUI for the Chat Bot.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * The main point of entry for the Duke Chat Bot application.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" * @param args The command line arguments passed to the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":16}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" private Duke duke \u003d new Duke(\"./src/main/data/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().startGui();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":31}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Anakin.jpg\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Obi_wan.jpg\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"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":43,"author":{"gitId":"Kb-Tay"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" assert !response.equals(\"\") : \"Response should either be action or error message\";","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" dialogContainer.getChildren().addAll(DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" DialogBox.getDukeDialog(response, dukeImage));","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" if (response.equals(\"Bye. May the force be with you!\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" userInput.setDisable(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" sendButton.setDisable(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" * Creates a dialogue box containing Duke\u0027s getting.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":" public void startGui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(ui.startBot(), dukeImage));","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":69}},{"path":"src/main/java/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * Command that adds a task to the task List.","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" /** Type of task to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" private final String taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" /** The other information required to instantiate a task.Task */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" private final String[] args;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new Add command.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" * @param taskType Type of task to add.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" * @param args Additional information required for different tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" public AddCommand(String taskType, String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" this.args \u003d args;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" return tasks.addTask(taskType, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":32}},{"path":"src/main/java/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" * Command to end the Chat Bot. Saves user input into file.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" store.writeFile(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" ui.showWritingError();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" return ui.endBot();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":24}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * Stores information of the action to be executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" * Executes the command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" * @param tasks task.Task list storing user task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" * @param ui The duke.Ui handling user interactions.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" * @param store The store that handles file operations.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" * @return A description of the action done.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage store) throws DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":23}},{"path":"src/main/java/command/EditCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * Command to edit a task in the task.Task List.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" /** The changes to the task */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" private final String editType;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" /** The task to be changed */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" private final int ind;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new Edit command.Command. Can mark, unmark task as done or","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" * delete a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" * @param editType The edit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" * @param ind The task to be changed.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" public EditCommand(String editType, int ind) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" this.editType \u003d editType;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" this.ind \u003d ind;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" return tasks.editTask(editType, ind);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":34}},{"path":"src/main/java/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" * Command to find task matching keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" private final String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" String input \u003d keyword.toLowerCase();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" String action \u003d tasks.findMatchingTasks(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" if (action.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" return \"No task matching keyword found!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" return \"Here are the matching tasks in your list:\\n\" + action;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Kb-Tay":30}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * Command to List all the task in duke.TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" return \"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" + tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":18}},{"path":"src/main/java/command/RemindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" * Command to remind user of upcoming tasks.","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"public class RemindCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) {","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" return tasks.remindTasks();","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kb-Tay":17}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":" * ip Project duke.Duke Chat bot","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * @author Aaron Tay","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" * @since 2023-08-24","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"import command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" * Duke class instantiates a new Chat Bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" /** Reads and writes task data into file */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" /** List of tasks input by user or loaded from file */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" /** Handles user interactions */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a duke.Duke object with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" * @param filePath The path where the ChatBot loads data from.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" * Returns the response to the user input. Parses the user input and initialise a new Command,","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" * the Command is then executed to return the correct response.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" return c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" return ui.showErrorMessage(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kb-Tay":53,"-":2}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import command.AddCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"import command.ByeCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"import command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"import command.EditCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"import command.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"import command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":"import command.RemindCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"import exception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" * The Action enum represents the various actions that can be performed by Duke.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":"enum Action {","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" BYE, LIST, FIND, REMIND, EDIT_TASK, ADD_TASK, INVALID;","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" public static Action parseCommand(String command) throws InvalidCommandException {","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" if (checkEditAction(command)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" return EDIT_TASK;","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" } else if (checkAddAction(command)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" return ADD_TASK;","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" Action[] values \u003d Action.values();","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c 4; i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" if (command.toUpperCase().equals(values[i].toString())) {","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" return values[i];","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Invalid Command\");","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" private static boolean checkAddAction(String command) {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" final String[] addTypes \u003d new String[]{\"todo\", \"deadline\", \"event\"};","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" for (String type : addTypes) {","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" if (command.equals(type)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" return true;","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" private static boolean checkEditAction(String command) {","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" final String[] editTypes \u003d new String[]{\"mark\", \"unmark\", \"delete\"};","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" for (String type : editTypes) {","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" if (command.equals(type)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":" return true;","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Kb-Tay"},"content":" * Parses user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Kb-Tay"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Kb-Tay"},"content":" private static final Pattern BASIC_COMMAND \u003d Pattern.compile(\"(?\u003ccommand\u003e\\\\S+)(?\u003carguments\u003e.*)\");","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"Kb-Tay"},"content":" private static final String DATE_PATTERN \u003d \"\\\\d{4}-\\\\d{2}-\\\\d{2} \\\\d{2}:\\\\d{2}\";","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"Kb-Tay"},"content":" private static final Pattern DEADLINE_FORMAT \u003d Pattern.compile(","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"Kb-Tay"},"content":" \"(?\u003cdeadline\u003e[^\\\"]+) /by (\" + DATE_PATTERN + \")\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Kb-Tay"},"content":" private static final Pattern EVENT_FORMAT \u003d Pattern.compile(","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"Kb-Tay"},"content":" \"(?\u003cdeadline\u003e[^\\\"]+) /from (\" + DATE_PATTERN + \")\" + \" /to (\" + DATE_PATTERN + \")\");","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Kb-Tay"},"content":" * Parses user input and returns a command.Command. The command.Command can then be executed","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Kb-Tay"},"content":" * to respond to the user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Kb-Tay"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Kb-Tay"},"content":" * @return A command.Command to be executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Kb-Tay"},"content":" * @throws DukeException If user input is invalid, Duke exception will be thrown.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Kb-Tay"},"content":" public static Command parse(String input) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Kb-Tay"},"content":" final Matcher matcher \u003d BASIC_COMMAND.matcher(input.trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Kb-Tay"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Invalid command\");","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Kb-Tay"},"content":" assert input.equals(\"\") : \"Command should not be empty after checks\";","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"Kb-Tay"},"content":" final String command \u003d matcher.group(\"command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Kb-Tay"},"content":" final String argument \u003d matcher.group(\"arguments\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Kb-Tay"},"content":" final boolean validIndex \u003d argument.matches(\"-?\\\\d+\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Kb-Tay"},"content":" final Action action \u003d Action.parseCommand(command);","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Kb-Tay"},"content":" switch (action) {","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"Kb-Tay"},"content":" case BYE:","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"Kb-Tay"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Kb-Tay"},"content":" case LIST:","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"Kb-Tay"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Kb-Tay"},"content":" case REMIND:","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"Kb-Tay"},"content":" return new RemindCommand();","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"Kb-Tay"},"content":" case FIND:","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"Kb-Tay"},"content":" if (argument.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Please enter keyword to find task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Kb-Tay"},"content":" return new FindCommand(argument);","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Kb-Tay"},"content":" case EDIT_TASK:","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"Kb-Tay"},"content":" if (!validIndex) {","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Please input an integer to identify task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Kb-Tay"},"content":" return new EditCommand(command, Integer.parseInt(argument));","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Kb-Tay"},"content":" case ADD_TASK:","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"Kb-Tay"},"content":" if (argument.equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Task description cannot be empty\");","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Kb-Tay"},"content":" String[] taskArgs \u003d parseTaskArguments(command, argument);","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"Kb-Tay"},"content":" return new AddCommand(command, taskArgs);","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Kb-Tay"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Unknown/Invalid command given\");","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Kb-Tay"},"content":" * Return the string representing the dateTime input in MMM d yyyy h.mma format.","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Kb-Tay"},"content":" * @param input The dateTime string input from the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Kb-Tay"},"content":" * @return The string of the formatted DateTime input.","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Kb-Tay"},"content":" public static String reformatDateTime(LocalDateTime input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"Kb-Tay"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy h.mma\", Locale.ENGLISH);","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Kb-Tay"},"content":" return input.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"Kb-Tay"},"content":" * Returns a LocalDateTime given by the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"Kb-Tay"},"content":" * Formats user input to be parsed as a LocalDateTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"Kb-Tay"},"content":" * @param input The user date input.","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"Kb-Tay"},"content":" * @return The LocaleDateTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"Kb-Tay"},"content":" public static LocalDateTime parseDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"Kb-Tay"},"content":" String[] dateTime \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"Kb-Tay"},"content":" String dateTimeFormat \u003d dateTime[0] + \"T\" + dateTime[1] + \":00\";","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"Kb-Tay"},"content":" return LocalDateTime.parse(dateTimeFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":167,"author":{"gitId":"Kb-Tay"},"content":" * Returns the array of arguments required for task added. Task can be todo, deadline or event.","lastModifiedDate":"2023-09-11"},{"lineNumber":168,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":169,"author":{"gitId":"Kb-Tay"},"content":" * @param taskType Type of task to be added to TaskList.","lastModifiedDate":"2023-09-11"},{"lineNumber":170,"author":{"gitId":"Kb-Tay"},"content":" * @param argument Input arguments from user.","lastModifiedDate":"2023-09-11"},{"lineNumber":171,"author":{"gitId":"Kb-Tay"},"content":" * @return The array of arguments required for task to be added.","lastModifiedDate":"2023-09-11"},{"lineNumber":172,"author":{"gitId":"Kb-Tay"},"content":" * @throws InvalidCommandException Error thrown when user did not input correct arguments to add task.","lastModifiedDate":"2023-09-11"},{"lineNumber":173,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":174,"author":{"gitId":"Kb-Tay"},"content":" private static String[] parseTaskArguments(String taskType, String argument) throws InvalidCommandException {","lastModifiedDate":"2023-09-11"},{"lineNumber":175,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":176,"author":{"gitId":"Kb-Tay"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":177,"author":{"gitId":"Kb-Tay"},"content":" case \"todo\":","lastModifiedDate":"2023-09-11"},{"lineNumber":178,"author":{"gitId":"Kb-Tay"},"content":" return new String[]{argument};","lastModifiedDate":"2023-09-11"},{"lineNumber":179,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"Kb-Tay"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"Kb-Tay"},"content":" Matcher deadlineFormat \u003d DEADLINE_FORMAT.matcher(argument);","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"Kb-Tay"},"content":" if (!deadlineFormat.matches()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":184,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Invalid deadline command. \"","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"Kb-Tay"},"content":" + \"Please include /by date in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"Kb-Tay"},"content":" String deadLineDesc \u003d deadlineFormat.group(1);","lastModifiedDate":"2023-09-11"},{"lineNumber":189,"author":{"gitId":"Kb-Tay"},"content":" String dateInput \u003d deadlineFormat.group(2);","lastModifiedDate":"2023-09-11"},{"lineNumber":190,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":191,"author":{"gitId":"Kb-Tay"},"content":" LocalDateTime d \u003d parseDateTime(dateInput);","lastModifiedDate":"2023-09-11"},{"lineNumber":192,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":193,"author":{"gitId":"Kb-Tay"},"content":" String byDate \u003d reformatDateTime(d);","lastModifiedDate":"2023-09-11"},{"lineNumber":194,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":195,"author":{"gitId":"Kb-Tay"},"content":" return new String[]{deadLineDesc, byDate};","lastModifiedDate":"2023-09-11"},{"lineNumber":196,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":197,"author":{"gitId":"Kb-Tay"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"Kb-Tay"},"content":" Matcher eventFormat \u003d EVENT_FORMAT.matcher(argument);","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"Kb-Tay"},"content":" if (!eventFormat.matches()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":201,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Invalid event command. \"","lastModifiedDate":"2023-09-11"},{"lineNumber":202,"author":{"gitId":"Kb-Tay"},"content":" + \"Please include /from and /to dates in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-11"},{"lineNumber":203,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":204,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":205,"author":{"gitId":"Kb-Tay"},"content":" String eventDesc \u003d eventFormat.group(1);","lastModifiedDate":"2023-09-11"},{"lineNumber":206,"author":{"gitId":"Kb-Tay"},"content":" String fromDateInput \u003d eventFormat.group(2);","lastModifiedDate":"2023-09-11"},{"lineNumber":207,"author":{"gitId":"Kb-Tay"},"content":" String toDateInput \u003d eventFormat.group(3);","lastModifiedDate":"2023-09-11"},{"lineNumber":208,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"Kb-Tay"},"content":" LocalDateTime from \u003d parseDateTime(fromDateInput);","lastModifiedDate":"2023-09-11"},{"lineNumber":210,"author":{"gitId":"Kb-Tay"},"content":" LocalDateTime to \u003d parseDateTime(toDateInput);","lastModifiedDate":"2023-09-11"},{"lineNumber":211,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"Kb-Tay"},"content":" if (from.isAfter(to)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"/from date should be before /to date given\");","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"Kb-Tay"},"content":" String fromDate \u003d reformatDateTime(from);","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"Kb-Tay"},"content":" String toDate \u003d reformatDateTime(to);","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"Kb-Tay"},"content":" return new String[]{eventDesc, fromDate, toDate};","lastModifiedDate":"2023-09-11"},{"lineNumber":220,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"Kb-Tay"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Invalid task type\");","lastModifiedDate":"2023-09-11"},{"lineNumber":223,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":225}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"import task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"import task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" * Loads and saves data into files.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" public final String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a duke.Storage that loads and saves ChatBot data into files","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" * @param filePath The file path to read and write from.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" * Saves data input from user into file. User input when using","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" * Chat Bot will be written into the file specified.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" * @param tasks The task.Task List to be written into file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" * @throws IOException If an I/O error occurs while writing to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" public void writeFile(TaskList tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" FileWriter fw \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" fw.write(tasks.toFileString());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" * Loads data from the previously saved file. Previous user input written in the file","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" * will be processed so user can view and make changes to the data using the Chat Bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" * @return task.Task List that was saved by user.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" * @throws IOException If an I/O error occurs while reading the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" if (f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" addFileTask(taskList, s.nextLine());","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" return taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" * Process text from the file to be used by Chat Bot. Process data stored in the","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" * txt file and adds the respective tasks to the duke.TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Kb-Tay"},"content":" * @param taskList The array list of task stored by files.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Kb-Tay"},"content":" * @param input The text input from the file being read.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Kb-Tay"},"content":" private void addFileTask(ArrayList\u003cTask\u003e taskList, String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Kb-Tay"},"content":" String[] task \u003d input.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Kb-Tay"},"content":" String taskName \u003d task[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Kb-Tay"},"content":" String isMarked \u003d task[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Kb-Tay"},"content":" String taskDesc \u003d task[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Kb-Tay"},"content":" switch (taskName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Kb-Tay"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Kb-Tay"},"content":" if (isMarked.equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new ToDo(taskDesc, true));","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new ToDo(taskDesc));","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Kb-Tay"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Kb-Tay"},"content":" String taskDate \u003d task[3].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Kb-Tay"},"content":" if (isMarked.equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Deadline(taskDesc, true, taskDate));","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Deadline(taskDesc, taskDate));","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Kb-Tay"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Kb-Tay"},"content":" String[] taskEvent \u003d task[3].split(\"-\");","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Kb-Tay"},"content":" if (isMarked.equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Event(taskDesc, true, taskEvent[0].trim(), taskEvent[1].trim()));","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Event(taskDesc, taskEvent[0].trim(), taskEvent[1].trim()));","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Kb-Tay"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":112}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import exception.InvalidCommandException;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import exception.InvalidIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"import task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" * Contains the list of tasks. The tasks stored from the file loaded","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" * and from inputs given by user.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a duke.TaskList with a empty task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a duke.TaskList with data load from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" * @param taskList The task list stored in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" String tasks \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" tasks +\u003d (i + 1) + \".\" + taskList.get(i).toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" if (i \u003c taskList.size() - 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" tasks +\u003d \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" * Returns a string of tasks to be written into the file. Formats the data stored in duke.TaskList","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" * to be written into file.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" * @return The string representing duke.TaskList to be written into file.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" String tasks \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" tasks +\u003d taskList.get(i).fileString();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" if (i \u003c taskList.size() - 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" tasks +\u003d \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" * Adds a new task into duke.TaskList. The task can either be a task.ToDo,","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":" * task.Deadline or task.Event.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Kb-Tay"},"content":" * @param taskType The type of task to add.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Kb-Tay"},"content":" * @param args Additional information for task to be instantiated.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Kb-Tay"},"content":" * @return A string description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Kb-Tay"},"content":" public String addTask(String taskType, String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Kb-Tay"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Kb-Tay"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new ToDo(args[0]));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Kb-Tay"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Deadline(args[0], args[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Kb-Tay"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Event(args[0], args[1], args[2]));","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Kb-Tay"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Kb-Tay"},"content":" assert false : \"Task type should be checked by parser, no other tasks type should be allowed\";","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Kb-Tay"},"content":" int size \u003d taskList.size();","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"Kb-Tay"},"content":" String taskDesc \u003d taskList.get(taskList.size() - 1).toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"Kb-Tay"},"content":" String addTaskDesc \u003d String.format(","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"Kb-Tay"},"content":" \"Got it. I\u0027ve added this task:\\n%s\\nNow you have %d tasks in the list.\", taskDesc, size);","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"Kb-Tay"},"content":" return addTaskDesc;","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Kb-Tay"},"content":" * Edits a task in the duke.TaskList. task.Task can be marked, unmarked as done or deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Kb-Tay"},"content":" * @param taskType The type of edits to be made.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Kb-Tay"},"content":" * @param ind The task to edit.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Kb-Tay"},"content":" * @return The string description of the edit being made.","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Kb-Tay"},"content":" public String editTask(String taskType, int ind) throws InvalidIndexException, InvalidCommandException {","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Kb-Tay"},"content":" if (!isValidIndex(ind)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Kb-Tay"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Kb-Tay"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Kb-Tay"},"content":" taskList.get(ind - 1).markTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Kb-Tay"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + taskList.get(ind - 1).toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Kb-Tay"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Kb-Tay"},"content":" taskList.get(ind - 1).unmarkTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Kb-Tay"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + taskList.get(ind - 1).toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Kb-Tay"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Kb-Tay"},"content":" String editDesc \u003d \"Noted. I\u0027ve removed this task:\\n\" + taskList.get(ind - 1).toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"Kb-Tay"},"content":" taskList.remove(ind - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Kb-Tay"},"content":" editDesc +\u003d \"\\nNow you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Kb-Tay"},"content":" return editDesc;","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Kb-Tay"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Kb-Tay"},"content":" assert false : \"Task type should be checked by parser, no other tasks type should be allowed\";","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"No such edit command\");","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Kb-Tay"},"content":" * Checks if the index given is out of taskList range.","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Kb-Tay"},"content":" * @param ind The input index.","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Kb-Tay"},"content":" * @return If the index is within range.","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Kb-Tay"},"content":" public boolean isValidIndex(int ind) {","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"Kb-Tay"},"content":" if (ind \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Kb-Tay"},"content":" if (ind \u003e taskList.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"Kb-Tay"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"Kb-Tay"},"content":" * Returns string of tasks matching user\u0027s search. Finds list of task description","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"Kb-Tay"},"content":" * matching user\u0027s input keyword. Returns empty string if no matching task found.","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"Kb-Tay"},"content":" * @param keyword The user input keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"Kb-Tay"},"content":" * @return The string of tasks description matching keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"Kb-Tay"},"content":" public String findMatchingTasks(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"Kb-Tay"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"Kb-Tay"},"content":" String desc \u003d taskList.get(i).getName().toLowerCase();","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"Kb-Tay"},"content":" if (desc.contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"Kb-Tay"},"content":" matchingTasks.add(taskList.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"Kb-Tay"},"content":" String action \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"Kb-Tay"},"content":" action +\u003d (i + 1) + \".\" + matchingTasks.get(i).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"Kb-Tay"},"content":" if (i \u003c matchingTasks.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"Kb-Tay"},"content":" action +\u003d \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"Kb-Tay"},"content":" return action;","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":184,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":185,"author":{"gitId":"Kb-Tay"},"content":" * Return a list of upcoming task due to remind user.","lastModifiedDate":"2023-09-14"},{"lineNumber":186,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":187,"author":{"gitId":"Kb-Tay"},"content":" * @return The list of tasks due.","lastModifiedDate":"2023-09-14"},{"lineNumber":188,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":189,"author":{"gitId":"Kb-Tay"},"content":" public String remindTasks() {","lastModifiedDate":"2023-09-14"},{"lineNumber":190,"author":{"gitId":"Kb-Tay"},"content":" StringBuilder tasksReminder \u003d new StringBuilder(100);","lastModifiedDate":"2023-09-14"},{"lineNumber":191,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":192,"author":{"gitId":"Kb-Tay"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-14"},{"lineNumber":193,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":194,"author":{"gitId":"Kb-Tay"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-09-14"},{"lineNumber":195,"author":{"gitId":"Kb-Tay"},"content":" if (!task.needReminder()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":196,"author":{"gitId":"Kb-Tay"},"content":" continue;","lastModifiedDate":"2023-09-14"},{"lineNumber":197,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":198,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":199,"author":{"gitId":"Kb-Tay"},"content":" String taskDesc \u003d String.format(\"%d. %s\\n\", count, task);","lastModifiedDate":"2023-09-14"},{"lineNumber":200,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":201,"author":{"gitId":"Kb-Tay"},"content":" tasksReminder.append(taskDesc);","lastModifiedDate":"2023-09-14"},{"lineNumber":202,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":203,"author":{"gitId":"Kb-Tay"},"content":" count++;","lastModifiedDate":"2023-09-14"},{"lineNumber":204,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":205,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":206,"author":{"gitId":"Kb-Tay"},"content":" if (tasksReminder.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-14"},{"lineNumber":207,"author":{"gitId":"Kb-Tay"},"content":" return \"No upcoming tasks. Take a break \u003d)\";","lastModifiedDate":"2023-09-14"},{"lineNumber":208,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":209,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":210,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"Here is a list of upcoming tasks due:\\n%s\", tasksReminder);","lastModifiedDate":"2023-09-14"},{"lineNumber":211,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":212,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":212}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" * Handles user interaction with Chat Bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" private static final String NAME \u003d \"Obi-wan Kenobi\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" private final PrintStream out;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a duke.Ui object. duke.Ui object will handle user input and prints","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" * information to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" this.out \u003d System.out;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" * Generates and prints welcome message when Chat Bot is started.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" public String startBot() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" return \"Hello There! I am \" + NAME + \"\\nWhat can I do for you?\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" * Generates and prints closing message when Chat Bot is stopped.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" public String endBot() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" return \"Bye. May the force be with you!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" * Prints the error messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" * @param e If user inputs invalid commands to the Chat Bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" public String showErrorMessage(DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" * Prints error message when file path is not found.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" out.println(\"Invalid file path given\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" * Print error message when writing to file.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" public void showWritingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" out.println(\"Unable to write to file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":60}},{"path":"src/main/java/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * A custom exception class to represent the exception thrown by the duke.Duke Chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new duke.Duke Exception with a specified error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Kb-Tay":16}},{"path":"src/main/java/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * Custom Exception class that extends exception.DukeException. It is thrown when the user input command to","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" * the chatbot is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" * Constructs new exception.InvalidCommandException with specified error messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" * @param message The message of the invalid command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":17}},{"path":"src/main/java/exception/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * Custom Exception class that extends exception.DukeException. It is thrown when the user input references an","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" * invalid index in the task.Task List.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"public class InvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" * Constructs new exception.InvalidIndexException with specified error messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" super(\"Index given out of task list range!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":16}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":" * A deadline class extends the task class. A deadline task represents a task that has to be","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":" * completed by a certain date.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" protected String by;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" protected LocalDateTime byDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a deadline task with specified name.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" * @param by The date the task needs to be completed.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" this.byDate \u003d parseTaskDate(by);","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a deadline task with specified name.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" * Deadline constructed can be marked as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" * @param by The date the task needs to be completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" * Returns the description of the deadline task with the specified date that task needs to be completed.","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" * @return The string description of the deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), by);","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" public String fileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"D%s | %s\", super.fileString(), by);","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" public boolean needReminder() {","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" if (isDone) {","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":" boolean isDue \u003d byDate.isAfter(LocalDateTime.now());","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" return isDue;","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Kb-Tay":63}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":" * An event class extends the task class. It represents a task with that needs to be completed within","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":" * a certain time period.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" protected String from;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" protected String to;","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" protected LocalDateTime fromDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" protected LocalDateTime toDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new task.Event with the specified time period and description.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" * @param from The start date of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" * @param to The end date of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" this.fromDate \u003d parseTaskDate(from);","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" this.toDate \u003d parseTaskDate(to);","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new Event with the specified time period and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" * Event constructed can be marked as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" * @param isDone If task is completed","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" * @param from The start date of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" * @param to The end date of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" * Returns the description of the task with the specified time period.","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" * @return A string description of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), from, to);","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" public String fileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"E%s | %s-%s\", super.fileString(), from, to);","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":" public boolean needReminder() {","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" if (isDone) {","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" boolean isDue \u003d fromDate.isAfter(LocalDateTime.now());","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" return isDue;","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Kb-Tay":71}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" * The task.Task Class is an abstract class that serves as a base class for various types of task the user can create.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" protected String name;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new task.Task with the specified name. By default,","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" * the task is marked as not done.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new task.Task with the specified name.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" * Task constructed can be marked as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" public String getName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" return this.name;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" * Returns a string representing if the task is marked as done or not.","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" * @return The string message if task is done.","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" return (this.isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" public void markTask() {","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":" * Returns the string description of the current task. Description includes if task is done and the task name.","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"%s %s\", this.getStatusIcon(), name);","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Kb-Tay"},"content":" * Returns string of task to store in file. Description includes","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Kb-Tay"},"content":" * task type, date, if task is done and the task name.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Kb-Tay"},"content":" public String fileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Kb-Tay"},"content":" String done \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Kb-Tay"},"content":" String fileLine \u003d String.format(\" | %b | %s\", done, name);","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"Kb-Tay"},"content":" return fileLine;","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"Kb-Tay"},"content":" * Returns true if task is due to be completed. There will be reminder for a task if task","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"Kb-Tay"},"content":" * is not completed and the task date to be completed by is not passed the current date.","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"Kb-Tay"},"content":" public abstract boolean needReminder();","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"Kb-Tay"},"content":" * Parses the string date field of a task to a LocalDateTime object.","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"Kb-Tay"},"content":" * @param date The input task date.","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"Kb-Tay"},"content":" * @return The LocalDateTime corresponding to the string input.","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"Kb-Tay"},"content":" protected static LocalDateTime parseTaskDate(String date) {","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"Kb-Tay"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy h.mma\", Locale.ENGLISH);","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"Kb-Tay"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"Kb-Tay"},"content":" return dateTime;","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Kb-Tay":101}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * A task.ToDo class extends the task class. A Todo task is a task without a specified date to be completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new Todo task.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new Todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" * Todo constructed can be completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" * @param isDone If task is completed","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" * Returns a description of the Todo task.","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" * @return A string description of the task.ToDo.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" public String fileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" return \"T\" + super.fileString();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" public boolean needReminder() {","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" if (isDone) {","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" return true;","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Kb-Tay":52}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"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\"MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"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":"Kb-Tay"},"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":"Kb-Tay"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":20}},{"path":"src/test/java/seedu/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import exception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" public void parse_invalidEditCommandIndex_exceptionThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" InvalidCommandException test \u003d assertThrows(InvalidCommandException.class, () -\u003e Parser.parse(\"mark hi\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" assertEquals(\"Please input an integer to identify task\", test.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" public void parse_invalidTaskCommand_exceptionThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidCommandException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" Parser.parse(\"deadline \"));","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidCommandException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" Parser.parse(\"deadline /\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidCommandException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" Parser.parse(\"deadline /by 2022-05-12 24:10\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidCommandException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" Parser.parse(\"event /from 2022-5-12 23:00 /to \"));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" public void testDateTimeReformat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" assertEquals(\"Jan 1 2023 11.35PM\",","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" Parser.reformatDateTime(","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" Parser.parseDateTime(\"2023-01-01 23:35\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" public void parse_invalidEventDate_exceptionThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" InvalidCommandException thrown \u003d assertThrows(InvalidCommandException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" Parser.parse(\"event party /from 2022-01-01 23:00 /to 2021-01-01 23:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" assertEquals(\"/from date should be before /to date given\", thrown.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Kb-Tay":49}},{"path":"src/test/java/seedu/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"import exception.InvalidIndexException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"import task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"import task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"import task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":"import task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" public void editTask_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" ArrayList\u003cTask\u003e taskLists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" taskLists.add(new ToDo(\"return book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" TaskList tasks \u003d new TaskList(taskLists);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidIndexException.class, () -\u003e tasks.editTask(\"mark\", -1));","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidIndexException.class, () -\u003e tasks.editTask(\"mark\", 100));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" public void testFileStringFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" ArrayList\u003cTask\u003e taskLists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" ToDo task1 \u003d new ToDo(\"return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" task1.markTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" taskLists.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" taskLists.add(new Deadline(\"buy supplies\", \"Jan 5 23 7.30PM\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" taskLists.add(new Event(\"host party\", \"Jan 5 23 7.30PM\", \"Jan 6 23 1.00AM\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" TaskList tasks \u003d new TaskList(taskLists);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" assertEquals(\"T | 1 | return book\\n\" + \"D | 0 | buy supplies | Jan 5 23 7.30PM\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" + \"E | 0 | host party | Jan 5 23 7.30PM-Jan 6 23 1.00AM\", tasks.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Kb-Tay":44}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Kb-Tay":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":"-"},"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":"Kb-Tay"},"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":{"Kb-Tay":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"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":{"Kb-Tay":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":"Kb-Tay"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"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":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"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":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kb-Tay":21,"-":43}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"T | true | borrow book","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"D | true | 2103 ip | Sep 15 2023 12.00PM","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"E | true | hello | Sep 15 2023 12.00AM-Sep 15 2023 12.00PM","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"D | true | eay | Sep 13 2023 12.00AM","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kb-Tay":4}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" public void endBot() {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" dialog.setDisable(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":63}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * Starts the GUI for the Chat Bot.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * The main point of entry for the Duke Chat Bot application.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" * @param args The command line arguments passed to the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":16}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" private Duke duke \u003d new Duke(\"./src/main/data/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().startGui();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":31}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Anakin.jpg\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Obi_wan.jpg\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"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":43,"author":{"gitId":"Kb-Tay"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" assert !response.equals(\"\") : \"Response should either be action or error message\";","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" dialogContainer.getChildren().addAll(DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" DialogBox.getDukeDialog(response, dukeImage));","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" if (response.equals(\"Bye. May the force be with you!\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" userInput.setDisable(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" sendButton.setDisable(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" * Creates a dialogue box containing Duke\u0027s getting.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":" public void startGui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(ui.startBot(), dukeImage));","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":69}},{"path":"src/main/java/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * Command that adds a task to the task List.","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" /** Type of task to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" private final String taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" /** The other information required to instantiate a task.Task */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" private final String[] args;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new Add command.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" * @param taskType Type of task to add.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" * @param args Additional information required for different tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" public AddCommand(String taskType, String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" this.args \u003d args;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" return tasks.addTask(taskType, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":32}},{"path":"src/main/java/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" * Command to end the Chat Bot. Saves user input into file.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" store.writeFile(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" ui.showWritingError();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" return ui.endBot();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":24}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * Stores information of the action to be executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" * Executes the command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" * @param tasks task.Task list storing user task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" * @param ui The duke.Ui handling user interactions.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" * @param store The store that handles file operations.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" * @return A description of the action done.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage store) throws DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":23}},{"path":"src/main/java/command/EditCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * Command to edit a task in the task.Task List.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" /** The changes to the task */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" private final String editType;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" /** The task to be changed */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" private final int ind;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new Edit command.Command. Can mark, unmark task as done or","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" * delete a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" * @param editType The edit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" * @param ind The task to be changed.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" public EditCommand(String editType, int ind) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" this.editType \u003d editType;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" this.ind \u003d ind;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" return tasks.editTask(editType, ind);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":34}},{"path":"src/main/java/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" * Command to find task matching keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" private final String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" String input \u003d keyword.toLowerCase();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" String action \u003d tasks.findMatchingTasks(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" if (action.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" return \"No task matching keyword found!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" return \"Here are the matching tasks in your list:\\n\" + action;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Kb-Tay":30}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * Command to List all the task in duke.TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" return \"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" + tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":18}},{"path":"src/main/java/command/RemindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" * Command to remind user of upcoming tasks.","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"public class RemindCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public String execute(TaskList tasks, Ui ui, Storage store) {","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" return tasks.remindTasks();","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kb-Tay":17}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":" * ip Project duke.Duke Chat bot","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * @author Aaron Tay","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" * @since 2023-08-24","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"import command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" * Duke class instantiates a new Chat Bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" /** Reads and writes task data into file */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" /** List of tasks input by user or loaded from file */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" /** Handles user interactions */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a duke.Duke object with the specified file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" * @param filePath The path where the ChatBot loads data from.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" * Returns the response to the user input. Parses the user input and initialise a new Command,","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" * the Command is then executed to return the correct response.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" return c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" return ui.showErrorMessage(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kb-Tay":53,"-":2}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import command.AddCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"import command.ByeCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"import command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"import command.EditCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"import command.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"import command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":"import command.RemindCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"import exception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" * The Action enum represents the various actions that can be performed by Duke.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":"enum Action {","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" BYE, LIST, FIND, REMIND, EDIT_TASK, ADD_TASK, INVALID;","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" private static final int COMMAND_OTHERS_COUNT \u003d 4;","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" public static Action parseCommand(String command) throws InvalidCommandException {","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" if (checkEditAction(command)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" return EDIT_TASK;","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" } else if (checkAddAction(command)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" return ADD_TASK;","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" Action[] values \u003d Action.values();","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c COMMAND_OTHERS_COUNT; i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" if (command.toUpperCase().equals(values[i].toString())) {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" return values[i];","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Invalid Command\");","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" private static boolean checkAddAction(String command) {","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" final String[] addTypes \u003d new String[]{\"todo\", \"deadline\", \"event\"};","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" for (String type : addTypes) {","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" if (command.equals(type)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" return true;","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" private static boolean checkEditAction(String command) {","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":" final String[] editTypes \u003d new String[]{\"mark\", \"unmark\", \"delete\"};","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" for (String type : editTypes) {","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":" if (command.equals(type)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" return true;","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Kb-Tay"},"content":" * Parses user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Kb-Tay"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Kb-Tay"},"content":" private static final Pattern BASIC_COMMAND \u003d Pattern.compile(\"(?\u003ccommand\u003e\\\\S+)(?\u003carguments\u003e.*)\");","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"Kb-Tay"},"content":" private static final String DATE_PATTERN \u003d \"\\\\d{4}-\\\\d{2}-\\\\d{2} \\\\d{2}:\\\\d{2}\";","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"Kb-Tay"},"content":" private static final Pattern DEADLINE_FORMAT \u003d Pattern.compile(","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"Kb-Tay"},"content":" \"(?\u003cdeadline\u003e[^\\\"]+) /by (\" + DATE_PATTERN + \")\");","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Kb-Tay"},"content":" private static final Pattern EVENT_FORMAT \u003d Pattern.compile(","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"Kb-Tay"},"content":" \"(?\u003cdeadline\u003e[^\\\"]+) /from (\" + DATE_PATTERN + \")\" + \" /to (\" + DATE_PATTERN + \")\");","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Kb-Tay"},"content":" * Parses user input and returns a command.Command. The command.Command can then be executed","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Kb-Tay"},"content":" * to respond to the user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Kb-Tay"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Kb-Tay"},"content":" * @return A command.Command to be executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Kb-Tay"},"content":" * @throws DukeException If user input is invalid, Duke exception will be thrown.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Kb-Tay"},"content":" public static Command parse(String input) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Kb-Tay"},"content":" final Matcher matcher \u003d BASIC_COMMAND.matcher(input.trim());","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Kb-Tay"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Invalid command\");","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Kb-Tay"},"content":" assert input.equals(\"\") : \"Command should not be empty after checks\";","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"Kb-Tay"},"content":" final String command \u003d matcher.group(\"command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Kb-Tay"},"content":" final String argument \u003d matcher.group(\"arguments\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Kb-Tay"},"content":" final boolean validIndex \u003d argument.matches(\"-?\\\\d+\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Kb-Tay"},"content":" final Action action \u003d Action.parseCommand(command);","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Kb-Tay"},"content":" switch (action) {","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"Kb-Tay"},"content":" case BYE:","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"Kb-Tay"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Kb-Tay"},"content":" case LIST:","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"Kb-Tay"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Kb-Tay"},"content":" case REMIND:","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"Kb-Tay"},"content":" return new RemindCommand();","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"Kb-Tay"},"content":" case FIND:","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"Kb-Tay"},"content":" if (argument.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Please enter keyword to find task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Kb-Tay"},"content":" return new FindCommand(argument);","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Kb-Tay"},"content":" case EDIT_TASK:","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"Kb-Tay"},"content":" if (!validIndex) {","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Please input an integer to identify task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Kb-Tay"},"content":" return new EditCommand(command, Integer.parseInt(argument));","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Kb-Tay"},"content":" case ADD_TASK:","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"Kb-Tay"},"content":" if (argument.equals(\"\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Task description cannot be empty\");","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"Kb-Tay"},"content":" String[] taskArgs \u003d parseTaskArguments(command, argument);","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"Kb-Tay"},"content":" return new AddCommand(command, taskArgs);","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Kb-Tay"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Unknown/Invalid command given\");","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Kb-Tay"},"content":" * Return the string representing the dateTime input in MMM d yyyy h.mma format.","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Kb-Tay"},"content":" * @param input The dateTime string input from the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Kb-Tay"},"content":" * @return The string of the formatted DateTime input.","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"Kb-Tay"},"content":" public static String reformatDateTime(LocalDateTime input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Kb-Tay"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy h.mma\", Locale.ENGLISH);","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Kb-Tay"},"content":" return input.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"Kb-Tay"},"content":" * Returns a LocalDateTime given by the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"Kb-Tay"},"content":" * Formats user input to be parsed as a LocalDateTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"Kb-Tay"},"content":" * @param input The user date input.","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"Kb-Tay"},"content":" * @return The LocaleDateTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"Kb-Tay"},"content":" public static LocalDateTime parseDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"Kb-Tay"},"content":" String[] dateTime \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"Kb-Tay"},"content":" String dateTimeFormat \u003d dateTime[0] + \"T\" + dateTime[1] + \":00\";","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"Kb-Tay"},"content":" return LocalDateTime.parse(dateTimeFormat);","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":168,"author":{"gitId":"Kb-Tay"},"content":" * Returns the array of arguments required for task added. Task can be todo, deadline or event.","lastModifiedDate":"2023-09-11"},{"lineNumber":169,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":170,"author":{"gitId":"Kb-Tay"},"content":" * @param taskType Type of task to be added to TaskList.","lastModifiedDate":"2023-09-11"},{"lineNumber":171,"author":{"gitId":"Kb-Tay"},"content":" * @param argument Input arguments from user.","lastModifiedDate":"2023-09-11"},{"lineNumber":172,"author":{"gitId":"Kb-Tay"},"content":" * @return The array of arguments required for task to be added.","lastModifiedDate":"2023-09-11"},{"lineNumber":173,"author":{"gitId":"Kb-Tay"},"content":" * @throws InvalidCommandException Error thrown when user did not input correct arguments to add task.","lastModifiedDate":"2023-09-11"},{"lineNumber":174,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":175,"author":{"gitId":"Kb-Tay"},"content":" private static String[] parseTaskArguments(String taskType, String argument) throws InvalidCommandException {","lastModifiedDate":"2023-09-11"},{"lineNumber":176,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":177,"author":{"gitId":"Kb-Tay"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":178,"author":{"gitId":"Kb-Tay"},"content":" case \"todo\":","lastModifiedDate":"2023-09-11"},{"lineNumber":179,"author":{"gitId":"Kb-Tay"},"content":" return new String[]{argument};","lastModifiedDate":"2023-09-11"},{"lineNumber":180,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"Kb-Tay"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"Kb-Tay"},"content":" Matcher deadlineFormat \u003d DEADLINE_FORMAT.matcher(argument);","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"Kb-Tay"},"content":" if (!deadlineFormat.matches()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":185,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Invalid deadline command. \"","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"Kb-Tay"},"content":" + \"Please include /by date in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"Kb-Tay"},"content":" String deadLineDesc \u003d deadlineFormat.group(1);","lastModifiedDate":"2023-09-11"},{"lineNumber":190,"author":{"gitId":"Kb-Tay"},"content":" String dateInput \u003d deadlineFormat.group(2);","lastModifiedDate":"2023-09-11"},{"lineNumber":191,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":192,"author":{"gitId":"Kb-Tay"},"content":" LocalDateTime d \u003d parseDateTime(dateInput);","lastModifiedDate":"2023-09-11"},{"lineNumber":193,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":194,"author":{"gitId":"Kb-Tay"},"content":" String byDate \u003d reformatDateTime(d);","lastModifiedDate":"2023-09-11"},{"lineNumber":195,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":196,"author":{"gitId":"Kb-Tay"},"content":" return new String[]{deadLineDesc, byDate};","lastModifiedDate":"2023-09-11"},{"lineNumber":197,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":198,"author":{"gitId":"Kb-Tay"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"Kb-Tay"},"content":" Matcher eventFormat \u003d EVENT_FORMAT.matcher(argument);","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"Kb-Tay"},"content":" if (!eventFormat.matches()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":202,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Invalid event command. \"","lastModifiedDate":"2023-09-11"},{"lineNumber":203,"author":{"gitId":"Kb-Tay"},"content":" + \"Please include /from and /to dates in this format: yyyy-mm-dd HH:mm\");","lastModifiedDate":"2023-09-11"},{"lineNumber":204,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":205,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":206,"author":{"gitId":"Kb-Tay"},"content":" String eventDesc \u003d eventFormat.group(1);","lastModifiedDate":"2023-09-11"},{"lineNumber":207,"author":{"gitId":"Kb-Tay"},"content":" String fromDateInput \u003d eventFormat.group(2);","lastModifiedDate":"2023-09-11"},{"lineNumber":208,"author":{"gitId":"Kb-Tay"},"content":" String toDateInput \u003d eventFormat.group(3);","lastModifiedDate":"2023-09-11"},{"lineNumber":209,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"Kb-Tay"},"content":" LocalDateTime from \u003d parseDateTime(fromDateInput);","lastModifiedDate":"2023-09-11"},{"lineNumber":211,"author":{"gitId":"Kb-Tay"},"content":" LocalDateTime to \u003d parseDateTime(toDateInput);","lastModifiedDate":"2023-09-11"},{"lineNumber":212,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"Kb-Tay"},"content":" if (from.isAfter(to)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"/from date should be before /to date given\");","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"Kb-Tay"},"content":" String fromDate \u003d reformatDateTime(from);","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"Kb-Tay"},"content":" String toDate \u003d reformatDateTime(to);","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"Kb-Tay"},"content":" return new String[]{eventDesc, fromDate, toDate};","lastModifiedDate":"2023-09-11"},{"lineNumber":221,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"Kb-Tay"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"Invalid task type\");","lastModifiedDate":"2023-09-11"},{"lineNumber":224,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":226}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"import task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"import task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" * Loads and saves data into files.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" public final String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a duke.Storage that loads and saves ChatBot data into files","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" * @param filePath The file path to read and write from.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" * Saves data input from user into file. User input when using","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" * Chat Bot will be written into the file specified.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" * @param tasks The task.Task List to be written into file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" * @throws IOException If an I/O error occurs while writing to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" public void writeFile(TaskList tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" FileWriter fw \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" fw.write(tasks.toFileString());","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" * Loads data from the previously saved file. Previous user input written in the file","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" * will be processed so user can view and make changes to the data using the Chat Bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" * @return task.Task List that was saved by user.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" * @throws IOException If an I/O error occurs while reading the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" if (f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" addFileTask(taskList, s.nextLine());","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" return taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" * Process text from the file to be used by Chat Bot. Process data stored in the","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" * txt file and adds the respective tasks to the duke.TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Kb-Tay"},"content":" * @param taskList The array list of task stored by files.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Kb-Tay"},"content":" * @param input The text input from the file being read.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Kb-Tay"},"content":" private void addFileTask(ArrayList\u003cTask\u003e taskList, String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Kb-Tay"},"content":" String[] task \u003d input.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Kb-Tay"},"content":" String taskName \u003d task[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Kb-Tay"},"content":" String isMarked \u003d task[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Kb-Tay"},"content":" String taskDesc \u003d task[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Kb-Tay"},"content":" switch (taskName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Kb-Tay"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Kb-Tay"},"content":" if (isMarked.equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new ToDo(taskDesc, true));","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new ToDo(taskDesc));","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Kb-Tay"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Kb-Tay"},"content":" String taskDate \u003d task[3].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Kb-Tay"},"content":" if (isMarked.equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Deadline(taskDesc, true, taskDate));","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Deadline(taskDesc, taskDate));","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Kb-Tay"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Kb-Tay"},"content":" String[] taskEvent \u003d task[3].split(\"-\");","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Kb-Tay"},"content":" if (isMarked.equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Event(taskDesc, true, taskEvent[0].trim(), taskEvent[1].trim()));","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Kb-Tay"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Event(taskDesc, taskEvent[0].trim(), taskEvent[1].trim()));","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Kb-Tay"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":112}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import exception.InvalidCommandException;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import exception.InvalidIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"import task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" * Contains the list of tasks. The tasks stored from the file loaded","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" * and from inputs given by user.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a duke.TaskList with a empty task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a duke.TaskList with data load from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" * @param taskList The task list stored in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" String tasks \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" tasks +\u003d (i + 1) + \".\" + taskList.get(i).toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" if (i \u003c taskList.size() - 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" tasks +\u003d \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" * Returns a string of tasks to be written into the file. Formats the data stored in duke.TaskList","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" * to be written into file.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" * @return The string representing duke.TaskList to be written into file.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" String tasks \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" tasks +\u003d taskList.get(i).fileString();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" if (i \u003c taskList.size() - 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" tasks +\u003d \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" * Adds a new task into duke.TaskList. The task can either be a task.ToDo,","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":" * task.Deadline or task.Event.","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Kb-Tay"},"content":" * @param taskType The type of task to add.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Kb-Tay"},"content":" * @param args Additional information for task to be instantiated.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Kb-Tay"},"content":" * @return A string description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Kb-Tay"},"content":" public String addTask(String taskType, String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Kb-Tay"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Kb-Tay"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new ToDo(args[0]));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Kb-Tay"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Deadline(args[0], args[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Kb-Tay"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Kb-Tay"},"content":" taskList.add(new Event(args[0], args[1], args[2]));","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Kb-Tay"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Kb-Tay"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Kb-Tay"},"content":" assert false : \"Task type should be checked by parser, no other tasks type should be allowed\";","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Kb-Tay"},"content":" int size \u003d taskList.size();","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"Kb-Tay"},"content":" String taskDesc \u003d taskList.get(taskList.size() - 1).toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"Kb-Tay"},"content":" String addTaskDesc \u003d String.format(","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"Kb-Tay"},"content":" \"Got it. I\u0027ve added this task:\\n%s\\nNow you have %d tasks in the list.\", taskDesc, size);","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"Kb-Tay"},"content":" return addTaskDesc;","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Kb-Tay"},"content":" * Edits a task in the duke.TaskList. task.Task can be marked, unmarked as done or deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Kb-Tay"},"content":" * @param taskType The type of edits to be made.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Kb-Tay"},"content":" * @param ind The task to edit.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Kb-Tay"},"content":" * @return The string description of the edit being made.","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Kb-Tay"},"content":" public String editTask(String taskType, int ind) throws InvalidIndexException, InvalidCommandException {","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"Kb-Tay"},"content":" if (!isValidIndex(ind)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Kb-Tay"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Kb-Tay"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Kb-Tay"},"content":" taskList.get(ind - 1).markTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Kb-Tay"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + taskList.get(ind - 1).toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Kb-Tay"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Kb-Tay"},"content":" taskList.get(ind - 1).unmarkTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Kb-Tay"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + taskList.get(ind - 1).toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Kb-Tay"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Kb-Tay"},"content":" String editDesc \u003d \"Noted. I\u0027ve removed this task:\\n\" + taskList.get(ind - 1).toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"Kb-Tay"},"content":" taskList.remove(ind - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Kb-Tay"},"content":" editDesc +\u003d \"\\nNow you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Kb-Tay"},"content":" return editDesc;","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Kb-Tay"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Kb-Tay"},"content":" assert false : \"Task type should be checked by parser, no other tasks type should be allowed\";","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"Kb-Tay"},"content":" throw new InvalidCommandException(\"No such edit command\");","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Kb-Tay"},"content":" * Checks if the index given is out of taskList range.","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Kb-Tay"},"content":" * @param ind The input index.","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Kb-Tay"},"content":" * @return If the index is within range.","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Kb-Tay"},"content":" public boolean isValidIndex(int ind) {","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"Kb-Tay"},"content":" if (ind \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Kb-Tay"},"content":" if (ind \u003e taskList.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"Kb-Tay"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"Kb-Tay"},"content":" * Returns string of tasks matching user\u0027s search. Finds list of task description","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"Kb-Tay"},"content":" * matching user\u0027s input keyword. Returns empty string if no matching task found.","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"Kb-Tay"},"content":" * @param keyword The user input keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"Kb-Tay"},"content":" * @return The string of tasks description matching keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"Kb-Tay"},"content":" public String findMatchingTasks(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"Kb-Tay"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"Kb-Tay"},"content":" String desc \u003d taskList.get(i).getName().toLowerCase();","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"Kb-Tay"},"content":" if (desc.contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"Kb-Tay"},"content":" matchingTasks.add(taskList.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"Kb-Tay"},"content":" String action \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"Kb-Tay"},"content":" action +\u003d (i + 1) + \".\" + matchingTasks.get(i).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"Kb-Tay"},"content":" if (i \u003c matchingTasks.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"Kb-Tay"},"content":" action +\u003d \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"Kb-Tay"},"content":" return action;","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":184,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":185,"author":{"gitId":"Kb-Tay"},"content":" * Return a list of upcoming task due to remind user.","lastModifiedDate":"2023-09-14"},{"lineNumber":186,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":187,"author":{"gitId":"Kb-Tay"},"content":" * @return The list of tasks due.","lastModifiedDate":"2023-09-14"},{"lineNumber":188,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":189,"author":{"gitId":"Kb-Tay"},"content":" public String remindTasks() {","lastModifiedDate":"2023-09-14"},{"lineNumber":190,"author":{"gitId":"Kb-Tay"},"content":" StringBuilder tasksReminder \u003d new StringBuilder(100);","lastModifiedDate":"2023-09-14"},{"lineNumber":191,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":192,"author":{"gitId":"Kb-Tay"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-14"},{"lineNumber":193,"author":{"gitId":"Kb-Tay"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":194,"author":{"gitId":"Kb-Tay"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-09-14"},{"lineNumber":195,"author":{"gitId":"Kb-Tay"},"content":" if (!task.needReminder()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":196,"author":{"gitId":"Kb-Tay"},"content":" continue;","lastModifiedDate":"2023-09-14"},{"lineNumber":197,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":198,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":199,"author":{"gitId":"Kb-Tay"},"content":" String taskDesc \u003d String.format(\"%d. %s\\n\", count, task);","lastModifiedDate":"2023-09-14"},{"lineNumber":200,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":201,"author":{"gitId":"Kb-Tay"},"content":" tasksReminder.append(taskDesc);","lastModifiedDate":"2023-09-14"},{"lineNumber":202,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":203,"author":{"gitId":"Kb-Tay"},"content":" count++;","lastModifiedDate":"2023-09-14"},{"lineNumber":204,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":205,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":206,"author":{"gitId":"Kb-Tay"},"content":" if (tasksReminder.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-14"},{"lineNumber":207,"author":{"gitId":"Kb-Tay"},"content":" return \"No upcoming tasks. Take a break \u003d)\";","lastModifiedDate":"2023-09-14"},{"lineNumber":208,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":209,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":210,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"Here is a list of upcoming tasks due:\\n%s\", tasksReminder);","lastModifiedDate":"2023-09-14"},{"lineNumber":211,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":212,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":212}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" * Handles user interaction with Chat Bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" private static final String NAME \u003d \"Obi-wan Kenobi\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" private final PrintStream out;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a duke.Ui object. duke.Ui object will handle user input and prints","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" * information to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" this.out \u003d System.out;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" * Generates and prints welcome message when Chat Bot is started.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" public String startBot() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" return \"Hello There! I am \" + NAME + \"\\nWhat can I do for you?\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" * Generates and prints closing message when Chat Bot is stopped.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" public String endBot() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" return \"Bye. May the force be with you!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" * Prints the error messages to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" * @param e If user inputs invalid commands to the Chat Bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" public String showErrorMessage(DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" * Prints error message when file path is not found.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" out.println(\"Invalid file path given\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" * Print error message when writing to file.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" public void showWritingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" out.println(\"Unable to write to file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":60}},{"path":"src/main/java/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * A custom exception class to represent the exception thrown by the duke.Duke Chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new duke.Duke Exception with a specified error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" DukeException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Kb-Tay":16}},{"path":"src/main/java/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * Custom Exception class that extends exception.DukeException. It is thrown when the user input command to","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" * the chatbot is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" * Constructs new exception.InvalidCommandException with specified error messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" * @param message The message of the invalid command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":17}},{"path":"src/main/java/exception/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * Custom Exception class that extends exception.DukeException. It is thrown when the user input references an","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" * invalid index in the task.Task List.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"public class InvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" * Constructs new exception.InvalidIndexException with specified error messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" super(\"Index given out of task list range!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kb-Tay":16}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":" * A deadline class extends the task class. A deadline task represents a task that has to be","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":" * completed by a certain date.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" protected String by;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" protected LocalDateTime byDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a deadline task with specified name.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" * @param by The date the task needs to be completed.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" this.byDate \u003d parseTaskDate(by);","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a deadline task with specified name.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" * Deadline constructed can be marked as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" * @param by The date the task needs to be completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" * Returns the description of the deadline task with the specified date that task needs to be completed.","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" * @return The string description of the deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), by);","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" public String fileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"D%s | %s\", super.fileString(), by);","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" public boolean needReminder() {","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" if (isDone) {","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":" boolean isDue \u003d byDate.isAfter(LocalDateTime.now());","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" return isDue;","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Kb-Tay":63}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":" * An event class extends the task class. It represents a task with that needs to be completed within","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":" * a certain time period.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" protected String from;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" protected String to;","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" protected LocalDateTime fromDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" protected LocalDateTime toDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new task.Event with the specified time period and description.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" * @param from The start date of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" * @param to The end date of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" this.fromDate \u003d parseTaskDate(from);","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" this.toDate \u003d parseTaskDate(to);","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new Event with the specified time period and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" * Event constructed can be marked as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" * @param isDone If task is completed","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" * @param from The start date of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" * @param to The end date of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" * Returns the description of the task with the specified time period.","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" * @return A string description of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), from, to);","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" public String fileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"E%s | %s-%s\", super.fileString(), from, to);","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":" public boolean needReminder() {","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":" if (isDone) {","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" boolean isDue \u003d fromDate.isAfter(LocalDateTime.now());","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" return isDue;","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Kb-Tay":71}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" * The task.Task Class is an abstract class that serves as a base class for various types of task the user can create.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" protected String name;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new task.Task with the specified name. By default,","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" * the task is marked as not done.","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new task.Task with the specified name.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" * Task constructed can be marked as completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" * @param isDone If task is completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" public String getName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" return this.name;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" * Returns a string representing if the task is marked as done or not.","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" * @return The string message if task is done.","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" return (this.isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Kb-Tay"},"content":" public void markTask() {","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"Kb-Tay"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"Kb-Tay"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"Kb-Tay"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"Kb-Tay"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Kb-Tay"},"content":" * Returns the string description of the current task. Description includes if task is done and the task name.","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Kb-Tay"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"Kb-Tay"},"content":" return String.format(\"%s %s\", this.getStatusIcon(), name);","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Kb-Tay"},"content":" * Returns string of task to store in file. Description includes","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Kb-Tay"},"content":" * task type, date, if task is done and the task name.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Kb-Tay"},"content":" public String fileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Kb-Tay"},"content":" String done \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Kb-Tay"},"content":" String fileLine \u003d String.format(\" | %b | %s\", done, name);","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"Kb-Tay"},"content":" return fileLine;","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"Kb-Tay"},"content":" * Returns true if task is due to be completed. There will be reminder for a task if task","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"Kb-Tay"},"content":" * is not completed and the task date to be completed by is not passed the current date.","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"Kb-Tay"},"content":" public abstract boolean needReminder();","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"Kb-Tay"},"content":" * Parses the string date field of a task to a LocalDateTime object.","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"Kb-Tay"},"content":" * @param date The input task date.","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"Kb-Tay"},"content":" * @return The LocalDateTime corresponding to the string input.","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"Kb-Tay"},"content":" protected static LocalDateTime parseTaskDate(String date) {","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"Kb-Tay"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy h.mma\", Locale.ENGLISH);","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"Kb-Tay"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"Kb-Tay"},"content":" return dateTime;","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Kb-Tay":101}},{"path":"src/main/java/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":" * A task.ToDo class extends the task class. A Todo task is a task without a specified date to be completed.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new Todo task.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" * Constructs a new Todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" * Todo constructed can be completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" * @param description The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" * @param isDone If task is completed","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" * Returns a description of the Todo task.","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" * @return A string description of the task.ToDo.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" public String fileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" return \"T\" + super.fileString();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" public boolean needReminder() {","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" if (isDone) {","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":" return false;","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":" return true;","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Kb-Tay":52}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"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\"MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"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":"Kb-Tay"},"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":"Kb-Tay"},"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":"Kb-Tay"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kb-Tay":20}},{"path":"src/test/java/seedu/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"import exception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":" public void parse_invalidEditCommandIndex_exceptionThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":" InvalidCommandException test \u003d assertThrows(InvalidCommandException.class, () -\u003e Parser.parse(\"mark hi\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":" assertEquals(\"Please input an integer to identify task\", test.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" public void parse_invalidTaskCommand_exceptionThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidCommandException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" Parser.parse(\"deadline \"));","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidCommandException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":" Parser.parse(\"deadline /\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidCommandException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":" Parser.parse(\"deadline /by 2022-05-12 24:10\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidCommandException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" Parser.parse(\"event /from 2022-5-12 23:00 /to \"));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" public void testDateTimeReformat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" assertEquals(\"Jan 1 2023 11.35PM\",","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" Parser.reformatDateTime(","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" Parser.parseDateTime(\"2023-01-01 23:35\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" public void parse_invalidEventDate_exceptionThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":" InvalidCommandException thrown \u003d assertThrows(InvalidCommandException.class, () -\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Kb-Tay"},"content":" Parser.parse(\"event party /from 2022-01-01 23:00 /to 2021-01-01 23:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Kb-Tay"},"content":" assertEquals(\"/from date should be before /to date given\", thrown.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Kb-Tay":49}},{"path":"src/test/java/seedu/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"package seedu.duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Kb-Tay"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Kb-Tay"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Kb-Tay"},"content":"import exception.InvalidIndexException;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Kb-Tay"},"content":"import task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Kb-Tay"},"content":"import task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Kb-Tay"},"content":"import task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Kb-Tay"},"content":"import task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Kb-Tay"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Kb-Tay"},"content":" public void editTask_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Kb-Tay"},"content":" ArrayList\u003cTask\u003e taskLists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Kb-Tay"},"content":" taskLists.add(new ToDo(\"return book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Kb-Tay"},"content":" TaskList tasks \u003d new TaskList(taskLists);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidIndexException.class, () -\u003e tasks.editTask(\"mark\", -1));","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Kb-Tay"},"content":" assertThrows(InvalidIndexException.class, () -\u003e tasks.editTask(\"mark\", 100));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Kb-Tay"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Kb-Tay"},"content":" public void testFileStringFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Kb-Tay"},"content":" ArrayList\u003cTask\u003e taskLists \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Kb-Tay"},"content":" ToDo task1 \u003d new ToDo(\"return book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Kb-Tay"},"content":" task1.markTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Kb-Tay"},"content":" taskLists.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Kb-Tay"},"content":" taskLists.add(new Deadline(\"buy supplies\", \"Jan 5 23 7.30PM\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Kb-Tay"},"content":" taskLists.add(new Event(\"host party\", \"Jan 5 23 7.30PM\", \"Jan 6 23 1.00AM\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Kb-Tay"},"content":" TaskList tasks \u003d new TaskList(taskLists);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Kb-Tay"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Kb-Tay"},"content":" assertEquals(\"T | 1 | return book\\n\" + \"D | 0 | buy supplies | Jan 5 23 7.30PM\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Kb-Tay"},"content":" + \"E | 0 | host party | Jan 5 23 7.30PM-Jan 6 23 1.00AM\", tasks.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Kb-Tay"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Kb-Tay"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Kb-Tay":44}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kb-Tay"},"content":"todo borrow book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"Kb-Tay"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"Kb-Tay"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"Kb-Tay"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"Kb-Tay"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Kb-Tay"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Kb-Tay":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":"-"},"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":"Kb-Tay"},"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":{"Kb-Tay":1,"-":20}}] diff --git a/Kb-Tay_ip_master/commits.json b/Kb-Tay_ip_master/commits.json index 210a7f80..75f1690f 100644 --- a/Kb-Tay_ip_master/commits.json +++ b/Kb-Tay_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Kb-Tay":[{"date":"2023-08-20","commitResults":[{"hash":"ff6bab316cec99c3636f11e7a8ca7ad03cf44e47","isMergeCommit":false,"messageTitle":"Renaming chatbot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"8169de03a3100de43bec063c3e1a47243a6423ed","isMergeCommit":false,"messageTitle":"Add echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"3470757ed176d8d152de2b5809173149e85bd7f6","isMergeCommit":false,"messageTitle":"Add tasklist","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}},{"hash":"319d9ef8ced4fd7c934fcb3c2bef19d229f44d7f","isMergeCommit":false,"messageTitle":"Add Task Class, mark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":11}}}]},{"date":"2023-08-21","commitResults":[{"hash":"5f343d062c891a7896c11d8f3b9361240b1114dd","isMergeCommit":false,"messageTitle":"Added tasks subclasses","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":13}}},{"hash":"3ea48d41fdbc127903cd8ac62313cfa1f383193e","isMergeCommit":false,"messageTitle":"Add Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":4,"deletions":4}}},{"hash":"c7d1cdaf67617bbe72379aea60faea7f4f83414e","isMergeCommit":false,"messageTitle":"Error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":31}}}]},{"date":"2023-08-22","commitResults":[{"hash":"30ae6852f44607436ff7eb531487c11c8c88c729","isMergeCommit":false,"messageTitle":"Add delete function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":18}}}]},{"date":"2023-08-24","commitResults":[{"hash":"1b9a8da969f84f3eba25a8db67b929d988488f40","isMergeCommit":false,"messageTitle":"Add javadocs. Update error handling","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":198,"deletions":30}}}]},{"date":"2023-08-28","commitResults":[{"hash":"50a16df1e26d7a8ffa6ca74f5daefece4b05b5a3","isMergeCommit":false,"messageTitle":"Add functionality to read and write tasks into txt file.","messageBody":"The program does not currently save the user input after program is stopped.\n\nTo save user input, add functions to read previously stored task list from txt file. Also add function to write new task list into the txt file.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":165,"deletions":51}}},{"hash":"c9c488f7c376ccfa1687cad4ea41eb26eb7f815c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"3883e0848558e5f31283b18ab3635d765b0dd23e","isMergeCommit":false,"messageTitle":"Update chatbot to recognise DateTime inputs.","messageBody":"The addTask function accepted any string as a DateTime field previously.\n\nAdd validation and formatting of DateTime inputs.\n","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":3}}},{"hash":"9a6653060bfafa5a1023116918f29422ff7624a0","isMergeCommit":false,"messageTitle":"Clean up addTask function. Add javadocs for functions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":20,"deletions":15}}},{"hash":"1c875128f885a1c98a17012c407553f3a46c4a7b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"a23208e822b3dbacdd9a036d028289f4380d7d43","isMergeCommit":false,"messageTitle":"Update code to follow OOP principles.","messageBody":"Code was previously cluster in the main class and could make improvements in encapsulation.\n\nMultiple classes created to encapsulate user interactions, reading and writing files, understanding user input and the task list.\n\nThis cleans up and improves code quality.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":654,"deletions":265}}},{"hash":"fca7278b963eba3ec196407ad9be7ae469dbba88","isMergeCommit":false,"messageTitle":"Update javadocs and clean up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":247}}},{"hash":"95a48a9c320913ce2401f2bfa3349e5ca45b7706","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"8d7c9a6c5fceeba35ebab3a0102f40c51ecac565","isMergeCommit":false,"messageTitle":"Update classes into separate packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":131,"deletions":84},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3648ccc812764c7fdd226c5b38d52ef7124d6aab","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"748e9f36386cb724fa0ec0e2ef30dfc19abfa882","isMergeCommit":false,"messageTitle":"Add Junit testing for Parse and TaskList class.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":167,"deletions":20}}},{"hash":"aa325b708c9d1e73d3467c06ac78dba993369f5d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Junit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"f44f52456503168439f7de24312ce37fbe309537","isMergeCommit":false,"messageTitle":"Update error message and build.gradle file.","messageBody":"","tags":["v0.1","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"fc83787d2720c3362e6cc486e162c7aa5f3a785a","isMergeCommit":false,"messageTitle":"Update javadocs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"6e8ea7dca9fce5bc4584b965e27b5c9c1c717b40","isMergeCommit":false,"messageTitle":"Add find command to search tasks.","messageBody":"User unable to filter task based on description.\n\nAdd a new user command find for user to filter tasks by inputing keyword matching task description.\n","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":0}}},{"hash":"8b12715d41d358eb5a46c4d8209df10c5b4b78d1","isMergeCommit":false,"messageTitle":"Update style for main and test files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":86,"deletions":61}}},{"hash":"db22438301afbaf1293a47e5676501b96fbbede7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 into branch-A-Javadoc.","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e62198cca5932d4122d32e38fdb74992bb01c855","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 into branch-A-Javadoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"89310600ef2cdd468c1d0506d8b6f40e571f8f20","isMergeCommit":false,"messageTitle":"Clean up code and update code style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":26}}},{"hash":"351adde6e2ebc7ccbfb8e6f7ab0892e707135655","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","tags":["Level-9","A-Javadoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"cf98cf3ac848f8cd919fe40cc656048942809913","isMergeCommit":false,"messageTitle":"Add a GUI for the chat bot.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":206,"deletions":80}}},{"hash":"623ac74273a802acf7a20c304495457033841b45","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"0e661d6a0189840f2dda5fa4806065949337f31b","isMergeCommit":false,"messageTitle":"Change access of fields in Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"8d9f859c94e196f92b410190310d7e9e4748325a","isMergeCommit":false,"messageTitle":"Add assertions and enum for commands","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":43,"deletions":12}}},{"hash":"566abf13be8caa39d1510d3a5f6a14201c3887ef","isMergeCommit":false,"messageTitle":"Improve readability of Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":31}}},{"hash":"a8e968e9ce9bae0d544ecfe431432395426dd093","isMergeCommit":false,"messageTitle":"Add enums and refactor Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":60}}}]},{"date":"2023-09-13","commitResults":[{"hash":"cb88375df0dfe0c4d70d3b1d47c3c5a63730c910","isMergeCommit":false,"messageTitle":"Clean up strings returned","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":5},"java":{"insertions":22,"deletions":20}}}]},{"date":"2023-09-14","commitResults":[{"hash":"293e15860a8a732bd9f5fabe3b8788b435806f23","isMergeCommit":false,"messageTitle":"Add command to remind user of upcoming tasks.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5},"java":{"insertions":117,"deletions":28}}},{"hash":"4154b92fd4f4402784562fb3bedc22aabb680615","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Kb-Tay/branch-A-Assertions","messageBody":"Branch a assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"855c698bdc792698cc2af787f8e8358ffa193873","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4dddfa61bbb96e2d2ffb9583f95ac710553135b4","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Kb-Tay/branch-A-CodeQuality","messageBody":"Branch a code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"bc50fbdbe057e5d782289b1220fac530f3bb8206","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-B-Reminders","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"eef0707726b89e92bfae375dcc6c486142862bb3","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Kb-Tay/branch-B-Reminders","messageBody":"Branch b reminders","tags":["B-Reminders"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Kb-Tay":{"java":1448,"md":2,"fxml":36,"sh":0,"bat":1,"gradle":21,"txt":9}},"authorContributionVariance":{"Kb-Tay":88238.234},"authorDisplayNameMap":{"Kb-Tay":"CS2103T-F12-1 AARO..BOON"}} +{"authorDailyContributionsMap":{"Kb-Tay":[{"date":"2023-08-20","commitResults":[{"hash":"ff6bab316cec99c3636f11e7a8ca7ad03cf44e47","isMergeCommit":false,"messageTitle":"Renaming chatbot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"8169de03a3100de43bec063c3e1a47243a6423ed","isMergeCommit":false,"messageTitle":"Add echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"3470757ed176d8d152de2b5809173149e85bd7f6","isMergeCommit":false,"messageTitle":"Add tasklist","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}},{"hash":"319d9ef8ced4fd7c934fcb3c2bef19d229f44d7f","isMergeCommit":false,"messageTitle":"Add Task Class, mark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":11}}}]},{"date":"2023-08-21","commitResults":[{"hash":"5f343d062c891a7896c11d8f3b9361240b1114dd","isMergeCommit":false,"messageTitle":"Added tasks subclasses","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":13}}},{"hash":"3ea48d41fdbc127903cd8ac62313cfa1f383193e","isMergeCommit":false,"messageTitle":"Add Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":4,"deletions":4}}},{"hash":"c7d1cdaf67617bbe72379aea60faea7f4f83414e","isMergeCommit":false,"messageTitle":"Error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":31}}}]},{"date":"2023-08-22","commitResults":[{"hash":"30ae6852f44607436ff7eb531487c11c8c88c729","isMergeCommit":false,"messageTitle":"Add delete function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":18}}}]},{"date":"2023-08-24","commitResults":[{"hash":"1b9a8da969f84f3eba25a8db67b929d988488f40","isMergeCommit":false,"messageTitle":"Add javadocs. Update error handling","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":198,"deletions":30}}}]},{"date":"2023-08-28","commitResults":[{"hash":"50a16df1e26d7a8ffa6ca74f5daefece4b05b5a3","isMergeCommit":false,"messageTitle":"Add functionality to read and write tasks into txt file.","messageBody":"The program does not currently save the user input after program is stopped.\n\nTo save user input, add functions to read previously stored task list from txt file. Also add function to write new task list into the txt file.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":165,"deletions":51}}},{"hash":"c9c488f7c376ccfa1687cad4ea41eb26eb7f815c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"3883e0848558e5f31283b18ab3635d765b0dd23e","isMergeCommit":false,"messageTitle":"Update chatbot to recognise DateTime inputs.","messageBody":"The addTask function accepted any string as a DateTime field previously.\n\nAdd validation and formatting of DateTime inputs.\n","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":3}}},{"hash":"9a6653060bfafa5a1023116918f29422ff7624a0","isMergeCommit":false,"messageTitle":"Clean up addTask function. Add javadocs for functions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":20,"deletions":15}}},{"hash":"1c875128f885a1c98a17012c407553f3a46c4a7b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"a23208e822b3dbacdd9a036d028289f4380d7d43","isMergeCommit":false,"messageTitle":"Update code to follow OOP principles.","messageBody":"Code was previously cluster in the main class and could make improvements in encapsulation.\n\nMultiple classes created to encapsulate user interactions, reading and writing files, understanding user input and the task list.\n\nThis cleans up and improves code quality.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":654,"deletions":265}}},{"hash":"fca7278b963eba3ec196407ad9be7ae469dbba88","isMergeCommit":false,"messageTitle":"Update javadocs and clean up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":247}}},{"hash":"95a48a9c320913ce2401f2bfa3349e5ca45b7706","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"8d7c9a6c5fceeba35ebab3a0102f40c51ecac565","isMergeCommit":false,"messageTitle":"Update classes into separate packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":131,"deletions":84},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3648ccc812764c7fdd226c5b38d52ef7124d6aab","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"748e9f36386cb724fa0ec0e2ef30dfc19abfa882","isMergeCommit":false,"messageTitle":"Add Junit testing for Parse and TaskList class.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":167,"deletions":20}}},{"hash":"aa325b708c9d1e73d3467c06ac78dba993369f5d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Junit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"f44f52456503168439f7de24312ce37fbe309537","isMergeCommit":false,"messageTitle":"Update error message and build.gradle file.","messageBody":"","tags":["v0.1","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"fc83787d2720c3362e6cc486e162c7aa5f3a785a","isMergeCommit":false,"messageTitle":"Update javadocs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"6e8ea7dca9fce5bc4584b965e27b5c9c1c717b40","isMergeCommit":false,"messageTitle":"Add find command to search tasks.","messageBody":"User unable to filter task based on description.\n\nAdd a new user command find for user to filter tasks by inputing keyword matching task description.\n","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":0}}},{"hash":"8b12715d41d358eb5a46c4d8209df10c5b4b78d1","isMergeCommit":false,"messageTitle":"Update style for main and test files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":86,"deletions":61}}},{"hash":"db22438301afbaf1293a47e5676501b96fbbede7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 into branch-A-Javadoc.","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e62198cca5932d4122d32e38fdb74992bb01c855","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 into branch-A-Javadoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"89310600ef2cdd468c1d0506d8b6f40e571f8f20","isMergeCommit":false,"messageTitle":"Clean up code and update code style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":26}}},{"hash":"351adde6e2ebc7ccbfb8e6f7ab0892e707135655","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","tags":["Level-9","A-Javadoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"cf98cf3ac848f8cd919fe40cc656048942809913","isMergeCommit":false,"messageTitle":"Add a GUI for the chat bot.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":206,"deletions":80}}},{"hash":"623ac74273a802acf7a20c304495457033841b45","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"0e661d6a0189840f2dda5fa4806065949337f31b","isMergeCommit":false,"messageTitle":"Change access of fields in Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"8d9f859c94e196f92b410190310d7e9e4748325a","isMergeCommit":false,"messageTitle":"Add assertions and enum for commands","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":43,"deletions":12}}},{"hash":"566abf13be8caa39d1510d3a5f6a14201c3887ef","isMergeCommit":false,"messageTitle":"Improve readability of Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":31}}},{"hash":"a8e968e9ce9bae0d544ecfe431432395426dd093","isMergeCommit":false,"messageTitle":"Add enums and refactor Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":60}}}]},{"date":"2023-09-13","commitResults":[{"hash":"cb88375df0dfe0c4d70d3b1d47c3c5a63730c910","isMergeCommit":false,"messageTitle":"Clean up strings returned","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":5},"java":{"insertions":22,"deletions":20}}}]},{"date":"2023-09-14","commitResults":[{"hash":"293e15860a8a732bd9f5fabe3b8788b435806f23","isMergeCommit":false,"messageTitle":"Add command to remind user of upcoming tasks.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5},"java":{"insertions":117,"deletions":28}}},{"hash":"4154b92fd4f4402784562fb3bedc22aabb680615","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Kb-Tay/branch-A-Assertions","messageBody":"Branch a assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"855c698bdc792698cc2af787f8e8358ffa193873","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4dddfa61bbb96e2d2ffb9583f95ac710553135b4","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Kb-Tay/branch-A-CodeQuality","messageBody":"Branch a code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"bc50fbdbe057e5d782289b1220fac530f3bb8206","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-B-Reminders","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"eef0707726b89e92bfae375dcc6c486142862bb3","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Kb-Tay/branch-B-Reminders","messageBody":"Branch b reminders","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"f76b18e6fd4c062e70632e26e85615028cdd1d02","isMergeCommit":false,"messageTitle":"Clean up merges in the Parser class.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":4,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"Kb-Tay":{"java":1449,"md":2,"fxml":36,"sh":0,"bat":1,"gradle":21,"txt":10}},"authorContributionVariance":{"Kb-Tay":83404.18},"authorDisplayNameMap":{"Kb-Tay":"CS2103T-F12-1 AARO..BOON"}} diff --git a/Kevin-Liusx_ip_master/authorship.json b/Kevin-Liusx_ip_master/authorship.json index 4fcf8bfa..42097699 100644 --- a/Kevin-Liusx_ip_master/authorship.json +++ b/Kevin-Liusx_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"# Kevin.Kevin 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":"Kevin-Liusx"},"content":"3. After that, locate the `src/main/java/Kevin.Kevin.java` file, right-click it, and choose `Run Kevin.Kevin.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-14"},{"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":{"Kevin-Liusx":2,"-":22}},{"path":"src/main/java/Database.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"[T][ ] run","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kevin-Liusx":1}},{"path":"src/main/java/Kevin/Exception/DescriptionIncompleteException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Exception;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"public class DescriptionIncompleteException extends Exception{","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":" public DescriptionIncompleteException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kevin-Liusx":7}},{"path":"src/main/java/Kevin/Exception/IllegalCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Exception;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"public class IllegalCommandException extends Exception{","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":" public IllegalCommandException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kevin-Liusx":7}},{"path":"src/main/java/Kevin/Exception/TaskListEmptyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Exception;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"public class TaskListEmptyException extends Exception{","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":" public TaskListEmptyException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kevin-Liusx":7}},{"path":"src/main/java/Kevin/Kevin.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Parser.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Storage.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.TaskList.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":"public class Kevin{","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" private static final String filePath \u003d \"src/main/java/Database.txt\";","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" private Ui ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" private Storage storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" public Kevin(String filePath) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" storage \u003d new Storage(filePath, this.taskList);","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" taskList \u003d new TaskList(storage.load(), this.storage);","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (FileNotFoundException fileException) {","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" storage.createNewFile();","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" public void run() {","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" this.ui.printGreetMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" String userCommand \u003d ui.readUserCommand();","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" Parser.parse(userCommand, this.taskList, this.ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" isExit \u003d Parser.getIsExit();","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" new Kevin(filePath).run();","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Kevin-Liusx":40}},{"path":"src/main/java/Kevin/Parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.TaskList.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.TaskListEmptyException;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.DescriptionIncompleteException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.IllegalCommandException;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"public class Parser {","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" private static boolean isExit \u003d false;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" public static void parse(String userCommand, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" String[] splitMessage \u003d userCommand.split(\" \");","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" String instruction \u003d splitMessage[0];","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" switch (instruction) {","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" case \"bye\":","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" isExit \u003d true;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" ui.printByeMessage();","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" case \"list\":","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" // Prints out the list","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.listAllTasks();","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.markTaskDone(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.unmarkTaskDone(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.deleteTask(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (TaskListEmptyException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" // Add new tasks to the task list","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.addNewTask(userCommand);","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (DescriptionIncompleteException | IllegalCommandException e1) {","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(e1.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"OOPS!!! You have entered a wrong date format.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Please follow this format:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"yyyy-mm-dd\");","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"Kevin-Liusx"},"content":" public static boolean getIsExit() {","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"Kevin-Liusx"},"content":" return Parser.isExit;","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kevin-Liusx":64}},{"path":"src/main/java/Kevin/Storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.TaskList.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Task.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.File;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":"public class Storage {","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" private String filePath;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" public Storage(String filePath, TaskList taskList) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" public ArrayList\u003cTask\u003e load() throws FileNotFoundException {","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" String nextLine \u003d scanner.nextLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" readString(nextLine, taskList);","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" return taskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" public void readString(String string, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" String string1 \u003d string.substring(0,6);","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" char taskType \u003d string1.charAt(1);","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" boolean isDone \u003d string1.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" if (taskType \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":" String description \u003d string.substring(7);","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.add(new Todo(description, isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":" } else if (taskType \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" String[] split \u003d string.split(\" \\\\(by: \");","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" String description \u003d split[0].substring(7);","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":" LocalDate day \u003d LocalDate.parse(split[1].substring(0, split[1].length() - 1));","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.add(new Deadline(description, day, isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"Kevin-Liusx"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"Kevin-Liusx"},"content":" String[] split1 \u003d string.split(\" \\\\(from: \");","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"Kevin-Liusx"},"content":" String[] split2 \u003d split1[1].split(\" to: \");","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"Kevin-Liusx"},"content":" String description \u003d split1[0].substring(7);","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"Kevin-Liusx"},"content":" String start \u003d split2[0];","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"Kevin-Liusx"},"content":" String end \u003d split2[1].substring(0, split2[1].length() - 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.add(new Event(description, LocalDate.parse(start), LocalDate.parse(end), isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"Kevin-Liusx"},"content":" public void writeToFile(String taskDetail) throws IOException {","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"Kevin-Liusx"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"Kevin-Liusx"},"content":" fileWriter.write(taskDetail + \"\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"Kevin-Liusx"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"Kevin-Liusx"},"content":" public void createNewFile(){","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"We have detected that you\u0027re missing the database file\");","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"Kevin-Liusx"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"Kevin-Liusx"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"File created successfully\");","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"Kevin-Liusx"},"content":" public void rewriteFile() {","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"Kevin-Liusx"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"Kevin-Liusx"},"content":" for (Task task: taskList.getTasks()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"Kevin-Liusx"},"content":" fileWriter.write(task.toString() + \"\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"Kevin-Liusx"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kevin-Liusx":86}},{"path":"src/main/java/Kevin/Task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":" private LocalDate day;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" private Deadline(String description, LocalDate day) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" this.day \u003d day;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" public Deadline(String description, LocalDate day, boolean isDone) {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" this.day \u003d day;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" public static Deadline createNewDeadlineTask(String description) throws DateTimeParseException{","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" String[] splitMessage \u003d description.split(\" /by \");","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" LocalDate date \u003d LocalDate.parse(splitMessage[1]);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" return new Deadline(splitMessage[0], date);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" this.day.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.day + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Kevin-Liusx":38}},{"path":"src/main/java/Kevin/Task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":" private LocalDate startTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":" private LocalDate endTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":" private Event(String description, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" public Event(String description, LocalDate startTime, LocalDate endTime, boolean isDone) {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" public static Event createNewEventTask(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" String[] splitMessage1 \u003d description.split(\" /from \");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" String[] splitMessage2 \u003d splitMessage1[1].split(\" /to \");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" return new Event(splitMessage1[0], LocalDate.parse(splitMessage2[0]), LocalDate.parse(splitMessage2[1]));","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[E]\" + super.toString() + \" (from: \" +","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" this.startTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) +","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" \" to: \" +","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" this.endTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.startTime + \" to: \" + this.endTime + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Kevin-Liusx":41}},{"path":"src/main/java/Kevin/Task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[\" + this.getStatusIcon() + \"]\" + \" \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" public void setIsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" public void setNotDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[\" + this.getStatusIcon() + \"]\" + \" \" + this.description;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Kevin-Liusx":32}},{"path":"src/main/java/Kevin/Task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" public static Todo createNewTodoTask(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" return new Todo(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Kevin-Liusx":27}},{"path":"src/main/java/Kevin/TaskList/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Storage.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Task.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.TaskListEmptyException;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.DescriptionIncompleteException;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.IllegalCommandException;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":"public class TaskList {","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" private Storage storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Storage storage) {","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" this.tasks \u003d taskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" public void listAllTasks() {","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line + \"\\n\" + \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" String string \u003d String.format(\"%d.%s\", count, task);","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(string);","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" count++;","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" public void deleteTask(String taskNumber) throws TaskListEmptyException {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" if (tasks.size() \u003c 1) {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" throw new TaskListEmptyException(\"OOPS!!! You cannot delete an empty list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" int number \u003d Integer.parseInt(taskNumber);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(tasks.get(number - 1));","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":" tasks.remove(number - 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" // Update the file","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" storage.rewriteFile();","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"Kevin-Liusx"},"content":" public void markTaskDone(String taskNumber) {","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"Kevin-Liusx"},"content":" Task currentTask \u003d tasks.get(Integer.parseInt(taskNumber) - 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"Kevin-Liusx"},"content":" currentTask.setIsDone();","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"Kevin-Liusx"},"content":" storage.rewriteFile();","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\" + currentTask);","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"Kevin-Liusx"},"content":" public void unmarkTaskDone(String taskNumber) {","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"Kevin-Liusx"},"content":" Task currentTask \u003d tasks.get(Integer.parseInt(taskNumber) - 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"Kevin-Liusx"},"content":" currentTask.setNotDone();","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"Kevin-Liusx"},"content":" storage.rewriteFile();","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Nice! I\u0027ve unmarked this task as done:\\n\" + currentTask);","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"Kevin-Liusx"},"content":" public void addNewTask(String userInput) throws DescriptionIncompleteException, IllegalCommandException {","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"Kevin-Liusx"},"content":" String[] splitMessage \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"Kevin-Liusx"},"content":" String instruction \u003d splitMessage[0];","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"Kevin-Liusx"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"Kevin-Liusx"},"content":" if (!(instruction.equals(\"todo\")||instruction.equals(\"deadline\")||instruction.equals(\"event\"))) {","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"Kevin-Liusx"},"content":" throw new IllegalCommandException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-()\");","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"Kevin-Liusx"},"content":" if (splitMessage.length \u003c 2) {","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"Kevin-Liusx"},"content":" throw new DescriptionIncompleteException(\"OOPS!!! The description of an instruction cannot be empty.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"Kevin-Liusx"},"content":" switch (instruction) {","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"Kevin-Liusx"},"content":" case \"todo\":","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"Kevin-Liusx"},"content":" task \u003d Todo.createNewTodoTask(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"Kevin-Liusx"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"Kevin-Liusx"},"content":" task \u003d Deadline.createNewDeadlineTask(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"Kevin-Liusx"},"content":" case \"event\":","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"Kevin-Liusx"},"content":" task \u003d Event.createNewEventTask(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"Kevin-Liusx"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"Kevin-Liusx"},"content":" storage.writeToFile(task.toFileString());","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (IOException error) {","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(error.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n\" + task);","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"Kevin-Liusx"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-14"},{"lineNumber":107,"author":{"gitId":"Kevin-Liusx"},"content":" return this.tasks;","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":109,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kevin-Liusx":109}},{"path":"src/main/java/Kevin/Ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"public class Ui {","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":" public static final String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":" public void printGreetMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":" String greet \u003d line + \"\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":" + \"Hello! I\u0027m Kevin.Kevin.\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" + line;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(greet);","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" public void printByeMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" String bye \u003d line + \"\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" + \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" + line;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" public String readUserCommand() {","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kevin-Liusx":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"todo borrow book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"mark 1","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"unmark 1","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"bye","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kevin-Liusx":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":"java -classpath ..\\bin Kevin.Kevin \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-14"},{"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":{"Kevin-Liusx":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"# Kevin.Kevin 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":"Kevin-Liusx"},"content":"3. After that, locate the `src/main/java/Kevin.Kevin.java` file, right-click it, and choose `Run Kevin.Kevin.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-14"},{"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":{"Kevin-Liusx":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" archiveBaseName \u003d \"kevin\"","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" archiveFileName \u003d \u0027kevin.jar\u0027","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":"mainClassName \u003d \u0027Kevin.Kevin\u0027","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kevin-Liusx":4,"-":41}},{"path":"src/main/java/Database.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"[T][X] return book","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"[D][ ] return book (by: 2021-02-22)","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"Kevin-Liusx":2}},{"path":"src/main/java/Kevin/Exception/DescriptionIncompleteException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Exception;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"public class DescriptionIncompleteException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":" public DescriptionIncompleteException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kevin-Liusx":7}},{"path":"src/main/java/Kevin/Exception/IllegalCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Exception;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"public class IllegalCommandException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":" public IllegalCommandException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kevin-Liusx":7}},{"path":"src/main/java/Kevin/Exception/TaskListEmptyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Exception;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"public class TaskListEmptyException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":" public TaskListEmptyException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Kevin-Liusx":7}},{"path":"src/main/java/Kevin/Kevin.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Parser.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Storage.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.TaskList.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" * Encapsulates the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":"public class Kevin{","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" private static final String filePath \u003d \"src/main/java/Database.txt\";","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" private Ui ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" private Storage storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" * Default constructor for this chabot.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" * @param filePath This is the file path to which the tasks will be stored at.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" public Kevin(String filePath) {","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" this.taskList \u003d new TaskList(storage.load(), this.storage);","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (FileNotFoundException fileException) {","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" storage.createNewFile();","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" * This method is automatically called to","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" * start the conversation with the bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" public void run() {","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" this.ui.printGreetMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" String userCommand \u003d ui.readUserCommand();","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" Parser.parse(userCommand, this.taskList, this.ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":" isExit \u003d Parser.getIsExit();","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"Kevin-Liusx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"Kevin-Liusx"},"content":" new Kevin(filePath).run();","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Kevin-Liusx":52}},{"path":"src/main/java/Kevin/Parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Parser;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.TaskList.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.TaskListEmptyException;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.DescriptionIncompleteException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.IllegalCommandException;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" * A class which deals with making sense of the user command","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":"public class Parser {","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" private static boolean isExit \u003d false;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" * This static method takes in user command and","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" * performs tasks specific to that command.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" * @param userCommand User command","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" * @param taskList A taskList object","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" * @param ui An Ui object","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" public static void parse(String userCommand, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" String[] splitMessage \u003d userCommand.split(\" \");","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" String instruction \u003d splitMessage[0];","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" switch (instruction) {","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" case \"bye\":","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" isExit \u003d true;","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" ui.printByeMessage();","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" case \"list\":","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" // Prints out the list","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.listAllTasks();","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" case \"mark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.markTaskDone(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.unmarkTaskDone(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":" case \"delete\":","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.deleteTask(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (TaskListEmptyException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"Kevin-Liusx"},"content":" case \"find\":","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.findTask(splitMessage[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"Kevin-Liusx"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"Kevin-Liusx"},"content":" // Add new tasks to the task list","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.addNewTask(userCommand);","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (DescriptionIncompleteException | IllegalCommandException e1) {","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(e1.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"OOPS!!! You have entered a wrong date format.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Please follow this format:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"yyyy-mm-dd\");","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"Kevin-Liusx"},"content":" public static boolean getIsExit() {","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"Kevin-Liusx"},"content":" return Parser.isExit;","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kevin-Liusx":75}},{"path":"src/main/java/Kevin/Storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.TaskList.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Task.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.File;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"import java.lang.reflect.Array;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" * A class which deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":"public class Storage {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" private String filePath;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" * Default constructor method.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" * @param filePath The file where tasks are going to be written on.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" * This method loads the data from the hard disk to an array list.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" * @return An array list of task objects.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" * @throws FileNotFoundException If file is not found.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" public ArrayList\u003cTask\u003e load() throws FileNotFoundException {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":" String nextLine \u003d scanner.nextLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":" readString(nextLine, taskList);","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" return taskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"Kevin-Liusx"},"content":" private void readString(String string, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"Kevin-Liusx"},"content":" String string1 \u003d string.substring(0,6);","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"Kevin-Liusx"},"content":" char taskType \u003d string1.charAt(1);","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"Kevin-Liusx"},"content":" boolean isDone \u003d string1.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"Kevin-Liusx"},"content":" if (taskType \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"Kevin-Liusx"},"content":" String description \u003d string.substring(7);","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.add(new Todo(description, isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"Kevin-Liusx"},"content":" } else if (taskType \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"Kevin-Liusx"},"content":" String[] split \u003d string.split(\" \\\\(by: \");","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"Kevin-Liusx"},"content":" String description \u003d split[0].substring(7);","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"Kevin-Liusx"},"content":" LocalDate day \u003d LocalDate.parse(split[1].substring(0, split[1].length() - 1));","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.add(new Deadline(description, day, isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"Kevin-Liusx"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"Kevin-Liusx"},"content":" String[] split1 \u003d string.split(\" \\\\(from: \");","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"Kevin-Liusx"},"content":" String[] split2 \u003d split1[1].split(\" to: \");","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"Kevin-Liusx"},"content":" String description \u003d split1[0].substring(7);","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"Kevin-Liusx"},"content":" String start \u003d split2[0];","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"Kevin-Liusx"},"content":" String end \u003d split2[1].substring(0, split2[1].length() - 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"Kevin-Liusx"},"content":" taskList.add(new Event(description, LocalDate.parse(start), LocalDate.parse(end), isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"Kevin-Liusx"},"content":" * This method writes the tasks into the file given by the path.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"Kevin-Liusx"},"content":" * @param taskDetail Description of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"Kevin-Liusx"},"content":" * @throws IOException If file does not exist and cannot be created.","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"Kevin-Liusx"},"content":" public void writeToFile(String taskDetail) throws IOException {","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"Kevin-Liusx"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"Kevin-Liusx"},"content":" fileWriter.write(taskDetail + \"\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"Kevin-Liusx"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"Kevin-Liusx"},"content":" public void createNewFile() {","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"We have detected that you\u0027re missing the database file\");","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"Kevin-Liusx"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"Kevin-Liusx"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"File created successfully\");","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"Kevin-Liusx"},"content":" public void rewriteFile(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"Kevin-Liusx"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"Kevin-Liusx"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"Kevin-Liusx"},"content":" fileWriter.write(task.toString() + \"\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"Kevin-Liusx"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kevin-Liusx":105}},{"path":"src/main/java/Kevin/Task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":" private LocalDate day;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" private Deadline(String description, LocalDate day) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" this.day \u003d day;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" * Default constructor method.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" * @param description Description of this deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" * @param day The date this task is due.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" * @param isDone Status of this task, either done or not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" public Deadline(String description, LocalDate day, boolean isDone) {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" this.day \u003d day;","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" * This is a factory method which generates an Deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" * @param description Description of this Deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" * @return The Deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" public static Deadline createNewDeadlineTask(String description) throws DateTimeParseException {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" String[] splitMessage \u003d description.split(\" /by \");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" LocalDate date \u003d LocalDate.parse(splitMessage[1]);","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" return new Deadline(splitMessage[0], date);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" this.day.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"Kevin-Liusx"},"content":" * This method returns the string representation of this Deadline task","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"Kevin-Liusx"},"content":" * in a format which can be stored in the hard disk.","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"Kevin-Liusx"},"content":" * @return The string representation of this Deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"Kevin-Liusx"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.day + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Kevin-Liusx":57}},{"path":"src/main/java/Kevin/Task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":" private LocalDate startTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":" private LocalDate endTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":" private Event(String description, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" * Default constructor method.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" * @param description Description of this event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" * @param startTime The starting time of this event.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" * @param endTime The ending time of this event.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" * @param isDone Status of this task, either done or not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" public Event(String description, LocalDate startTime, LocalDate endTime, boolean isDone) {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" * This is a factory method which generates an Event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" * @param description Description of this Event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" * @return The Event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" public static Event createNewEventTask(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" String[] splitMessage1 \u003d description.split(\" /from \");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" String[] splitMessage2 \u003d splitMessage1[1].split(\" /to \");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":" return new Event(splitMessage1[0], LocalDate.parse(splitMessage2[0]), LocalDate.parse(splitMessage2[1]));","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[E]\" + super.toString() + \" (from: \" +","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Kevin-Liusx"},"content":" this.startTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) +","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Kevin-Liusx"},"content":" \" to: \" +","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Kevin-Liusx"},"content":" this.endTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"Kevin-Liusx"},"content":" * This method returns the string representation of this Event task","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"Kevin-Liusx"},"content":" * in a format which can be stored in the hard disk.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"Kevin-Liusx"},"content":" * @return The string representation of this Event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"Kevin-Liusx"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.startTime + \" to: \" + this.endTime + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Kevin-Liusx":61}},{"path":"src/main/java/Kevin/Task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":" * Encapsulates the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" * This method returns the status of this task.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" * @return A string \"X\" if it is done otherwise an empty string.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" * This method sets the status of this task to be done.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" public void setIsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" * This method sets the status of this task to be not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" public void setNotDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" return this.description;","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[\" + this.getStatusIcon() + \"]\" + \" \" + this.description;","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"Kevin-Liusx"},"content":" public String toString() {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[\" + this.getStatusIcon() + \"]\" + \" \" + this.description;","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Kevin-Liusx":50}},{"path":"src/main/java/Kevin/Task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":" private Todo(String description) {","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":" * Default constructor method.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" * @param description Description of this todo task.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" * @param isDone Status of this task, either done or not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" super(description);","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":" * This is a factory method which generates a Todo task.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" * @param description Description of this Todo task.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" * @return The Todo task.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" public static Todo createNewTodoTask(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" return new Todo(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" * This method returns the string representation of this Todo task","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" * in a format which can be stored in the hard disk.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" * @return The string representation of this Todo task.","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Kevin-Liusx":45}},{"path":"src/main/java/Kevin/TaskList/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Storage.Storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Task.*;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.TaskListEmptyException;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.DescriptionIncompleteException;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Exception.IllegalCommandException;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" * This class contains the task list","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" * e.g., it has operations to add/delete tasks in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":"public class TaskList {","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" private Storage storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Storage storage) {","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" this.tasks \u003d taskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" * Lists out all the tasks in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" public void listAllTasks() {","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line + \"\\n\" + \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" String string \u003d String.format(\"%d.%s\", count, task);","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(string);","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" count++;","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"Kevin-Liusx"},"content":" * This method deletes a task specified by the parameter.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"Kevin-Liusx"},"content":" * @param taskNumber Index of the task to be deleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"Kevin-Liusx"},"content":" * @throws TaskListEmptyException If there is no task in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"Kevin-Liusx"},"content":" public void deleteTask(String taskNumber) throws TaskListEmptyException {","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"Kevin-Liusx"},"content":" if (tasks.size() \u003c 1) {","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"Kevin-Liusx"},"content":" throw new TaskListEmptyException(\"OOPS!!! You cannot delete an empty list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"Kevin-Liusx"},"content":" int number \u003d Integer.parseInt(taskNumber);","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(tasks.get(number - 1));","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"Kevin-Liusx"},"content":" tasks.remove(number - 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"Kevin-Liusx"},"content":" // Update the file","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"Kevin-Liusx"},"content":" storage.rewriteFile(this.tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"Kevin-Liusx"},"content":" * This method marks a specific task to be done.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"Kevin-Liusx"},"content":" * @param taskNumber Index of the task to be marked.","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"Kevin-Liusx"},"content":" public void markTaskDone(String taskNumber) {","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"Kevin-Liusx"},"content":" Task currentTask \u003d tasks.get(Integer.parseInt(taskNumber) - 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"Kevin-Liusx"},"content":" currentTask.setIsDone();","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"Kevin-Liusx"},"content":" storage.rewriteFile(this.tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\" + currentTask);","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"Kevin-Liusx"},"content":" * This method marks a specific task to be not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"Kevin-Liusx"},"content":" * @param taskNumber Index of the task to be marked.","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"Kevin-Liusx"},"content":" public void unmarkTaskDone(String taskNumber) {","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"Kevin-Liusx"},"content":" Task currentTask \u003d tasks.get(Integer.parseInt(taskNumber) - 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"Kevin-Liusx"},"content":" currentTask.setNotDone();","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"Kevin-Liusx"},"content":" storage.rewriteFile(this.tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Nice! I\u0027ve unmarked this task as done:\\n\" + currentTask);","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"Kevin-Liusx"},"content":" * This method adds a new task into the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"Kevin-Liusx"},"content":" * @param userInput Task description.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"Kevin-Liusx"},"content":" * @throws DescriptionIncompleteException If the description does not follow the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"Kevin-Liusx"},"content":" * @throws IllegalCommandException If an undefined command is entered.","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"Kevin-Liusx"},"content":" public void addNewTask(String userInput) throws DescriptionIncompleteException, IllegalCommandException {","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"Kevin-Liusx"},"content":" String[] splitMessage \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"Kevin-Liusx"},"content":" String instruction \u003d splitMessage[0];","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"Kevin-Liusx"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"Kevin-Liusx"},"content":" if (!(instruction.equals(\"todo\")||instruction.equals(\"deadline\")||instruction.equals(\"event\"))) {","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"Kevin-Liusx"},"content":" throw new IllegalCommandException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-()\");","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"Kevin-Liusx"},"content":" if (splitMessage.length \u003c 2) {","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"Kevin-Liusx"},"content":" throw new DescriptionIncompleteException(\"OOPS!!! The description of an instruction cannot be empty.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":107,"author":{"gitId":"Kevin-Liusx"},"content":" switch (instruction) {","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"Kevin-Liusx"},"content":" case \"todo\":","lastModifiedDate":"2023-09-14"},{"lineNumber":109,"author":{"gitId":"Kevin-Liusx"},"content":" task \u003d Todo.createNewTodoTask(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":110,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":111,"author":{"gitId":"Kevin-Liusx"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"Kevin-Liusx"},"content":" task \u003d Deadline.createNewDeadlineTask(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"Kevin-Liusx"},"content":" case \"event\":","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"Kevin-Liusx"},"content":" task \u003d Event.createNewEventTask(splitMessage[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":116,"author":{"gitId":"Kevin-Liusx"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":117,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":118,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":119,"author":{"gitId":"Kevin-Liusx"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"Kevin-Liusx"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":121,"author":{"gitId":"Kevin-Liusx"},"content":" storage.writeToFile(task.toFileString());","lastModifiedDate":"2023-09-14"},{"lineNumber":122,"author":{"gitId":"Kevin-Liusx"},"content":" } catch (IOException error) {","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(error.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":126,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n\" + task);","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-14"},{"lineNumber":129,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":130,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":131,"author":{"gitId":"Kevin-Liusx"},"content":" public void findTask(String keyword) {","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"Kevin-Liusx"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"Kevin-Liusx"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"Kevin-Liusx"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(count + \".\" + task);","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"Kevin-Liusx"},"content":" count++;","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(Ui.line);","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"Kevin-Liusx"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-14"},{"lineNumber":144,"author":{"gitId":"Kevin-Liusx"},"content":" return this.tasks;","lastModifiedDate":"2023-09-14"},{"lineNumber":145,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":146,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kevin-Liusx":146}},{"path":"src/main/java/Kevin/Ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":" * This class deals with interactions with the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"public class Ui {","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":" public static final String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" * This method prints the greeting message.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" public void printGreetMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" String greet \u003d line + \"\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" + \"Hello! I\u0027m Kevin.Kevin.\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" + line;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(greet);","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"Kevin-Liusx"},"content":" * This method prints the bye message.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"Kevin-Liusx"},"content":" public void printByeMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"Kevin-Liusx"},"content":" String bye \u003d line + \"\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"Kevin-Liusx"},"content":" + \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"Kevin-Liusx"},"content":" + line;","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"Kevin-Liusx"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"Kevin-Liusx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"Kevin-Liusx"},"content":" * This method reads in user command.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"Kevin-Liusx"},"content":" * @return the command entered by the user, and it is passed to the parser.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"Kevin-Liusx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"Kevin-Liusx"},"content":" public String readUserCommand() {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"Kevin-Liusx"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"Kevin-Liusx"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"Kevin-Liusx":40}},{"path":"src/test/java/Kevin/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Task.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":"public class EventTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" Assertions.assertEquals(\"[E][ ] project meeting (from: Dec 1 2021 to: Dec 2 2021)\",","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":" new Event(\"project meeting\",","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Kevin-Liusx"},"content":" LocalDate.parse(\"2021-12-01\"),","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":" LocalDate.parse(\"2021-12-02\"), false).toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Kevin-Liusx":20}},{"path":"src/test/java/Kevin/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"package Kevin;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"import Kevin.Task.Todo;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Kevin-Liusx"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Kevin-Liusx"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Kevin-Liusx"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Kevin-Liusx"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Kevin-Liusx"},"content":" Assertions.assertEquals(\"[T][ ] return book\",","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Kevin-Liusx"},"content":" new Todo(\"return book\", false).toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Kevin-Liusx"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Kevin-Liusx"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Kevin-Liusx":16}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kevin-Liusx"},"content":"todo borrow book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kevin-Liusx"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kevin-Liusx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kevin-Liusx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kevin-Liusx"},"content":"mark 1","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kevin-Liusx"},"content":"unmark 1","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kevin-Liusx"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kevin-Liusx"},"content":"bye","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kevin-Liusx":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Kevin-Liusx"},"content":"java -classpath ..\\bin Kevin.Kevin \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-14"},{"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":{"Kevin-Liusx":1,"-":20}}] diff --git a/Kevin-Liusx_ip_master/commits.json b/Kevin-Liusx_ip_master/commits.json index 2ff3169c..674390c1 100644 --- a/Kevin-Liusx_ip_master/commits.json +++ b/Kevin-Liusx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Kevin-Liusx":[{"date":"2023-08-27","commitResults":[{"hash":"4ad1d7b6a8d8ee46763561f1f046d09e3bf6af41","isMergeCommit":false,"messageTitle":"Implemented an initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"a7de9bc18102d6564375feba92633af7b01434d5","isMergeCommit":false,"messageTitle":"Improve the skeletal version of Duke","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"1c538dda276cda9dd9744003f40d8ddbd454d888","isMergeCommit":false,"messageTitle":"Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":7}}},{"hash":"3698ed79a2fb3d563f7d4d83855c007ee53e1af9","isMergeCommit":false,"messageTitle":"Add the ability to mark tasks as done. Optionally, add the ability to change the status back to not done.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":46},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a989c3040eb87f1a3176435f75bbeb1b9d211d88","isMergeCommit":false,"messageTitle":"Fixed some problem with level 3","messageBody":"","tags":["Level-3.1"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"1561d91828885aa177d4e10316d654a5635dff74","isMergeCommit":false,"messageTitle":"Add support for tracking three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":32}}}]},{"date":"2023-08-30","commitResults":[{"hash":"1fd179770af6395815fa14732164298716bcfaf3","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"270757b2e4532d96af0428189f780eb0d6f80e13","isMergeCommit":false,"messageTitle":"Teach the chatbot to deal with errors such as incorrect inputs entered by the user.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":11}}}]},{"date":"2023-09-03","commitResults":[{"hash":"a39720f4f8d44d252d50375a2064a73af16de5f1","isMergeCommit":false,"messageTitle":"Use the input/output redirection technique to semi-automate the testing of Duke.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-09-06","commitResults":[{"hash":"906ca3895f31ea94d9850d0643b4f62c5167e6c8","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes. Load the data from the hard disk when the chatbot starts up.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":104,"deletions":8}}},{"hash":"da22d27769fb2cab740adc639fbb6a9ad96e2326","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"6c62c2df8d7d0315beaae4ab6c618e9f3bb10793","isMergeCommit":false,"messageTitle":"Teach the chatbot how to understand dates and times.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":48,"deletions":15}}},{"hash":"237affe307d591bbb481c2b1058eb6d69dc2ece0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"14b4e745b0dc05c8b57563ebc8b60f63ca431c67","isMergeCommit":false,"messageTitle":"Finish A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":285,"deletions":220}}},{"hash":"57ff9853a62487e21fde823ff1d96ab4f55901ab","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b319e3f72113d6d49f5114a4c0aa44d53736d04d","isMergeCommit":false,"messageTitle":"Finish A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":5},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-15","commitResults":[{"hash":"cd04fb3b5523b856c5862b527584a93d2591dc54","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"bf4673e5d1ee23e0897cab13e6da97247885ec63","isMergeCommit":false,"messageTitle":"Finish A-Gradle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"Kevin-Liusx":{"java":484,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":9}},"authorContributionVariance":{"Kevin-Liusx":12627.592},"authorDisplayNameMap":{"Kevin-Liusx":"CS2103T-W12-2 LIU ..IXIN"}} +{"authorDailyContributionsMap":{"Kevin-Liusx":[{"date":"2023-08-27","commitResults":[{"hash":"4ad1d7b6a8d8ee46763561f1f046d09e3bf6af41","isMergeCommit":false,"messageTitle":"Implemented an initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"a7de9bc18102d6564375feba92633af7b01434d5","isMergeCommit":false,"messageTitle":"Improve the skeletal version of Duke","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"1c538dda276cda9dd9744003f40d8ddbd454d888","isMergeCommit":false,"messageTitle":"Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":7}}},{"hash":"3698ed79a2fb3d563f7d4d83855c007ee53e1af9","isMergeCommit":false,"messageTitle":"Add the ability to mark tasks as done. Optionally, add the ability to change the status back to not done.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":46},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a989c3040eb87f1a3176435f75bbeb1b9d211d88","isMergeCommit":false,"messageTitle":"Fixed some problem with level 3","messageBody":"","tags":["Level-3.1"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"1561d91828885aa177d4e10316d654a5635dff74","isMergeCommit":false,"messageTitle":"Add support for tracking three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":32}}}]},{"date":"2023-08-30","commitResults":[{"hash":"1fd179770af6395815fa14732164298716bcfaf3","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"270757b2e4532d96af0428189f780eb0d6f80e13","isMergeCommit":false,"messageTitle":"Teach the chatbot to deal with errors such as incorrect inputs entered by the user.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":11}}}]},{"date":"2023-09-03","commitResults":[{"hash":"a39720f4f8d44d252d50375a2064a73af16de5f1","isMergeCommit":false,"messageTitle":"Use the input/output redirection technique to semi-automate the testing of Duke.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-09-06","commitResults":[{"hash":"906ca3895f31ea94d9850d0643b4f62c5167e6c8","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes. Load the data from the hard disk when the chatbot starts up.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":104,"deletions":8}}},{"hash":"da22d27769fb2cab740adc639fbb6a9ad96e2326","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"6c62c2df8d7d0315beaae4ab6c618e9f3bb10793","isMergeCommit":false,"messageTitle":"Teach the chatbot how to understand dates and times.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":48,"deletions":15}}},{"hash":"237affe307d591bbb481c2b1058eb6d69dc2ece0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"14b4e745b0dc05c8b57563ebc8b60f63ca431c67","isMergeCommit":false,"messageTitle":"Finish A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":285,"deletions":220}}},{"hash":"57ff9853a62487e21fde823ff1d96ab4f55901ab","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b319e3f72113d6d49f5114a4c0aa44d53736d04d","isMergeCommit":false,"messageTitle":"Finish A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":5},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-15","commitResults":[{"hash":"cd04fb3b5523b856c5862b527584a93d2591dc54","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"bf4673e5d1ee23e0897cab13e6da97247885ec63","isMergeCommit":false,"messageTitle":"Finish A-Gradle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"d457e8595407a785249b779ce37ae074cc9b3c04","isMergeCommit":false,"messageTitle":"Finish A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"1a5fd1849a84cc8f7c88e1d68a057834f468515f","isMergeCommit":false,"messageTitle":"Finish A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1}}}]},{"date":"2023-09-16","commitResults":[{"hash":"6ed211607e0dfbe380da92e21bceb511c69e40ff","isMergeCommit":false,"messageTitle":"Finish A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":158,"deletions":5}}},{"hash":"b1601a328eea0122ba7381591137dadf39c6712a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"df5fd6ee620c1f6c4c084f77d46b0df7749736c6","isMergeCommit":false,"messageTitle":"Finish A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":11}}},{"hash":"0bfdbf35d7641d410a37de10ce24596e0059dd38","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Kevin/Task/Deadline.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c730f540ad3d78ffd12cb2e8870975e87b444687","isMergeCommit":false,"messageTitle":"Finish Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":34,"deletions":16}}}]}]},"authorFileTypeContributionMap":{"Kevin-Liusx":{"java":688,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":4,"txt":10}},"authorContributionVariance":{"Kevin-Liusx":13337.69},"authorDisplayNameMap":{"Kevin-Liusx":"CS2103T-W12-2 LIU ..IXIN"}} diff --git a/Kurtyjlee_ip_master/commits.json b/Kurtyjlee_ip_master/commits.json index 80d90715..cb7deb41 100644 --- a/Kurtyjlee_ip_master/commits.json +++ b/Kurtyjlee_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Kurtyjlee":[{"date":"2023-08-21","commitResults":[{"hash":"e3cc57a4dcbb1162c2c7aa49c1a973f4a3f002e5","isMergeCommit":false,"messageTitle":"level-0","messageBody":"","tags":["level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"3c1db11b7a1c2f5c4d44ed60ff573dd06e18f37c","isMergeCommit":false,"messageTitle":"level-1, echo","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":5}}},{"hash":"826fc362666f8cced54d7cc999b69aabfdfe6d8e","isMergeCommit":false,"messageTitle":"level-2, Add, List","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":13}}},{"hash":"3d908bdb84b3345003aaedc71815808a6cf85bc6","isMergeCommit":false,"messageTitle":"level-3, mark as done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":7}}},{"hash":"b983b47580dbdcecfdeecb4898dcf644615187fb","isMergeCommit":false,"messageTitle":"level-3, added text for tasks in list","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-22","commitResults":[{"hash":"cb69db05236bfadc2ba2412c601f65cf1c721dc3","isMergeCommit":false,"messageTitle":"level-4, todos, events and deadlines","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":41}}},{"hash":"789dfe9bab4b9843b51b97882f8d3efd7ec23f08","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"b4e3f2b388970beacaac3a1918b4b28250bc094e","isMergeCommit":false,"messageTitle":"level-5, handle errors for invalid inputs:","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0}}},{"hash":"0d329ca5e4dbd9402b2b21fe9ae0b578d725c183","isMergeCommit":false,"messageTitle":"level-6 delete","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"217c6fad3125912d0ef00877c9bb6fcc157b9bd2","isMergeCommit":false,"messageTitle":"A-Enums, edited code and added enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"15bfc2a975b10ebc509696db6208c82f6de4569c","isMergeCommit":false,"messageTitle":"finalised changes ip week 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":152,"deletions":95}}}]},{"date":"2023-08-29","commitResults":[{"hash":"345a466543c37e241266f84d187ba8bd9fbcc298","isMergeCommit":false,"messageTitle":"Implement level-7, storing data into a txt file","messageBody":"","tags":["level-7"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":6},"sh":{"insertions":12,"deletions":10}}},{"hash":"b0199ebd0a98ef7eaab81deac04d0e39cf9ffb57","isMergeCommit":false,"messageTitle":"store objects instead of string into .ser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":55}}},{"hash":"e9aa8363ba2f0f6e558654347802ca69731ac417","isMergeCommit":false,"messageTitle":"Implement level-8, processing date values for deadline","messageBody":"","tags":["level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":27,"deletions":48},"sh":{"insertions":2,"deletions":1}}},{"hash":"b38ee00b8aa1f1908f66461c4e25bf1a3fd5884e","isMergeCommit":false,"messageTitle":"Add TaskList, Storage and Ui for more oop","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":246,"deletions":217}}},{"hash":"c6b820d00e505552a5a87b8ff316ce8e2066933b","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":72},"sh":{"insertions":7,"deletions":1}}},{"hash":"f0b99d88a18b302c73381dc5683abb3096872cbd","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"e3a0f7a51e1ad3ac069ed8dedd2e039888649d33","isMergeCommit":false,"messageTitle":"edit packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":14}}},{"hash":"2a31a5a771dfe60893c4e9a3b55c2eaeeb77da9e","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027remotes/upstream/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2394e50c18d21390d41b08f47da71463efd69e4a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027remotes/upstream/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"170b9aa92dd275c0b023d36c7b18d7a2604f72cb","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"800a5c83f608ff5b77913bdac5edbeaa71e55c84","isMergeCommit":false,"messageTitle":"A-JUnit, test for TaskList and Deadline","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":92,"deletions":1}}},{"hash":"569b4aca61ad291c2a5f8e70a744692929afed1b","isMergeCommit":false,"messageTitle":"A-JavaDoc, create JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":163,"deletions":0}}},{"hash":"4954da080c3d5507afc39512ebddf45d2d0be8a8","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":30}}},{"hash":"7dd4a1c03ea4e9852a9d14bfbb65fb183899c153","isMergeCommit":false,"messageTitle":"Level-9, find items","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"sh":{"insertions":2,"deletions":2}}},{"hash":"5bc2d3dd8704a86c58ace85477c2b357fb4418f9","isMergeCommit":false,"messageTitle":"Implement slight changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"dde2466061336af4dce7171b6a528d89fae4ec4d","isMergeCommit":true,"messageTitle":"fix conflicts","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"cc8a514a10e31a4b65a3f2fb4eb7f3c74384a219","isMergeCommit":true,"messageTitle":"fix conflicts between origin and branch-A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ae9d497764cc08a31c09a826611ac4413814ce1a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c8bc6f039ded7fc4c536b621bde672b5a25d82b8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"684594d90c1b689c55ec911adbc5d28c9c0f7d55","isMergeCommit":false,"messageTitle":"fix level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"51311bc124c1229dc72e8699a5257fd7d2d8f4e8","isMergeCommit":false,"messageTitle":"Fix keep running bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":4}}}]},{"date":"2023-09-06","commitResults":[{"hash":"f6ddf2279c2ac7a1dada0e8765ac954e6e523aaa","isMergeCommit":false,"messageTitle":"create barebones gui for CringeBot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":169,"deletions":1}}},{"hash":"745011e606eae7887d732acace0759cc6d7aced6","isMergeCommit":false,"messageTitle":"refactor with packages","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":48,"deletions":24}}},{"hash":"853621dfd9b3c8aa737b492292c18fc6b35c1ffb","isMergeCommit":false,"messageTitle":"Add duke features to JavaFX gui","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":125}}}]},{"date":"2023-09-07","commitResults":[{"hash":"974f0831b9c4bf555228ea4323e8995d1dd4715e","isMergeCommit":false,"messageTitle":"add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":22}}},{"hash":"c0b1cb647bd61a71e32d832a19cce99a8ddd4cb2","isMergeCommit":false,"messageTitle":"fix find items display bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"69e1174f826708d6abc01af97654ad2d5c9a03cf","isMergeCommit":false,"messageTitle":"Change Duke class and duke package to CringeBot and cringebot","messageBody":"- Update the cringebot package and all its dependencies\n- Update the CringeBot class and all its dependencies\n","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":50,"deletions":52}}},{"hash":"f216c20d8b2ac451e852e5d55f640676f9e92121","isMergeCommit":false,"messageTitle":"Remove all mentions of Duke","messageBody":"- Remove all mentions of Duke and changed project to CringeBot\n","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":42},"sh":{"insertions":1,"deletions":1}}},{"hash":"d301a1b0e710956ef229c8fb7b5400db2a2d94a4","isMergeCommit":false,"messageTitle":"Refactor code and improve code quality - Fix naming - Fix bad indentation for switches - Change overly long string operations - Update JavaDocs comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":77}}},{"hash":"4f45e68c49515ff01062ca22b74b4d7d35901b21","isMergeCommit":false,"messageTitle":"Implement checkstyle - Change code to meet checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":43,"deletions":50}}},{"hash":"b933ced51d94be1df6eb7bf5a338bbcd8655e79e","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"- Add assertions to storage and inputs\n","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"c1741923c914bbaf24312dab4f59252957cae743","isMergeCommit":true,"messageTitle":"Merge pull request #2","messageBody":"Improve code quality of CringeBot","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"f9024c78aee8460860e7ba40e1aa828ce729c85b","isMergeCommit":true,"messageTitle":"merge master to branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e17c266437908d3faf9f8d9698c35a82bd73fca3","isMergeCommit":true,"messageTitle":"Merge pull request #1","messageBody":"Add assertions to CringeBot","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"5888c8151f22dfae9929860db482b83822f3aff9","isMergeCommit":false,"messageTitle":"fix and refactor test files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":11}}},{"hash":"f406a3c2df28c722f4827f0df14e0d2bd5f7230d","isMergeCommit":false,"messageTitle":"Add recurring feature for deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":134,"deletions":2}}},{"hash":"120637a521621a71cd004f4a55c95887dafd802b","isMergeCommit":true,"messageTitle":"Merge pull request #4","messageBody":"Add recurring feature for deadline","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Kurtyjlee":{"java":1123,"md":0,"fxml":35,"sh":15,"bat":0,"gradle":22,"txt":21}},"authorContributionVariance":{"Kurtyjlee":58815.723},"authorDisplayNameMap":{"Kurtyjlee":"CS2103T-T12-2 KURT.. JIE"}} +{"authorDailyContributionsMap":{"Kurtyjlee":[{"date":"2023-08-21","commitResults":[{"hash":"e3cc57a4dcbb1162c2c7aa49c1a973f4a3f002e5","isMergeCommit":false,"messageTitle":"level-0","messageBody":"","tags":["level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"3c1db11b7a1c2f5c4d44ed60ff573dd06e18f37c","isMergeCommit":false,"messageTitle":"level-1, echo","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":5}}},{"hash":"826fc362666f8cced54d7cc999b69aabfdfe6d8e","isMergeCommit":false,"messageTitle":"level-2, Add, List","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":13}}},{"hash":"3d908bdb84b3345003aaedc71815808a6cf85bc6","isMergeCommit":false,"messageTitle":"level-3, mark as done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":7}}},{"hash":"b983b47580dbdcecfdeecb4898dcf644615187fb","isMergeCommit":false,"messageTitle":"level-3, added text for tasks in list","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-22","commitResults":[{"hash":"cb69db05236bfadc2ba2412c601f65cf1c721dc3","isMergeCommit":false,"messageTitle":"level-4, todos, events and deadlines","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":41}}},{"hash":"789dfe9bab4b9843b51b97882f8d3efd7ec23f08","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"b4e3f2b388970beacaac3a1918b4b28250bc094e","isMergeCommit":false,"messageTitle":"level-5, handle errors for invalid inputs:","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0}}},{"hash":"0d329ca5e4dbd9402b2b21fe9ae0b578d725c183","isMergeCommit":false,"messageTitle":"level-6 delete","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"217c6fad3125912d0ef00877c9bb6fcc157b9bd2","isMergeCommit":false,"messageTitle":"A-Enums, edited code and added enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"15bfc2a975b10ebc509696db6208c82f6de4569c","isMergeCommit":false,"messageTitle":"finalised changes ip week 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":152,"deletions":95}}}]},{"date":"2023-08-29","commitResults":[{"hash":"345a466543c37e241266f84d187ba8bd9fbcc298","isMergeCommit":false,"messageTitle":"Implement level-7, storing data into a txt file","messageBody":"","tags":["level-7"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":6},"sh":{"insertions":12,"deletions":10}}},{"hash":"b0199ebd0a98ef7eaab81deac04d0e39cf9ffb57","isMergeCommit":false,"messageTitle":"store objects instead of string into .ser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":55}}},{"hash":"e9aa8363ba2f0f6e558654347802ca69731ac417","isMergeCommit":false,"messageTitle":"Implement level-8, processing date values for deadline","messageBody":"","tags":["level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":27,"deletions":48},"sh":{"insertions":2,"deletions":1}}},{"hash":"b38ee00b8aa1f1908f66461c4e25bf1a3fd5884e","isMergeCommit":false,"messageTitle":"Add TaskList, Storage and Ui for more oop","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":246,"deletions":217}}},{"hash":"c6b820d00e505552a5a87b8ff316ce8e2066933b","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":72},"sh":{"insertions":7,"deletions":1}}},{"hash":"f0b99d88a18b302c73381dc5683abb3096872cbd","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"e3a0f7a51e1ad3ac069ed8dedd2e039888649d33","isMergeCommit":false,"messageTitle":"edit packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":14}}},{"hash":"2a31a5a771dfe60893c4e9a3b55c2eaeeb77da9e","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027remotes/upstream/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2394e50c18d21390d41b08f47da71463efd69e4a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027remotes/upstream/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"170b9aa92dd275c0b023d36c7b18d7a2604f72cb","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"800a5c83f608ff5b77913bdac5edbeaa71e55c84","isMergeCommit":false,"messageTitle":"A-JUnit, test for TaskList and Deadline","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":92,"deletions":1}}},{"hash":"569b4aca61ad291c2a5f8e70a744692929afed1b","isMergeCommit":false,"messageTitle":"A-JavaDoc, create JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":163,"deletions":0}}},{"hash":"4954da080c3d5507afc39512ebddf45d2d0be8a8","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":30}}},{"hash":"7dd4a1c03ea4e9852a9d14bfbb65fb183899c153","isMergeCommit":false,"messageTitle":"Level-9, find items","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"sh":{"insertions":2,"deletions":2}}},{"hash":"5bc2d3dd8704a86c58ace85477c2b357fb4418f9","isMergeCommit":false,"messageTitle":"Implement slight changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"dde2466061336af4dce7171b6a528d89fae4ec4d","isMergeCommit":true,"messageTitle":"fix conflicts","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"cc8a514a10e31a4b65a3f2fb4eb7f3c74384a219","isMergeCommit":true,"messageTitle":"fix conflicts between origin and branch-A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ae9d497764cc08a31c09a826611ac4413814ce1a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c8bc6f039ded7fc4c536b621bde672b5a25d82b8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"684594d90c1b689c55ec911adbc5d28c9c0f7d55","isMergeCommit":false,"messageTitle":"fix level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"51311bc124c1229dc72e8699a5257fd7d2d8f4e8","isMergeCommit":false,"messageTitle":"Fix keep running bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":4}}}]},{"date":"2023-09-06","commitResults":[{"hash":"f6ddf2279c2ac7a1dada0e8765ac954e6e523aaa","isMergeCommit":false,"messageTitle":"create barebones gui for CringeBot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":169,"deletions":1}}},{"hash":"745011e606eae7887d732acace0759cc6d7aced6","isMergeCommit":false,"messageTitle":"refactor with packages","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":48,"deletions":24}}},{"hash":"853621dfd9b3c8aa737b492292c18fc6b35c1ffb","isMergeCommit":false,"messageTitle":"Add duke features to JavaFX gui","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":125}}}]},{"date":"2023-09-07","commitResults":[{"hash":"974f0831b9c4bf555228ea4323e8995d1dd4715e","isMergeCommit":false,"messageTitle":"add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":22}}},{"hash":"c0b1cb647bd61a71e32d832a19cce99a8ddd4cb2","isMergeCommit":false,"messageTitle":"fix find items display bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"69e1174f826708d6abc01af97654ad2d5c9a03cf","isMergeCommit":false,"messageTitle":"Change Duke class and duke package to CringeBot and cringebot","messageBody":"- Update the cringebot package and all its dependencies\n- Update the CringeBot class and all its dependencies\n","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":50,"deletions":52}}},{"hash":"f216c20d8b2ac451e852e5d55f640676f9e92121","isMergeCommit":false,"messageTitle":"Remove all mentions of Duke","messageBody":"- Remove all mentions of Duke and changed project to CringeBot\n","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":42},"sh":{"insertions":1,"deletions":1}}},{"hash":"d301a1b0e710956ef229c8fb7b5400db2a2d94a4","isMergeCommit":false,"messageTitle":"Refactor code and improve code quality - Fix naming - Fix bad indentation for switches - Change overly long string operations - Update JavaDocs comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":77}}},{"hash":"4f45e68c49515ff01062ca22b74b4d7d35901b21","isMergeCommit":false,"messageTitle":"Implement checkstyle - Change code to meet checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":43,"deletions":50}}},{"hash":"b933ced51d94be1df6eb7bf5a338bbcd8655e79e","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"- Add assertions to storage and inputs\n","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"c1741923c914bbaf24312dab4f59252957cae743","isMergeCommit":true,"messageTitle":"Merge pull request #2","messageBody":"Improve code quality of CringeBot","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"f9024c78aee8460860e7ba40e1aa828ce729c85b","isMergeCommit":true,"messageTitle":"merge master to branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e17c266437908d3faf9f8d9698c35a82bd73fca3","isMergeCommit":true,"messageTitle":"Merge pull request #1","messageBody":"Add assertions to CringeBot","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"5888c8151f22dfae9929860db482b83822f3aff9","isMergeCommit":false,"messageTitle":"fix and refactor test files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":11}}},{"hash":"f406a3c2df28c722f4827f0df14e0d2bd5f7230d","isMergeCommit":false,"messageTitle":"Add recurring feature for deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":134,"deletions":2}}},{"hash":"120637a521621a71cd004f4a55c95887dafd802b","isMergeCommit":true,"messageTitle":"Merge pull request #4","messageBody":"Add recurring feature for deadline","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Kurtyjlee":{"java":1123,"md":0,"fxml":35,"sh":15,"bat":0,"gradle":22,"txt":21}},"authorContributionVariance":{"Kurtyjlee":58815.723},"authorDisplayNameMap":{"Kurtyjlee":"CS2103T-T12-2 KURT.. JIE"}} diff --git a/LINCHENYU2030S_ip_master/authorship.json b/LINCHENYU2030S_ip_master/authorship.json index b65de65f..ba033b18 100644 --- a/LINCHENYU2030S_ip_master/authorship.json +++ b/LINCHENYU2030S_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/Alex.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"T read book 0","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"T return book 0","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"D return book /by 2023-09-06 2359 1","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"LINCHENYU2030S":3}},{"path":"src/main/java/Alex/Add.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"public enum Add {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" TODO,","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" DEADLINE,","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" EVENT","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":6}},{"path":"src/main/java/Alex/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that extends from Command class. It represents a command that is trying to add task to the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" * The instance(s) of this class can be a command trying to add a todo task, deadline task and event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" private Add addType;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" * The constructor of AddCommand when an user input string and addType is passed.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param command The user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param addType The type of add command which consist of \"TODO\", \"DEADLINE\" and \"EVENT\".","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" public AddCommand(String command, Add addType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" this.addType \u003d addType;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" * Override the method from the abstract Command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" * The execute method of AddCommand class is to actually add the task specified by user to the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" switch(this.addType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!command.substring(4, 5).equals(\" \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Please enter a todo task in the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"todo (description)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" Task todo \u003d new ToDos(command.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForTodo();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /by \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher \u003d pattern.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter a deadline task in the format: \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" \"deadline (description) /by yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" int startIndex \u003d matcher.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" int endIndex \u003d matcher.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d startIndex \u003e 9 ? command.substring(9, startIndex) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" String by \u003d command.substring(endIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" Task deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForDeadline();","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /from \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern1 \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher1 \u003d pattern1.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher1.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstStart \u003d matcher1.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstEnd \u003d matcher1.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex2 \u003d \"\\\\b /to \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern2 \u003d Pattern.compile(regex2);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher2 \u003d pattern2.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher2.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondStart \u003d matcher2.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondEnd \u003d matcher2.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d firstStart \u003e 6 ? command.substring(6, firstStart) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromTime \u003d command.substring(firstEnd, secondStart);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" String toTime \u003d command.substring(secondEnd);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":" Task event \u003d new Event(description, fromTime, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForEvent();","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":124}},{"path":"src/main/java/Alex/Alex.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Alex {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.greet();","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" String command \u003d Ui.readUserInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c \u003d Parser.parse(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" c.execute();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" new Alex().run();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":17}},{"path":"src/main/java/Alex/AlexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * An exception class that can be instantiated to represent exception related to Alex bot.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class AlexException extends Exception{","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" public AlexException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LINCHENYU2030S":12}},{"path":"src/main/java/Alex/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * An abstract class represents general command which is going to be extended from a more concrete command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" * The classes that extend from this class need to overrite the method \"public abstract void execute()\" in order","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" * to be a concrete class.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" * A common method that needs to be overriden by the class extending from Command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" public abstract void execute();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":14}},{"path":"src/main/java/Alex/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.Month;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that can be instantiated to represent the task that has a specific deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" public Deadline(String description, String by) throws AlexException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedDateTime \u003d LocalDateTime.parse(by, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to get the string representation of the deadline of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the string representation of the deadline of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getBy() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.by;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" * In contrast to getBy method, this method return the deadline of this task as a LocalDate object.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the deadline of this task as a LocalDate object.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getDueDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" String dateString \u003d this.by.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate date \u003d LocalDate.parse(dateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" return date;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" int hour \u003d parsedDateTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" int minute \u003d parsedDateTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" Month month \u003d parsedDateTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" int day \u003d parsedDateTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" int year \u003d parsedDateTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" (by: \" + hour +\":\"+ minute + \" \" + day + \" \" + month + \" \" + year + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":51}},{"path":"src/main/java/Alex/Edit.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"public enum Edit {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" MARK,","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" UNMARK,","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" DELETE","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":7}},{"path":"src/main/java/Alex/EditCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that extends from Command class. It represents a command that is trying to mark a task bo be done, unmark","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" * a task or delete a task in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" private Edit editType;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" * The constructor of EditCommand when the user input string and editType is given.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param command The user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param editType The type of edit command which consist of \"MARK\", \"UNMARK\" and \"DELETE\".","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" public EditCommand(String command, Edit editType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" this.editType \u003d editType;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" * Override the method from the abstract Command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" * The execute method of EditCommand class is to actually edit the task specified by user to the TaskList such as","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" * mark task, unmark task and delete an existing class in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" switch (this.editType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" int index \u003d Integer.parseInt(command.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" Task targetedTask \u003d TaskList.getTaskByIndex(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" targetedTask.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForMark();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" int index \u003d Integer.parseInt(command.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" Task targetedTask \u003d TaskList.getTaskByIndex(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" targetedTask.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForUnmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" int toDeleteIndex \u003d Integer.parseInt(command.substring(7, 8));","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.delete(toDeleteIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForDelete();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":80}},{"path":"src/main/java/Alex/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.Month;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that can be instantiated to represent the task that has a from date and an end date.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String fromTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String toTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedFromTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedToTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" public Event(String description, String fromTime, String toTime) throws AlexException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" this.fromTime \u003d fromTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" this.toTime \u003d toTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedFromTime \u003d LocalDateTime.parse(fromTime, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedToTime \u003d LocalDateTime.parse(toTime, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that can be used to get the start time of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the string representation of the start date of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getFromTime() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.fromTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that can be used to get the end time of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the string representation of the end time of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getToTime() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.toTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that can be used to get the start date of this task in LocalDate object.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the LocalDate object representing the start date of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getFromDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromDateString \u003d this.fromTime.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate fromDate \u003d LocalDate.parse(fromDateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" return fromDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that can be used to get the end date of this task in LocalDate object.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the LocalDate object representing the end date of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getToDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" String toDateString \u003d this.toTime.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate toDate \u003d LocalDate.parse(toDateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" return toDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromHour \u003d parsedFromTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromMinute \u003d parsedFromTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" Month fromMonth \u003d parsedFromTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromDay \u003d parsedFromTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromYear \u003d parsedFromTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" int toHour \u003d parsedToTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" int toMinute \u003d parsedToTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" Month toMonth \u003d parsedToTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" int toDay \u003d parsedToTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" int toYear \u003d parsedToTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" (from: \" + fromHour +\":\" + fromMinute + \" \" + fromDay + \" \" + fromMonth + \" \" + fromYear + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" to: \" + toHour + \":\" + toMinute + \" \" + toDay + \" \" + toMonth + \" \" + toYear + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":79}},{"path":"src/main/java/Alex/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that represents the command for exiting the execution of Alex bot.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" public ExitCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.bye();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":17}},{"path":"src/main/java/Alex/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that represents \"user command parser\" to parse the user input command string.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to parse the user input command string and return the corresponding","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" * command instance.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param command user input command string.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the corresponding command instance representing the command specified by user.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" public static Command parse(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" int commandLength \u003d command.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" if (commandLength \u003e\u003d 4 \u0026\u0026 command.substring(0, 4).equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.MARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 6 \u0026\u0026 command.substring(0, 6).equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.UNMARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 6 \u0026\u0026 command.substring(0, 6).equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.DELETE;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" View view \u003d View.LISTALL;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ViewCommand(command, view);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if(commandLength \u003d\u003d 10 \u0026\u0026 command.matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" View view \u003d View.LISTONEDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ViewCommand(command, view);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 4 \u0026\u0026 command.substring(0, 4).equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 8 \u0026\u0026 command.substring(0, 8).equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.DEADLINE;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 5 \u0026\u0026 command.substring(0, 5).equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.EVENT;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (command.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ExitCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 4 \u0026\u0026 command.substring(0, 4).equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" View view \u003d View.FIND;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ViewCommand(command, view);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new UnknownCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" return c;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":51}},{"path":"src/main/java/Alex/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that can be instantiated to represent a general task. Currently it has three subclasses which are","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" * Task, Deadline and Event classes.","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" protected boolean isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" * The constructor of Task class when the task description string is passed in.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param description task description in string.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" * @throws AlexException if an error occurs when the task description is invalid or does not make sense.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" public Task(String description) throws AlexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" description \u003d description.stripTrailing();","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The description of a task cannot be empty\";","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getStatusSymbol() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" if (isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"X\";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" return \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to know whether this task is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return A boolean value to indicate if the task is done, returns true if this task is done, false otherwise.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to get the task description of this instance of task.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the task description in string of this task instance.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to mark this task to be done.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" + this","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(tobePrinted);","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to mark this task to be done with additional parameter to specify","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" * whether or not to print the message to the user after marking.","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param printToUser A boolean parameter to indicate whether or not to print message after marking.","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" public void mark(boolean printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" if (printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" this.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to ummark this task to be undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" + this","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(tobePrinted);","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" String str \u003d \"[\" + this.getStatusSymbol() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" return str;","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":99}},{"path":"src/main/java/Alex/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class represents a \"temporary storage\" for the task(s) key in by the user every time the user run the chat bot","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" * Alex. The task(s) stored in TaskList will eventually be stored into Alex.txt by the method from UserInputStorage","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" * class after termination of Alex chatbot execution. Similarly, the user data stored in the file Alex.txt will","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" * be restored to TaskList everytimne the user initialize/run the Alex chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" private static ArrayList\u003cTask\u003e userinputs \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" private static int numberOfElements \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to get the current number of task(s) in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the current number of task(s) in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" public static int getNumberOfElements() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" return numberOfElements;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to remove all the task(s) stored in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void clearAll() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" userinputs \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements \u003d 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to store a task specified by the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param task the task object representing the task specified by the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void store(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" userinputs.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements++;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have \" + numberOfElements + \" tasks in the list.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to store a new task object into TaskList with another parameter (printToUser)","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" * of type boolean to specify whether to print the message to the user after successfully storing the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param task the task object representing the task specified by the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param printToUser a boolean parameter used to specify wheter to print the message to the user after storing.","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void store(Task task, boolean printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" if (printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" store(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" userinputs.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements++;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static that is used to get the task object in the TaskList when a task index is given. This method","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" * expects the index starting from 1.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param index the task index in the TaskList, index starting from 1.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the task instance stored in the TaskList","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" * @throws AlexException if an error occurs when passing in invalid task index.","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" public static Task getTaskByIndex(int index) throws AlexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" if (index \u003e numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! There is/are only \" + numberOfElements + \" task(s) stored\";","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (index \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Task number cannot be negative, task number starts from 0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" return userinputs.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print all the task(s) stored in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAllContent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + (i + 1) + \". \" + userinputs.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" + tobePrinted","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to remove a specific task in TaskList when the task index is given.","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param index the index of the task to be removed.","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" * @throws AlexException if an error occurs when an invalid task index is passed into this method.","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void delete(int index) throws AlexException{","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":" if (index \u003e numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! There is/are only \" + numberOfElements + \" task(s) stored\";","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (index \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Task number cannot be negative, task number starts from 0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"LINCHENYU2030S"},"content":" Task tobeRemoved \u003d userinputs.remove(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements--;","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + tobeRemoved.toString() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have 4 tasks in the list.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print all the task(s) of a specific date when a string representing","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"LINCHENYU2030S"},"content":" * that date is given.","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param date a string representing the date in which the user wants to view all the task(s) in that day.","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"LINCHENYU2030S"},"content":" * @throws DateTimeParseException if an error occurs when parsing the string representing a date.","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printTaskForDate(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"LINCHENYU2030S"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate parsedDate \u003d LocalDate.parse(date, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"LINCHENYU2030S"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"LINCHENYU2030S"},"content":" Task task \u003d userinputs.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"LINCHENYU2030S"},"content":" if (task instanceof ToDos) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"LINCHENYU2030S"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"LINCHENYU2030S"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"LINCHENYU2030S"},"content":" if (deadline.getDueDate().equals(parsedDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + count + \". \" + deadline + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"LINCHENYU2030S"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"LINCHENYU2030S"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"LINCHENYU2030S"},"content":" if (event.getFromDate().equals(parsedDate) || event.getToDate().equals(parsedDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + count + \". \" + event + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"LINCHENYU2030S"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"There is/are a total of \" + (count - 1) + \" task(s) on the give date \" + date + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"LINCHENYU2030S"},"content":" + tobePrinted","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printTaskForMatchWord(String word) {","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"LINCHENYU2030S"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b\" + word + \"\\\\b\";","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"LINCHENYU2030S"},"content":" Task task \u003d userinputs.get(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher \u003d pattern.matcher(task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"LINCHENYU2030S"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted +\u003d count + \". \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"LINCHENYU2030S"},"content":" count++;","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted +\u003d Ui.horizontalLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(tobePrinted);","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":185}},{"path":"src/main/java/Alex/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that can be instantiated to represent a task that has no deadline or there is no need to specify time.","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ToDos extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" public ToDos(String description) throws AlexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" String str \u003d \"[T]\" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" return str;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":17}},{"path":"src/main/java/Alex/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that is used to deal with user interface related stuff. Its behaviours include printing greeting message,","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" * bye message, alert for several other commands especially when the commands typed by the user is in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" public static final String horizontalLine \u003d \"_____________________________________________________________\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" private static Scanner userInputScanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print greeting message to user.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" String greeting \u003d horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Hello! I\u0027m your personal task assistant, Alex\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"What can I do for you today?\\n\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" + horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(greeting);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" UserInputStorage.loadUserDateFromFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" userInputScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print bye message to the user when the user key in command \"bye\" to terminate","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" * the execution of the chat bot Alex.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void bye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" String bye \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Bye bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" UserInputStorage.storeToFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to read user input from the standard input, right strip the user input and return","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" * that string.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String readUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput \u003d userInputScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInputStripped \u003d userInput.stripTrailing();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" return userInputStripped;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to user when the user key in the mark command in","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" * a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForMark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"To mark certain task to be done, please use the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"mark (task number in non-negative integer)\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user key in unmark command in","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" * a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForUnmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"To unmark certain task to be undone, please use the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"unmark (task number in non-negative integer)\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user key in delete command","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" * in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForDelete() {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"To delete a task, please use the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"delete (task number in non-negative integer)\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user try to add a todo task","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" * in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForTodo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Please enter a todo task in the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"todo (description)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" + message + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user try to add a deadline task","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" * in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter a deadline task in the format: \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":" \"deadline (description) /by yyyy-MM-dd HHmm\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user try to add an event task","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"LINCHENYU2030S"},"content":" * in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForEvent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user try to","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"LINCHENYU2030S"},"content":" * view the task(s) of a specific date but key in the command in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!! To view the task(s) on a specific date,please key in the date \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"LINCHENYU2030S"},"content":" \"in the format yyyy-MM-dd only.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Please also ensure that your key in date is a valid date\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Note that it is case sensitive\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"LINCHENYU2030S"},"content":" * key in unknown command.","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForUnknown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForFind() {","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!! To find task(s) with matching word, please use the following format:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" find (description)\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.horizontalLine","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":168}},{"path":"src/main/java/Alex/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that extends from Command class. The instance of this class represents a command that is not predefined","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" * or is not understand by the chat bot Alex.","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" * The constructor of UnknownCommand when an user input string is given.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param command The user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" public UnknownCommand (String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" * Override the method from the Command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" * The execute method of UnknownCommand class is used to actually print alert message to the standard output","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" * to notify the user that the command typed by the user is defined or not known by the chat bot Alex.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForUnknown();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":29}},{"path":"src/main/java/Alex/UserInputStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that is used to deal with user data storage. For example, storing all the task(s) in TaskList into","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" * the file Alex.txt after every termination of the chatbot execution. Similarly, restore all the task(s) in","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" * Alex.txt into TaskList every time when the user run the chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":"public class UserInputStorage {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" * A constant that is used to represent time format throughout this program. The time format is yyyy-MM-dd HHmm.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" public static final DateTimeFormatter TIMEFORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printFileContent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"data/Alex.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userDataFile.getParentFile().exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.getParentFile().mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" Scanner userDataScanner \u003d new Scanner(userDataFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" while (userDataScanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" String userData \u003d userDataScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(userData);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to store all the task(s) in TaskList to the file Alex.txt","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" * after every termination of the Alex bot execution.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void storeToFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" FileWriter fw \u003d new FileWriter(\"data/Alex.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" int numberOfElements \u003d TaskList.getNumberOfElements();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 1; i \u003c\u003d numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" Task task \u003d TaskList.getTaskByIndex(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" String taskInfo \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" if (task instanceof ToDos) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"T \" + task.getDescription() + (task.isDone() ? \" 1\" : \" 0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"D \" + deadline.getDescription() + \" /by \" + deadline.getBy()","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" + (task.isDone() ? \" 1\" : \" 0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"E \" + event.getDescription() + \" /from \" + event.getFromTime() + \" /to \"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" + event.getToTime() + (task.isDone() ? \" 1\" : \" 0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" if (i \u003d\u003d numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.write(taskInfo);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.write(taskInfo + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(\"User data is successfully stored\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IOException | AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(\"Something went wrong when saving users data to Alex.txt: \" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to load all the user data (task) from the file Alex.txt into TaskList","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" * every time the user start running Alex bot.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void loadUserDateFromFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"data/Alex.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userDataFile.getParentFile().exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.getParentFile().mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" Scanner userDataScanner \u003d new Scanner(userDataFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" while (userDataScanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" String userData \u003d userDataScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" userData \u003d userData.stripTrailing();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" String taskType \u003d userData.substring(0, 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" int dataLength \u003d userData.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" Task taskToBeStored \u003d new Task(\"temp\");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" int isDoneSymbol \u003d Integer.parseInt(userData.substring(dataLength - 1, dataLength));","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" boolean isDone \u003d isDoneSymbol \u003d\u003d 1 ? true : false;","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userData.substring(1, 2).equals(\" \") || (isDoneSymbol !\u003d 1 \u0026\u0026 isDoneSymbol !\u003d 0)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d userData.substring(2, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new ToDos(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a todo task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"T (description) (1/0) where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"LINCHENYU2030S"},"content":" String descriptionWithTime \u003d userData.substring(0, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /by \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher \u003d pattern.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"LINCHENYU2030S"},"content":" int startIndex \u003d matcher.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"LINCHENYU2030S"},"content":" int endIndex \u003d matcher.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d startIndex \u003e 2 ? userData.substring(2, startIndex) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"LINCHENYU2030S"},"content":" String by \u003d userData.substring(endIndex, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException | DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a deadline task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"D (description) /by yyyy-MM-dd HHmm (1/0) where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"LINCHENYU2030S"},"content":" String descriptionWithTime \u003d userData.substring(0, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /from \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern1 \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher1 \u003d pattern1.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher1.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstStart \u003d matcher1.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstEnd \u003d matcher1.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex2 \u003d \"\\\\b /to \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern2 \u003d Pattern.compile(regex2);","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher2 \u003d pattern2.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher2.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondStart \u003d matcher2.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondEnd \u003d matcher2.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d firstStart \u003e 2 ? userData.substring(2, firstStart) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromTime \u003d userData.substring(firstEnd, secondStart);","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"LINCHENYU2030S"},"content":" String toTime \u003d userData.substring(secondEnd, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new Event(description, fromTime, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException | DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for an event task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"E (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm (1/0) \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"LINCHENYU2030S"},"content":" \"where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"LINCHENYU2030S"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored.mark(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch(FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"data/Alex.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IOException e2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"LINCHENYU2030S"},"content":" System.err.println(\"The file Alex.txt does not exits and there is an error creating the file: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"LINCHENYU2030S"},"content":" + e2.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"LINCHENYU2030S"},"content":" // System.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":196,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" +\"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a todo task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"T (description) (1/0) where 1 indicates done and 0 indicates undone\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a deadline task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"D (description) /by yyyy-MM-dd HHmm (1/0) where 1 indicates done and 0 indicates undone\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a event task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"E (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm (1/0)\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"LINCHENYU2030S"},"content":" \"where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":215}},{"path":"src/main/java/Alex/View.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"public enum View {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" LISTALL,","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" LISTONEDAY,","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" FIND","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":7}},{"path":"src/main/java/Alex/ViewCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that extends from Commadn class. The instance of this class represents a command that is trying to","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" * view the existing the class in the TaskList. It includes listing all the task(s) in the TaskList, listing all the","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" * task(s) in a specific date.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ViewCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" private View viewType;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" * The constructor of ViewCommand class when the user input string and viewType is given.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param command The user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param viewType The type of view command which consist of \"LISTALL\", \"LISTONEDAY\".","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" public ViewCommand(String command, View viewType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" this.viewType \u003d viewType;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" * Override the method from Command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" * The execute method of ViewCommand class is to actually print all the task(s) in the TaskList or","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" * the task(s) of a specific date to the standard output.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" switch(this.viewType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" case LISTALL:","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.printAllContent();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" case LISTONEDAY:","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.printTaskForDate(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForDate();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" case FIND:","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" if (command.length() \u003d\u003d 4 || !command.substring(4, 5).equals(\" \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" String toMatch \u003d command.substring(5).stripTrailing();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.printTaskForMatchWord(toMatch);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForFind();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":62}},{"path":"src/test/java/Alex/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" public void parseTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput \u003d \"2023-SEP-02\";","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" assertEquals(true, c instanceof UnknownCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"LINCHENYU2030S":13}},{"path":"src/test/java/Alex/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" public void storeTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" // Redirect System.out to capture the output","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" // Try store something into TaskList and delete it","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.clearAll();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput \u003d \"todo read book\";","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" c.execute();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" // Verify the captured output","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" String expectedOutput \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"[T][ ] read book\" + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have \" + 1 + \" tasks in the list.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" String actualOutput \u003d outContent.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" public void deleteTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" // Redirect System.out to capture the output","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" // Try store something into TaskList and delete it","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.clearAll();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput1 \u003d \"todo read book\";","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c \u003d Parser.parse(userInput1);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" c.execute();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput2 \u003d \"delete 2\";","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c2 \u003d Parser.parse(userInput2);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" c2.execute();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput3 \u003d \"delete 1\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c3 \u003d Parser.parse(userInput3);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" c3.execute();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput4 \u003d \"delete 1\";","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c4 \u003d Parser.parse(userInput4);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" c4.execute();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" // Verify the captured output","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" String expectedOutput \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"[T][ ] read book\" + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have \" + 1 + \" tasks in the list.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"_____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"OOPS!!! There is/are only 1 task(s) stored\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"_____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"_____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" [T][ ] read book\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have 4 tasks in the list.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"_____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"_____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"OOPS!!! There is/are only 0 task(s) stored\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"_____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" String actualOutput \u003d outContent.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"LINCHENYU2030S":88}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"todo read book","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"event meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"deadline return book /by Friday","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"mark 2","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"mark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"list","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":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":"-"},"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":"LINCHENYU2030S"},"content":"java -classpath ../bin Alex \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":"LINCHENYU2030S"},"content":"# cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":"#dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-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":"LINCHENYU2030S"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2023-08-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":{"LINCHENYU2030S":4,"-":34}}] +[{"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":"LINCHENYU2030S"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-16"},{"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":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":"checkstyle {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LINCHENYU2030S":19,"-":42}},{"path":"data/Alex.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"T return book 0","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"T read book 1","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"E meeting /from 2023-09-25 2000 /to 2023-09-25 2200 0","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"D assigment /by 2023-09-29 2359 0","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LINCHENYU2030S":4}},{"path":"src/main/java/Alex/Add.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"public enum Add {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" TODO,","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" DEADLINE,","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" EVENT","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":6}},{"path":"src/main/java/Alex/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that extends from Command class. It represents a command that is trying to add task to the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" * The instance(s) of this class can be a command trying to add a todo task, deadline task and event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" private Add addType;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" * The constructor of AddCommand when an user input string and addType is passed.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param command The user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param addType The type of add command which consist of \"TODO\", \"DEADLINE\" and \"EVENT\".","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" public AddCommand(String command, Add addType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" this.addType \u003d addType;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" * Override the method from the abstract Command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" * The execute method of AddCommand class is to actually add the task specified by user to the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" public String execute() {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" switch(this.addType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!command.substring(4, 5).equals(\" \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Please enter a todo task in the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"todo (description)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" Task todo \u003d new ToDos(command.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d TaskList.store(todo);","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d Ui.getAlertForTodo();","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /by \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher \u003d pattern.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter a deadline task in the format: \"","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"deadline (description) /by yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" int startIndex \u003d matcher.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" int endIndex \u003d matcher.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d startIndex \u003e 9 ? command.substring(9, startIndex) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" String by \u003d command.substring(endIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" Task deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d TaskList.store(deadline);","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d Ui.getAlertForDeadline();","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /from \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern1 \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher1 \u003d pattern1.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher1.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstStart \u003d matcher1.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstEnd \u003d matcher1.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex2 \u003d \"\\\\b /to \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern2 \u003d Pattern.compile(regex2);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher2 \u003d pattern2.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher2.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondStart \u003d matcher2.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondEnd \u003d matcher2.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d firstStart \u003e 6 ? command.substring(6, firstStart) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromTime \u003d command.substring(firstEnd, secondStart);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":" String toTime \u003d command.substring(secondEnd);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":" Task event \u003d new Event(description, fromTime, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d TaskList.store(event);","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d Ui.getAlertForEvent();","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":127}},{"path":"src/main/java/Alex/Alex.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * This class represents the bot that manage our task.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Alex {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d c.execute();","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" * This method you initialize our Alex bot in command line to execute, get input from users, process input","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" * and give output to user.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" String greeting \u003d Ui.greet();","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(greeting);","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" String command \u003d Ui.readUserInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c \u003d Parser.parse(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d c.execute();","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" new Alex().run();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":38}},{"path":"src/main/java/Alex/AlexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * An exception class that can be instantiated to represent exception related to Alex bot.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class AlexException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" public AlexException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LINCHENYU2030S":12}},{"path":"src/main/java/Alex/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * An abstract class represents general command which is going to be extended from a more concrete command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" * The classes that extend from this class need to overrite the method \"public abstract void execute()\" in order","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" * to be a concrete class.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" * A common method that needs to be overriden by the class extending from Command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" public abstract String execute();","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":14}},{"path":"src/main/java/Alex/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.Month;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that can be instantiated to represent the task that has a specific deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" public Deadline(String description, String by) throws AlexException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedDateTime \u003d LocalDateTime.parse(by, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to get the string representation of the deadline of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the string representation of the deadline of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getBy() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.by;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" * In contrast to getBy method, this method return the deadline of this task as a LocalDate object.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the deadline of this task as a LocalDate object.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getDueDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" String dateString \u003d this.by.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate date \u003d LocalDate.parse(dateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" return date;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" int hour \u003d parsedDateTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" int minute \u003d parsedDateTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" Month month \u003d parsedDateTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" int day \u003d parsedDateTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" int year \u003d parsedDateTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" (by: \" + hour + \":\" + minute + \" \" + day + \" \" + month + \" \" + year + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":51}},{"path":"src/main/java/Alex/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" private Label dialog;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" private void flip() {","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" public static DialogBox getAlexDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" db.flip();","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" return db;","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LINCHENYU2030S":56}},{"path":"src/main/java/Alex/Edit.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"public enum Edit {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" MARK,","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" UNMARK,","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" DELETE","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":7}},{"path":"src/main/java/Alex/EditCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that extends from Command class. It represents a command that is trying to mark a task bo be done, unmark","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" * a task or delete a task in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" private Edit editType;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" * The constructor of EditCommand when the user input string and editType is given.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param command The user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param editType The type of edit command which consist of \"MARK\", \"UNMARK\" and \"DELETE\".","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" public EditCommand(String command, Edit editType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" this.editType \u003d editType;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" * Override the method from the abstract Command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" * The execute method of EditCommand class is to actually edit the task specified by user to the TaskList such as","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" * mark task, unmark task and delete an existing class in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" public String execute() {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" switch (this.editType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" int index \u003d Integer.parseInt(command.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" Task targetedTask \u003d TaskList.getTaskByIndex(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d targetedTask.mark();","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d Ui.getAlertForMark();","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" int index \u003d Integer.parseInt(command.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" Task targetedTask \u003d TaskList.getTaskByIndex(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d targetedTask.unmark();","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d Ui.getAlertForUnmark();","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" int toDeleteIndex \u003d Integer.parseInt(command.substring(7, 8));","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d TaskList.delete(toDeleteIndex);","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d Ui.getAlertForDelete();","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":79}},{"path":"src/main/java/Alex/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.Month;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that can be instantiated to represent the task that has a from date and an end date.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String fromTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String toTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedFromTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedToTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" public Event(String description, String fromTime, String toTime) throws AlexException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" this.fromTime \u003d fromTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" this.toTime \u003d toTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedFromTime \u003d LocalDateTime.parse(fromTime, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedToTime \u003d LocalDateTime.parse(toTime, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that can be used to get the start time of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the string representation of the start date of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getFromTime() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.fromTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that can be used to get the end time of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the string representation of the end time of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getToTime() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.toTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that can be used to get the start date of this task in LocalDate object.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the LocalDate object representing the start date of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getFromDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromDateString \u003d this.fromTime.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate fromDate \u003d LocalDate.parse(fromDateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" return fromDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that can be used to get the end date of this task in LocalDate object.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the LocalDate object representing the end date of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getToDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" String toDateString \u003d this.toTime.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate toDate \u003d LocalDate.parse(toDateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" return toDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromHour \u003d parsedFromTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromMinute \u003d parsedFromTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" Month fromMonth \u003d parsedFromTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromDay \u003d parsedFromTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromYear \u003d parsedFromTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" int toHour \u003d parsedToTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" int toMinute \u003d parsedToTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" Month toMonth \u003d parsedToTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" int toDay \u003d parsedToTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" int toYear \u003d parsedToTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" (from: \" + fromHour + \":\" + fromMinute + \" \" + fromDay + \" \" + fromMonth + \" \" + fromYear + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" to: \" + toHour + \":\" + toMinute + \" \" + toDay + \" \" + toMonth + \" \" + toYear + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":79}},{"path":"src/main/java/Alex/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that represents the command for exiting the execution of Alex bot.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" public ExitCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" public String execute() {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d Ui.bye();","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":18}},{"path":"src/main/java/Alex/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Launcher {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LINCHENYU2030S":12}},{"path":"src/main/java/Alex/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" private Alex alex \u003d new Alex();","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setAlex(alex);","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" stage.show();","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LINCHENYU2030S":33}},{"path":"src/main/java/Alex/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" private Alex alex;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" private Image alexImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaAlex.png\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" public void initialize() {","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" public void setAlex(Alex a) {","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" this.alex \u003d a;","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" // greeting","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" String alexText \u003d Ui.greet();","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" DialogBox.getAlexDialog(alexText, alexImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Alex\u0027s reply and then append","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" * them to the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" String response \u003d alex.getResponse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" DialogBox.getAlexDialog(response, alexImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" userInput.clear();","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LINCHENYU2030S":57}},{"path":"src/main/java/Alex/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that represents \"user command parser\" to parse the user input command string.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to parse the user input command string and return the corresponding","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" * command instance.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param command user input command string.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the corresponding command instance representing the command specified by user.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" public static Command parse(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" int commandLength \u003d command.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" if (commandLength \u003e\u003d 4 \u0026\u0026 command.substring(0, 4).equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.MARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 6 \u0026\u0026 command.substring(0, 6).equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.UNMARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 6 \u0026\u0026 command.substring(0, 6).equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.DELETE;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" View view \u003d View.LISTALL;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ViewCommand(command, view);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003d\u003d 10 \u0026\u0026 command.matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" View view \u003d View.LISTONEDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ViewCommand(command, view);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 4 \u0026\u0026 command.substring(0, 4).equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 8 \u0026\u0026 command.substring(0, 8).equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.DEADLINE;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 5 \u0026\u0026 command.substring(0, 5).equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.EVENT;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (command.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ExitCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 4 \u0026\u0026 command.substring(0, 4).equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" View view \u003d View.FIND;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ViewCommand(command, view);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new UnknownCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" return c;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":51}},{"path":"src/main/java/Alex/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that can be instantiated to represent a general task. Currently it has three subclasses which are","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" * Task, Deadline and Event classes.","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" protected boolean isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" * The constructor of Task class when the task description string is passed in.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param description task description in string.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" * @throws AlexException if an error occurs when the task description is invalid or does not make sense.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" public Task(String description) throws AlexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" description \u003d description.stripTrailing();","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The description of a task cannot be empty\";","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getStatusSymbol() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" if (isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"X\";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" return \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to know whether this task is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return A boolean value to indicate if the task is done, returns true if this task is done, false otherwise.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to get the task description of this instance of task.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the task description in string of this task instance.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to mark this task to be done.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" public String mark() {","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" + this;","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" return tobePrinted;","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to mark this task to be done with additional parameter to specify","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" * whether or not to print the message to the user after marking.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param printToUser A boolean parameter to indicate whether or not to print message after marking.","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" public String mark(boolean printToUser) {","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" if (printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d this.mark();","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" * A method that is used to ummark this task to be undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" public String unmark() {","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" + this;","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" return tobePrinted;","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" String str \u003d \"[\" + this.getStatusSymbol() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" return str;","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":96}},{"path":"src/main/java/Alex/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class represents a \"temporary storage\" for the task(s) key in by the user every time the user run the chat bot","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" * Alex. The task(s) stored in TaskList will eventually be stored into Alex.txt by the method from UserInputStorage","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" * class after termination of Alex chatbot execution. Similarly, the user data stored in the file Alex.txt will","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" * be restored to TaskList everytimne the user initialize/run the Alex chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" private static ArrayList\u003cTask\u003e userinputs \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" private static int numberOfElements \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to get the current number of task(s) in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the current number of task(s) in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" public static int getNumberOfElements() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" return numberOfElements;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to remove all the task(s) stored in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void clearAll() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" userinputs \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements \u003d 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to store a task specified by the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param task the task object representing the task specified by the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String store(Task task) {","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" userinputs.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements++;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have \" + numberOfElements + \" tasks in the list.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to store a new task object into TaskList with another parameter (printToUser)","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" * of type boolean to specify whether to print the message to the user after successfully storing the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param task the task object representing the task specified by the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param printToUser a boolean parameter used to specify wheter to print the message to the user after storing.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String store(Task task, boolean printToUser) {","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" if (printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d store(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" userinputs.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements++;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static that is used to get the task object in the TaskList when a task index is given. This method","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" * expects the index starting from 1.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param index the task index in the TaskList, index starting from 1.","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return the task instance stored in the TaskList","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" * @throws AlexException if an error occurs when passing in invalid task index.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" public static Task getTaskByIndex(int index) throws AlexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" if (index \u003e numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! There is/are only \" + numberOfElements + \" task(s) stored\";","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (index \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Task number cannot be negative, task number starts from 0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" return userinputs.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print all the task(s) stored in TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getAllContent() {","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + (i + 1) + \". \" + userinputs.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" return tobePrinted;","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to remove a specific task in TaskList when the task index is given.","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param index the index of the task to be removed.","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" * @throws AlexException if an error occurs when an invalid task index is passed into this method.","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String delete(int index) {","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":" if (index \u003e numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! There is/are only \" + numberOfElements + \" task(s) stored\";","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (index \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Task number cannot be negative, task number starts from 0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"LINCHENYU2030S"},"content":" Task tobeRemoved \u003d userinputs.remove(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements--;","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + tobeRemoved.toString() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have \" + getNumberOfElements() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print all the task(s) of a specific date when a string representing","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"LINCHENYU2030S"},"content":" * that date is given.","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param date a string representing the date in which the user wants to view all the task(s) in that day.","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"LINCHENYU2030S"},"content":" * @throws DateTimeParseException if an error occurs when parsing the string representing a date.","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getTaskForDate(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"LINCHENYU2030S"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate parsedDate \u003d LocalDate.parse(date, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"LINCHENYU2030S"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"LINCHENYU2030S"},"content":" Task task \u003d userinputs.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"LINCHENYU2030S"},"content":" if (task instanceof ToDos) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"LINCHENYU2030S"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"LINCHENYU2030S"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"LINCHENYU2030S"},"content":" if (deadline.getDueDate().equals(parsedDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + count + \". \" + deadline + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"LINCHENYU2030S"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"LINCHENYU2030S"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"LINCHENYU2030S"},"content":" if (event.getFromDate().equals(parsedDate) || event.getToDate().equals(parsedDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + count + \". \" + event + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"LINCHENYU2030S"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d \"There is/are a total of \" + (count - 1) + \" task(s) on the give date \" + date + \":\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"LINCHENYU2030S"},"content":" + tobePrinted;","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getTaskForMatchWord(String word) {","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"LINCHENYU2030S"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b\" + word + \"\\\\b\";","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"LINCHENYU2030S"},"content":" Task task \u003d userinputs.get(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher \u003d pattern.matcher(task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"LINCHENYU2030S"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted +\u003d count + \". \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"LINCHENYU2030S"},"content":" count++;","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"LINCHENYU2030S"},"content":" return tobePrinted;","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":180}},{"path":"src/main/java/Alex/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that can be instantiated to represent a task that has no deadline or there is no need to specify time.","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" public ToDos(String description) throws AlexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" String str \u003d \"[T]\" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" return str;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":17}},{"path":"src/main/java/Alex/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that is used to deal with user interface related stuff. Its behaviours include printing greeting message,","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" * bye message, alert for several other commands especially when the commands typed by the user is in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" private static Scanner userInputScanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print greeting message to user.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String greet() {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" String greeting \u003d \"Hello! I\u0027m your personal task assistant, Alex\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"What can I do for you today?\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" UserInputStorage.loadUserDateFromFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" userInputScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" return greeting;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print bye message to the user when the user key in command \"bye\" to terminate","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" * the execution of the chat bot Alex.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String bye() {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" String bye \u003d \"Bye bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" String isStored \u003d UserInputStorage.storeToFile();","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" return bye + isStored;","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to read user input from the standard input, right strip the user input and return","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" * that string.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" * @return user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String readUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput \u003d userInputScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInputStripped \u003d userInput.stripTrailing();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" return userInputStripped;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to user when the user key in the mark command in","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" * a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getAlertForMark() {","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"To mark certain task to be done, please use the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"mark (task number in non-negative integer)\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user key in unmark command in","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" * a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getAlertForUnmark() {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"To unmark certain task to be undone, please use the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"unmark (task number in non-negative integer)\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user key in delete command","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" * in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getAlertForDelete() {","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"To delete a task, please use the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"delete (task number in non-negative integer)\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user try to add a todo task","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" * in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getAlertForTodo() {","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Please enter a todo task in the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"todo (description)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user try to add a deadline task","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" * in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getAlertForDeadline() {","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter a deadline task in the format: \"","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"deadline (description) /by yyyy-MM-dd HHmm\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user try to add an event task","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" * in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getAlertForEvent() {","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user try to","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"LINCHENYU2030S"},"content":" * view the task(s) of a specific date but key in the command in a wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getAlertForDate() {","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!! To view the task(s) on a specific date,please key in the date \"","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"in the format yyyy-MM-dd only.\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Please also ensure that your key in date is a valid date\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Note that it is case sensitive\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to print an alert message to the user when the user","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"LINCHENYU2030S"},"content":" * key in unknown command.","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getAlertForUnknown() {","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String getAlertForFind() {","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!! To find task(s) with matching word, please use the following format:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" find (description)\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"LINCHENYU2030S"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":144}},{"path":"src/main/java/Alex/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that extends from Command class. The instance of this class represents a command that is not predefined","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" * or is not understand by the chat bot Alex.","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" * The constructor of UnknownCommand when an user input string is given.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param command The user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" public UnknownCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" * Override the method from the Command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" * The execute method of UnknownCommand class is used to actually print alert message to the standard output","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" * to notify the user that the command typed by the user is defined or not known by the chat bot Alex.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" public String execute() {","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d Ui.getAlertForUnknown();","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":30}},{"path":"src/main/java/Alex/UserInputStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that is used to deal with user data storage. For example, storing all the task(s) in TaskList into","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" * the file Alex.txt after every termination of the chatbot execution. Similarly, restore all the task(s) in","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" * Alex.txt into TaskList every time when the user run the chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":"public class UserInputStorage {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" * A constant that is used to represent time format throughout this program. The time format is yyyy-MM-dd HHmm.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" public static final DateTimeFormatter TIMEFORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" * This static method prints out all the user data stored in the file data/Alex.txt","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printFileContent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"data/Alex.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userDataFile.getParentFile().exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.getParentFile().mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" Scanner userDataScanner \u003d new Scanner(userDataFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" while (userDataScanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" String userData \u003d userDataScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(userData);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to store all the task(s) in TaskList to the file Alex.txt","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" * after every termination of the Alex bot execution.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" public static String storeToFile() {","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" FileWriter fw \u003d new FileWriter(\"data/Alex.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" int numberOfElements \u003d TaskList.getNumberOfElements();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 1; i \u003c\u003d numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" Task task \u003d TaskList.getTaskByIndex(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" String taskInfo \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" if (task instanceof ToDos) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"T \" + task.getDescription() + (task.isDone() ? \" 1\" : \" 0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"D \" + deadline.getDescription() + \" /by \" + deadline.getBy()","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" + (task.isDone() ? \" 1\" : \" 0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"E \" + event.getDescription() + \" /from \" + event.getFromTime() + \" /to \"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" + event.getToTime() + (task.isDone() ? \" 1\" : \" 0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" if (i \u003d\u003d numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.write(taskInfo);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.write(taskInfo + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"User data is successfully stored\";","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IOException | AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"Something went wrong when saving users data to Alex.txt: \" + e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" * A static method that is used to load all the user data (task) from the file Alex.txt into TaskList","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" * every time the user start running Alex bot.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void loadUserDateFromFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"data/Alex.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userDataFile.getParentFile().exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.getParentFile().mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" Scanner userDataScanner \u003d new Scanner(userDataFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" while (userDataScanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" String userData \u003d userDataScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" userData \u003d userData.stripTrailing();","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" String taskType \u003d userData.substring(0, 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" int dataLength \u003d userData.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" Task taskToBeStored \u003d new Task(\"temp\");","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" int isDoneSymbol \u003d Integer.parseInt(userData.substring(dataLength - 1, dataLength));","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" boolean isDone \u003d isDoneSymbol \u003d\u003d 1 ? true : false;","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userData.substring(1, 2).equals(\" \") || (isDoneSymbol !\u003d 1 \u0026\u0026 isDoneSymbol !\u003d 0)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d userData.substring(2, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new ToDos(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a todo task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"T (description) (1/0) where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"LINCHENYU2030S"},"content":" String descriptionWithTime \u003d userData.substring(0, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /by \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher \u003d pattern.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"LINCHENYU2030S"},"content":" int startIndex \u003d matcher.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"LINCHENYU2030S"},"content":" int endIndex \u003d matcher.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d startIndex \u003e 2 ? userData.substring(2, startIndex) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"LINCHENYU2030S"},"content":" String by \u003d userData.substring(endIndex, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException | DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a deadline task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"D (description) /by yyyy-MM-dd HHmm (1/0) where 1 indicates done and\"","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" 0 indicates undone\";","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"LINCHENYU2030S"},"content":" String descriptionWithTime \u003d userData.substring(0, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /from \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern1 \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher1 \u003d pattern1.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher1.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstStart \u003d matcher1.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstEnd \u003d matcher1.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex2 \u003d \"\\\\b /to \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern2 \u003d Pattern.compile(regex2);","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher2 \u003d pattern2.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher2.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondStart \u003d matcher2.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondEnd \u003d matcher2.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d firstStart \u003e 2 ? userData.substring(2, firstStart) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromTime \u003d userData.substring(firstEnd, secondStart);","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"LINCHENYU2030S"},"content":" String toTime \u003d userData.substring(secondEnd, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new Event(description, fromTime, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException | DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for an event task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"E (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm (1/0) \"","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-16"},{"lineNumber":180,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"LINCHENYU2030S"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored.mark(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"data/Alex.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":194,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IOException e2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"LINCHENYU2030S"},"content":" System.err.println(\"The file Alex.txt does not exits and there is an error creating the file: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"LINCHENYU2030S"},"content":" + e2.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"LINCHENYU2030S"},"content":" // System.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":200,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a todo task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"T (description) (1/0) where 1 indicates done and 0 indicates undone\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a deadline task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"D (description) /by yyyy-MM-dd HHmm (1/0) where 1 indicates done and 0 indicates undone\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a event task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"E (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm (1/0)\"","lastModifiedDate":"2023-09-16"},{"lineNumber":214,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":219}},{"path":"src/main/java/Alex/View.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"public enum View {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" LISTALL,","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" LISTONEDAY,","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" FIND","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":7}},{"path":"src/main/java/Alex/ViewCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" * A class that extends from Commadn class. The instance of this class represents a command that is trying to","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" * view the existing the class in the TaskList. It includes listing all the task(s) in the TaskList, listing all the","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" * task(s) in a specific date.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ViewCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" private View viewType;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" * The constructor of ViewCommand class when the user input string and viewType is given.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param command The user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" * @param viewType The type of view command which consist of \"LISTALL\", \"LISTONEDAY\".","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" public ViewCommand(String command, View viewType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" this.viewType \u003d viewType;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" * Override the method from Command class.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" * The execute method of ViewCommand class is to actually print all the task(s) in the TaskList or","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" * the task(s) of a specific date to the standard output.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" public String execute() {","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" switch(this.viewType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" case LISTALL:","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d TaskList.getAllContent();","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" case LISTONEDAY:","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d TaskList.getTaskForDate(command);","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d Ui.getAlertForDate();","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" case FIND:","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" if (command.length() \u003d\u003d 4 || !command.substring(4, 5).equals(\" \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" String toMatch \u003d command.substring(5).stripTrailing();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d TaskList.getTaskForMatchWord(toMatch);","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" output \u003d Ui.getAlertForFind();","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" return output;","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":68}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"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":"LINCHENYU2030S"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"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":"LINCHENYU2030S"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"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":"LINCHENYU2030S"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LINCHENYU2030S":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"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\"Alex.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"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":"LINCHENYU2030S"},"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":"LINCHENYU2030S"},"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":"LINCHENYU2030S"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LINCHENYU2030S":20}},{"path":"src/test/java/Alex/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" public void parseTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput \u003d \"2023-SEP-02\";","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" assertEquals(true, c instanceof UnknownCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"LINCHENYU2030S":13}},{"path":"src/test/java/Alex/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"package Alex;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" public void storeTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" // Redirect System.out to capture the output","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" // Try store something into TaskList and delete it","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.clearAll();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput \u003d \"todo read book\";","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" String output \u003d c.execute();","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" // Verify the captured output","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" String expectedOutput \u003d \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"[T][ ] read book\" + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have \" + 1 + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" String actualOutput \u003d outContent.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" public void deleteTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" // Redirect System.out to capture the output","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" // Try store something into TaskList and delete it","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.clearAll();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput1 \u003d \"todo read book\";","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c \u003d Parser.parse(userInput1);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" String output1 \u003d c.execute();","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(output1);","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput2 \u003d \"delete 2\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c2 \u003d Parser.parse(userInput2);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" String output2 \u003d c2.execute();","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(output2);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput3 \u003d \"delete 1\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c3 \u003d Parser.parse(userInput3);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" String output3 \u003d c3.execute();","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(output3);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput4 \u003d \"delete 1\";","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c4 \u003d Parser.parse(userInput4);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" String output4 \u003d c4.execute();","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(output4);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" // Restore the original System.out","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" // Verify the captured output","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" String expectedOutput \u003d \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" [T][ ] read book\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have 1 tasks in the list.\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"OOPS!!! There is/are only 1 task(s) stored\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" [T][ ] read book\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have 0 tasks in the list.\\n\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"OOPS!!! There is/are only 0 task(s) stored\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" String actualOutput \u003d outContent.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"LINCHENYU2030S":76}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"todo read book","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"event meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"deadline return book /by Friday","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"mark 2","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"mark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"list","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":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":"-"},"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":"LINCHENYU2030S"},"content":"java -classpath ../bin Alex \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":"LINCHENYU2030S"},"content":"# cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":"#dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-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":"LINCHENYU2030S"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2023-08-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":{"LINCHENYU2030S":4,"-":34}}] diff --git a/LINCHENYU2030S_ip_master/commits.json b/LINCHENYU2030S_ip_master/commits.json index f75ad0cd..83e60bb1 100644 --- a/LINCHENYU2030S_ip_master/commits.json +++ b/LINCHENYU2030S_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"LINCHENYU2030S":[{"date":"2023-08-24","commitResults":[{"hash":"c712c9a79710aaac1957fb856f46ad1739878a45","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"18a18476dd23377e5d0119ddc2bd188f589a1699","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":5}}},{"hash":"663930a914d4a11d2f443484d87f2be1c55349af","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"51749a77340e54180472e98c99d10028fea3fab0","isMergeCommit":false,"messageTitle":"Mark, Unmark","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":8}}}]},{"date":"2023-08-25","commitResults":[{"hash":"d49842e035f658fb273319b4b701420020cecd82","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":112,"deletions":17}}},{"hash":"8b3e8bfc44faf0d8f5de8d639f39ef38bb2d4c98","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":1},"sh":{"insertions":4,"deletions":4}}},{"hash":"ec091af21f59f8a08425ab2dbac2ed9b03d58a6f","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":35}}}]},{"date":"2023-08-26","commitResults":[{"hash":"a69f55563a99ed630afe3121a7809f3a9ff58be4","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":55}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9331bc33bcf15149c6703aeb97338d38038a72dc","isMergeCommit":false,"messageTitle":"add saving user data feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":211,"deletions":2}}},{"hash":"a905dcf6eed019c58d98d38d14846e1c59c59d45","isMergeCommit":false,"messageTitle":"add saving feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"f2d1a3f978a82cb1912838ca56acaf9960a6be60","isMergeCommit":false,"messageTitle":"add saving user data features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e3002aa794a21aa7e7f0c9a7aa83d1165f8eb1eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9fb72fce4f439436387e9e657f91b82155cee7c1","isMergeCommit":false,"messageTitle":"print Dates and Times, print Task on given Date","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":144,"deletions":24}}},{"hash":"41011b2eced858d69cbb5569b8e1ff24a4b9e851","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"38bd9730eff1ff6f0b4dc19e07e1d92619488ea6","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":661,"deletions":437}}},{"hash":"82eb7957081fdc4f98407280da421e9250dd47bc","isMergeCommit":false,"messageTitle":"apply more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"f07437a197ca8acb28a002ede8266465d7fb0d62","isMergeCommit":false,"messageTitle":"optimize code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1d79cee7fa05161a15c5bd998c2f022fe8b69e36","isMergeCommit":false,"messageTitle":"Organize classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":3}}},{"hash":"0584b130e9ca13b61e41583f6900ec6de203e7fe","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"abfb5439c559a461a5fa59ff9dc57ad52394b13c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ed33d9990b91b3c450e6eede168d7dc808b85ad9","isMergeCommit":false,"messageTitle":"set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"d5712225044ab805a880bd76b2e4ecb3afaf78bb","isMergeCommit":false,"messageTitle":"add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":0}}},{"hash":"a6493ec72b897c74e4d9b2c8460f038d8581447a","isMergeCommit":false,"messageTitle":"create a JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"2203a422728e85bd67527dd814cbbad596e9159e","isMergeCommit":false,"messageTitle":"optimize code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":5,"deletions":5}}},{"hash":"26bb3c84b5c8d3ff4d8ebdd729e98ef08bfc5c15","isMergeCommit":false,"messageTitle":"add find matching task(s) feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":50,"deletions":1}}},{"hash":"173e2be4db574125f6d928153f391985b9f115a8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"59f8b7f059afea760127aff9a28648d7ce26970c","isMergeCommit":false,"messageTitle":"testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"4faedf40447acfe2ef8feea6825a3dcb3fb59d07","isMergeCommit":false,"messageTitle":"comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":82}}},{"hash":"7d45b3b116089d4e35123a59d2c459eaf6a742fd","isMergeCommit":true,"messageTitle":"resolve conflict fromm branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7f418e448b14339d12847f7371d8087d40de72dd","isMergeCommit":false,"messageTitle":"add more changes to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"17cdc721f938e6f4a057092699a8625e27c26da3","isMergeCommit":false,"messageTitle":"add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":342,"deletions":83}}},{"hash":"c4883e427c476c3780433b8e8b1cd5320f7e0e15","isMergeCommit":true,"messageTitle":"resolve conflict when merging branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"LINCHENYU2030S":{"java":1341,"md":0,"fxml":0,"sh":4,"bat":0,"gradle":0,"txt":14}},"authorContributionVariance":{"LINCHENYU2030S":103021.695},"authorDisplayNameMap":{"LINCHENYU2030S":"CS2103T-W13-2 LIN ..ENYU"}} +{"authorDailyContributionsMap":{"LINCHENYU2030S":[{"date":"2023-08-24","commitResults":[{"hash":"c712c9a79710aaac1957fb856f46ad1739878a45","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"18a18476dd23377e5d0119ddc2bd188f589a1699","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":5}}},{"hash":"663930a914d4a11d2f443484d87f2be1c55349af","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"51749a77340e54180472e98c99d10028fea3fab0","isMergeCommit":false,"messageTitle":"Mark, Unmark","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":8}}}]},{"date":"2023-08-25","commitResults":[{"hash":"d49842e035f658fb273319b4b701420020cecd82","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":112,"deletions":17}}},{"hash":"8b3e8bfc44faf0d8f5de8d639f39ef38bb2d4c98","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":1},"sh":{"insertions":4,"deletions":4}}},{"hash":"ec091af21f59f8a08425ab2dbac2ed9b03d58a6f","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":35}}}]},{"date":"2023-08-26","commitResults":[{"hash":"a69f55563a99ed630afe3121a7809f3a9ff58be4","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":55}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9331bc33bcf15149c6703aeb97338d38038a72dc","isMergeCommit":false,"messageTitle":"add saving user data feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":211,"deletions":2}}},{"hash":"a905dcf6eed019c58d98d38d14846e1c59c59d45","isMergeCommit":false,"messageTitle":"add saving feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"f2d1a3f978a82cb1912838ca56acaf9960a6be60","isMergeCommit":false,"messageTitle":"add saving user data features","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e3002aa794a21aa7e7f0c9a7aa83d1165f8eb1eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9fb72fce4f439436387e9e657f91b82155cee7c1","isMergeCommit":false,"messageTitle":"print Dates and Times, print Task on given Date","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":144,"deletions":24}}},{"hash":"41011b2eced858d69cbb5569b8e1ff24a4b9e851","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"38bd9730eff1ff6f0b4dc19e07e1d92619488ea6","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":661,"deletions":437}}},{"hash":"82eb7957081fdc4f98407280da421e9250dd47bc","isMergeCommit":false,"messageTitle":"apply more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"f07437a197ca8acb28a002ede8266465d7fb0d62","isMergeCommit":false,"messageTitle":"optimize code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1d79cee7fa05161a15c5bd998c2f022fe8b69e36","isMergeCommit":false,"messageTitle":"Organize classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":3}}},{"hash":"0584b130e9ca13b61e41583f6900ec6de203e7fe","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"abfb5439c559a461a5fa59ff9dc57ad52394b13c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ed33d9990b91b3c450e6eede168d7dc808b85ad9","isMergeCommit":false,"messageTitle":"set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"d5712225044ab805a880bd76b2e4ecb3afaf78bb","isMergeCommit":false,"messageTitle":"add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":0}}},{"hash":"a6493ec72b897c74e4d9b2c8460f038d8581447a","isMergeCommit":false,"messageTitle":"create a JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"2203a422728e85bd67527dd814cbbad596e9159e","isMergeCommit":false,"messageTitle":"optimize code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":5,"deletions":5}}},{"hash":"26bb3c84b5c8d3ff4d8ebdd729e98ef08bfc5c15","isMergeCommit":false,"messageTitle":"add find matching task(s) feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":50,"deletions":1}}},{"hash":"173e2be4db574125f6d928153f391985b9f115a8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"59f8b7f059afea760127aff9a28648d7ce26970c","isMergeCommit":false,"messageTitle":"testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"4faedf40447acfe2ef8feea6825a3dcb3fb59d07","isMergeCommit":false,"messageTitle":"comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":82}}},{"hash":"7d45b3b116089d4e35123a59d2c459eaf6a742fd","isMergeCommit":true,"messageTitle":"resolve conflict fromm branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7f418e448b14339d12847f7371d8087d40de72dd","isMergeCommit":false,"messageTitle":"add more changes to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"17cdc721f938e6f4a057092699a8625e27c26da3","isMergeCommit":false,"messageTitle":"add JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":342,"deletions":83}}},{"hash":"c4883e427c476c3780433b8e8b1cd5320f7e0e15","isMergeCommit":true,"messageTitle":"resolve conflict when merging branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"0f9a0d7b3ff0f3515cd639f6fb28d0ed4df1e857","isMergeCommit":false,"messageTitle":"add checkstyle config","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":36,"deletions":25}}},{"hash":"5e6450e78c2523d7b374bf5f18de85d2673a6765","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"2ea95361e2e8cfa45ba3e9b57babea3d62438e55","isMergeCommit":false,"messageTitle":"some minor changes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"java":{"insertions":12,"deletions":0}}},{"hash":"36e09a92da6e728e779cf3358ad4e699fb03a23e","isMergeCommit":false,"messageTitle":"add GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"fxml":{"insertions":37,"deletions":0},"java":{"insertions":329,"deletions":203}}},{"hash":"49cb3b89521c1dc7befd7eb3cc4402269b453a64","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"LINCHENYU2030S":{"java":1490,"md":0,"fxml":37,"sh":4,"bat":0,"gradle":19,"txt":15}},"authorContributionVariance":{"LINCHENYU2030S":91828.1},"authorDisplayNameMap":{"LINCHENYU2030S":"CS2103T-W13-2 LIN ..ENYU"}} diff --git a/LinWanLeii_ip_master/authorship.json b/LinWanLeii_ip_master/authorship.json index d67c521d..3adde61d 100644 --- a/LinWanLeii_ip_master/authorship.json +++ b/LinWanLeii_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-08"},{"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":"LinWanLeii"},"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-08"},{"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":{"LinWanLeii":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":"LinWanLeii"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-08"},{"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":"LinWanLeii"},"content":"javafx {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" mainClass.set(\"main.duke.Main\")","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"LinWanLeii":9,"-":41}},{"path":"src/main/java/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * A class that is part of the command, for this particularly it will end the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * @author LinWanLeii","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" * A method that will end the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList contains all the past few tasks excuted.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" public String excute(TaskList taskList, Ui ui, FileStorage fileStorage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" this.isExit \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":26}},{"path":"src/main/java/command/ClearCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * A class that is part of the command, for this particularly it will clear all the past tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public class ClearCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" * A method that will excute the clearing of all past cases.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * @param tasklist contains all the past few tasks excuted.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" public String excute(TaskList tasklist, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(tasklist.clear());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" return ui.showClearTask();","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":26}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" * An Abstract class that represents the action that will be done by the different command input","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" protected boolean isExit \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * Returns whether the program should stop running as the end point \"bye\" is hit.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @return boolean value shows whether the program should be completed and exited.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" return isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" * An abstract method that will excute the task provided depending on the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" * @param tasklist contains all the past few tasks excuted.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" public abstract String excute(TaskList tasklist, Ui ui, FileStorage fileStorage) throws DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":34}},{"path":"src/main/java/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * A class that is part of the command, for this in particular this will store a task that has a deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" private final String task;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" private final String deadDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * A constructor method to call for the method.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @param task the task that is input by the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * @param deadDate the deadline of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" public DeadlineCommand(String task, String deadDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" this.deadDate \u003d deadDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" * A method that will take down the deadline task that the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * @param tasklist contains all the past few tasks excuted.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" public String excute(TaskList tasklist, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" Deadline task \u003d new Deadline(this.task, this.deadDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" tasklist.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(tasklist);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" return ui.showTaskAdded(task, tasklist);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":41}},{"path":"src/main/java/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * A class that is part of the command class, for this in particular it deletes a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" private final int index;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * A method that will delete a task from the taskList depending on the index.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" * @param tasklist contains all the past few tasks excuted.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" public String excute(TaskList tasklist, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" Task task \u003d tasklist.deleteTask(this.index);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(tasklist);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" return ui.showDeleteTask(task, tasklist);","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":32}},{"path":"src/main/java/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * A class that is part of the command, for this in particular it will result in event being stored.","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" private final String task;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" private final String startDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" private final String endDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * Constructor method that will initialise all content of the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * @param task the task the user wants to do","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * @param startDate the starting date","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" * @param endDate the ending date","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" public EventCommand(String task, String startDate, String endDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * This method will form a task depending on the user inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" * @param tasklist contains all the past few tasks excuted.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" public String excute(TaskList tasklist, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" Event task \u003d new Event(this.task, this.startDate, this.endDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" tasklist.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(tasklist);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" return ui.showTaskAdded(task, tasklist);","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":44}},{"path":"src/main/java/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" * A class that is part of the command, this will find task with similar words.","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" private final String word;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" public FindCommand(String word) {","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" this.word \u003d word;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * A method that will excute the class.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @param tasklist contains all the past few tasks excuted.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException if the word cannot be found.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" public String excute(TaskList tasklist, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" TaskList newList \u003d new TaskList();","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c tasklist.size(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" if (tasklist.get(i).toString().contains(word)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" newList.add(tasklist.get(i));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" return ui.showFoundResults(newList);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":33}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" * A class that excutes the list command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" * A method that will list out all the task stored in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" * @param tasklist contains all the past few tasks excuted.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" public String excute(TaskList tasklist, Ui ui, FileStorage fileStorage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" return ui.showList(tasklist);","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":23}},{"path":"src/main/java/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * A class that will mark the task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" private final int index;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * A method that will excute the mark command depending on the index by user .","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" * @param tasklist contains all the past few tasks excuted.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" public String excute(TaskList tasklist, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" Task task \u003d tasklist.markTask(this.index);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(tasklist);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" return ui.showMarkedTask(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":33}},{"path":"src/main/java/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * A class that is part of the command family, this in particular calls for todo tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" private final String task;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" public TodoCommand(String task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * A method that will add a Todo task to the tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" * @param tasklist contains all the past few tasks excuted.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" public String excute(TaskList tasklist, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" Todo task \u003d new Todo(this.task);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" tasklist.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(tasklist);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" return ui.showTaskAdded(task, tasklist);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":33}},{"path":"src/main/java/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * A class that will call for the unmark command","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" private final int index;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * A method that will mark the task as unMarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * @param tasklist contains all the past few tasks excuted.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" * @param ui contains the user interface that will be shown to the user depending on the inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage Writing and reading on text files.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" public String excute(TaskList tasklist, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" Task task \u003d tasklist.unmarkTask(this.index);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(tasklist);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" return ui.showUnMarkedTask(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":31}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":63}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import command.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" * A class that the chatbot program will run from.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" private TaskList userList;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" private final FileStorage fileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" private final Ui userInterface;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" * A constructor method to initialise the bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" * @param filePath the file that will be written or read from.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" this.userInterface \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" this.fileStorage \u003d new FileStorage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" //System.out.println(\"here\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" userList \u003d new TaskList(fileStorage.read());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" //System.out.println(\"new userlist\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" this.userList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(\"File Empty\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" * A method that will need the user to input what Text file they would like to use.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" * @param args arguments use to start the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(\"\\n \\n\" + \"Please Input the txt file you wish to access\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" String textFile \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" new Duke(\"Testing.txt\").run();","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" * A method to run the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" userInterface.showGreetings();","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" String fullCommand \u003d userInterface.readCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" userInterface.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" c.excute(userList, userInterface, fileStorage);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" userInterface.showError(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":" userInterface.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":" userInterface.closeScanner();","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"LinWanLeii"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"LinWanLeii"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"LinWanLeii"},"content":" return c.excute(userList, userInterface, fileStorage);","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"LinWanLeii"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"LinWanLeii"},"content":" public String start() {","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"LinWanLeii"},"content":" return userInterface.showGreetings() + \"\\n Enter clear if you would like to start a new list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LinWanLeii":85,"-":1}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" private Duke duke \u003d new Duke(\"Testing.txt\");","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.util.concurrent.Executors;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import java.util.concurrent.ScheduledExecutorService;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import java.util.concurrent.TimeUnit;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" private Duke duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" * Starts the dialog box.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" DialogBox.getUserDialog(duke.start(), dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" private void delayedExit() {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" ScheduledExecutorService executorService \u003d Executors.newSingleThreadScheduledExecutor();","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" executorService.schedule(() -\u003e Platform.runLater(() -\u003e Platform.exit()), 3, TimeUnit.SECONDS);","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" executorService.shutdown();","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":" delayedExit();","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":70}},{"path":"src/main/java/dukeexception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package dukeexception;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" * An Exceptional class for any errors faced by the user inputs.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" * Constructor method that creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * @param message the message that we want to output to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LinWanLeii":16}},{"path":"src/main/java/filestorage/FileStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package filestorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * Represents a class that will convey the user input to a file and also the other way around.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":"public class FileStorage {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" private final File fileData;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" public FileStorage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" this.fileData \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * A method that will write all the data from the tasklist to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @param userList contains all the tasks by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException if there is any situation where the FileWriter fails to write.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" public void write(TaskList userList) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" assert userList \u003d\u003d null : \"A list should be present such that a write would occur\";","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" FileWriter fw \u003d new FileWriter(fileData);","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c userList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" fw.write(userList.get(i).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Writing Error\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" * A method that will read all the information on a textFile and load it back into the program","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" * @return ArrayList a list of all the task by user.","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException if the content on the file cannot be recognised.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" public ArrayList\u003cTask\u003e read() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" assert fileData \u003d\u003d null : \"FileStorage should be initialise before calling for read hence cannot be null\";","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" ArrayList\u003cTask\u003e dataList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" Scanner scanner \u003d new Scanner(fileData);","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" //System.out.println(\"reading\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" String inputs \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" if (inputs.startsWith(\" [T]\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" String info \u003d inputs.substring(9);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" task \u003d new Todo(info);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":" if (inputs.substring(6).startsWith(\"X\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":" task.markDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" dataList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":" } else if (inputs.startsWith(\" [D]\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"LinWanLeii"},"content":" String info \u003d inputs.substring(9);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"LinWanLeii"},"content":" String[] split \u003d info.split(\"\\\\(by: |\\\\)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"LinWanLeii"},"content":" task \u003d new Deadline(split[0], split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"LinWanLeii"},"content":" if (inputs.substring(6).startsWith(\"X\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"LinWanLeii"},"content":" task.markDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"LinWanLeii"},"content":" dataList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"LinWanLeii"},"content":" } else if (inputs.startsWith(\" [E]\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"LinWanLeii"},"content":" String info \u003d inputs.substring(9);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"LinWanLeii"},"content":" String[] split \u003d info.split(\"\\\\(from: | to: |\\\\)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"LinWanLeii"},"content":" task \u003d new Event(split[0], split[1], split[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"LinWanLeii"},"content":" if (inputs.substring(6).startsWith(\"X\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"LinWanLeii"},"content":" task.markDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"LinWanLeii"},"content":" dataList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"LinWanLeii"},"content":" scanner.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"LinWanLeii"},"content":" //System.out.println(count);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"LinWanLeii"},"content":" return dataList;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"LinWanLeii"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"LinWanLeii":96}},{"path":"src/main/java/list/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package list;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * A class that stores Tasks inside an Arraylist.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * A Constructor method that will create a new TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" public TaskList() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" public TaskList(TaskList userList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" this.taskList \u003d convert(userList);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * A method that will convert a TaskList to an ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * @param userList the TaskList that is going to be converted.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" * @return an Arraylist that is converted from TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" public ArrayList\u003cTask\u003e convert(TaskList userList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c userList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" taskList.add(i, userList.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" * A method that returns the size of the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" * @return the size of the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" public int size() {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" return taskList.size(); }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" * A method that will get the task in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" * @param i the index of the task needed.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" * @return the task that is called for.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" public Task get(int i) {","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" return taskList.get(i); }","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" * A method that adds a task to the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" * @param task the task that the user wants to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" taskList.add(task); }","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" * A method that will delete a task depending on the index provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":" * @param i the index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"LinWanLeii"},"content":" * @return the task that has been removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException if the index is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"LinWanLeii"},"content":" public Task deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"LinWanLeii"},"content":" if (i \u003e this.taskList.size() || i \u003c 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index provided.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"LinWanLeii"},"content":" Task removing \u003d this.taskList.get(i - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"LinWanLeii"},"content":" this.taskList.remove(i - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"LinWanLeii"},"content":" return removing;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"LinWanLeii"},"content":" * A method that will mark a task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"LinWanLeii"},"content":" * @param i the index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"LinWanLeii"},"content":" * @return the task that is marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException if the index is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"LinWanLeii"},"content":" public Task markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"LinWanLeii"},"content":" if (i \u003e this.taskList.size() || i \u003c 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index provided.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"LinWanLeii"},"content":" Task marking \u003d this.taskList.get(i - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"LinWanLeii"},"content":" marking.markDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"LinWanLeii"},"content":" return marking;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"LinWanLeii"},"content":" * A method that will unmark a task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"LinWanLeii"},"content":" * @param i the index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"LinWanLeii"},"content":" * @return the task that is unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException if the index is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"LinWanLeii"},"content":" public Task unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"LinWanLeii"},"content":" if (i \u003e this.taskList.size() || i \u003c 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index provided.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"LinWanLeii"},"content":" Task unMarking \u003d this.taskList.get(i - 1);","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"LinWanLeii"},"content":" unMarking.unmarkDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"LinWanLeii"},"content":" return unMarking;","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"LinWanLeii"},"content":" * A method that clears the TaskList","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"LinWanLeii"},"content":" * @return an empty list","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"LinWanLeii"},"content":" public TaskList clear() {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"LinWanLeii"},"content":" this.taskList.clear();","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"LinWanLeii"},"content":" return new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":124}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import command.ByeCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import command.ClearCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import command.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import command.DeadlineCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"import command.DeleteCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"import command.EventCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"import command.FindCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"import command.ListCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"import command.MarkCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"import command.TodoCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"import command.UnmarkCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * A parser that takes the input data and checks its syntax followed bt excute it.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":"public class Parser {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" //final String UNKNOWN_COMMAND \u003d \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" * A method that takes the user input and calls the right command for it.","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * @param fullCommand the user command input.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @return a command that will be excute base on the users input.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException if the command is invalid in any ways.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" String[] split \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" String commandAction \u003d split[0];","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" switch (commandAction) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" case \"list\":","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" case \"mark\":","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003e 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Please state in this format (mark 1)\");","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" return new MarkCommand(Integer.parseInt(split[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index\");","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003e 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Please state in this format (unmark 1)\");","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" return new UnmarkCommand(Integer.parseInt(split[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index\");","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" case \"delete\":","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003e 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Please state in this format (delete 1)\");","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" return new DeleteCommand(Integer.parseInt(split[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index\");","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":" case \"todo\":","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003c 2 || split[1].isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"LinWanLeii"},"content":" return new TodoCommand(split[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"LinWanLeii"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003c 2 || split[1].isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a Tasks.Deadline cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"LinWanLeii"},"content":" String[] info \u003d split[1].split(\"/by \");","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"LinWanLeii"},"content":" if (info.length !\u003d 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline is invalid.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"LinWanLeii"},"content":" String deadDate \u003d LocalDate.parse(info[1]).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"LinWanLeii"},"content":" return new DeadlineCommand(info[0], deadDate);","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"LinWanLeii"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a time must be in yyyy-mm-dd\");","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"LinWanLeii"},"content":" case \"event\":","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003c 2 || split[1].isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a Tasks.Event cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"LinWanLeii"},"content":" String[] infoEvent \u003d split[1].split(\"/from | /to \");","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"LinWanLeii"},"content":" if (infoEvent.length !\u003d 3) {","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a event is invalid.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"LinWanLeii"},"content":" String startDate \u003d LocalDate.parse(infoEvent[1]).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"LinWanLeii"},"content":" String endDate \u003d LocalDate.parse(infoEvent[2]).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"LinWanLeii"},"content":" return new EventCommand(infoEvent[0], startDate, endDate);","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"LinWanLeii"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a time must be in yyyy-mm-dd\");","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"LinWanLeii"},"content":" case \"clear\":","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"LinWanLeii"},"content":" return new ClearCommand();","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"LinWanLeii"},"content":" case \"bye\":","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"LinWanLeii"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"LinWanLeii"},"content":" case \"find\":","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"LinWanLeii"},"content":" return new FindCommand(split[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"LinWanLeii"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":111}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package tasks;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" * A child class to Task, this in particular is a deadline task.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":" private final String deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * A constructor method.","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * @param name the name of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" * @param deadline the deadline of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" super(name);","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" super.setType(\"D\");","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * * A method that will represent the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" * @return the syntax that will be shown to the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" public String toString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" return super.toString() + \"(by: \" + deadline + \")\";","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":29}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package tasks;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" * A child class to Task, for this in particular it is for events tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":" private final String start;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":" private final String end;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * A Constructor method.","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * @param name the name of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" * @param start the start date of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" * @param end the end date of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" public Event(String name, String start, String end) {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" super(name);","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" super.setType(\"E\");","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" * A method that will represent the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" * @return the syntax that will be shown to the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" public String toString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" return super.toString() + \"(from: \" + start + \" to: \" + end + \")\";","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":31}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package tasks;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" * A parent class that represents the task that the user will input.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"public class Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":" private String type;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":" private final String name;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" private boolean marked;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" * A Constructor method for task.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" * @param name the name of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" public Task(String name) {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" this.marked \u003d false;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" public void setType(String type) {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" * A method that will mark a task as marked.","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" public void markDone() {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" marked \u003d true;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * A method that will unmark a task.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" public void unmarkDone() {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" marked \u003d false;","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" * A method that will represent the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" * @return the syntax that will be shown to the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" public String toString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" assert !type.equals(\" \") : \"Type must be a character related to its task type\";","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" return \" [\" + type + \"]\" + \"[\" + (marked ? \"X\" : \" \") + \"] \" + name;","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":46}},{"path":"src/main/java/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package tasks;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" * A child class to Task, this in particular is for todo tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":" * A constructor method for Todo.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" * @param name the name of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" public Todo(String name) {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" super(name);","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" super.setType(\"T\");","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":15}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * A class that is used to show the user inferfaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" //private final String UNKNOWN_COMMAND \u003d \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" private final String NAME \u003d \"CathyTheChattyCat\";","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" private String lineBreak \u003d \"\\n________________________________________\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * A constructor method to initialise the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" * A method to read the user input and trims the spaces at both ends.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * @return a string of the input.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" return this.scanner.nextLine().trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" * A method that will print a line.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" public void showLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" /*","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(lineBreak + \"Not detected in data. New List.TaskList created\" + lineBreak);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" public void showRequestForTextFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(lineBreak + \"Please Input the txt file you wish to access\" + lineBreak);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" public void showUnknownCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(lineBreak + UNKNOWN_COMMAND + lineBreak);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" public void showDateFormatError(DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(\"☹ OOPS!!! The description of a time must be in yyyy-mm-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" public void showInvalidDescription(String taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(\"☹ OOPS!!! The description of a \" + taskType + \" is invalid.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" * A method that will print out the error.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" * @param e the error code produced.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" public String showError(String e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" return e;","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" * A method that will show task being added.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"LinWanLeii"},"content":" * @param task the task to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"LinWanLeii"},"content":" * @param userList the TaskList to add to.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"LinWanLeii"},"content":" public String showTaskAdded(Task task, TaskList userList) {","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"LinWanLeii"},"content":" String top \u003d (\"Got it. I\u0027ve added this task: \\n\" + task);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"LinWanLeii"},"content":" int size \u003d userList.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"LinWanLeii"},"content":" String bottom \u003d (\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"LinWanLeii"},"content":" return top + \"\\n\" + bottom;","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"LinWanLeii"},"content":" * A method that will greet the user at the start.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"LinWanLeii"},"content":" public String showGreetings() {","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"LinWanLeii"},"content":" String top \u003d (lineBreak + \"Hello! I\u0027m \" + NAME);","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"LinWanLeii"},"content":" String bottom \u003d (\"What can I do for you?\" + lineBreak);","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"LinWanLeii"},"content":" return top + \"\\n\" + bottom;","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"LinWanLeii"},"content":" * A method that will show that a task is marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"LinWanLeii"},"content":" * @param task the task being marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"LinWanLeii"},"content":" public String showMarkedTask(Task task) {","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"LinWanLeii"},"content":" return (\"Nice! I\u0027ve marked this task as done: \\n\\t\" + task);","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"LinWanLeii"},"content":" * A method that will show that a task is unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"LinWanLeii"},"content":" * @param task the task being unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"LinWanLeii"},"content":" public String showUnMarkedTask(Task task) {","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"LinWanLeii"},"content":" return (\"OK, I\u0027ve unmarked this task as not done yet: \\n\\t\" + task);","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"LinWanLeii"},"content":" * A method to show that a task is deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"LinWanLeii"},"content":" * @param task task being deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"LinWanLeii"},"content":" * @param userList where task is deleted from.","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"LinWanLeii"},"content":" public String showDeleteTask(Task task, TaskList userList) {","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"LinWanLeii"},"content":" String top \u003d (\"Noted. I\u0027ve removed this task: \\n\" + task);","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"LinWanLeii"},"content":" String bottom \u003d (\"Now you have \" + userList.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"LinWanLeii"},"content":" return top + \"\\n\" + bottom;","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"LinWanLeii"},"content":" * A method that shows that the task is cleared.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"LinWanLeii"},"content":" public String showClearTask() {","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"LinWanLeii"},"content":" return (\"Noted. I\u0027ve removed all the tasks.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"LinWanLeii"},"content":" * A method that will show all the task in the list\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"LinWanLeii"},"content":" * @param userList where the task is from.","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"LinWanLeii"},"content":" public String showList(TaskList userList) {","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"LinWanLeii"},"content":" //System.out.println(lineBreak);","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"LinWanLeii"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"LinWanLeii"},"content":" String top \u003d (\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c userList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"LinWanLeii"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"LinWanLeii"},"content":" builder.append(index + \".\" + userList.get(i) + \u0027\\n\u0027);","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"LinWanLeii"},"content":" return top + \"\\n\" + builder;","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"LinWanLeii"},"content":" * A method to say BYE.","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"LinWanLeii"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"LinWanLeii"},"content":" return (\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"LinWanLeii"},"content":" public void closeScanner() {","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"LinWanLeii"},"content":" scanner.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"LinWanLeii"},"content":" * Shows the result found base on the word given.","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"LinWanLeii"},"content":" * @param foundList the list of found tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":156,"author":{"gitId":"LinWanLeii"},"content":" * @return a string of all the tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"LinWanLeii"},"content":" public String showFoundResults(TaskList foundList) {","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"LinWanLeii"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"LinWanLeii"},"content":" String top \u003d (\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c foundList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"LinWanLeii"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"LinWanLeii"},"content":" builder.append(index + \".\" + foundList.get(i) + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"LinWanLeii"},"content":" return top + \"\\n\" + builder;","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":167}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"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-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" \u003cFont size\u003d\"17.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":23}},{"path":"src/test/java/seedu/duke/FileStorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package seedu.duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public class FileStorageTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" public void testingFileSuccess() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" FileStorage storage \u003d new FileStorage(\"testing.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" assertEquals(storage.read().size(), 6);","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" public void emptyFile_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" FileStorage storage \u003d new FileStorage(\"nothing.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" assertEquals(storage.read().size(), 0);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":32}},{"path":"src/test/java/seedu/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package seedu.duke; //same package as the class being tested","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" public void simpleToDoTest(){","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" String str \u003d new Todo(\"book\").toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" assertEquals(str,\" [T][ ] book\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" public void exceptionTest() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" Parser.parse(\"deadline book /by 10\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" assertEquals(e.getMessage(), \"☹ OOPS!!! The description of a time must be in yyyy-mm-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":28}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"T | 0 | read book","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"LinWanLeii":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":"LinWanLeii"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-08"},{"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":{"LinWanLeii":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-08"},{"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":"LinWanLeii"},"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-08"},{"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":{"LinWanLeii":2,"-":22}},{"path":"Testing.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":" [T][ ] 1","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":" [T][ ] 2","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":" [T][ ] 3","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" [T][ ] 4","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" [T][ ] 5","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":" [T][ ] 6","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LinWanLeii":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":"LinWanLeii"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-08"},{"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":"LinWanLeii"},"content":"javafx {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" mainClass.set(\"main.duke.Main\")","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"LinWanLeii":9,"-":41}},{"path":"src/main/java/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the Bye command.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of ending the Chat bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" this.isExit \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":26}},{"path":"src/main/java/command/ClearCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the Clear command.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class ClearCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of clearing all the task in the TaskList.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(taskList.clear());","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" return ui.showClearTask();","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":27}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" * An Abstract class that represents the action that will be done by the different command input","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" protected boolean isExit \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * Returns whether the program should stop running as the end point \"bye\" is hit.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @return A boolean value shows whether the program should be completed and exited.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" return isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" * Executes an abstract method that will execute the task provided depending on the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" public abstract String execute(TaskList taskList, Ui ui, FileStorage fileStorage) throws DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":34}},{"path":"src/main/java/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the Deadline Task command.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" private final String task;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" private final String deadDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the class.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * @param task The task that is input by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * @param deadDate The deadline of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" public DeadlineCommand(String task, String deadDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" this.deadDate \u003d deadDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of creating a deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" Deadline task \u003d new Deadline(this.task, this.deadDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" return ui.showTaskAdded(task, taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":42}},{"path":"src/main/java/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the Delete Task command.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" private final int index;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the class.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @param index The index used to determine the class.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of deleting a task from the TaskList.","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" Task task \u003d taskList.deleteTask(this.index);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" return ui.showDeleteTask(task, taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":38}},{"path":"src/main/java/command/DeleteMultipleCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the Delete multipleTask command.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":"public class DeleteMultipleCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" private final String indexes;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the class.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" * @param indexes The index used to determine the class.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" public DeleteMultipleCommand(String indexes) {","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" this.indexes \u003d indexes;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of deleting multiple task from the TaskList.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" String[] individual \u003d indexes.split(\",\");","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" TaskList deletedList \u003d new TaskList();","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" int[] values \u003d Stream.of(individual)","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" .mapToInt(Integer::parseInt)","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" .sorted()","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" .toArray();","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" int[] reversedValues \u003d new int[values.length];","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(Arrays.toString(reversedValues));","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c values.length; i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" reversedValues[i] \u003d values[values.length - 1];","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" for (int reversedValue : reversedValues) {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" Task task \u003d taskList.deleteTask(reversedValue - 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" deletedList.add(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" return ui.showNewList(deletedList, taskList, \"del\");","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LinWanLeii":56}},{"path":"src/main/java/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the Event Task command.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" private final String task;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" private final String startDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" private final String endDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the class.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * @param task The task the user wants to do.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" * @param startDate The starting date.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" * @param endDate The ending date.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" public EventCommand(String task, String startDate, String endDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of creating an event Task.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" Event task \u003d new Event(this.task, this.startDate, this.endDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" return ui.showTaskAdded(task, taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":45}},{"path":"src/main/java/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the Find similar word in Tasks command.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" private final String word;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the class.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * @param word The word used to find similarity in classes.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" public FindCommand(String word) {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" this.word \u003d word;","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of finding task that has the similar words.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" TaskList newList \u003d new TaskList();","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" if (taskList.get(i).toString().contains(word)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" newList.add(taskList.get(i));","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" return ui.showFoundResults(newList);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":41}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the List Task command.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of Listing all the task in the TaskList.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" return ui.showList(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":24}},{"path":"src/main/java/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the Mark Task command.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" private final int index;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the class.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" * @param index The index that will be marked.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of Marking a task as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" Task task \u003d taskList.markTask(this.index);","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" return ui.showMarkedTask(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":40}},{"path":"src/main/java/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the Todo Task command.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" private final String task;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the class.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * @param task The information of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" public TodoCommand(String task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of creating an todo Task.","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" Todo task \u003d new Todo(this.task);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" return ui.showTaskAdded(task, taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":39}},{"path":"src/main/java/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * The class that will execute the Unmark Task command.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the Command class.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" private final int index;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the class.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * @param index The index that will be UnMarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" * Executes the Command of UnMarking a task.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" * @param taskList The TaskLIst that contains all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" * @param ui The user interface that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * @param fileStorage The File that will be written and read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If user inputs is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" public String execute(TaskList taskList, Ui ui, FileStorage fileStorage) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" Task task \u003d taskList.unmarkTask(this.index);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" fileStorage.write(taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" return ui.showUnMarkedTask(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":37}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":63}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import command.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" * The main program of the chat_bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" * Works with the MainWindow to provide inputs for GUI","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" private TaskList userList;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" private final FileStorage fileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" private final Ui userInterface;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" * Initialises the Chat_Bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" * @param filePath The file that will be written or read from.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" this.userInterface \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" this.fileStorage \u003d new FileStorage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" userList \u003d new TaskList(fileStorage.read());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" userList \u003d new TaskList();","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(\"File Empty\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" * Starts the class up.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" * @param args The arguments use to start the program.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" new Duke(\"Testing.txt\").run();","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" * Runs the UserInterface inputs and provide outputs.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" userInterface.showGreetings();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" boolean isCmdExit \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" while (!isCmdExit) {","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" String fullCommand \u003d userInterface.readCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" userInterface.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" c.execute(userList, userInterface, fileStorage);","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" isCmdExit \u003d c.isExit();","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" userInterface.showError(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" userInterface.showLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" userInterface.closeScanner();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" * Gets the response from the chat box inputs.","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"LinWanLeii"},"content":" * @param input The input users put in.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"LinWanLeii"},"content":" * @return A String output given out dependent on the input.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"LinWanLeii"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"LinWanLeii"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"LinWanLeii"},"content":" return c.execute(userList, userInterface, fileStorage);","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"LinWanLeii"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"LinWanLeii"},"content":" * Runs the greeting of the Chat Bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"LinWanLeii"},"content":" * @return A String that shows greetings.","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"LinWanLeii"},"content":" public String start() {","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"LinWanLeii"},"content":" return userInterface.showGreetings() + \"\\n Enter clear if you would like to start a new list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LinWanLeii":91,"-":1}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":" * The launcher class to work around classpath issues.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" * The GUI for Duke using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" private Duke duke \u003d new Duke(\"Testing.txt\");","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.util.concurrent.Executors;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import java.util.concurrent.ScheduledExecutorService;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import java.util.concurrent.TimeUnit;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" private Duke duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" * Starts the dialog box.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" DialogBox.getUserDialog(duke.start(), dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" private void delayedExit() {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" ScheduledExecutorService executorService \u003d Executors.newSingleThreadScheduledExecutor();","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" executorService.schedule(() -\u003e Platform.runLater(() -\u003e Platform.exit()), 3, TimeUnit.SECONDS);","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" executorService.shutdown();","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":" delayedExit();","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":70}},{"path":"src/main/java/dukeexception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package dukeexception;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" * The Exceptional class for any errors faced by the user inputs.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the exception when a method creates it.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * @param message The message that we want to output to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LinWanLeii":16}},{"path":"src/main/java/filestorage/FileStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package filestorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * Represents a class that will convey the user input to a file and also the other way around.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":"public class FileStorage {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" private final File fileData;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" public FileStorage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" this.fileData \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * Writes all the data from the taskList to the file.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @param userList The List that contains all the tasks by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If there is any situation where the FileWriter fails to write.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" public void write(TaskList userList) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" FileWriter fw \u003d new FileWriter(fileData);","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c userList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" fw.write(userList.get(i).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Writing Error\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" * Reads all the information on a textFile and load it back into the program","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" * @return ArrayList The list of all the task by user.","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If the content on the file cannot be recognised.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" public ArrayList\u003cTask\u003e read() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" ArrayList\u003cTask\u003e dataList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" Scanner scanner \u003d new Scanner(fileData);","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" Task task \u003d new Task();","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" String inputs \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" String info \u003d inputs.substring(9);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" assert !inputs.trim().startsWith(\"[ ]\") : \"There should be a allocated type for the task\";","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" if (inputs.trim().startsWith(\"[T]\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" task \u003d new Todo(info);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" } else if (inputs.trim().startsWith(\" [D]\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" String[] split \u003d info.split(\"\\\\(by: |\\\\)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":" task \u003d new Deadline(split[0], split[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":" } else if (inputs.trim().startsWith(\" [E]\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" String[] split \u003d info.split(\"\\\\(from: | to: |\\\\)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" task \u003d new Event(split[0], split[1], split[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"LinWanLeii"},"content":" isTaskMarked(task, inputs);","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"LinWanLeii"},"content":" if (!task.isItEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"LinWanLeii"},"content":" dataList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"LinWanLeii"},"content":" scanner.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"LinWanLeii"},"content":" return dataList;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"LinWanLeii"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"LinWanLeii"},"content":" private static void isTaskMarked(Task task, String inputs) {","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"LinWanLeii"},"content":" if (inputs.substring(6).startsWith(\"X\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"LinWanLeii"},"content":" task.markDone();","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"LinWanLeii":88}},{"path":"src/main/java/list/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package list;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * The class that stores Tasks inside an Arraylist.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" * Constructs method that will create a new TaskList.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" public TaskList() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" public TaskList(TaskList userList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" this.taskList \u003d convert(userList);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" * Converts a TaskList to an ArrayList.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * @param userList The TaskList that is going to be converted.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" * @return An Arraylist that is converted from TaskList.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" public ArrayList\u003cTask\u003e convert(TaskList userList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c userList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" taskList.add(i, userList.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" return taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" * Returns the size of the TaskList.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" * @return The size of the TaskList.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" public int size() {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" return taskList.size(); }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" * Gets the task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" * @param i The index of the task needed.","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" * @return The task that is called for.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" public Task get(int i) {","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" return taskList.get(i); }","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" * @param task The task that the user wants to add.","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" taskList.add(task); }","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" * Deletes a task depending on the index provided.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":" * @param i The index of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"LinWanLeii"},"content":" * @return The task that has been removed.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If the index is out of bound.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"LinWanLeii"},"content":" public Task deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"LinWanLeii"},"content":" if (i \u003e this.taskList.size() || i \u003c 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index provided.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"LinWanLeii"},"content":" Task removing \u003d this.taskList.get(i - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"LinWanLeii"},"content":" this.taskList.remove(i - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"LinWanLeii"},"content":" return removing;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"LinWanLeii"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"LinWanLeii"},"content":" * @param i The index of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"LinWanLeii"},"content":" * @return The task that is marked.","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If the index is out of bound.","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"LinWanLeii"},"content":" public Task markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"LinWanLeii"},"content":" if (i \u003e this.taskList.size() || i \u003c 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index provided.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"LinWanLeii"},"content":" Task marking \u003d this.taskList.get(i - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"LinWanLeii"},"content":" marking.markDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"LinWanLeii"},"content":" return marking;","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"LinWanLeii"},"content":" * UnMark a task as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"LinWanLeii"},"content":" * @param i The index of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"LinWanLeii"},"content":" * @return The task that is unmarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If the index is out of bound.","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"LinWanLeii"},"content":" public Task unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"LinWanLeii"},"content":" if (i \u003e this.taskList.size() || i \u003c 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index provided.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"LinWanLeii"},"content":" Task unMarking \u003d this.taskList.get(i - 1);","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"LinWanLeii"},"content":" unMarking.unmarkDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"LinWanLeii"},"content":" return unMarking;","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"LinWanLeii"},"content":" * Clears the TaskList","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"LinWanLeii"},"content":" * @return An empty list","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"LinWanLeii"},"content":" public TaskList clear() {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"LinWanLeii"},"content":" this.taskList.clear();","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"LinWanLeii"},"content":" return new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":124}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import command.ByeCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import command.ClearCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import command.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import command.DeadlineCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"import command.DeleteCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"import command.DeleteMultipleCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"import command.EventCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":"import command.FindCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":"import command.ListCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"import command.MarkCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"import command.TodoCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":"import command.UnmarkCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" * The parser that takes the input data and checks its syntax followed bt execute it.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":"public class Parser {","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" //final String UNKNOWN_COMMAND \u003d \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * Takes the user input and calls the right command for it.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" * @param fullCommand The user command input.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" * @return A command that will be executed base on the users input.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" * @throws DukeException If the command is invalid in any ways.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" String[] split \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" String commandAction \u003d split[0];","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" switch (commandAction) {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" case \"list\":","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" case \"mark\":","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003e 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Please state in this format (mark 1)\");","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" return new MarkCommand(Integer.parseInt(split[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index\");","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003e 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Please state in this format (unmark 1)\");","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" return new UnmarkCommand(Integer.parseInt(split[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index\");","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" case \"delete\":","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":" if (!split[1].contains(\",\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003e 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Please state in this format (delete 1)\");","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" return new DeleteCommand(Integer.parseInt(split[1]));","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"Invalid Index\");","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":" return new DeleteMultipleCommand(split[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"LinWanLeii"},"content":" case \"todo\":","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003c 2 || split[1].isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"LinWanLeii"},"content":" return new TodoCommand(split[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"LinWanLeii"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003c 2 || split[1].isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a Tasks.Deadline cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"LinWanLeii"},"content":" String[] info \u003d split[1].split(\"/by \");","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"LinWanLeii"},"content":" if (info.length !\u003d 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline is invalid.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"LinWanLeii"},"content":" String deadDate \u003d LocalDate.parse(info[1]).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"LinWanLeii"},"content":" return new DeadlineCommand(info[0], deadDate);","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"LinWanLeii"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a time must be in yyyy-mm-dd\");","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"LinWanLeii"},"content":" case \"event\":","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"LinWanLeii"},"content":" if (split.length \u003c 2 || split[1].isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a Tasks.Event cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"LinWanLeii"},"content":" String[] infoEvent \u003d split[1].split(\"/from | /to \");","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"LinWanLeii"},"content":" if (infoEvent.length !\u003d 3) {","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a event is invalid.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"LinWanLeii"},"content":" String startDate \u003d LocalDate.parse(infoEvent[1]).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"LinWanLeii"},"content":" String endDate \u003d LocalDate.parse(infoEvent[2]).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"LinWanLeii"},"content":" return new EventCommand(infoEvent[0], startDate, endDate);","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"LinWanLeii"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a time must be in yyyy-mm-dd\");","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"LinWanLeii"},"content":" case \"clear\":","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"LinWanLeii"},"content":" return new ClearCommand();","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"LinWanLeii"},"content":" case \"bye\":","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"LinWanLeii"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"LinWanLeii"},"content":" case \"find\":","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"LinWanLeii"},"content":" return new FindCommand(split[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"LinWanLeii"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"LinWanLeii"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":115}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package tasks;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" * The class that will create a deadline line task.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the tasks class.","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":" private final String deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the method.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" * @param deadline The deadline of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" super(name);","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" super.setType(\"D\");","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" * Represent the task in string.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" * @return The syntax that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" public String toString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" return super.toString() + \"(by: \" + deadline + \")\";","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":30}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package tasks;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" * The class that will create an Event line task.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the tasks class.","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":" private final String start;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" private final String end;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the method.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" * @param start The start date of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" * @param end The end date of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" public Event(String name, String start, String end) {","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" super(name);","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" super.setType(\"E\");","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" * Represents the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" * @return The syntax that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" public String toString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" return super.toString() + \"(from: \" + start + \" to: \" + end + \")\";","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":33}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package tasks;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" * The parent class that represents the task that the user will input.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"public class Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":" private String type;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":" private String name;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" private boolean marked;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" private boolean isEmpty \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the method for task.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" public Task(String name) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" this.marked \u003d false;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" public Task() {","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" this.isEmpty \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" public boolean isItEmpty() { return isEmpty; }","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" public void setType(String type) {","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" * Marks a task as marked.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" public void markDone() {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":" marked \u003d true;","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" * UnMarks a task.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" public void unmarkDone() {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" marked \u003d false;","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" * Represent the task in String.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" * @return The syntax that will be shown to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":" public String toString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" assert !type.equals(\" \") : \"Type must be a character related to its task type\";","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" return \" [\" + type + \"]\" + \"[\" + (marked ? \"X\" : \" \") + \"] \" + name;","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":51}},{"path":"src/main/java/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package tasks;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":" * The class that will create a Todo line task.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":" * This class extends from the tasks class.","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the method.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" public Todo(String name) {","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" super(name);","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" super.setType(\"T\");","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"LinWanLeii":17}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import list.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" * The class that is used to show the user interface.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" private final String lineBreak \u003d \"\\n________________________________________\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" * Constructs the method to initialise the UI.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" * Reads the user input and trims the spaces at both ends.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" * @return A string of the input.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" return this.scanner.nextLine().trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"LinWanLeii"},"content":" * Returns a line.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"LinWanLeii"},"content":" public void showLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"LinWanLeii"},"content":" System.out.println(lineBreak);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"LinWanLeii"},"content":" * Returns out the error.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"LinWanLeii"},"content":" * @param e The error code produced.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"LinWanLeii"},"content":" public String showError(String e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"LinWanLeii"},"content":" return e;","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"LinWanLeii"},"content":" * Shows task being added.","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"LinWanLeii"},"content":" * @param task The task to add.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"LinWanLeii"},"content":" * @param userList The TaskList to add to.","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"LinWanLeii"},"content":" public String showTaskAdded(Task task, TaskList userList) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"LinWanLeii"},"content":" String top \u003d (\"Got it. I\u0027ve added this task: \\n\" + task);","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"LinWanLeii"},"content":" int size \u003d userList.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"LinWanLeii"},"content":" String bottom \u003d (\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"LinWanLeii"},"content":" return top + \"\\n\" + bottom;","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"LinWanLeii"},"content":" * Greets the user at the start.","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"LinWanLeii"},"content":" public String showGreetings() {","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"LinWanLeii"},"content":" String name \u003d \"CathyTheChattyCat\";","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"LinWanLeii"},"content":" String top \u003d (lineBreak + \"Hello! I\u0027m \" + name);","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"LinWanLeii"},"content":" String bottom \u003d (\"What can I do for you?\" + lineBreak);","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"LinWanLeii"},"content":" return top + \"\\n\" + bottom;","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"LinWanLeii"},"content":" * Shows that a task is marked.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"LinWanLeii"},"content":" * @param task The task being marked.","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"LinWanLeii"},"content":" public String showMarkedTask(Task task) {","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"LinWanLeii"},"content":" return (\"Nice! I\u0027ve marked this task as done: \\n\\t\" + task);","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"LinWanLeii"},"content":" * Shows that a task is unmarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"LinWanLeii"},"content":" * @param task The task being unmarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"LinWanLeii"},"content":" public String showUnMarkedTask(Task task) {","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"LinWanLeii"},"content":" return (\"OK, I\u0027ve unmarked this task as not done yet: \\n\\t\" + task);","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"LinWanLeii"},"content":" * Shows that a task is deleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"LinWanLeii"},"content":" * @param task The task being deleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"LinWanLeii"},"content":" * @param userList The userList that is deleted from.","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"LinWanLeii"},"content":" public String showDeleteTask(Task task, TaskList userList) {","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"LinWanLeii"},"content":" String top \u003d (\"Noted. I\u0027ve removed this task: \\n\" + task);","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"LinWanLeii"},"content":" String bottom \u003d (\"Now you have \" + userList.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"LinWanLeii"},"content":" return top + \"\\n\" + bottom;","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"LinWanLeii"},"content":" * Shows that the task is cleared.","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"LinWanLeii"},"content":" public String showClearTask() {","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"LinWanLeii"},"content":" return (\"Noted. I\u0027ve removed all the tasks.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"LinWanLeii"},"content":" * Shows all the task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"LinWanLeii"},"content":" * @param userList The list the task is from.","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"LinWanLeii"},"content":" public String showList(TaskList userList) {","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"LinWanLeii"},"content":" //System.out.println(lineBreak);","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"LinWanLeii"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"LinWanLeii"},"content":" String top \u003d (\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c userList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"LinWanLeii"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"LinWanLeii"},"content":" builder.append(index).append(\".\").append(userList.get(i)).append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"LinWanLeii"},"content":" return top + \"\\n\" + builder;","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"LinWanLeii"},"content":" * Returns an input that multiple changes has been made.","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"LinWanLeii"},"content":" * @param changedList The tasks that has been modified.","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"LinWanLeii"},"content":" * @param newList The TaskList after all the changes being applied.","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"LinWanLeii"},"content":" * @param input The type of changes that was made.","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"LinWanLeii"},"content":" * @return A string that has the relevant changes.","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"LinWanLeii"},"content":" public String showNewList(TaskList changedList, TaskList newList, String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"LinWanLeii"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"LinWanLeii"},"content":" String delete \u003d (\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"LinWanLeii"},"content":" String marked \u003d (\"Nice! I\u0027ve marked this tasks as done:\");","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"LinWanLeii"},"content":" String unMarked \u003d (\"OK, I\u0027ve unmarked this tasks as not done yet:\");","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c changedList.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"LinWanLeii"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"LinWanLeii"},"content":" builder.append(index).append(\".\").append(changedList.get(i)).append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"LinWanLeii"},"content":" String bottom \u003d (\"Now you have \" + newList.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"LinWanLeii"},"content":" if (input.equals(\"del\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"LinWanLeii"},"content":" return delete + \"\\n\" + builder + bottom;","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"LinWanLeii"},"content":" if (input.equals(\"mark\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"LinWanLeii"},"content":" return marked + \"\\n\" + builder + bottom;","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"LinWanLeii"},"content":" return unMarked + \"\\n\" + builder + bottom;","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"LinWanLeii"},"content":" * Says BYE.","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"LinWanLeii"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"LinWanLeii"},"content":" return (\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":156,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"LinWanLeii"},"content":" public void closeScanner() {","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"LinWanLeii"},"content":" scanner.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"LinWanLeii"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":162,"author":{"gitId":"LinWanLeii"},"content":" * Shows the result found base on the word given.","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"LinWanLeii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"LinWanLeii"},"content":" * @param foundList The list of found tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"LinWanLeii"},"content":" * @return A string of all the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"LinWanLeii"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":167,"author":{"gitId":"LinWanLeii"},"content":" public String showFoundResults(TaskList foundList) {","lastModifiedDate":"2023-09-08"},{"lineNumber":168,"author":{"gitId":"LinWanLeii"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":169,"author":{"gitId":"LinWanLeii"},"content":" String top \u003d (\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-08"},{"lineNumber":170,"author":{"gitId":"LinWanLeii"},"content":" for (int i \u003d 0; i \u003c foundList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"LinWanLeii"},"content":" int index \u003d i + 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"LinWanLeii"},"content":" builder.append(index).append(\".\").append(foundList.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"LinWanLeii"},"content":" return top + \"\\n\" + builder;","lastModifiedDate":"2023-09-08"},{"lineNumber":175,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":176}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"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-08"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" \u003cFont size\u003d\"17.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"LinWanLeii":23}},{"path":"src/test/java/seedu/duke/FileStorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package seedu.duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import filestorage.FileStorage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":"public class FileStorageTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" public void testingFileSuccess() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" FileStorage storage \u003d new FileStorage(\"testing.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" assertEquals(storage.read().size(), 6);","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" public void emptyFile_success() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" FileStorage storage \u003d new FileStorage(\"nothing.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" assertEquals(storage.read().size(), 0);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"LinWanLeii"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":32}},{"path":"src/test/java/seedu/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"package seedu.duke; //same package as the class being tested","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"LinWanLeii"},"content":"import dukeexception.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"LinWanLeii"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"LinWanLeii"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"LinWanLeii"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"LinWanLeii"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"LinWanLeii"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"LinWanLeii"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"LinWanLeii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"LinWanLeii"},"content":" public void simpleToDoTest(){","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"LinWanLeii"},"content":" String str \u003d new Todo(\"book\").toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"LinWanLeii"},"content":" assertEquals(str,\" [T][ ] book\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"LinWanLeii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"LinWanLeii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"LinWanLeii"},"content":" public void exceptionTest() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"LinWanLeii"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"LinWanLeii"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"LinWanLeii"},"content":" Parser.parse(\"deadline book /by 10\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"LinWanLeii"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"LinWanLeii"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"LinWanLeii"},"content":" assertEquals(e.getMessage(), \"☹ OOPS!!! The description of a time must be in yyyy-mm-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"LinWanLeii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"LinWanLeii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"LinWanLeii":28}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LinWanLeii"},"content":"T | 0 | read book","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"LinWanLeii"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"LinWanLeii":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":"LinWanLeii"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-08"},{"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":{"LinWanLeii":1,"-":20}}] diff --git a/LinWanLeii_ip_master/commits.json b/LinWanLeii_ip_master/commits.json index f497647c..bcf9011f 100644 --- a/LinWanLeii_ip_master/commits.json +++ b/LinWanLeii_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"LinWanLeii":[{"date":"2023-08-24","commitResults":[{"hash":"e782a3e2d8fa814d7d559d967a6b27d4b83d81a4","isMergeCommit":false,"messageTitle":"Done till lvl 4","messageBody":"","tags":["Level-4","Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":164,"deletions":0}}},{"hash":"b08cb08e24776bfa5cb6eeee3714b0cae21c3fe7","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":10}}},{"hash":"ea54bc5ca95be7c751e76169c0e725f6e2e98cc8","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":16}}},{"hash":"5803218b900ef67baf4899d03873879d1584b498","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":103}}},{"hash":"386c84d025a7f8a9cbe0a3137e3a7fe49f4d88b7","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"0eb42564ef17920f98db30b4a51e7edb40fa36d4","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"04e00e54439ecec34fb78a51d1fed4ed369bfca2","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":118}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f0163f5d8d76408b392a265fe8c70f8cccb456d3","isMergeCommit":false,"messageTitle":"Update body","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":91}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3171722d5f471dc05c1e87d20695ede2758ed772","isMergeCommit":false,"messageTitle":"Add writing and reading file function","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":208,"deletions":114}}},{"hash":"ddd9ef4a220a940987e2de14dfad0d291d1650d7","isMergeCommit":false,"messageTitle":"Add Local Dates and times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":7},"java":{"insertions":45,"deletions":7}}}]},{"date":"2023-09-01","commitResults":[{"hash":"4c2b3c7ed9ead45db4b4a6918d99b5b7523a40c5","isMergeCommit":false,"messageTitle":"Add More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5},"java":{"insertions":361,"deletions":16}}},{"hash":"f2967a5effe04e0a75938bd6130c915dcdc26880","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":132,"deletions":29}}},{"hash":"75f78857490f381d7a41c51577553d24536b2e9f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/LinWanLeii/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"29dd78b8a0b63d13f1f610beb24d6da7efb96143","isMergeCommit":false,"messageTitle":"Add testcases and Jar","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":6,"deletions":0}}},{"hash":"1f6eff5af78510feeb03f360b4d8ef27686024ba","isMergeCommit":false,"messageTitle":"Add Javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"17e62e4dac9b4d4fcedcf99eac7ab7d4135c2aec","isMergeCommit":false,"messageTitle":"Fix JavaDocs","messageBody":"","tags":["A-JavaDoc","A-CodingStandards"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":432,"deletions":25}}},{"hash":"50eb515ab4c5f43bb934199a9c91c1ed64ec5323","isMergeCommit":false,"messageTitle":"Add find function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":33,"deletions":0}}},{"hash":"7c03e0b2e9584c35eb42357a06020a07e51cc60d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Add find function\n\n# Conflicts:\n#\tTesting.txt\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"cfaefce12eaa462e17ce372da40669623a178c2c","isMergeCommit":false,"messageTitle":"add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":425,"deletions":543}}}]},{"date":"2023-09-08","commitResults":[{"hash":"7bf4ce51ce95c6647064f689b94c49cd834f3523","isMergeCommit":false,"messageTitle":"Added Gui for CathyTheChattyCat","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":1},"txt":{"insertions":1,"deletions":5},"fxml":{"insertions":40,"deletions":0},"java":{"insertions":257,"deletions":54},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-15","commitResults":[{"hash":"a1b7601b81136f2b2714ccbc0f9d196d4fe1354a","isMergeCommit":false,"messageTitle":"Update build.gradle file Need to add a Jar file through shadowjar","messageBody":"This is to ensure that the application will run even if the user does not have JavaFX on their device\n\nShadowJar from gradle was being used\n\nLet\u0027s ensure that we use gradle to its best ability because it is good\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"txt":{"insertions":1,"deletions":2}}},{"hash":"fddbdd94d7c504629c4c6d7b4bb95fcfb6b8d35d","isMergeCommit":false,"messageTitle":"Added Assertions and edited FileStorage file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":5,"deletions":2}}},{"hash":"3ca15dc80b54a0013c6f03ed895f5bd0725aad5d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from LinWanLeii/Branch-A-Assertions","messageBody":"Added Assertions and edited FileStorage file","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"LinWanLeii":{"java":1313,"md":2,"fxml":40,"sh":0,"bat":1,"gradle":9,"txt":2}},"authorContributionVariance":{"LinWanLeii":83022.516},"authorDisplayNameMap":{"LinWanLeii":"CS2103T-W08-4 LIN .. LEI"}} +{"authorDailyContributionsMap":{"LinWanLeii":[{"date":"2023-08-24","commitResults":[{"hash":"e782a3e2d8fa814d7d559d967a6b27d4b83d81a4","isMergeCommit":false,"messageTitle":"Done till lvl 4","messageBody":"","tags":["Level-4","Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":164,"deletions":0}}},{"hash":"b08cb08e24776bfa5cb6eeee3714b0cae21c3fe7","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":10}}},{"hash":"ea54bc5ca95be7c751e76169c0e725f6e2e98cc8","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":16}}},{"hash":"5803218b900ef67baf4899d03873879d1584b498","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":103}}},{"hash":"386c84d025a7f8a9cbe0a3137e3a7fe49f4d88b7","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"0eb42564ef17920f98db30b4a51e7edb40fa36d4","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"04e00e54439ecec34fb78a51d1fed4ed369bfca2","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":118}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f0163f5d8d76408b392a265fe8c70f8cccb456d3","isMergeCommit":false,"messageTitle":"Update body","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":91}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3171722d5f471dc05c1e87d20695ede2758ed772","isMergeCommit":false,"messageTitle":"Add writing and reading file function","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":208,"deletions":114}}},{"hash":"ddd9ef4a220a940987e2de14dfad0d291d1650d7","isMergeCommit":false,"messageTitle":"Add Local Dates and times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":7},"java":{"insertions":45,"deletions":7}}}]},{"date":"2023-09-01","commitResults":[{"hash":"4c2b3c7ed9ead45db4b4a6918d99b5b7523a40c5","isMergeCommit":false,"messageTitle":"Add More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5},"java":{"insertions":361,"deletions":16}}},{"hash":"f2967a5effe04e0a75938bd6130c915dcdc26880","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":132,"deletions":29}}},{"hash":"75f78857490f381d7a41c51577553d24536b2e9f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/LinWanLeii/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"29dd78b8a0b63d13f1f610beb24d6da7efb96143","isMergeCommit":false,"messageTitle":"Add testcases and Jar","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":6,"deletions":0}}},{"hash":"1f6eff5af78510feeb03f360b4d8ef27686024ba","isMergeCommit":false,"messageTitle":"Add Javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"17e62e4dac9b4d4fcedcf99eac7ab7d4135c2aec","isMergeCommit":false,"messageTitle":"Fix JavaDocs","messageBody":"","tags":["A-JavaDoc","A-CodingStandards"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":432,"deletions":25}}},{"hash":"50eb515ab4c5f43bb934199a9c91c1ed64ec5323","isMergeCommit":false,"messageTitle":"Add find function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":33,"deletions":0}}},{"hash":"7c03e0b2e9584c35eb42357a06020a07e51cc60d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Add find function\n\n# Conflicts:\n#\tTesting.txt\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"cfaefce12eaa462e17ce372da40669623a178c2c","isMergeCommit":false,"messageTitle":"add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":425,"deletions":543}}}]},{"date":"2023-09-08","commitResults":[{"hash":"7bf4ce51ce95c6647064f689b94c49cd834f3523","isMergeCommit":false,"messageTitle":"Added Gui for CathyTheChattyCat","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":1},"txt":{"insertions":1,"deletions":5},"fxml":{"insertions":40,"deletions":0},"java":{"insertions":257,"deletions":54},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-15","commitResults":[{"hash":"a1b7601b81136f2b2714ccbc0f9d196d4fe1354a","isMergeCommit":false,"messageTitle":"Update build.gradle file Need to add a Jar file through shadowjar","messageBody":"This is to ensure that the application will run even if the user does not have JavaFX on their device\n\nShadowJar from gradle was being used\n\nLet\u0027s ensure that we use gradle to its best ability because it is good\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"txt":{"insertions":1,"deletions":2}}},{"hash":"fddbdd94d7c504629c4c6d7b4bb95fcfb6b8d35d","isMergeCommit":false,"messageTitle":"Added Assertions and edited FileStorage file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":5,"deletions":2}}},{"hash":"3ca15dc80b54a0013c6f03ed895f5bd0725aad5d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from LinWanLeii/Branch-A-Assertions","messageBody":"Added Assertions and edited FileStorage file","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"5ea074ef9ef65b1d3ed89ce7e34d30541856f786","isMergeCommit":false,"messageTitle":"Updated CodeQuality, Assertions and Javadocs Make some edits on codes to improve the quality and readability, update more useful assertions and better javadocs descriptions.","messageBody":"This is so that anyone can easily understand what i happening to my code when reading.\n\nLet\u0027s edit the code and ensure that everything is up to standard.\n\nStandards have to be upholded\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":279,"deletions":252}}},{"hash":"a7599f27309c67286cc956faf7487020bb4e94d8","isMergeCommit":true,"messageTitle":"Merge pull request #2 from LinWanLeii/Branch-A-CodeQuality","messageBody":"Updated CodeQuality, Assertions and Javadocs","fileTypesAndContributionMap":{}},{"hash":"bad54c14d1f9c82d940a5c42de989180cf04d805","isMergeCommit":false,"messageTitle":"Added C-MassOps but only for delete command and Added Streams","messageBody":"","tags":["BCD-Extension","A-Streams"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":3},"java":{"insertions":94,"deletions":7}}}]}]},"authorFileTypeContributionMap":{"LinWanLeii":{"java":1427,"md":2,"fxml":40,"sh":0,"bat":1,"gradle":9,"txt":8}},"authorContributionVariance":{"LinWanLeii":88848.22},"authorDisplayNameMap":{"LinWanLeii":"CS2103T-W08-4 LIN .. LEI"}} diff --git a/LoMaply_ip_master/authorship.json b/LoMaply_ip_master/authorship.json index 44e429c5..0c65ed41 100644 --- a/LoMaply_ip_master/authorship.json +++ b/LoMaply_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-06"},{"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":"LoMaply"},"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-06"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":22,"LoMaply":2}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" String javaFxVersion \u003d \u002717.0.8\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"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":"LoMaply"},"content":" mainClass.set(\"gui.Launcher\")","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" archiveBaseName \u003d \"jyuuni\"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" archiveVersion \u003d \"v0.2\"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":42,"LoMaply":21}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" * Class to initialise and run the chatbot with GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public class Duke {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" * Constructor for a chatbot instance.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" public Duke() {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" storage \u003d new Storage(\"./data\");","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" * Loads data for current instance of chatbot from data file.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" public String loadData() {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" return storage.loadFromFile(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" * Parses user inputs for appropriate response.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" * @param input User input.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot response to be displayed on GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" String output \u003d Parser.parseCommand(input, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" storage.writeToFile(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" return output;","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":40}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import taskutil.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import taskutil.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import taskutil.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import taskutil.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" * Contains methods to read commands and dates from user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" // Format of datetime to be received as user input, saved to or read from data file.","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" private static final DateTimeFormatter DATE_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * Parses Date from string to LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" * @param dateString String in the DATE_FORMAT form.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" * @return LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" * @throws DateTimeParseException To be handled in parseUserInput().","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" public static LocalDateTime parseDate(String dateString) throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" assert dateString !\u003d null : \"String to be parsed into date cannot be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" return LocalDateTime.parse(dateString, DATE_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" * Converts LocalDateTime object to String for storing in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" * @param dateTime LocalDateTime object to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" * @return String in the DATE_FORMAT form.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" public static String formatDate(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" assert dateTime !\u003d null : \"LocalDateTime object to be formatted cannot be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" return dateTime.format(DATE_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" * Parses both the mark and unmark commands.","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing index of task to be modified.","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList containing all tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" * @param isCompleted New status of task.","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot output for mark/unmark command.","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" private static String parseSetMark(String[] splitInput, TaskList taskList, boolean isCompleted) {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" return taskList.setStatusByIndex(index, isCompleted);","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" // If argument of mark/unmark is not a number.","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" return \"You need to provide a valid number:\\n\" + \" eg. mark/unmark 1\";","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" * Parses delete command.","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing index of task to be deleted.","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList containing all tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" private static void parseDelete(String[] splitInput, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" taskList.deleteTask(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" // If argument of \"delete\" is not a number.","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"You need to provide a valid number:\\n\" + \" eg. delete 2\");","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" * Parses new To-do task command.","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing arguments for new To-do task.","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList for newly generated task to be added to.","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" private static void parseTodo(String[] splitInput, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" if (splitInput.length !\u003d 2) { // Checks for presence of description before creating task.","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" + \" todo [DESCRIPTION]\");","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" Task todo \u003d new Todo(splitInput[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(todo, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" * Parses new Deadline task command.","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing arguments for new Deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList for newly generated task to be added to.","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" private static void parseDeadline(String[] splitInput, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" String[] deadVar \u003d splitInput[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":" Task deadline \u003d new Deadline(deadVar[0], parseDate(deadVar[1]));","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(deadline, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // String not split due to improper format","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" + \" deadline [DESCRIPTION] /by [dd.mm.yyyy tttt]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) { // Date not formatted properly","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"Try the date format [dd.mm.yyyy tttt]:\"","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"LoMaply"},"content":" + \"\\n eg. [05.08.2020 1500] for 5 Aug 2020, 3PM\");","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"LoMaply"},"content":" * Parses new Event task command.","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing arguments for new Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList for newly generated task to be added to.","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"LoMaply"},"content":" private static void parseEvent(String[] splitInput, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"LoMaply"},"content":" // Using 1 split statement that splits by /(from|to) allows wrong combos like \"/to x /from x\".","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"LoMaply"},"content":" String[] eventVar \u003d splitInput[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"LoMaply"},"content":" String[] times \u003d eventVar[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"LoMaply"},"content":" LocalDateTime start \u003d parseDate(times[0]);","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"LoMaply"},"content":" LocalDateTime end \u003d parseDate(times[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"LoMaply"},"content":" if (start.isAfter(end)) { // Checks that event start \u003c\u003d end","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"An event cannot end before it starts... might wanna check your dates\");","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"LoMaply"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"LoMaply"},"content":" Task event \u003d new Event(eventVar[0], start, end);","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(event, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // String not split due to improper format","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"LoMaply"},"content":" + \" event [DESCRIPTION] /from [dd.mm.yyyy tttt] /to [dd.mm.yyyy tttt]\");","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) { // Date not formatted properly","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"Try the date format [dd.mm.yyyy tttt]:\"","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"LoMaply"},"content":" + \"\\n eg. [05.08.2020 1500] for 5 Aug 2020, 3PM\");","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"LoMaply"},"content":" private static String parseSchedule(String[] splitInput, TaskList taskList) {","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"LoMaply"},"content":" LocalDateTime queryDate \u003d Parser.parseDate(splitInput[1]);","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"LoMaply"},"content":" return taskList.filterByTime(queryDate);","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"LoMaply"},"content":" return \"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"LoMaply"},"content":" + \" schedule [dd.mm.yyyy tttt]\";","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) { // Date not formatted properly","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"LoMaply"},"content":" return \"Try the date format [dd.mm.yyyy tttt]:\"","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"LoMaply"},"content":" + \"\\n eg. [05.08.2020 1500] for 5 Aug 2020, 3PM\";","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"LoMaply"},"content":" * Parses and acts on user input for chatbot.","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"LoMaply"},"content":" * @param userInput String to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList to be modified based on command used.","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot reply to user command.","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"LoMaply"},"content":" public static String parseCommand(String userInput, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"LoMaply"},"content":" String[] splitInput \u003d userInput.split(\" \", 2); // Limit 2 to only separate out command word.","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"LoMaply"},"content":" switch (splitInput[0].toLowerCase()) { // break statements are redundant due to return statements.","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"LoMaply"},"content":" case \"mark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":166,"author":{"gitId":"LoMaply"},"content":" return parseSetMark(splitInput, taskList, true);","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"LoMaply"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"LoMaply"},"content":" return parseSetMark(splitInput, taskList, false);","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"LoMaply"},"content":" case \"delete\":","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"LoMaply"},"content":" parseDelete(splitInput, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"LoMaply"},"content":" return Ui.getOutMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"LoMaply"},"content":" case \"todo\":","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"LoMaply"},"content":" parseTodo(splitInput, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"LoMaply"},"content":" return Ui.getOutMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"LoMaply"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"LoMaply"},"content":" parseDeadline(splitInput, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"LoMaply"},"content":" return Ui.getOutMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"LoMaply"},"content":" case \"event\":","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"LoMaply"},"content":" parseEvent(splitInput, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"LoMaply"},"content":" return Ui.getOutMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"LoMaply"},"content":" case \"schedule\":","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"LoMaply"},"content":" return parseSchedule(splitInput, taskList);","lastModifiedDate":"2023-09-13"},{"lineNumber":183,"author":{"gitId":"LoMaply"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"LoMaply"},"content":" return taskList.queryList(splitInput[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"LoMaply"},"content":" case \"list\":","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"LoMaply"},"content":" return taskList.listToString();","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"LoMaply"},"content":" case \"end\":","lastModifiedDate":"2023-08-28"},{"lineNumber":188,"author":{"gitId":"LoMaply"},"content":" return \"Come back if you need anything else!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"LoMaply"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":190,"author":{"gitId":"LoMaply"},"content":" return \"Sorry, I don\u0027t recognise this comment :(\";","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":192,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":193,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":193}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import taskutil.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":" * Contains methods to format text output when chatbot adds/deletes a task.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" private static String outMessage;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" * Formats chatbot output specifically for adding/removing tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" public static void taskOutput(Task task, Action action, int size) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" String taskMessage \u003d \"I\u0027ve %s the following task as requested:\\n %s\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" + \"There are currently %d tasks in your list.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" assert task !\u003d null : \"Task cannot be an empty object\";","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" assert size \u003e\u003d 0 : \"Task list must have at least 0 tasks\";","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" if (action \u003d\u003d Action.ADD) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" outMessage \u003d String.format(taskMessage, \"added\", task.toString(), size);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" } else if (action \u003d\u003d Action.REMOVE) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" outMessage \u003d String.format(taskMessage, \"removed\", task.toString(), size);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" * Returns chatbot output after adding task.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot output.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" public static String getOutMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" return outMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" * Sets chatbout output after adding task.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" * @param outMessage Message to be output.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" public static void setOutMessage(String outMessage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" Ui.outMessage \u003d outMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" * Enum to denote whether task was added or removed from tasklist.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" public enum Action {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" ADD,","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" REMOVE","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":54}},{"path":"src/main/java/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" clipToCircle(displayPicture);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" * Adds circular border to ImageView object for profile picture .","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" * @param img ImageView object to be modified.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" private static void clipToCircle(ImageView img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" Circle circle \u003d new Circle(33);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" circle.setCenterX(img.getFitWidth() / 2);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" circle.setCenterY(img.getFitHeight() / 2);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" img.setClip(circle);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" * Generates DialogBox for user input display.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" * @param text User text input.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" * @param img Profile picture of user.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" * @return DialogBox object for GUI display.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" * Generates DialogBox for chatbot input display.","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" * @param text Chatbot text output.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" * @param img Profile picture of chatbot.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" * @return DialogBox object for GUI display.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":88}},{"path":"src/main/java/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":" * Host main method to start chatbot GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":12}},{"path":"src/main/java/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" * A GUI for duke.Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" // Preload chatbot with data from storage file and print status to console.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" System.out.println(duke.loadData());","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":35}},{"path":"src/main/java/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" * Controller for gui.MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/gigachad.jpg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Wojak_cropped.jpg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" * Creates two dialog boxes, one echoing user input and the other containing duke.Duke\u0027s reply and then","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" * appends them to the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" if (input.equalsIgnoreCase(\"end\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" Platform.exit();","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":57}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import taskutil.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"import taskutil.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"import taskutil.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"import taskutil.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * Contains methods to create and edit file directory for storing and loading chatbot data.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" private static final String FILE_NAME \u003d \"TaskData.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" private final String fileDirectory;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" private final String fileLocation; // fileLocation concatenates fileDirectory and FILE_NAME.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" * Constructor for Storage object, containing location of data tile.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" * @param fileDirectory File location of data file.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" public Storage(String fileDirectory) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" this.fileDirectory \u003d fileDirectory;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" this.fileLocation \u003d fileDirectory + \"/\" + FILE_NAME;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" * Creates directory and txt file for storing task data if they do not exist.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" * @return True if directory and txt file exist/created successfully.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" private boolean openFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" File directory \u003d new File(fileDirectory);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" File dataFile \u003d new File(fileDirectory + \"/\" + FILE_NAME);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" if (directory.mkdir() \u0026\u0026 dataFile.createNewFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" System.out.println(\"File to store task data have been created and stored at:\\n \"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" + fileDirectory + \"/\" + FILE_NAME);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" * Write data from ArrayList of tasks to a file.","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" * @param taskList An ArrayList of tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" public void writeToFile(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" FileWriter file \u003d new FileWriter(fileLocation);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" file.write(taskList.listToStringData());","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" file.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" * Loads task data from txt file to chatbot.","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" * @return String representing result of loading data from file.","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" public String loadFromFile(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" if (!this.openFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" return \"An error occured where the file cannot be read\";","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" assert taskList !\u003d null : \"TaskList loading in data cannot be a null object.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" File dataFile \u003d new File(fileLocation);","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" Scanner reader \u003d new Scanner(dataFile);","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" String[] splitInput \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" boolean isDone \u003d splitInput[1].equals(\"X\");","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" // Data is in format [type, isDone, title, from/by, to], from/by/to are only present depending on type.","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" Task currentTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":" switch(splitInput[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" currentTask \u003d new Todo(splitInput[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" currentTask \u003d new Deadline(splitInput[2], Parser.parseDate(splitInput[3]));","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" LocalDateTime start \u003d Parser.parseDate(splitInput[3]);","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" LocalDateTime end \u003d Parser.parseDate(splitInput[4]);","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":" currentTask \u003d new Event(splitInput[2], start, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" return String.format(\"Unknown symbol [%s] detected\", splitInput[0]);","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":" currentTask.setStatus(isDone);","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(currentTask, false);","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // File formatted with wrong no. of \" | \" dividers for task types.","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"LoMaply"},"content":" return \"There seems to be a problem with reading in data from:\\n [\" + fileLocation","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"LoMaply"},"content":" + \"]\\n\\n Proceeding will overwrite the current data file.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"LoMaply"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"LoMaply"},"content":" return \"File loaded successfully :D\";","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LoMaply":119}},{"path":"src/main/java/taskutil/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" * Class for Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime limit;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" * Constructor for Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * @param limit Deadline of task as a LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" public Deadline(String title, LocalDateTime limit) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" this.limit \u003d limit;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" * Checks that input datetime is before deadline.","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" * @param localDateTime DateTime to be considered.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" * @return Whether deadline is under schedule of input datetime.","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" public boolean isUnderSchedule(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" return limit.isAfter(localDateTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" String time \u003d String.format(\" (by: %s)\", limit.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" return \"[D]\" + super.toString() + time;","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" * Converts Deadline task to a string for storing in data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" return \"D\" + super.toFileString() + \" | \" + Parser.formatDate(limit);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":50}},{"path":"src/main/java/taskutil/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" * Class for Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" * Constructor for Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" * @param start Start of Event as LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" * @param end End of Event as LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" public Event(String title, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" * Checks that input datetime falls within start/end of the event.","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" * @param localDateTime DateTime to be considered.","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" * @return Whether event is under schedule of input datetime.","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" public boolean isUnderSchedule(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" return localDateTime.isBefore(end) \u0026\u0026 localDateTime.isAfter(start);","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" String from \u003d start.format(DISPLAY_FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" String to \u003d end.format(DISPLAY_FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" String time \u003d String.format(\" (from: %s to: %s)\", from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" return \"[E]\" + super.toString() + time;","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" * Converts Event task to a string for storing in data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" String period \u003d String.format(\" | %s | %s\", Parser.formatDate(start), Parser.formatDate(end));","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" return \"E\" + super.toFileString() + period;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":56}},{"path":"src/main/java/taskutil/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" * Class for Task objects and methods to modify.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" // Format of date to be displayed to user.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" protected static final DateTimeFormatter DISPLAY_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy, hh:mm a\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" protected String title;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" protected Boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * Constructor for general Task object, called in subclasses.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" public Task(String title) {","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" this.title \u003d title;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" * Abstract method to determine if a task will be listed under the schedule of a particular day.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" * @param localDateTime DateTime to be considered.","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" * @return Whether task should be in the schedule for input.","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" abstract boolean isUnderSchedule(LocalDateTime localDateTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" * Gets completed status of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" * @return X if task is completed, a blank space otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" * Modifies status of current task.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" * @param isCompleted New status of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" public void setStatus(boolean isCompleted) {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" this.isDone \u003d isCompleted;","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" * Checks if task title contains input query.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" * @return True if task contains query.","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" public boolean contains(String query) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" return this.title.contains(query);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" * Converts a task to a formatted string.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" * @return Status and title of task in string.","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" return String.format(\"[%s] %s\", this.getStatus(), title);","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" * Returns a base string to be used for storing in data file.","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string, to be further modified by overriding methods in child classes.","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" return String.format(\" | %s | %s\", this.getStatus(), title);","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"LoMaply":80}},{"path":"src/main/java/taskutil/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" * Class for a list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * Constructor for TaskList using ArrayList.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" taskList \u003d new ArrayList\u003c\u003e(1);","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" * Modifies status of task based on index.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" * @param index ArrayList index of task to be modified.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" * @param isCompleted New status of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot output after setting status.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" public String setStatusByIndex(int index, boolean isCompleted) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" assert index \u003e\u003d 0 : \"Index cannot be \u003c 0\";","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" Task pendingTask \u003d taskList.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" pendingTask.isDone \u003d isCompleted;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" return \"Task updated as requested:\\n \" + pendingTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" } catch (IndexOutOfBoundsException e) { // When index falls outside ArrayList.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" return \"I can\u0027t modify a task that doesn\u0027t exist...\\n Try a number from the list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" * Adds task to taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" * @param printMessage Determines whether to show task added message.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" public void addTask(Task task, boolean printMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" if (printMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" Ui.taskOutput(task, Ui.Action.ADD, taskList.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" * Deletes task from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" * @param index ArrayList index of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" assert index \u003e\u003d 0 : \"Index cannot be \u003c 0\";","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" Task delete \u003d taskList.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" Ui.taskOutput(delete, Ui.Action.REMOVE, taskList.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" } catch (IndexOutOfBoundsException e) { // When index falls outside ArrayList.","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"I can\u0027t remove a task that doesn\u0027t exist...\\n Try a number from the list\");","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" * Returns list of all tasks matching input query.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" * @param query String to match tasks with.","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" * @return Numbered list of all tasks matching query.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" public String queryList(String query) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" StringBuilder allTasks \u003d new StringBuilder(\"These tasks match your query:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" if (task.contains(query)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" allTasks.append(String.format(\"\\n %d.%s\", i++, task));","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" return allTasks.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" * Returns schedule of unmarked tasks based on input datetime.","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" * @param localDateTime Schedule datetime.","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" * @return Numbered list of all tasks matching input.","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" public String filterByTime(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":" StringBuilder allTasks \u003d new StringBuilder(\"These tasks are due for \"","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" + Parser.formatDate(localDateTime) + \":\");","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" if (task.isUnderSchedule(localDateTime) \u0026\u0026 task.getStatus().equals(\" \")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" allTasks.append(String.format(\"\\n %d.%s\", i++, task));","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" return allTasks.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" * Converts ArrayList of tasks to a formatted string suited for storing in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string of tasks to store in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"LoMaply"},"content":" public String listToStringData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"LoMaply"},"content":" StringBuilder fileData \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"LoMaply"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"LoMaply"},"content":" assert task !\u003d null : \"Tasks in taskList cannot be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"LoMaply"},"content":" String taskString \u003d task.toFileString() + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"LoMaply"},"content":" fileData.append(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"LoMaply"},"content":" return fileData.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"LoMaply"},"content":" * Converts ArrayList of tasks to a string as a numbered list for chatbot output.","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"LoMaply"},"content":" * @return List of all tasks, formatted as numbered list.","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"LoMaply"},"content":" public String listToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"LoMaply"},"content":" StringBuilder allTasks \u003d new StringBuilder(\"Here are your tasks:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"LoMaply"},"content":" int taskNo \u003d taskList.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"LoMaply"},"content":" for (int i \u003d 0; i \u003c taskNo; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"LoMaply"},"content":" allTasks.append(String.format(\"\\n %d.%s\", (i + 1), taskList.get(i).toString()));","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"LoMaply"},"content":" return allTasks.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":132}},{"path":"src/main/java/taskutil/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":" * Class for To-do task.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" * Constructor for To-do object, using super constructor.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" public Todo(String title) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" * Returns true by default as To-do tasks have no assigned time.","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * @param localDateTime DateTime to be considered.","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" * @return True.","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" public boolean isUnderSchedule(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" return true;","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" * Converts To-do task to a string for storing in data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for To-do task.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" return \"T\" + super.toFileString();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":42}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"\u003cfx:root xmlns:fx\u003d\"http://javafx.com/fxml/1\" 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\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" \u003cLabel fx:id\u003d\"dialog\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-border-radius: 5; -fx-border-style: solid; -fx-border-color: gray; -fx-background-color: aquamarine;\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" \u003cInsets right\u003d\"20.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" \u003cFont name\u003d\"Arial\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" \u003c/font\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"90.0\" fitWidth\u003d\"90.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" \u003cInsets right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":29}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"\u003cAnchorPane xmlns:fx\u003d\"http://javafx.com/fxml/1\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"650.0\" prefWidth\u003d\"450.0\" style\u003d\"-fx-background-color: gray;\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" fx:controller\u003d\"gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutX\u003d\"2.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"368.0\" promptText\u003d\"Type a command here\" style\u003d\"-fx-background-color: white;\" AnchorPane.bottomAnchor\u003d\"2.0\" AnchorPane.leftAnchor\u003d\"2.0\" AnchorPane.rightAnchor\u003d\"80.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" \u003cFont size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"371.0\" layoutY\u003d\"609.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"76.0\" style\u003d\"-fx-background-color: lightskyblue; -fx-background-radius: 10;\" text\u003d\"Send\" textFill\u003d\"WHITE\" AnchorPane.bottomAnchor\u003d\"2.0\" AnchorPane.rightAnchor\u003d\"2.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" \u003cFont name\u003d\"Arial Bold\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"607.0\" prefWidth\u003d\"450.0\" vvalue\u003d\"1.0\" AnchorPane.bottomAnchor\u003d\"43.0\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"0.0\" AnchorPane.topAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" maxWidth\u003d\"1.7976931348623157E308\" prefHeight\u003d\"605.0\" prefWidth\u003d\"440.0\" style\u003d\"-fx-background-color: honeydew;\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":26}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" private final Duke botInstance \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" public void command_wrongArgument_errorMessageOutput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" String markError \u003d \"You need to provide a valid number:\\n eg. mark/unmark 1\";","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" String unmarkError \u003d \"You need to provide a valid number:\\n eg. mark/unmark 1\";","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" String deleteError \u003d \"You need to provide a valid number:\\n eg. delete 2\";","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" String todoError \u003d \"Wrong format, make sure your command is in the format:\\n todo [DESCRIPTION]\";","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" String deadlineNoSplit \u003d \"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" + \" deadline [DESCRIPTION] /by [dd.mm.yyyy tttt]\";","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" String eventNoSplit \u003d \"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" + \" event [DESCRIPTION] /from [dd.mm.yyyy tttt] /to [dd.mm.yyyy tttt]\";","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(markError, botInstance.getResponse(\"mark\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(unmarkError, botInstance.getResponse(\"unmark four\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(deleteError, botInstance.getResponse(\"delete 5 5\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(todoError, botInstance.getResponse(\"todo\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(deadlineNoSplit, botInstance.getResponse(\"deadline thing /until wow\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(eventNoSplit, botInstance.getResponse(\"event describe then /till now\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":27}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" public void parseDate_exceptionThrown_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" Parser.parseDate(\"idk\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"Text \u0027idk\u0027 could not be parsed at index 0\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":19}},{"path":"src/test/java/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" private final Storage storage \u003d new Storage(\"./data\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" public void loadData_openFile_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"File loaded successfully :D\", storage.loadFromFile(new TaskList()));","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":15}},{"path":"src/test/java/taskutil/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" private final DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final LocalDateTime dateTime \u003d LocalDateTime.parse(\"12.04.2020 1530\", format);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" private final Deadline task2 \u003d new Deadline(\"Finish homework\", dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final Event task3 \u003d new Event(\"3 Japan trip\", dateTime, dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" private final Todo task1 \u003d new Todo(\"Buy food bring home\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" public void addTask_deleteTask_success() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"D | | Finish homework | 12.04.2020 1530\\n\", tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" tasks.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"\", tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" public void changeStatus_listToStringData_correctOutput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" task1.setStatus(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task1, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task3, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" String expected \u003d \"T | X | Buy food bring home\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" + \"D | | Finish homework | 12.04.2020 1530\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" + \"E | | 3 Japan trip | 12.04.2020 1530 | 12.04.2020 1530\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected, tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" public void queryList_correctOutput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task1, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task3, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" String expected1 \u003d \"These tasks match your query:\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" + \" 1.[E][ ] 3 Japan trip (from: 12 Apr 2020, 03:30 PM to: 12 Apr 2020, 03:30 PM)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" String expected2 \u003d \"These tasks match your query:\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" + \" 1.[T][ ] Buy food bring home\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" + \" 2.[D][ ] Finish homework (by: 12 Apr 2020, 03:30 PM)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected1, tasks.queryList(\"3\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected2, tasks.queryList(\"home\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":61}},{"path":"src/test/java/taskutil/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" private final DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final LocalDateTime dateTime \u003d LocalDateTime.parse(\"12.04.2020 1530\", format);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" private final Deadline task2 \u003d new Deadline(\"Finish homework\", dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final Event task3 \u003d new Event(\"Japan trip\", dateTime, dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" private final Todo task1 \u003d new Todo(\"Buy food\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" public void changeStatus_toString_correctStatus() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" task2.setStatus(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" task3.setStatus(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[T][ ] Buy food\", task1.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[D][X] Finish homework (by: 12 Apr 2020, 03:30 PM)\", task2.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[E][X] Japan trip (from: 12 Apr 2020, 03:30 PM to: 12 Apr 2020, 03:30 PM)\",","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" task3.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"todo buy 2 groceries","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"deadline eat lunch /by 1st june mon","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"deadline eat lunch /by 01.06.2024 1500","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"event holiday /to july","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"event japan holiday trip /from 08.07.2023 0000 /to 07.07.2023 1930","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"event japan holiday trip /from 06.07.2023 0000 /to 07.07.2023 1930","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"deadline stuff /by 01 June 25 4am","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"hello","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"mark 4","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"unmark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"unmark three","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"find h","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":"delete task 1","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"delete 3","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":"delete 1","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"delete 1","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"end","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":25}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-06"},{"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":"LoMaply"},"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-06"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":22,"LoMaply":2}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" String javaFxVersion \u003d \u002717.0.8\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"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":"LoMaply"},"content":" mainClass.set(\"gui.Launcher\")","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" archiveBaseName \u003d \"jyuuni\"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" archiveVersion \u003d \"v0.2\"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":42,"LoMaply":21}},{"path":"data/TaskData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"T | | wait a minute","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"T | | no","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"LoMaply":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" * Class to initialise and run the chatbot with GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public class Duke {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" * Constructor for a chatbot instance.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" public Duke() {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" storage \u003d new Storage(\"./data\");","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" * Loads data for current instance of chatbot from data file.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" public String loadData() {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" return storage.loadFromFile(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" * Parses user inputs for appropriate response.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" * @param input User input.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot response to be displayed on GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" String output \u003d Parser.parseCommand(input, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" storage.writeToFile(taskList);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" return output;","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":40}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import taskutil.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import taskutil.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import taskutil.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import taskutil.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" * Contains methods to read commands and dates from user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" // Format of datetime to be received as user input, saved to or read from data file.","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" private static final DateTimeFormatter DATE_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * Parses Date from string to LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" * @param dateString String in the DATE_FORMAT form.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" * @return LocalDateTime object.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" * @throws DateTimeParseException To be handled in parseUserInput().","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" public static LocalDateTime parseDate(String dateString) throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" assert dateString !\u003d null : \"String to be parsed into date cannot be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" return LocalDateTime.parse(dateString, DATE_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" * Converts LocalDateTime object to String for storing in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" * @param dateTime LocalDateTime object to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" * @return String in the DATE_FORMAT form.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" public static String formatDate(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" assert dateTime !\u003d null : \"LocalDateTime object to be formatted cannot be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" return dateTime.format(DATE_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" * Parses help command.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot message with details on all supported commands.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" private static String parseHelp() {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" return \"Wanna know what I can do? Here you go:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" + \" [help] - The command you just did\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" + \" [mark] - Marks a task as done\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" + \" [unmark] - The opposite of mark\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" + \" [delete] - Makes me forget your task\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" + \" [todo] - Add a task with no date attached\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" + \" [deadline] - Add a task with a deadline (duh)\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" + \" [event] - Add a task with a start/end date\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" + \" [schedule] - I\u0027ll find all tasks that have to be done before this date\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" + \" [find] - Google but worse\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" + \" [list] - I\u0027ll literally list out every task you have, done or not\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" + \" [end] - Bye\";","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" * Parses both the mark and unmark commands.","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing index of task to be modified.","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList containing all tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" * @param isCompleted New status of task.","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot output for mark/unmark command.","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" private static String parseSetMark(String[] splitInput, TaskList taskList, boolean isCompleted) {","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" return taskList.setStatusByIndex(index, isCompleted);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" // If argument of mark/unmark is not a number.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" return \"You need to provide a valid number:\\n\" + \" eg. mark/unmark 1\";","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" * Parses delete command.","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing index of task to be deleted.","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList containing all tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" private static void parseDelete(String[] splitInput, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" taskList.deleteTask(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":" // If argument of \"delete\" is not a number.","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"You need to provide a valid number:\\n\" + \" eg. delete 2\");","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" * Parses new To-do task command.","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing arguments for new To-do task.","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList for newly generated task to be added to.","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" private static void parseTodo(String[] splitInput, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" if (splitInput.length !\u003d 2) { // Checks for presence of description before creating task.","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" + \" todo [DESCRIPTION]\");","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"LoMaply"},"content":" Task todo \u003d new Todo(splitInput[1].trim());","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(todo, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"LoMaply"},"content":" * Parses new Deadline task command.","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing arguments for new Deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList for newly generated task to be added to.","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"LoMaply"},"content":" private static void parseDeadline(String[] splitInput, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"LoMaply"},"content":" String[] deadVar \u003d splitInput[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"LoMaply"},"content":" Task deadline \u003d new Deadline(deadVar[0].trim(), parseDate(deadVar[1]));","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(deadline, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // String not split due to improper format","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"LoMaply"},"content":" + \" deadline [DESCRIPTION] /by [dd.mm.yyyy tttt]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) { // Date not formatted properly","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"Try the date format [dd.mm.yyyy tttt]:\"","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"LoMaply"},"content":" + \"\\n eg. [05.08.2020 1500] for 5 Aug 2020, 3PM\");","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"LoMaply"},"content":" * Parses new Event task command.","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing arguments for new Event task.","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList for newly generated task to be added to.","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"LoMaply"},"content":" private static void parseEvent(String[] splitInput, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"LoMaply"},"content":" // Using 1 split statement that splits by /(from|to) allows wrong combos like \"/to x /from x\".","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"LoMaply"},"content":" String[] eventVar \u003d splitInput[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"LoMaply"},"content":" String[] times \u003d eventVar[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"LoMaply"},"content":" LocalDateTime start \u003d parseDate(times[0]);","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"LoMaply"},"content":" LocalDateTime end \u003d parseDate(times[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"LoMaply"},"content":" if (start.isAfter(end)) { // Checks that event start \u003c\u003d end","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"An event cannot end before it starts... might wanna check your dates\");","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"LoMaply"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"LoMaply"},"content":" Task event \u003d new Event(eventVar[0].trim(), start, end);","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(event, true);","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) { // String not split due to improper format","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":155,"author":{"gitId":"LoMaply"},"content":" + \" event [DESCRIPTION] /from [dd.mm.yyyy tttt] /to [dd.mm.yyyy tttt]\");","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) { // Date not formatted properly","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"Try the date format [dd.mm.yyyy tttt]:\"","lastModifiedDate":"2023-09-06"},{"lineNumber":158,"author":{"gitId":"LoMaply"},"content":" + \"\\n eg. [05.08.2020 1500] for 5 Aug 2020, 3PM\");","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"LoMaply"},"content":" * Parses Schedule command.","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"LoMaply"},"content":" * @param splitInput User input containing arguments for Schedule command.","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList to be queried.","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"LoMaply"},"content":" private static String parseSchedule(String[] splitInput, TaskList taskList) {","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"LoMaply"},"content":" LocalDateTime queryDate \u003d Parser.parseDate(splitInput[1]);","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"LoMaply"},"content":" return taskList.filterByTime(queryDate);","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"LoMaply"},"content":" return \"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"LoMaply"},"content":" + \" schedule [dd.mm.yyyy tttt]\";","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) { // Date not formatted properly","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"LoMaply"},"content":" return \"Try the date format [dd.mm.yyyy tttt]:\"","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"LoMaply"},"content":" + \"\\n eg. [05.08.2020 1500] for 5 Aug 2020, 3PM\";","lastModifiedDate":"2023-09-13"},{"lineNumber":178,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":181,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"LoMaply"},"content":" * Parses and acts on user input for chatbot.","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"LoMaply"},"content":" * @param userInput String to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"LoMaply"},"content":" * @param taskList TaskList to be modified based on command used.","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot reply to user command.","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"LoMaply"},"content":" public static String parseCommand(String userInput, TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"LoMaply"},"content":" String[] splitInput \u003d userInput.trim().split(\" \", 2); // Limit 2 to only separate out command word.","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"LoMaply"},"content":" String command \u003d splitInput[0].toLowerCase();","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"LoMaply"},"content":" switch (command) { // break statements are redundant due to return statements.","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"LoMaply"},"content":" case \"help\":","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"LoMaply"},"content":" return parseHelp();","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"LoMaply"},"content":" case \"mark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"LoMaply"},"content":" return parseSetMark(splitInput, taskList, true);","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"LoMaply"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"LoMaply"},"content":" return parseSetMark(splitInput, taskList, false);","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"LoMaply"},"content":" case \"delete\":","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"LoMaply"},"content":" parseDelete(splitInput, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"LoMaply"},"content":" return Ui.getOutMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"LoMaply"},"content":" case \"todo\":","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"LoMaply"},"content":" parseTodo(splitInput, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"LoMaply"},"content":" return Ui.getOutMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"LoMaply"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"LoMaply"},"content":" parseDeadline(splitInput, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"LoMaply"},"content":" return Ui.getOutMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"LoMaply"},"content":" case \"event\":","lastModifiedDate":"2023-09-10"},{"lineNumber":208,"author":{"gitId":"LoMaply"},"content":" parseEvent(splitInput, taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":209,"author":{"gitId":"LoMaply"},"content":" return Ui.getOutMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":210,"author":{"gitId":"LoMaply"},"content":" case \"schedule\":","lastModifiedDate":"2023-09-13"},{"lineNumber":211,"author":{"gitId":"LoMaply"},"content":" return parseSchedule(splitInput, taskList);","lastModifiedDate":"2023-09-13"},{"lineNumber":212,"author":{"gitId":"LoMaply"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":213,"author":{"gitId":"LoMaply"},"content":" return taskList.queryList(splitInput[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":214,"author":{"gitId":"LoMaply"},"content":" case \"list\":","lastModifiedDate":"2023-08-28"},{"lineNumber":215,"author":{"gitId":"LoMaply"},"content":" return taskList.listToString();","lastModifiedDate":"2023-09-10"},{"lineNumber":216,"author":{"gitId":"LoMaply"},"content":" case \"end\":","lastModifiedDate":"2023-08-28"},{"lineNumber":217,"author":{"gitId":"LoMaply"},"content":" return \"Come back if you need anything else!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":218,"author":{"gitId":"LoMaply"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":219,"author":{"gitId":"LoMaply"},"content":" return \"You should try asking for [help]... no really do it\";","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":221,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":222,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":222}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import taskutil.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":" * Contains methods to format text output when chatbot adds/deletes a task.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" private static String outMessage;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" * Formats chatbot output specifically for adding/removing tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" public static void taskOutput(Task task, Action action, int size) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" String taskMessage \u003d \"I\u0027ve %s the following task as requested:\\n %s\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" + \"There are currently %d tasks in your list.\";","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" assert task !\u003d null : \"Task cannot be an empty object\";","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" assert size \u003e\u003d 0 : \"Task list must have at least 0 tasks\";","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" if (action \u003d\u003d Action.ADD) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" outMessage \u003d String.format(taskMessage, \"added\", task.toString(), size);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" } else if (action \u003d\u003d Action.REMOVE) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" outMessage \u003d String.format(taskMessage, \"removed\", task.toString(), size);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" * Returns chatbot output after adding task.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot output.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" public static String getOutMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" return outMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" * Sets chatbout output after adding task.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" * @param outMessage Message to be output.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" public static void setOutMessage(String outMessage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" Ui.outMessage \u003d outMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" * Enum to denote whether task was added or removed from tasklist.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" public enum Action {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" ADD,","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" REMOVE","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":54}},{"path":"src/main/java/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" clipToCircle(displayPicture);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" * Adds circular border to ImageView object for profile picture .","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" * @param img ImageView object to be modified.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" private static void clipToCircle(ImageView img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" Circle circle \u003d new Circle(33);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" circle.setCenterX(img.getFitWidth() / 2);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" circle.setCenterY(img.getFitHeight() / 2);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" img.setClip(circle);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" * Generates DialogBox for user input display.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" * @param text User text input.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" * @param img Profile picture of user.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" * @return DialogBox object for GUI display.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" db.setStyle(\"-fx-background-color: #FFF8DC ;\");","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" return db;","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" * Generates DialogBox for chatbot input display.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" * @param text Chatbot text output.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" * @param img Profile picture of chatbot.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" * @return DialogBox object for GUI display.","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":90}},{"path":"src/main/java/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":" * Host main method to start chatbot GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":12}},{"path":"src/main/java/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" * A GUI for duke.Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" public static String loadOutput \u003d \"\";","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" // Preload chatbot with data from storage file, saves output as .","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" loadOutput \u003d duke.loadData();","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" stage.setTitle(\"Jyuuni\");","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":36}},{"path":"src/main/java/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package gui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" * Controller for gui.MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/gigachad.jpg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Wojak_cropped.jpg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" dialogContainer.prefWidthProperty().bind(scrollPane.widthProperty().multiply(0.99));","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" String greeting \u003d \"Hey it\u0027s Jyuuni, your kinda helpful assistant to keep track of tasks\\n\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" + \"If you don\u0027t know what I can do, you can ask for [help]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" DialogBox.getDukeDialog(Main.loadOutput, dukeImage),","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" DialogBox.getDukeDialog(greeting, dukeImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" * Creates two dialog boxes, one echoing user input and the other containing duke.Duke\u0027s reply and then","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" * appends them to the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" if (input.equalsIgnoreCase(\"end\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" Platform.exit();","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":66}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"import taskutil.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"import taskutil.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"import taskutil.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"import taskutil.Todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" * Contains methods to create and edit file directory for storing and loading chatbot data.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" private static final String FILE_NAME \u003d \"TaskData.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" private final String fileDirectory;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" private final String fileLocation; // fileLocation concatenates fileDirectory and FILE_NAME.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" * Constructor for Storage object, containing location of data tile.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" * @param fileDirectory File location of data file.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" public Storage(String fileDirectory) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" this.fileDirectory \u003d fileDirectory;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" this.fileLocation \u003d fileDirectory + \"/\" + FILE_NAME;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" * Creates directory and txt file for storing task data if they do not exist.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" * @return True if directory and txt file exist/created successfully.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" private boolean openFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" File directory \u003d new File(fileDirectory);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" File dataFile \u003d new File(fileDirectory + \"/\" + FILE_NAME);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" if (directory.mkdir() \u0026\u0026 dataFile.createNewFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" System.out.println(\"File to store task data have been created and stored at:\\n \"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" + fileDirectory + \"/\" + FILE_NAME);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" * Writes data from ArrayList of tasks to a file.","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" * @param taskList An ArrayList of tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" public void writeToFile(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" FileWriter file \u003d new FileWriter(fileLocation);","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" file.write(taskList.listToStringData());","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" file.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" * Loads task data from txt file to chatbot.","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" * @return String representing result of loading data from file.","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" public String loadFromFile(TaskList taskList) {","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" if (!this.openFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" return \"An error occured where the file cannot be read\";","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" assert taskList !\u003d null : \"TaskList loading in data cannot be a null object.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":" // Variable is initialised here instead of try block for error printing.","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" String data \u003d \"\";","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" File dataFile \u003d new File(fileLocation);","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" Scanner reader \u003d new Scanner(dataFile);","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" data \u003d reader.nextLine();","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" String[] splitInput \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" boolean isDone \u003d splitInput[1].equals(\"X\");","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" // Data is in format [type, isDone, title, from/by, to], from/by/to are only present depending on type.","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" Task currentTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" switch(splitInput[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" currentTask \u003d new Todo(splitInput[2].trim());","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":" currentTask \u003d new Deadline(splitInput[2].trim(), Parser.parseDate(splitInput[3]));","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" LocalDateTime start \u003d Parser.parseDate(splitInput[3]);","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" LocalDateTime end \u003d Parser.parseDate(splitInput[4]);","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" currentTask \u003d new Event(splitInput[2].trim(), start, end);","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"LoMaply"},"content":" return String.format(\"Unknown symbol [%s] detected, the line will be overwritten:\\n [%s]\",","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"LoMaply"},"content":" splitInput[0], data);","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"LoMaply"},"content":" currentTask.setStatus(isDone);","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"LoMaply"},"content":" taskList.addTask(currentTask, false);","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"LoMaply"},"content":" } catch (ArrayIndexOutOfBoundsException | DateTimeParseException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"LoMaply"},"content":" // File formatted with wrong no. of \" | \" dividers for task types, or wrong date format.","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"LoMaply"},"content":" return \"There seems to be a problem with reading in data from:\\n [\"","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"LoMaply"},"content":" + fileLocation","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"LoMaply"},"content":" + \"]\\n\\nThe following line has an error and will be overwritten:\\n [\"","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"LoMaply"},"content":" + data + \"]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"LoMaply"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"LoMaply"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"LoMaply"},"content":" return \"All data from file has been loaded successfully :D\";","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LoMaply":126}},{"path":"src/main/java/taskutil/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" * Class for Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime limit;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" * Constructor for Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * @param limit Deadline of task as a LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" public Deadline(String title, LocalDateTime limit) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" this.limit \u003d limit;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" * Checks that input datetime is before deadline.","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" * @param localDateTime DateTime to be considered.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" * @return Whether deadline is under schedule of input datetime.","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" public boolean isUnderSchedule(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" return limit.isAfter(localDateTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" String time \u003d String.format(\" (by: %s)\", limit.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" return \"[D]\" + super.toString() + time;","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" * Converts Deadline task to a string for storing in data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" return \"D\" + super.toFileString() + \" | \" + Parser.formatDate(limit);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":50}},{"path":"src/main/java/taskutil/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" * Class for Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" * Constructor for Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" * @param start Start of Event as LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" * @param end End of Event as LocalDateTime object.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" public Event(String title, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" * Checks that input datetime falls within start/end of the event.","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" * @param localDateTime DateTime to be considered.","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" * @return Whether event is under schedule of input datetime.","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" public boolean isUnderSchedule(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" return localDateTime.isBefore(end) \u0026\u0026 localDateTime.isAfter(start);","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" String from \u003d start.format(DISPLAY_FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" String to \u003d end.format(DISPLAY_FORMAT);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" String time \u003d String.format(\" (from: %s to: %s)\", from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" return \"[E]\" + super.toString() + time;","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" * Converts Event task to a string for storing in data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for Event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" String period \u003d String.format(\" | %s | %s\", Parser.formatDate(start), Parser.formatDate(end));","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" return \"E\" + super.toFileString() + period;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":56}},{"path":"src/main/java/taskutil/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" * Class for Task objects and methods to modify.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" // Format of date to be displayed to user.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" protected static final DateTimeFormatter DISPLAY_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy, hh:mm a\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" protected String title;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" protected Boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" * Constructor for general Task object, called in subclasses.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" public Task(String title) {","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" this.title \u003d title;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" * Abstract method to determine if a task will be listed under the schedule of a particular day.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" * @param localDateTime DateTime to be considered.","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" * @return Whether task should be in the schedule for input.","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" abstract boolean isUnderSchedule(LocalDateTime localDateTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" * Gets completed status of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" * @return X if task is completed, a blank space otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" * Modifies status of current task.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" * @param isCompleted New status of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" public void setStatus(boolean isCompleted) {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" this.isDone \u003d isCompleted;","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" * Checks if task title contains input query.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" * @return True if task contains query.","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" public boolean contains(String query) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" return this.title.contains(query);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" * Converts a task to a formatted string.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" * @return Status and title of task in string.","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" return String.format(\"[%s] %s\", this.getStatus(), title);","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" * Returns a base string to be used for storing in data file.","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string, to be further modified by overriding methods in child classes.","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" return String.format(\" | %s | %s\", this.getStatus(), title);","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"LoMaply":80}},{"path":"src/main/java/taskutil/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import duke.Parser;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" * Class for a list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" * Constructor for TaskList using ArrayList.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" taskList \u003d new ArrayList\u003c\u003e(1);","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" * Modifies status of task based on index.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" * @param index ArrayList index of task to be modified.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" * @param isCompleted New status of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" * @return Chatbot output after setting status.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" public String setStatusByIndex(int index, boolean isCompleted) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" Task pendingTask \u003d taskList.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" pendingTask.isDone \u003d isCompleted;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" return \"Task updated as requested:\\n \" + pendingTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" } catch (IndexOutOfBoundsException e) { // When index falls outside ArrayList.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" return \"I can\u0027t modify a task that doesn\u0027t exist...\\n You should try an actual number\";","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" * Adds task to taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" * @param printMessage Determines whether to show task added message.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" public void addTask(Task task, boolean printMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" if (printMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" Ui.taskOutput(task, Ui.Action.ADD, taskList.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" * Deletes task from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" * @param index ArrayList index of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" Task delete \u003d taskList.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":" Ui.taskOutput(delete, Ui.Action.REMOVE, taskList.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"LoMaply"},"content":" } catch (IndexOutOfBoundsException e) { // When index falls outside ArrayList.","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"LoMaply"},"content":" Ui.setOutMessage(\"I can\u0027t remove a task that doesn\u0027t exist...\\n You should try an actual number\");","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"LoMaply"},"content":" * Returns list of all tasks matching input query.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"LoMaply"},"content":" * @param query String to match tasks with.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"LoMaply"},"content":" * @return Numbered list of all tasks matching query.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"LoMaply"},"content":" public String queryList(String query) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"LoMaply"},"content":" StringBuilder allTasks \u003d new StringBuilder(\"These tasks match your query:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"LoMaply"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"LoMaply"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"LoMaply"},"content":" if (task.contains(query)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"LoMaply"},"content":" allTasks.append(String.format(\"\\n %d.%s\", i++, task));","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"LoMaply"},"content":" return allTasks.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"LoMaply"},"content":" * Returns schedule of unmarked tasks based on input datetime.","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"LoMaply"},"content":" * @param localDateTime Schedule datetime.","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"LoMaply"},"content":" * @return Numbered list of all tasks matching input.","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"LoMaply"},"content":" public String filterByTime(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"LoMaply"},"content":" StringBuilder allTasks \u003d new StringBuilder(\"These tasks are due for \"","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"LoMaply"},"content":" + Parser.formatDate(localDateTime) + \":\");","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"LoMaply"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"LoMaply"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"LoMaply"},"content":" if (task.isUnderSchedule(localDateTime) \u0026\u0026 task.getStatus().equals(\" \")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"LoMaply"},"content":" allTasks.append(String.format(\"\\n %d.%s\", i++, task));","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"LoMaply"},"content":" return allTasks.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"LoMaply"},"content":" * Converts ArrayList of tasks to a formatted string suited for storing in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string of tasks to store in data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"LoMaply"},"content":" public String listToStringData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"LoMaply"},"content":" StringBuilder fileData \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"LoMaply"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"LoMaply"},"content":" assert task !\u003d null : \"Tasks in taskList cannot be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"LoMaply"},"content":" String taskString \u003d task.toFileString() + \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"LoMaply"},"content":" fileData.append(taskString);","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"LoMaply"},"content":" return fileData.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"LoMaply"},"content":" * Converts ArrayList of tasks to a string as a numbered list for chatbot output.","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"LoMaply"},"content":" * @return List of all tasks, formatted as numbered list.","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"LoMaply"},"content":" public String listToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"LoMaply"},"content":" StringBuilder allTasks \u003d new StringBuilder(\"Here are your tasks:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"LoMaply"},"content":" int taskNo \u003d taskList.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"LoMaply"},"content":" for (int i \u003d 0; i \u003c taskNo; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"LoMaply"},"content":" allTasks.append(String.format(\"\\n %d.%s\", (i + 1), taskList.get(i).toString()));","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"LoMaply"},"content":" return allTasks.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LoMaply":130}},{"path":"src/main/java/taskutil/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":" * Class for To-do task.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" * Constructor for To-do object, using super constructor.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" * @param title Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" public Todo(String title) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" super(title);","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" * Returns true by default as To-do tasks have no assigned time.","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" * @param localDateTime DateTime to be considered.","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" * @return True.","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" public boolean isUnderSchedule(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" return true;","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" * Converts To-do task to a string for storing in data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":" * @return Formatted string with data for To-do task.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":" return \"T\" + super.toFileString();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":42}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"\u003cfx:root xmlns:fx\u003d\"http://javafx.com/fxml/1\" 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\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" \u003cLabel fx:id\u003d\"dialog\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-border-radius: 5; -fx-border-style: solid; -fx-border-color: gray; -fx-border-width: 2; -fx-background-color: aquamarine; -fx-background-radius: 10;\" text\u003d\"Label\" wrapText\u003d\"true\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" \u003cInsets right\u003d\"20.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" \u003cFont name\u003d\"Arial\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" \u003c/font\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"90.0\" fitWidth\u003d\"90.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" \u003cInsets right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":29}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"\u003cAnchorPane xmlns:fx\u003d\"http://javafx.com/fxml/1\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"740.0\" prefWidth\u003d\"600.0\" style\u003d\"-fx-background-color: gray;\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" fx:controller\u003d\"gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutX\u003d\"2.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"368.0\" promptText\u003d\"Type a command here\" style\u003d\"-fx-background-color: white;\" AnchorPane.bottomAnchor\u003d\"2.0\" AnchorPane.leftAnchor\u003d\"2.0\" AnchorPane.rightAnchor\u003d\"80.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" \u003cFont size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"371.0\" layoutY\u003d\"609.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"76.0\" style\u003d\"-fx-background-color: lightskyblue; -fx-background-radius: 10;\" text\u003d\"Send\" textFill\u003d\"WHITE\" AnchorPane.bottomAnchor\u003d\"2.0\" AnchorPane.rightAnchor\u003d\"2.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" \u003cFont name\u003d\"Arial Bold\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"694.0\" prefWidth\u003d\"600.0\" style\u003d\"-fx-background-color: honeydew;\" vvalue\u003d\"1.0\" AnchorPane.bottomAnchor\u003d\"46.0\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"0.0\" AnchorPane.topAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" alignment\u003d\"CENTER\" maxHeight\u003d\"1.7976931348623157E308\" prefHeight\u003d\"692.0\" prefWidth\u003d\"600.0\" style\u003d\"-fx-background-color: honeydew;\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":26}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":" private final Duke botInstance \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":" public void command_wrongArgument_errorMessageOutput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" String markError \u003d \"You need to provide a valid number:\\n eg. mark/unmark 1\";","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" String unmarkError \u003d \"You need to provide a valid number:\\n eg. mark/unmark 1\";","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" String deleteError \u003d \"You need to provide a valid number:\\n eg. delete 2\";","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" String todoError \u003d \"Wrong format, make sure your command is in the format:\\n todo [DESCRIPTION]\";","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" String deadlineNoSplit \u003d \"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" + \" deadline [DESCRIPTION] /by [dd.mm.yyyy tttt]\";","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" String eventNoSplit \u003d \"Wrong format, make sure your command is in the format:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" + \" event [DESCRIPTION] /from [dd.mm.yyyy tttt] /to [dd.mm.yyyy tttt]\";","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(markError, botInstance.getResponse(\"mark\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(unmarkError, botInstance.getResponse(\"unmark four\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(deleteError, botInstance.getResponse(\"delete 5 5\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(todoError, botInstance.getResponse(\"todo\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(deadlineNoSplit, botInstance.getResponse(\"deadline thing /until wow\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(eventNoSplit, botInstance.getResponse(\"event describe then /till now\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"LoMaply":27}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" public void parseDate_exceptionThrown_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" Parser.parseDate(\"idk\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"Text \u0027idk\u0027 could not be parsed at index 0\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":19}},{"path":"src/test/java/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import taskutil.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":" private final Storage storage \u003d new Storage(\"./data\");","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" public void loadData_openFile_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"File loaded successfully :D\", storage.loadFromFile(new TaskList()));","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":15}},{"path":"src/test/java/taskutil/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" private final DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final LocalDateTime dateTime \u003d LocalDateTime.parse(\"12.04.2020 1530\", format);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" private final Deadline task2 \u003d new Deadline(\"Finish homework\", dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final Event task3 \u003d new Event(\"3 Japan trip\", dateTime, dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" private final Todo task1 \u003d new Todo(\"Buy food bring home\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" public void addTask_deleteTask_success() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"D | | Finish homework | 12.04.2020 1530\\n\", tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" tasks.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"\", tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"LoMaply"},"content":" public void changeStatus_listToStringData_correctOutput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"LoMaply"},"content":" task1.setStatus(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task1, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task3, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"LoMaply"},"content":" String expected \u003d \"T | X | Buy food bring home\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"LoMaply"},"content":" + \"D | | Finish homework | 12.04.2020 1530\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"LoMaply"},"content":" + \"E | | 3 Japan trip | 12.04.2020 1530 | 12.04.2020 1530\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected, tasks.listToStringData());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"LoMaply"},"content":" public void queryList_correctOutput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"LoMaply"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task1, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task2, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"LoMaply"},"content":" tasks.addTask(task3, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"LoMaply"},"content":" String expected1 \u003d \"These tasks match your query:\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"LoMaply"},"content":" + \" 1.[E][ ] 3 Japan trip (from: 12 Apr 2020, 03:30 PM to: 12 Apr 2020, 03:30 PM)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"LoMaply"},"content":" String expected2 \u003d \"These tasks match your query:\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"LoMaply"},"content":" + \" 1.[T][ ] Buy food bring home\\n\"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"LoMaply"},"content":" + \" 2.[D][ ] Finish homework (by: 12 Apr 2020, 03:30 PM)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected1, tasks.queryList(\"3\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(expected2, tasks.queryList(\"home\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":61}},{"path":"src/test/java/taskutil/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"package taskutil;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":" private final DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd.MM.yyyy HHmm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":" private final LocalDateTime dateTime \u003d LocalDateTime.parse(\"12.04.2020 1530\", format);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":" private final Deadline task2 \u003d new Deadline(\"Finish homework\", dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":" private final Event task3 \u003d new Event(\"Japan trip\", dateTime, dateTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":" private final Todo task1 \u003d new Todo(\"Buy food\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":" public void changeStatus_toString_correctStatus() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":" task2.setStatus(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":" task3.setStatus(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[T][ ] Buy food\", task1.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[D][X] Finish homework (by: 12 Apr 2020, 03:30 PM)\", task2.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":" Assertions.assertEquals(\"[E][X] Japan trip (from: 12 Apr 2020, 03:30 PM to: 12 Apr 2020, 03:30 PM)\",","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":" task3.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"LoMaply"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"LoMaply":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LoMaply"},"content":"todo buy 2 groceries","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"LoMaply"},"content":"deadline eat lunch /by 1st june mon","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"LoMaply"},"content":"deadline eat lunch /by 01.06.2024 1500","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"LoMaply"},"content":"event holiday /to july","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"LoMaply"},"content":"mark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"LoMaply"},"content":"event japan holiday trip /from 08.07.2023 0000 /to 07.07.2023 1930","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"LoMaply"},"content":"event japan holiday trip /from 06.07.2023 0000 /to 07.07.2023 1930","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"LoMaply"},"content":"deadline stuff /by 01 June 25 4am","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"LoMaply"},"content":"hello","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"LoMaply"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"LoMaply"},"content":"mark 4","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"LoMaply"},"content":"unmark 2","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"LoMaply"},"content":"unmark three","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"LoMaply"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"LoMaply"},"content":"find h","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"LoMaply"},"content":"delete task 1","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"LoMaply"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"LoMaply"},"content":"delete 3","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"LoMaply"},"content":"delete 1","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"LoMaply"},"content":"delete 1","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"LoMaply"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"LoMaply"},"content":"end","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"LoMaply":25}}] diff --git a/LoMaply_ip_master/commits.json b/LoMaply_ip_master/commits.json index 2ab71f43..e0ca9333 100644 --- a/LoMaply_ip_master/commits.json +++ b/LoMaply_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"LoMaply":[{"date":"2023-08-20","commitResults":[{"hash":"63291ed9b73ad8ea8af3c0520e527069be7adb9a","isMergeCommit":false,"messageTitle":"Add greeting","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5ffa380033bf4fd3537def7eb97a34924ac9cb35","isMergeCommit":false,"messageTitle":"Add end command, chatbot repeats user input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":4}}},{"hash":"82ebe45d2e86df08b0edd9ddfc04784709364e9b","isMergeCommit":false,"messageTitle":"Add list command, other user inputs are added to task list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"487b7d0166e41002c2eeef65d0c3fb8b1e5a329f","isMergeCommit":false,"messageTitle":"Add mark/unmark commands, Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":17}}}]},{"date":"2023-08-21","commitResults":[{"hash":"f4d782dd99081a5508cbc2cf9d5b47b91e7d4315","isMergeCommit":false,"messageTitle":"Add todo, deadline, event classes for task types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":7}}},{"hash":"0260cc6ede862bad4d76cb2ce6886b36059226f6","isMergeCommit":false,"messageTitle":"Add automated UI test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":13,"deletions":2}}},{"hash":"1e9af84bcb0288f1d2f6812a64da01145a7b3df7","isMergeCommit":false,"messageTitle":"Add error handling for wrong user input","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":57,"deletions":21}}}]},{"date":"2023-08-22","commitResults":[{"hash":"17839e9a7b86155ed75598e143c961f8708a12c5","isMergeCommit":false,"messageTitle":"Add delete command, modify task array to use ArrayList","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":49,"deletions":33}}}]},{"date":"2023-08-26","commitResults":[{"hash":"19a6fd47b8cbb5d9a5503133646cd2a52036a918","isMergeCommit":false,"messageTitle":"Add minor style changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":90}}},{"hash":"b3a0af9239340f44ea4d419c97d46649b18fff7a","isMergeCommit":false,"messageTitle":"Add Storage class to read/write task data into file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":224,"deletions":58}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ce7f3be7fc7a2aefd7dc5dd9547a424c7c7215dc","isMergeCommit":false,"messageTitle":"Add error checking for loadData in Storage class, chatbot prompt for file error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":9}}},{"hash":"f3c1096cd88d7709bcb0212c11ac9baa99075301","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f506f1b9f06de1face8d8ffb354a31f0ff8f1588","isMergeCommit":false,"messageTitle":"Add support for LocalDateTime in Deadline/Event types, Update test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":2},"java":{"insertions":78,"deletions":36}}},{"hash":"3df2faca72e0b55ece63d2714742cb47415e7536","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"7438d02fc9d02ca19c9ba7b32f89c2a29aad9a20","isMergeCommit":false,"messageTitle":"Refactor code for additional OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":278,"deletions":235}}},{"hash":"2d3d73c3e7291b8e85929336bc60bbf327b11dfc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"65373c991aa17702be445fd9439c0dce4b18c873","isMergeCommit":false,"messageTitle":"Add class packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":61,"deletions":15}}},{"hash":"a99c816631145369263f98dc9433f46951481356","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0ebc6e720fc7d3dfb47b5f288cde958ee3ac6a0","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"22c7aaa15d61e9c99204b0d478901ecc2c300f44","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":105,"deletions":0}}},{"hash":"f95e02b14008118ddc71f76fa544e8a59339d0d4","isMergeCommit":false,"messageTitle":"Add additional Javadocs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":60,"deletions":1}}},{"hash":"a018c6d7f7bc078145a78b4b0d30680dc3411036","isMergeCommit":false,"messageTitle":"Add additional code formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":13}}},{"hash":"42afdd367a35dc859760ed8ef2bdc2cd0ad73ab7","isMergeCommit":false,"messageTitle":"Add find command to Parser class, add test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":50,"deletions":5}}},{"hash":"2a718bd7216ae67c94467a879d9f5e3002ad38e1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["branch-A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"767c4dd41da1de7364724401505b83d3f05e17a9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["branch-A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"75eb13339a62f401a310efb9d5d41460f45863f3","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"41c441ad358a780d3a62556da6f4f5d44cbe8da1","isMergeCommit":false,"messageTitle":"Add gradle checkstyle and fix all style issues","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":0,"deletions":1},"java":{"insertions":65,"deletions":68}}},{"hash":"d0f1d7de90b8501469f4859a5efc8b24cebd9940","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3c8f94c2da5936036a9bd1cde4e3ff8500937f93","isMergeCommit":false,"messageTitle":"Add enum for Ui and fix some javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":10}}},{"hash":"18b1284d3c0109c521e5425dbf9be50d05b5a8b5","isMergeCommit":false,"messageTitle":"Fix additional javadocs comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}}]},{"date":"2023-09-06","commitResults":[{"hash":"57709e44431b28c2289f6a531b0ea7361c4bd235","isMergeCommit":false,"messageTitle":"Add GUI display with JavaFx and code formerly used for CLI display","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":51,"deletions":0},"java":{"insertions":270,"deletions":114},"md":{"insertions":2,"deletions":2}}},{"hash":"1f92bedd879acba669f726dd7cb4243a86b02a47","isMergeCommit":false,"messageTitle":"Modify storage to return string for CLI output, add JUnit test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":35}}},{"hash":"341ee0b7318776e04aa90417fc55b72c4cb1a243","isMergeCommit":false,"messageTitle":"Add minor GUI changes","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":7,"deletions":3},"java":{"insertions":2,"deletions":2}}},{"hash":"6b92067ab4aa73d10e7fc561fc118a2e8b05696d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"00c49e4ecd24c100806da8a52ac8da45d24075ed","isMergeCommit":false,"messageTitle":"Add assertion tests to several methods in different classes","messageBody":"Some methods have invariants that are not explicitly checked for\nas they are assumed to be fulfilled when the methods are called\n\nAssertion tests help ensure these invariants are fulfilled without\nhaving to type out JUnit test cases, or exception handling\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":13,"deletions":2}}}]},{"date":"2023-09-10","commitResults":[{"hash":"9b91ad12d0f0fdb08e7ef7828448b9fee1208dfd","isMergeCommit":false,"messageTitle":"Refactor code to be more readable","messageBody":"Several new methods are extracted from long methods such as\nparseCommand from the parser class to help with readability.\n\nparseCommand itself is modified along with several other methods\nto return a String directly rather than rely on the Ui class.\n\nThis keeps the Ui class methods restricted to only functions\nthat involve adding and deleting tasks which simplifies the code.\n","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":145,"deletions":104}}},{"hash":"5cecd393230a046c804391fa6320e8826ce1bfd6","isMergeCommit":true,"messageTitle":"Merge pull request #1 from LoMaply/branch-CodeQuality","messageBody":"Refactor code to be more readable","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"fcf6f52e5ba454ac540d57128f90745314e37475","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"1f33fe723034f0d98fecb75cf3f2a51fc080c243","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-13","commitResults":[{"hash":"a4baddd9b3cb68f25b1a879090146270d0cded40","isMergeCommit":true,"messageTitle":"Merge pull request #2 from LoMaply/branch-A-Assertions","messageBody":"Add assertion tests to several methods in different classes","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"7d9c0d8b3431e87fcf97bf35e1e4b25dc7ce4c5d","isMergeCommit":false,"messageTitle":"Add Schedule command, change Task class to be abstract","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":84,"deletions":9}}}]}]},"authorFileTypeContributionMap":{"LoMaply":{"java":1106,"md":2,"fxml":55,"sh":0,"bat":0,"gradle":21,"txt":25}},"authorContributionVariance":{"LoMaply":30524.018},"authorDisplayNameMap":{"LoMaply":"CS2103T-F12-4 LINU.. LEE"}} +{"authorDailyContributionsMap":{"LoMaply":[{"date":"2023-08-20","commitResults":[{"hash":"63291ed9b73ad8ea8af3c0520e527069be7adb9a","isMergeCommit":false,"messageTitle":"Add greeting","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5ffa380033bf4fd3537def7eb97a34924ac9cb35","isMergeCommit":false,"messageTitle":"Add end command, chatbot repeats user input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":4}}},{"hash":"82ebe45d2e86df08b0edd9ddfc04784709364e9b","isMergeCommit":false,"messageTitle":"Add list command, other user inputs are added to task list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"487b7d0166e41002c2eeef65d0c3fb8b1e5a329f","isMergeCommit":false,"messageTitle":"Add mark/unmark commands, Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":17}}}]},{"date":"2023-08-21","commitResults":[{"hash":"f4d782dd99081a5508cbc2cf9d5b47b91e7d4315","isMergeCommit":false,"messageTitle":"Add todo, deadline, event classes for task types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":7}}},{"hash":"0260cc6ede862bad4d76cb2ce6886b36059226f6","isMergeCommit":false,"messageTitle":"Add automated UI test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":13,"deletions":2}}},{"hash":"1e9af84bcb0288f1d2f6812a64da01145a7b3df7","isMergeCommit":false,"messageTitle":"Add error handling for wrong user input","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":57,"deletions":21}}}]},{"date":"2023-08-22","commitResults":[{"hash":"17839e9a7b86155ed75598e143c961f8708a12c5","isMergeCommit":false,"messageTitle":"Add delete command, modify task array to use ArrayList","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":49,"deletions":33}}}]},{"date":"2023-08-26","commitResults":[{"hash":"19a6fd47b8cbb5d9a5503133646cd2a52036a918","isMergeCommit":false,"messageTitle":"Add minor style changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":90}}},{"hash":"b3a0af9239340f44ea4d419c97d46649b18fff7a","isMergeCommit":false,"messageTitle":"Add Storage class to read/write task data into file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":224,"deletions":58}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ce7f3be7fc7a2aefd7dc5dd9547a424c7c7215dc","isMergeCommit":false,"messageTitle":"Add error checking for loadData in Storage class, chatbot prompt for file error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":9}}},{"hash":"f3c1096cd88d7709bcb0212c11ac9baa99075301","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f506f1b9f06de1face8d8ffb354a31f0ff8f1588","isMergeCommit":false,"messageTitle":"Add support for LocalDateTime in Deadline/Event types, Update test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":2},"java":{"insertions":78,"deletions":36}}},{"hash":"3df2faca72e0b55ece63d2714742cb47415e7536","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"7438d02fc9d02ca19c9ba7b32f89c2a29aad9a20","isMergeCommit":false,"messageTitle":"Refactor code for additional OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":278,"deletions":235}}},{"hash":"2d3d73c3e7291b8e85929336bc60bbf327b11dfc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"65373c991aa17702be445fd9439c0dce4b18c873","isMergeCommit":false,"messageTitle":"Add class packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":61,"deletions":15}}},{"hash":"a99c816631145369263f98dc9433f46951481356","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0ebc6e720fc7d3dfb47b5f288cde958ee3ac6a0","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"22c7aaa15d61e9c99204b0d478901ecc2c300f44","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":105,"deletions":0}}},{"hash":"f95e02b14008118ddc71f76fa544e8a59339d0d4","isMergeCommit":false,"messageTitle":"Add additional Javadocs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":60,"deletions":1}}},{"hash":"a018c6d7f7bc078145a78b4b0d30680dc3411036","isMergeCommit":false,"messageTitle":"Add additional code formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":13}}},{"hash":"42afdd367a35dc859760ed8ef2bdc2cd0ad73ab7","isMergeCommit":false,"messageTitle":"Add find command to Parser class, add test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":50,"deletions":5}}},{"hash":"2a718bd7216ae67c94467a879d9f5e3002ad38e1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["branch-A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"767c4dd41da1de7364724401505b83d3f05e17a9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["branch-A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"75eb13339a62f401a310efb9d5d41460f45863f3","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"41c441ad358a780d3a62556da6f4f5d44cbe8da1","isMergeCommit":false,"messageTitle":"Add gradle checkstyle and fix all style issues","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":0,"deletions":1},"java":{"insertions":65,"deletions":68}}},{"hash":"d0f1d7de90b8501469f4859a5efc8b24cebd9940","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3c8f94c2da5936036a9bd1cde4e3ff8500937f93","isMergeCommit":false,"messageTitle":"Add enum for Ui and fix some javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":10}}},{"hash":"18b1284d3c0109c521e5425dbf9be50d05b5a8b5","isMergeCommit":false,"messageTitle":"Fix additional javadocs comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}}]},{"date":"2023-09-06","commitResults":[{"hash":"57709e44431b28c2289f6a531b0ea7361c4bd235","isMergeCommit":false,"messageTitle":"Add GUI display with JavaFx and code formerly used for CLI display","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":51,"deletions":0},"java":{"insertions":270,"deletions":114},"md":{"insertions":2,"deletions":2}}},{"hash":"1f92bedd879acba669f726dd7cb4243a86b02a47","isMergeCommit":false,"messageTitle":"Modify storage to return string for CLI output, add JUnit test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":35}}},{"hash":"341ee0b7318776e04aa90417fc55b72c4cb1a243","isMergeCommit":false,"messageTitle":"Add minor GUI changes","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":7,"deletions":3},"java":{"insertions":2,"deletions":2}}},{"hash":"6b92067ab4aa73d10e7fc561fc118a2e8b05696d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"00c49e4ecd24c100806da8a52ac8da45d24075ed","isMergeCommit":false,"messageTitle":"Add assertion tests to several methods in different classes","messageBody":"Some methods have invariants that are not explicitly checked for\nas they are assumed to be fulfilled when the methods are called\n\nAssertion tests help ensure these invariants are fulfilled without\nhaving to type out JUnit test cases, or exception handling\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":13,"deletions":2}}}]},{"date":"2023-09-10","commitResults":[{"hash":"9b91ad12d0f0fdb08e7ef7828448b9fee1208dfd","isMergeCommit":false,"messageTitle":"Refactor code to be more readable","messageBody":"Several new methods are extracted from long methods such as\nparseCommand from the parser class to help with readability.\n\nparseCommand itself is modified along with several other methods\nto return a String directly rather than rely on the Ui class.\n\nThis keeps the Ui class methods restricted to only functions\nthat involve adding and deleting tasks which simplifies the code.\n","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":145,"deletions":104}}},{"hash":"5cecd393230a046c804391fa6320e8826ce1bfd6","isMergeCommit":true,"messageTitle":"Merge pull request #1 from LoMaply/branch-CodeQuality","messageBody":"Refactor code to be more readable","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"fcf6f52e5ba454ac540d57128f90745314e37475","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"1f33fe723034f0d98fecb75cf3f2a51fc080c243","isMergeCommit":false,"messageTitle":"Minor edit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-13","commitResults":[{"hash":"a4baddd9b3cb68f25b1a879090146270d0cded40","isMergeCommit":true,"messageTitle":"Merge pull request #2 from LoMaply/branch-A-Assertions","messageBody":"Add assertion tests to several methods in different classes","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"7d9c0d8b3431e87fcf97bf35e1e4b25dc7ce4c5d","isMergeCommit":false,"messageTitle":"Add Schedule command, change Task class to be abstract","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":84,"deletions":9}}}]},{"date":"2023-09-16","commitResults":[{"hash":"18c37174b6a634b5ce738d7870286ce060ae4994","isMergeCommit":false,"messageTitle":"Modify GUI, Add help command, Change chatbot lines","messageBody":"","tags":["A-Personality","A-BetterGui"],"fileTypesAndContributionMap":{"fxml":{"insertions":4,"deletions":4},"java":{"insertions":37,"deletions":4}}},{"hash":"e762fad18985ecce6b7212ccf2876f7e991249c0","isMergeCommit":false,"messageTitle":"Add more error handling, load data GUI text","messageBody":"","tags":["A-MoreErrorHandling"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":31,"deletions":20}}},{"hash":"c1a73285e56686bcf6d31feb2ccbb22221146ad6","isMergeCommit":false,"messageTitle":"Small GUI change","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":2,"deletions":2},"java":{"insertions":3,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"LoMaply":{"java":1152,"md":2,"fxml":55,"sh":0,"bat":0,"gradle":21,"txt":27}},"authorContributionVariance":{"LoMaply":28261.87},"authorDisplayNameMap":{"LoMaply":"CS2103T-F12-4 LINU.. LEE"}} diff --git a/Mahidharah_ip_master/authorship.json b/Mahidharah_ip_master/authorship.json index 6da6fb2d..bb0c295a 100644 --- a/Mahidharah_ip_master/authorship.json +++ b/Mahidharah_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"# Duke - Thalapathy edition","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"\u003e நா ஒரு தடவ முடிவு பண்ணிட்டேன் , நா என் பேச்சை நானே கேக்க மாட்டேன்","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"\u003e - I have decided once and for all, I will not listen to myself","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"\u003e ~ Thalapathy","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"DukePro frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"- text-based","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"- easy to use","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"- ~~fast~~ _SUPER FAST_ to use","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"All you need to do is","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"1. Download it from [here](https://github.com/Mahidharah/ip)","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"2. double-click it.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"4. let it manage your tasks for you 😉","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":"And its **FREE**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":"Features:","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":"- [x] Todos","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":"- [x] Deadlines","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":"- [x] Events","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"- [x] delete","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":"- [x] list","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":"- [x] find","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":"- [x] load and update file","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":"- [ ] Graphical User Interface (GUI)","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":"- [x] Be cool af","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the \u0027main\u0027 method :electron: :","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":"```java","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":"public class Main {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Mahidharah":35,"-":5}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" implementation \u0027org.testng:testng:7.1.0\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Mahidharah":6,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"T : 1 : read book","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"D : 0 : return book : 2023-06-06","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"E : 0 : project meeting : 2023-08-06 : 2023-08-06","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"T : 1 : join sports club","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"T : 0 : join sports club","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":5}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.parsers.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" * The chatbot Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" * Contains a Ui, Storage, TaskList and Parser object.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" private Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" private Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" private Parser parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Duke object.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" * @param filePath the file path","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" this.parser \u003d new Parser(ui, storage, tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * Runs the chatbot until \"bye\" is entered.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" public void run() {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" ui.introMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" Scanner scan \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" String userinput \u003d scan.nextLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" while (!userinput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" parser.parse(userinput);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" userinput \u003d scan.nextLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" ui.byeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" * Checks if a user input can be split.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" * @param input the input","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" * @param splitter the regex for splitting","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException cannot split exception","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" public static void canSplit(String input, String splitter) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" if (input.split(splitter).length \u003d\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" * The entry point of application.","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" * @param args the input arguments","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Mahidharah":75,"-":3}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.io.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" * The Storage class that encapsulates the filepath and the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"public class Storage {","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" final private String FILEPATH;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" private File file;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" * @param filepath the filepath","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" Storage(String filepath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" this.FILEPATH \u003d filepath;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Loads file and handles the case if the file does not exist or already exists.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @return the file","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" public File load() {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" File openfile \u003d new File(FILEPATH);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" if (openfile.createNewFile()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"New file created\" + openfile.getName());","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"File loaded.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" } catch (IOException | NullPointerException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" file \u003d openfile;","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" return openfile;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" * Updates the file given the updated TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" public void updateFile(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" try(FileWriter fw \u003d new FileWriter(file, true);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" PrintWriter out \u003d new PrintWriter(bw))","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" out.println(list.get(list.size() - 1).dataString());","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"nothing\");","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" * Returns the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" * @return the file","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" public File openfile() {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" return file;","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":69}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.parsers.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import java.io.File;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" * The type Task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"public class TaskList {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Task list, given a file to read from.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" * @param file the file","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception if file is somehow not found","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" TaskList(File file) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" this.taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" Scanner reader \u003d new Scanner(file);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" taskList.add(Parser.parseFileInfo(data));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"FileNotFound Error\");","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" TaskList() {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" this.taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" * Returns the tasklist.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" * @return the array list with Tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" public ArrayList\u003cTask\u003e list() {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" return taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" public ArrayList\u003cTask\u003e contains(String key) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" ArrayList\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e(this.taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" temp.removeIf(t -\u003e !t.containsStr(key));","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" return temp;","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":62}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" * The Ui, aka Userinterface that handles all the outputs shows to user.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"public class Ui {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Ui.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" public Ui() {}","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * Displays the welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" public void introMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Hello! I\u0027m IPSVIJAYKUMARAAKOODAIRRUKALAM\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Displays the contents in the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" public void printList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" System.out.println(i + 1 + \".\" + list.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is marked as done by user.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" public void markedMessage(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when the user does not type in what Task is to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" public void invalidMark() {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Enter a valid number to mark\");","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is successfully added to the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" public void addedMessage(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" * Displays the number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" public void listMessage(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is successfully removed from the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":" public void removedMessage(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when the user does not type in what Task is to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Mahidharah"},"content":" public void validNumberMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Enter a valid number to mark\");","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Mahidharah"},"content":" * Displays the goodbye message when the program is about to terminate expectedly.","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Mahidharah"},"content":" public void byeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Mahidharah"},"content":" public void findmsg() {","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":98}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":" * The Duke exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" * The description of the error.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" private String msg;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Duke exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" * @param msg the description","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" this.msg \u003d msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" return this.msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":25}},{"path":"src/main/java/duke/parsers/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.parsers;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * The Parser class that makes sense of the user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":"public class Parser {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" private Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" private Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Parser.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @param ui the ui","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" * @param storage the storage","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" * @param tasklist the tasklist","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" public Parser(Ui ui, Storage storage, TaskList tasklist) {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" this.tasks \u003d tasklist;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * Makes sense of file data and creates tasks accordingly.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" * @param input the String line in the file","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" * @return the corresponding task","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception if the file data is incorrect or corrupted","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" public static Task parseFileInfo(String input) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" String regex \u003d \" : \";","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" String[] split \u003d input.split(regex);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" if (split[0].equals(\"T\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" ToDo todo \u003d new ToDo(split[2]);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" if (Objects.equals(split[1], \"1\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" todo.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" return todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" } else if (split[0].equals(\"D\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" Deadline deadline \u003d new Deadline(split[2], split[3]);","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" if (Objects.equals(split[1], \"1\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" deadline.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" return deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" } else if (split[0].equals(\"E\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" Event event \u003d new Event(split[2], split[3], split[4]);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" if (Objects.equals(split[1], \"1\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" event.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" return event;","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"cannot create task\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" * Makes sense of user inputs, makes changes to lists and file and outputs messages","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" * @param userinput the user\u0027s input","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception when the user input is incorrect","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":" public void parse(String userinput) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" if (userinput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" ui.printList(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 6 \u0026\u0026 userinput.substring(0, 5).equalsIgnoreCase(\"mark \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"Mahidharah"},"content":" int taskno \u003d Integer.parseInt(userinput.substring(5));","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"Mahidharah"},"content":" if (taskno \u003c\u003d tasks.list().size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"Mahidharah"},"content":" Task task \u003d tasks.list().get(taskno - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"Mahidharah"},"content":" task.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"Mahidharah"},"content":" ui.markedMessage(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"Mahidharah"},"content":" ui.invalidMark();","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"Mahidharah"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"Mahidharah"},"content":" ui.invalidMark();","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 4 \u0026\u0026 userinput.substring(0, 4).equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"Mahidharah"},"content":" ToDo todo \u003d new ToDo(userinput.substring(4));","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(todo);","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"Mahidharah"},"content":" ui.addedMessage(todo);","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 8 \u0026\u0026 userinput.substring(0, 8).equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"Mahidharah"},"content":" String[] segments \u003d userinput.split(\" /by \");","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"Mahidharah"},"content":" Deadline deadline \u003d new Deadline(segments[0].substring(8), segments[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(deadline);","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"Mahidharah"},"content":" ui.addedMessage(deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 7 \u0026\u0026 userinput.substring(0, 6).equalsIgnoreCase(\"event \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"Mahidharah"},"content":" String[] segments1 \u003d userinput.split(\" /from \");","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"Mahidharah"},"content":" String from \u003d segments1[1].split(\" /to \")[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"Mahidharah"},"content":" String[] segments2 \u003d segments1[1].split(\" /to \");","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"Mahidharah"},"content":" Event event \u003d new Event(segments1[0].substring(5), from, segments2[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(event);","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"Mahidharah"},"content":" ui.addedMessage(event);","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 8 \u0026\u0026 userinput.substring(0, 7).equalsIgnoreCase(\"delete \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"Mahidharah"},"content":" int taskno \u003d Integer.parseInt(userinput.substring(7));","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"Mahidharah"},"content":" if (taskno \u003c\u003d tasks.list().size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"Mahidharah"},"content":" Task task \u003d tasks.list().get(taskno - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"Mahidharah"},"content":" tasks.list().remove(taskno - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"Mahidharah"},"content":" ui.removedMessage(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"Mahidharah"},"content":" ui.validNumberMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"Mahidharah"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"Mahidharah"},"content":" ui.validNumberMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 6 \u0026\u0026 userinput.substring(0, 5).equalsIgnoreCase(\"find \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"Mahidharah"},"content":" ui.findmsg();","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"Mahidharah"},"content":" ui.printList(tasks.contains(userinput.substring(5)));","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":138}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" * The Deadline class, which is a Task that has a specified due date.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the Deadline","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" * @param by the due date","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception for when the description is empty or the format is not followed","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" public Deadline(String name, String by) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! Follow the format for a deadline.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname() + \":\" + this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname() + \":\" + this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(format) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":51}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" * The Event class, which is a Task that has a specified start and end date.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Event.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the Event","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" * @param from the start date","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" * @param to the end date","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" public Event(String name, String from, String to) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! Follow the format for an event.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname() + \":\" + this.from + \":\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname() + \":\" + this.from + \":\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(format) +","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" \") (to: \" + this.to.format(format) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":56}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":" * The Task that encapsulates its description and its completion state.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" private boolean done;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" private final String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" public abstract String dataString();","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" private Task() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" this.name \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Task.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the Task","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" * Sets the Task as completed.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" public void setdone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" * Returns the completions status of the Task.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" * @return a boolean for completions status","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" public boolean isdone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" return this.done;","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" * Return the description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" * @return the Task description","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" public String getname() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" return this.name;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" * Checks if a given String key is contained in the description of task","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" * @param str the str","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" * @return the boolean","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" public boolean containsStr(String str) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" return name.toLowerCase().contains(str.toLowerCase());","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":" String box;","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" box \u003d \"[X] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" box \u003d \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" return box + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":79}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" * The ToDo class, which is a task to be done.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new ToDo.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the ToDo","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException a duke exception for when the description is empty","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" public ToDo(String name) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":41}},{"path":"src/test/java/duke/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" public void Todo_created_withemptystring_exceptionThrown() {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"[T][ ] \", new ToDo(\"\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\", e.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" public void Todo_created_withhello_success() {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"[T][ ] hello\", new ToDo(\"hello\").toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" fail();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" public void datastring_helloinput_success() {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"T : 0 : hello\", new ToDo(\"hello\").dataString());","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" fail();","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Mahidharah":40}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Mahidharah":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"# Duke - Thalapathy edition","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"\u003e நா ஒரு தடவ முடிவு பண்ணிட்டேன் , நா என் பேச்சை நானே கேக்க மாட்டேன்","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"\u003e - I have decided once and for all, I will not listen to myself","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"\u003e ~ Thalapathy","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"DukePro frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"- text-based","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"- easy to use","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"- ~~fast~~ _SUPER FAST_ to use","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"All you need to do is","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"1. Download it from [here](https://github.com/Mahidharah/ip)","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"2. double-click it.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"4. let it manage your tasks for you 😉","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":"And its **FREE**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":"Features:","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":"- [x] Todos","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":"- [x] Deadlines","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":"- [x] Events","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"- [x] delete","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":"- [x] list","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":"- [x] find","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":"- [x] load and update file","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":"- [ ] Graphical User Interface (GUI)","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":"- [x] Be cool af","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the \u0027main\u0027 method :electron: :","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":"```java","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":"public class Main {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Mahidharah":35,"-":5}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-09"},{"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":"Mahidharah"},"content":" implementation \u0027org.testng:testng:7.1.0\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" //archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" //archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" //archiveClassifier \u003d null","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" //dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":"javafx {","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" modules \u003d [ \u0027javafx.controls\u0027 ]","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Mahidharah":29,"-":38}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"T : 1 : read book","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"D : 0 : return book : 2023-06-06","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"E : 0 : project meeting : 2023-08-06 : 2023-08-06","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"T : 1 : join sports club","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"T : 0 : join sports club","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"T : 0 : u","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"T : 0 : me","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"Mahidharah":7}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" private Label text;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" text \u003d l;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" private void flip() {","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" db.flip();","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" return db;","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Mahidharah":47}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.parsers.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" * The chatbot Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" * Contains a Ui, Storage, TaskList and Parser object.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" private Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" private Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" private Parser parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" private Scene scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Duke object.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" * @param filePath the file path","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" this.parser \u003d new Parser(ui, storage, tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" public Duke() {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" this.storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" this.parser \u003d new Parser(ui, storage, tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":" * Runs the chatbot until \"bye\" is entered.","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" public void run() {","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" ui.introMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" Scanner scan \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" String userinput \u003d scan.nextLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":" while (!userinput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" parser.parse(userinput);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Mahidharah"},"content":" userinput \u003d scan.nextLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Mahidharah"},"content":" ui.byeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Mahidharah"},"content":" * Checks if a user input can be split.","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Mahidharah"},"content":" * @param input the input","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Mahidharah"},"content":" * @param splitter the regex for splitting","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException cannot split exception","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Mahidharah"},"content":" public static void canSplit(String input, String splitter) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Mahidharah"},"content":" if (input.split(splitter).length \u003d\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"Mahidharah"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"Mahidharah"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"Mahidharah"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"Mahidharah"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Mahidharah"},"content":" return textToAdd;","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"Mahidharah"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"Mahidharah"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"Mahidharah"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"Mahidharah"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Mahidharah"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Mahidharah"},"content":" Label dukeText \u003d new Label(getResponse(userInput.getText()));","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"Mahidharah"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"Mahidharah"},"content":" DialogBox.getUserDialog(userText, new ImageView(user)),","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"Mahidharah"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(duke))","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"Mahidharah"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"Mahidharah"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"Mahidharah"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"Mahidharah"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"Mahidharah"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"Mahidharah"},"content":" return parser.parseString(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"Mahidharah"},"content":" return e.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"Mahidharah"},"content":" * The entry point of application.","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"Mahidharah"},"content":" * @param args the input arguments","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"Mahidharah"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"Mahidharah"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-09-06"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":144,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"Mahidharah"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"Mahidharah"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"Mahidharah"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"Mahidharah"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"Mahidharah"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"Mahidharah"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"Mahidharah"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"Mahidharah"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"Mahidharah"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"Mahidharah"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"Mahidharah"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"Mahidharah"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"Mahidharah"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"Mahidharah"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"Mahidharah"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"Mahidharah"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-09"},{"lineNumber":168,"author":{"gitId":"Mahidharah"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":170,"author":{"gitId":"Mahidharah"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":171,"author":{"gitId":"Mahidharah"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":172,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"Mahidharah"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-09"},{"lineNumber":174,"author":{"gitId":"Mahidharah"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"Mahidharah"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":177,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":178,"author":{"gitId":"Mahidharah"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":179,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":180,"author":{"gitId":"Mahidharah"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":181,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":182,"author":{"gitId":"Mahidharah"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":183,"author":{"gitId":"Mahidharah"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":184,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":185,"author":{"gitId":"Mahidharah"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":186,"author":{"gitId":"Mahidharah"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":187,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":188,"author":{"gitId":"Mahidharah"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":189,"author":{"gitId":"Mahidharah"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-09"},{"lineNumber":190,"author":{"gitId":"Mahidharah"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":191,"author":{"gitId":"Mahidharah"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":192,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":193,"author":{"gitId":"Mahidharah"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":194,"author":{"gitId":"Mahidharah"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-09"},{"lineNumber":195,"author":{"gitId":"Mahidharah"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":196,"author":{"gitId":"Mahidharah"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":197,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":198,"author":{"gitId":"Mahidharah"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":199,"author":{"gitId":"Mahidharah"},"content":" handleUserInput();","lastModifiedDate":"2023-09-09"},{"lineNumber":200,"author":{"gitId":"Mahidharah"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":201,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":202,"author":{"gitId":"Mahidharah"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":203,"author":{"gitId":"Mahidharah"},"content":" handleUserInput();","lastModifiedDate":"2023-09-09"},{"lineNumber":204,"author":{"gitId":"Mahidharah"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":205,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":206,"author":{"gitId":"Mahidharah"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":207,"author":{"gitId":"Mahidharah"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":208,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":209,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Mahidharah":207,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" Application.launch(Duke.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Mahidharah":10}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.io.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" * The Storage class that encapsulates the filepath and the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"public class Storage {","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" final private String FILEPATH;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" private File file;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" * @param filepath the filepath","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" Storage(String filepath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" this.FILEPATH \u003d filepath;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Loads file and handles the case if the file does not exist or already exists.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @return the file","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" public File load() {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" File openfile \u003d new File(FILEPATH);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" if (openfile.createNewFile()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"New file created\" + openfile.getName());","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"File loaded.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" } catch (IOException | NullPointerException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" file \u003d openfile;","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" return openfile;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" * Updates the file given the updated TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" public void updateFile(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" try(FileWriter fw \u003d new FileWriter(file, true);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" PrintWriter out \u003d new PrintWriter(bw))","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" out.println(list.get(list.size() - 1).dataString());","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"nothing\");","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" * Returns the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" * @return the file","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" public File openfile() {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" return file;","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":69}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.parsers.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import java.io.File;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" * The type Task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"public class TaskList {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Task list, given a file to read from.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" * @param file the file","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception if file is somehow not found","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" TaskList(File file) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" this.taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" Scanner reader \u003d new Scanner(file);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" taskList.add(Parser.parseFileInfo(data));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"FileNotFound Error\");","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" TaskList() {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" this.taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" * Returns the tasklist.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" * @return the array list with Tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" public ArrayList\u003cTask\u003e list() {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" return taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" public ArrayList\u003cTask\u003e contains(String key) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" ArrayList\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e(this.taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" temp.removeIf(t -\u003e !t.containsStr(key));","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" return temp;","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":62}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" * The Ui, aka Userinterface that handles all the outputs shows to user.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"public class Ui {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Ui.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" public Ui() {}","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * Displays the welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" public void introMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Hello! I\u0027m IPSVIJAYKUMARAAKOODAIRRUKALAM\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Displays the contents in the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" public void printList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" System.out.println(i + 1 + \".\" + list.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is marked as done by user.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" public void markedMessage(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when the user does not type in what Task is to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" public void invalidMark() {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Enter a valid number to mark\");","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is successfully added to the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" public void addedMessage(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" * Displays the number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" public void listMessage(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is successfully removed from the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":" public void removedMessage(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when the user does not type in what Task is to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Mahidharah"},"content":" public void validNumberMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Enter a valid number to mark\");","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Mahidharah"},"content":" * Displays the goodbye message when the program is about to terminate expectedly.","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Mahidharah"},"content":" public void byeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Mahidharah"},"content":" public void findmsg() {","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Mahidharah"},"content":" public String introMessageString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"Mahidharah"},"content":" return (\"Hello! I\u0027m IPSVIJAYKUMARAAKOODAIRRUKALAM\" + \"%n\" + \"What can I do for you?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"Mahidharah"},"content":" * Displays the contents in the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"Mahidharah"},"content":" public String printListString(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"Mahidharah"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"Mahidharah"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"Mahidharah"},"content":" out +\u003d i + 1 + \".\" + list.get(i) + \"%n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"Mahidharah"},"content":" return out;","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is marked as done by user.","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"Mahidharah"},"content":" public String markedMessageString(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"Mahidharah"},"content":" return (\"Nice! I\u0027ve marked this task as done:\" + \"%n\" + \" \" + task);","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when the user does not type in what Task is to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"Mahidharah"},"content":" public String invalidMarkString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"Mahidharah"},"content":" return \"Enter a valid number to mark\";","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is successfully added to the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"Mahidharah"},"content":" public String addedMessageString(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"Mahidharah"},"content":" return (\"Got it. I\u0027ve added this task:\" + \"%n\" + \" \" + task.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"Mahidharah"},"content":" * Displays the number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"Mahidharah"},"content":" public String listMessageString(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"Mahidharah"},"content":" return (\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is successfully removed from the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"Mahidharah"},"content":" public String removedMessageString(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"Mahidharah"},"content":" return (\"Noted. I\u0027ve removed this task:\" + \"%n\" + \" \" + task);","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when the user does not type in what Task is to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"Mahidharah"},"content":" public String validNumberMessageString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"Mahidharah"},"content":" return \"Enter a valid number to mark\";","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"Mahidharah"},"content":" * Displays the goodbye message when the program is about to terminate expectedly.","lastModifiedDate":"2023-09-09"},{"lineNumber":168,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"Mahidharah"},"content":" public String byeMessageString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":170,"author":{"gitId":"Mahidharah"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":171,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":172,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"Mahidharah"},"content":" public String findmsgString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":174,"author":{"gitId":"Mahidharah"},"content":" return \"Here are the matching tasks in your list:\";","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":176}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":" * The Duke exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" * The description of the error.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" private String msg;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Duke exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" * @param msg the description","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" this.msg \u003d msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" return this.msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":25}},{"path":"src/main/java/duke/parsers/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.parsers;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * The Parser class that makes sense of the user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":"public class Parser {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" private Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" private Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Parser.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @param ui the ui","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" * @param storage the storage","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" * @param tasklist the tasklist","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" public Parser(Ui ui, Storage storage, TaskList tasklist) {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" this.tasks \u003d tasklist;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * Makes sense of file data and creates tasks accordingly.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" * @param input the String line in the file","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" * @return the corresponding task","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception if the file data is incorrect or corrupted","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" public static Task parseFileInfo(String input) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" String regex \u003d \" : \";","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" String[] split \u003d input.split(regex);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" if (split[0].equals(\"T\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" ToDo todo \u003d new ToDo(split[2]);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" if (Objects.equals(split[1], \"1\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" todo.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" return todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" } else if (split[0].equals(\"D\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" Deadline deadline \u003d new Deadline(split[2], split[3]);","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" if (Objects.equals(split[1], \"1\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" deadline.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" return deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" } else if (split[0].equals(\"E\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" Event event \u003d new Event(split[2], split[3], split[4]);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" if (Objects.equals(split[1], \"1\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" event.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" return event;","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"cannot create task\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" * Makes sense of user inputs, makes changes to lists and file and outputs messages","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" * @param userinput the user\u0027s input","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception when the user input is incorrect","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":" public void parse(String userinput) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" if (userinput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" ui.printList(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 6 \u0026\u0026 userinput.substring(0, 5).equalsIgnoreCase(\"mark \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"Mahidharah"},"content":" int taskno \u003d Integer.parseInt(userinput.substring(5));","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"Mahidharah"},"content":" if (taskno \u003c\u003d tasks.list().size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"Mahidharah"},"content":" Task task \u003d tasks.list().get(taskno - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"Mahidharah"},"content":" task.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"Mahidharah"},"content":" ui.markedMessage(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"Mahidharah"},"content":" ui.invalidMark();","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"Mahidharah"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"Mahidharah"},"content":" ui.invalidMark();","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 4 \u0026\u0026 userinput.substring(0, 4).equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"Mahidharah"},"content":" ToDo todo \u003d new ToDo(userinput.substring(4));","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(todo);","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"Mahidharah"},"content":" ui.addedMessage(todo);","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 8 \u0026\u0026 userinput.substring(0, 8).equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"Mahidharah"},"content":" String[] segments \u003d userinput.split(\" /by \");","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"Mahidharah"},"content":" Deadline deadline \u003d new Deadline(segments[0].substring(8), segments[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(deadline);","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"Mahidharah"},"content":" ui.addedMessage(deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 7 \u0026\u0026 userinput.substring(0, 6).equalsIgnoreCase(\"event \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"Mahidharah"},"content":" String[] segments1 \u003d userinput.split(\" /from \");","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"Mahidharah"},"content":" String from \u003d segments1[1].split(\" /to \")[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"Mahidharah"},"content":" String[] segments2 \u003d segments1[1].split(\" /to \");","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"Mahidharah"},"content":" Event event \u003d new Event(segments1[0].substring(5), from, segments2[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(event);","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"Mahidharah"},"content":" ui.addedMessage(event);","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 8 \u0026\u0026 userinput.substring(0, 7).equalsIgnoreCase(\"delete \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"Mahidharah"},"content":" int taskno \u003d Integer.parseInt(userinput.substring(7));","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"Mahidharah"},"content":" if (taskno \u003c\u003d tasks.list().size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"Mahidharah"},"content":" Task task \u003d tasks.list().get(taskno - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"Mahidharah"},"content":" tasks.list().remove(taskno - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"Mahidharah"},"content":" ui.removedMessage(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"Mahidharah"},"content":" ui.validNumberMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"Mahidharah"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"Mahidharah"},"content":" ui.validNumberMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 6 \u0026\u0026 userinput.substring(0, 5).equalsIgnoreCase(\"find \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"Mahidharah"},"content":" ui.findmsg();","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"Mahidharah"},"content":" ui.printList(tasks.contains(userinput.substring(5)));","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"Mahidharah"},"content":" public String parseString(String userinput) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"Mahidharah"},"content":" if (userinput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"Mahidharah"},"content":" return ui.printListString(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 6 \u0026\u0026 userinput.substring(0, 5).equalsIgnoreCase(\"mark \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"Mahidharah"},"content":" int taskno \u003d Integer.parseInt(userinput.substring(5));","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"Mahidharah"},"content":" if (taskno \u003c\u003d tasks.list().size()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"Mahidharah"},"content":" Task task \u003d tasks.list().get(taskno - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"Mahidharah"},"content":" task.setdone();","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"Mahidharah"},"content":" return ui.markedMessageString(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"Mahidharah"},"content":" return ui.invalidMarkString();","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"Mahidharah"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"Mahidharah"},"content":" return ui.invalidMarkString();","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 4 \u0026\u0026 userinput.substring(0, 4).equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"Mahidharah"},"content":" ToDo todo \u003d new ToDo(userinput.substring(4));","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(todo);","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"Mahidharah"},"content":" return ui.addedMessageString(todo) + \"%n\" + ui.listMessageString(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 8 \u0026\u0026 userinput.substring(0, 8).equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"Mahidharah"},"content":" String[] segments \u003d userinput.split(\" /by \");","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"Mahidharah"},"content":" Deadline deadline \u003d new Deadline(segments[0].substring(8), segments[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"Mahidharah"},"content":" return ui.addedMessageString(deadline) + \"%n\" + ui.listMessageString(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":168,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 7 \u0026\u0026 userinput.substring(0, 6).equalsIgnoreCase(\"event \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"Mahidharah"},"content":" String[] segments1 \u003d userinput.split(\" /from \");","lastModifiedDate":"2023-09-09"},{"lineNumber":170,"author":{"gitId":"Mahidharah"},"content":" String from \u003d segments1[1].split(\" /to \")[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":171,"author":{"gitId":"Mahidharah"},"content":" String[] segments2 \u003d segments1[1].split(\" /to \");","lastModifiedDate":"2023-09-09"},{"lineNumber":172,"author":{"gitId":"Mahidharah"},"content":" Event event \u003d new Event(segments1[0].substring(5), from, segments2[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(event);","lastModifiedDate":"2023-09-09"},{"lineNumber":174,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"Mahidharah"},"content":" return (ui.addedMessageString(event) + \"%n\" + ui.listMessageString(tasks.list()));","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 8 \u0026\u0026 userinput.substring(0, 7).equalsIgnoreCase(\"delete \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":177,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":178,"author":{"gitId":"Mahidharah"},"content":" int taskno \u003d Integer.parseInt(userinput.substring(7));","lastModifiedDate":"2023-09-09"},{"lineNumber":179,"author":{"gitId":"Mahidharah"},"content":" if (taskno \u003c\u003d tasks.list().size()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":180,"author":{"gitId":"Mahidharah"},"content":" Task task \u003d tasks.list().get(taskno - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":181,"author":{"gitId":"Mahidharah"},"content":" tasks.list().remove(taskno - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":182,"author":{"gitId":"Mahidharah"},"content":" return ui.removedMessageString(task) + \"%n\" + ui.listMessageString(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":183,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":184,"author":{"gitId":"Mahidharah"},"content":" return ui.validNumberMessageString();","lastModifiedDate":"2023-09-09"},{"lineNumber":185,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":186,"author":{"gitId":"Mahidharah"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":187,"author":{"gitId":"Mahidharah"},"content":" return ui.validNumberMessageString();","lastModifiedDate":"2023-09-09"},{"lineNumber":188,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":189,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 6 \u0026\u0026 userinput.substring(0, 5).equalsIgnoreCase(\"find \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":190,"author":{"gitId":"Mahidharah"},"content":" return ui.findmsgString() + \"%n\" + ui.printListString(tasks.contains(userinput.substring(5)));","lastModifiedDate":"2023-09-09"},{"lineNumber":191,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":192,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":193,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":194,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":195,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":196,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":196}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" * The Deadline class, which is a Task that has a specified due date.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the Deadline","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" * @param by the due date","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception for when the description is empty or the format is not followed","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" public Deadline(String name, String by) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! Follow the format for a deadline.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname() + \":\" + this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname() + \":\" + this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(format) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":51}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" * The Event class, which is a Task that has a specified start and end date.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Event.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the Event","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" * @param from the start date","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" * @param to the end date","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" public Event(String name, String from, String to) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! Follow the format for an event.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname() + \":\" + this.from + \":\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname() + \":\" + this.from + \":\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(format) +","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" \") (to: \" + this.to.format(format) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":56}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":" * The Task that encapsulates its description and its completion state.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" private boolean done;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" private final String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" public abstract String dataString();","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" private Task() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" this.name \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Task.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the Task","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" * Sets the Task as completed.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" public void setdone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" * Returns the completions status of the Task.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" * @return a boolean for completions status","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" public boolean isdone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" return this.done;","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" * Return the description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" * @return the Task description","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" public String getname() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" return this.name;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" * Checks if a given String key is contained in the description of task","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" * @param str the str","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" * @return the boolean","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" public boolean containsStr(String str) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" return name.toLowerCase().contains(str.toLowerCase());","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":" String box;","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" box \u003d \"[X] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" box \u003d \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" return box + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":79}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" * The ToDo class, which is a task to be done.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new ToDo.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the ToDo","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException a duke exception for when the description is empty","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" public ToDo(String name) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":41}},{"path":"src/test/java/duke/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" public void Todo_created_withemptystring_exceptionThrown() {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"[T][ ] \", new ToDo(\"\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\", e.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" public void Todo_created_withhello_success() {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"[T][ ] hello\", new ToDo(\"hello\").toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" fail();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" public void datastring_helloinput_success() {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"T : 0 : hello\", new ToDo(\"hello\").dataString());","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" fail();","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Mahidharah":40}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Mahidharah":1,"-":20}}] diff --git a/Mahidharah_ip_master/commits.json b/Mahidharah_ip_master/commits.json index b9b2664a..70d8502a 100644 --- a/Mahidharah_ip_master/commits.json +++ b/Mahidharah_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Mahidharah":[{"date":"2023-08-22","commitResults":[{"hash":"21b40fe89aeb99435cee300fe25b9af9a08fb76e","isMergeCommit":false,"messageTitle":"1. New chatbot name 2. Chatbot simply greets and exits","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"e2a46ad83416748e13e91777d1ec096ded9448ea","isMergeCommit":false,"messageTitle":"1. Echos commands entered by the user, and exits when the user types the command bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"4e5bac8fba4ecc60d5798eb2ddabdd3f6c40dd4c","isMergeCommit":false,"messageTitle":"1. Store whatever text entered by the user 2. Display them back to the user when requested with \"list\" command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e067e846005234b27186106be497a4edfe9a8c66","isMergeCommit":false,"messageTitle":"1. Added the ability to mark tasks as done 2. New class to encapsulate a task and its functions","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":6}}},{"hash":"e0f547dd7ac0b1932750f753028b49889d0e8c33","isMergeCommit":false,"messageTitle":"Added support for tracking three types of tasks: ToDos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":3}}},{"hash":"903ed60ac7a40b4ccf646d750a9ea90594cfa949","isMergeCommit":false,"messageTitle":"Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"0e2f72984063ada66913aa9c6165dcb6641af601","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":31}}}]},{"date":"2023-08-25","commitResults":[{"hash":"fbfb95bff1463afb4cb4403219a3e2ff38c0dee7","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":29}}}]},{"date":"2023-08-30","commitResults":[{"hash":"36d57a6fa8197e5970f3658739e34fdd116e6ac9","isMergeCommit":false,"messageTitle":"Enabled saving the tasks in the hard disk automatically whenever the task list changes and loading the data from the hard disk when the chatbot starts up. File name is hardcoded and relative path from the project root e.g., ./data/duke.txt. If corrupted, error msg displayed","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":5}}},{"hash":"d2b3d6d6042d94fae885f5fb865beca87c600013","isMergeCommit":false,"messageTitle":"Enabled storing of deadline and event dates as a java.time.LocalDate in your task objects. Accept dates in a format such as yyyy-mm-dd format (e.g., 2019-10-15) and print in a different format such as MMM dd yyyy e.g., (Oct 15 2019).","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":8}}},{"hash":"340eaabe0e36fc375a475e1674445dfacba450f4","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-06","commitResults":[{"hash":"27419a5964313cbd4091e8d100b8322dd114bec1","isMergeCommit":false,"messageTitle":"Added OOP to code","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":250,"deletions":138}}},{"hash":"d9b307c484e5277fa8f973e61a13229c7148d78a","isMergeCommit":false,"messageTitle":"segmented code into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":7},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-07","commitResults":[{"hash":"3d58608bcd3772aad86f866080f81c1f4bd813c0","isMergeCommit":false,"messageTitle":"Added packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-08","commitResults":[{"hash":"5d08bc05625357ec6d7843c9cad6dd78e59ca928","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"2e0444184da324f724d941999d83a6aec9ad6c31","isMergeCommit":false,"messageTitle":"failed attempt at JUnit and gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":22,"deletions":0}}},{"hash":"f7d3eadb692309d107b862ac68f585ed3c0a2dd5","isMergeCommit":false,"messageTitle":"Gradle fixed and Junit tests for 1 class completed","messageBody":"","tags":["A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":26}}},{"hash":"3d9f2ee7b1ade3c8c35bd1b98333efcb7cf13a80","isMergeCommit":false,"messageTitle":"Jar?","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"b2b9e3d7539a65807252a25bc93219ac69f2ee30","isMergeCommit":false,"messageTitle":"Javadocs added","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":205,"deletions":8}}},{"hash":"d040af0e82813ec27b2b2a5dedc9d670cdd5fd33","isMergeCommit":false,"messageTitle":"Added ability to find tasks with keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":5}}},{"hash":"ac4a414e8329c6f51a110744f65337bb89b8551c","isMergeCommit":false,"messageTitle":"checkedstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":41}}},{"hash":"a82399686c22e585b22ae072a2f5ad7ba699fd08","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n checkedstyle\n\n# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Storage.java\n#\tsrc/main/java/duke/Ui.java\n#\tsrc/main/java/duke/parsers/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"1eae007440db9c6de3e275841d2f38221b7d1421","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Added ability to find tasks with keyword\n\n# Conflicts:\n#\tsrc/main/java/duke/parsers/Parser.java\n#\tsrc/main/java/duke/tasks/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"e641f58f1623c7e9922b216004e5726138a1e88b","isMergeCommit":false,"messageTitle":"fixed bugs","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-10","commitResults":[{"hash":"d76725f18931975e0fd968cbbd21bfb8310e118a","isMergeCommit":false,"messageTitle":"Updated README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":40,"deletions":24}}},{"hash":"f5e01e5c2d48dd5c31d1e3c9fc83f530c4a08a53","isMergeCommit":false,"messageTitle":"Updated README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"2cc448446b39a78354ee178a8177ed2e99bbb755","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":9,"deletions":9}}}]}]},"authorFileTypeContributionMap":{"Mahidharah":{"java":734,"md":35,"fxml":0,"sh":0,"bat":1,"gradle":6,"txt":13}},"authorContributionVariance":{"Mahidharah":16226.577},"authorDisplayNameMap":{"Mahidharah":"CS2103T-T09-2 C MA..DRAN"}} +{"authorDailyContributionsMap":{"Mahidharah":[{"date":"2023-08-22","commitResults":[{"hash":"21b40fe89aeb99435cee300fe25b9af9a08fb76e","isMergeCommit":false,"messageTitle":"1. New chatbot name 2. Chatbot simply greets and exits","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"e2a46ad83416748e13e91777d1ec096ded9448ea","isMergeCommit":false,"messageTitle":"1. Echos commands entered by the user, and exits when the user types the command bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"4e5bac8fba4ecc60d5798eb2ddabdd3f6c40dd4c","isMergeCommit":false,"messageTitle":"1. Store whatever text entered by the user 2. Display them back to the user when requested with \"list\" command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e067e846005234b27186106be497a4edfe9a8c66","isMergeCommit":false,"messageTitle":"1. Added the ability to mark tasks as done 2. New class to encapsulate a task and its functions","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":6}}},{"hash":"e0f547dd7ac0b1932750f753028b49889d0e8c33","isMergeCommit":false,"messageTitle":"Added support for tracking three types of tasks: ToDos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":3}}},{"hash":"903ed60ac7a40b4ccf646d750a9ea90594cfa949","isMergeCommit":false,"messageTitle":"Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"0e2f72984063ada66913aa9c6165dcb6641af601","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":31}}}]},{"date":"2023-08-25","commitResults":[{"hash":"fbfb95bff1463afb4cb4403219a3e2ff38c0dee7","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":29}}}]},{"date":"2023-08-30","commitResults":[{"hash":"36d57a6fa8197e5970f3658739e34fdd116e6ac9","isMergeCommit":false,"messageTitle":"Enabled saving the tasks in the hard disk automatically whenever the task list changes and loading the data from the hard disk when the chatbot starts up. File name is hardcoded and relative path from the project root e.g., ./data/duke.txt. If corrupted, error msg displayed","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":5}}},{"hash":"d2b3d6d6042d94fae885f5fb865beca87c600013","isMergeCommit":false,"messageTitle":"Enabled storing of deadline and event dates as a java.time.LocalDate in your task objects. Accept dates in a format such as yyyy-mm-dd format (e.g., 2019-10-15) and print in a different format such as MMM dd yyyy e.g., (Oct 15 2019).","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":8}}},{"hash":"340eaabe0e36fc375a475e1674445dfacba450f4","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-06","commitResults":[{"hash":"27419a5964313cbd4091e8d100b8322dd114bec1","isMergeCommit":false,"messageTitle":"Added OOP to code","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":250,"deletions":138}}},{"hash":"d9b307c484e5277fa8f973e61a13229c7148d78a","isMergeCommit":false,"messageTitle":"segmented code into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":7},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-07","commitResults":[{"hash":"3d58608bcd3772aad86f866080f81c1f4bd813c0","isMergeCommit":false,"messageTitle":"Added packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-08","commitResults":[{"hash":"5d08bc05625357ec6d7843c9cad6dd78e59ca928","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"2e0444184da324f724d941999d83a6aec9ad6c31","isMergeCommit":false,"messageTitle":"failed attempt at JUnit and gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":22,"deletions":0}}},{"hash":"f7d3eadb692309d107b862ac68f585ed3c0a2dd5","isMergeCommit":false,"messageTitle":"Gradle fixed and Junit tests for 1 class completed","messageBody":"","tags":["A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":26}}},{"hash":"3d9f2ee7b1ade3c8c35bd1b98333efcb7cf13a80","isMergeCommit":false,"messageTitle":"Jar?","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"b2b9e3d7539a65807252a25bc93219ac69f2ee30","isMergeCommit":false,"messageTitle":"Javadocs added","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":205,"deletions":8}}},{"hash":"d040af0e82813ec27b2b2a5dedc9d670cdd5fd33","isMergeCommit":false,"messageTitle":"Added ability to find tasks with keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":5}}},{"hash":"ac4a414e8329c6f51a110744f65337bb89b8551c","isMergeCommit":false,"messageTitle":"checkedstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":41}}},{"hash":"a82399686c22e585b22ae072a2f5ad7ba699fd08","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n checkedstyle\n\n# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Storage.java\n#\tsrc/main/java/duke/Ui.java\n#\tsrc/main/java/duke/parsers/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"1eae007440db9c6de3e275841d2f38221b7d1421","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Added ability to find tasks with keyword\n\n# Conflicts:\n#\tsrc/main/java/duke/parsers/Parser.java\n#\tsrc/main/java/duke/tasks/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"e641f58f1623c7e9922b216004e5726138a1e88b","isMergeCommit":false,"messageTitle":"fixed bugs","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":1,"deletions":1}}},{"hash":"0ebb9f0dfca49affa08d79fedf25c8d5606ce73d","isMergeCommit":false,"messageTitle":"gui implementation that does not work","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":26,"deletions":6},"java":{"insertions":295,"deletions":2}}}]},{"date":"2023-09-10","commitResults":[{"hash":"d76725f18931975e0fd968cbbd21bfb8310e118a","isMergeCommit":false,"messageTitle":"Updated README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":40,"deletions":24}}},{"hash":"f5e01e5c2d48dd5c31d1e3c9fc83f530c4a08a53","isMergeCommit":false,"messageTitle":"Updated README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"2cc448446b39a78354ee178a8177ed2e99bbb755","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":9,"deletions":9}}}]},{"date":"2023-09-16","commitResults":[{"hash":"a93274031e31d9ea595d34922c6f316469be74dd","isMergeCommit":false,"messageTitle":"Working GUI prototype, as per step 3 of tutorial. Bugs: 1. Just pressing enter returns a msg. 2. Lines not indented, as of not %n placeholder suggests lines. 3. Cannot exit program","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":34,"deletions":3}}},{"hash":"6cf843cb112f94c8c06ac6b4ea5fb9236b85dacd","isMergeCommit":true,"messageTitle":"Merge commit \u00272cc448446b39a78354ee178a8177ed2e99bbb755\u0027","messageBody":"* commit \u00272cc448446b39a78354ee178a8177ed2e99bbb755\u0027:\n Update README.md\n Updated README.md\n Updated README.md\n","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Mahidharah":{"java":1059,"md":35,"fxml":0,"sh":0,"bat":1,"gradle":29,"txt":15}},"authorContributionVariance":{"Mahidharah":25362.932},"authorDisplayNameMap":{"Mahidharah":"CS2103T-T09-2 C MA..DRAN"}} diff --git a/NgChunMan_ip_master/commits.json b/NgChunMan_ip_master/commits.json index a10764cd..04ce397d 100644 --- a/NgChunMan_ip_master/commits.json +++ b/NgChunMan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"NgChunMan":[{"date":"2023-08-22","commitResults":[{"hash":"de120df366273e67ce78bcc66b5989f3f967b266","isMergeCommit":false,"messageTitle":"Add: Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"0d9df654d36b9c9d7c38ef63bde15d3fc75dd5f2","isMergeCommit":false,"messageTitle":"Add: Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"30861a78979c0ebd161e533210ce87c07de3b00c","isMergeCommit":false,"messageTitle":"Add: Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}},{"hash":"bd8d4b0a7a76f29ec46da6f57e02c0cd762e88ba","isMergeCommit":false,"messageTitle":"Add: Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":10}}},{"hash":"5f543248de8277dce61348250c9603ba173b9e76","isMergeCommit":false,"messageTitle":"Add: Level 4 (Inheritance)","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":211,"deletions":29}}}]},{"date":"2023-08-24","commitResults":[{"hash":"bd2242b062dea0bd5b69251836bb71ff7d7afe9c","isMergeCommit":false,"messageTitle":"Add: TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":11,"deletions":7},"sh":{"insertions":1,"deletions":1}}},{"hash":"fb2e8c345308b0826f3d109f1dd0fa2f9eb109ad","isMergeCommit":false,"messageTitle":"Add: Level 5 (Error Handling)","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":274,"deletions":120}}},{"hash":"1a627d36771499e66e649ca2fc7f0883cb86a84b","isMergeCommit":false,"messageTitle":"Add: Level 6 (Delete)","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":32}}}]},{"date":"2023-08-30","commitResults":[{"hash":"96e54877d988faa531c909256ef0686df7575be1","isMergeCommit":false,"messageTitle":"Add level 7 save task functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":364,"deletions":126}}}]},{"date":"2023-09-01","commitResults":[{"hash":"50ff6cb103a03ddbd9d75bcd85e2f93b683ab4a6","isMergeCommit":false,"messageTitle":"Add level 8 dates and times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":197,"deletions":27}}},{"hash":"029c0c8c3ef0ea694da3c1168d52b86d0a6cfe5b","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":940,"deletions":420}}},{"hash":"6b3d521d8dc57c697a60882e3c99604526dc38dc","isMergeCommit":false,"messageTitle":"Add divide classes into multiple packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":0}}},{"hash":"073eeef3831475809711e13aed3b1e39b55c2e45","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"acccbbe5e77760ddaae2fff28a4c7deb293e8289","isMergeCommit":false,"messageTitle":"Merge branch add-gradle-support and set up Gradle build and run","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"633c72ebb3afda4dbc3a62be1c7d8b3e5826ef4f","isMergeCommit":false,"messageTitle":"Add JUnit tests to test ToDo and Event class","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":161,"deletions":13}}},{"hash":"e159f77ffa6102d52d6b0a1310e8b1b1af14f409","isMergeCommit":false,"messageTitle":"Create a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"f9b816d63838e3764435fd9947603f20a3fad88d","isMergeCommit":false,"messageTitle":"Add Javadoc for methods and classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":1}}},{"hash":"736701ff7003c5f3cd23d0bdc7194d3b784b87ef","isMergeCommit":false,"messageTitle":"Follow the coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":33}}},{"hash":"05eff13008ad78fa1b4ffaba7f8927ab6e536ccf","isMergeCommit":false,"messageTitle":"Implement find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":173,"deletions":7}}},{"hash":"96a4288d2bf4e099801bd1b3dbb88b7bc1486a41","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n Follow the coding standard\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"6597da22b1edc90cb99e88df82c6e13a9fc64cc5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Implement find functionality\n\n# Conflicts:\n#\tsrc/main/java/evo/commands/FindCommand.java\n#\tsrc/main/java/evo/exceptions/InvalidInputException.java\n#\tsrc/main/java/evo/exceptions/MissingTaskToFindException.java\n#\tsrc/main/java/evo/exceptions/NoTaskFindException.java\n\nResolution: keep \u0027branch-Level-9\u0027\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"a33684bea690437795ab2ea654b1561f70f6ead1","isMergeCommit":false,"messageTitle":"Add coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-06","commitResults":[{"hash":"3599b01b22ffb8ef94b380cefcb7ac4e56a3878b","isMergeCommit":false,"messageTitle":"Add Checkstyle and fix all the coding style violations","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":26,"deletions":0},"java":{"insertions":129,"deletions":72}}}]},{"date":"2023-09-08","commitResults":[{"hash":"84f281fa554b70adba033b3d3c386ae56dc382b0","isMergeCommit":false,"messageTitle":"Add GUI to the chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":5},"fxml":{"insertions":47,"deletions":0},"java":{"insertions":725,"deletions":309}}}]},{"date":"2023-09-14","commitResults":[{"hash":"4e4496fea00aa2a691a8ab70c7348b654c50881d","isMergeCommit":false,"messageTitle":"Add styles","messageBody":"The user interface is a bit plain.\n\nAdd styles so that the application looks more attractive.\n","tags":["Add-Style"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":6,"deletions":0},"fxml":{"insertions":15,"deletions":8},"java":{"insertions":1,"deletions":1}}},{"hash":"9e0c5f0c620d857d38c524cc4479bc2a97cff1dc","isMergeCommit":false,"messageTitle":"Add assertions to document assumptions","messageBody":"* add assertion statements at the point to check the array\nlength and the validity of task number\n\nThese parts consist of checking the input length of\nactionType array is of valid length or not and also\nchecking the task number is greater than one or not.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":15,"deletions":2}}},{"hash":"427987616b98b4e1c17e900fa6a683e09e67bf25","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"* Refactor key functions to enhance readability and\nmaintainability\n* Resolve code style inconsistencies\n* Conduct thorough code review\n* Ensure proper error handling and edge case coverage\n\nThese changes improve the overall quality of the codebase\nand making it easier to maintain and understand.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"d85c492583a9035d3ccf01371ba1afc8b4f47744","isMergeCommit":true,"messageTitle":"Merge pull request #2 from NgChunMan/branch-A-Assertions","messageBody":"Add assertions to document assumptions","fileTypesAndContributionMap":{}},{"hash":"bec80ab1e102a34f707a9226f1196a3579c7e42b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from NgChunMan/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"91e202fb37acb159e199c4311d4ecafaaf3c722e","isMergeCommit":false,"messageTitle":"Add an extension which is DoAfterTask","messageBody":"This commit introduces the DoAfterCommand class, which\nhandles the creation of \u0027Do After\u0027 tasks and updates the task\nlist in storage. The class parses user input, constructs new\nDoAfter tasks, and provides user feedback. It also includes a\nutility method for string concatenation.\n\n* Implement DoAfterCommand class\n* Add parsing of user input for \u0027Do After\u0027 tasks\n* Create and added \u0027Do After\u0027 tasks to the task list\n* Update storage with the new task data\n* Add a utility method for string concatenation\n","tags":["B-DoAfterTasks","A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":6},"java":{"insertions":191,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"NgChunMan":{"java":2619,"md":0,"fxml":54,"sh":1,"bat":0,"gradle":33,"txt":9}},"authorContributionVariance":{"NgChunMan":145260.77},"authorDisplayNameMap":{"NgChunMan":"CS2103T-W15-2 NG C.. MAN"}} +{"authorDailyContributionsMap":{"NgChunMan":[{"date":"2023-08-22","commitResults":[{"hash":"de120df366273e67ce78bcc66b5989f3f967b266","isMergeCommit":false,"messageTitle":"Add: Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"0d9df654d36b9c9d7c38ef63bde15d3fc75dd5f2","isMergeCommit":false,"messageTitle":"Add: Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"30861a78979c0ebd161e533210ce87c07de3b00c","isMergeCommit":false,"messageTitle":"Add: Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}},{"hash":"bd8d4b0a7a76f29ec46da6f57e02c0cd762e88ba","isMergeCommit":false,"messageTitle":"Add: Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":10}}},{"hash":"5f543248de8277dce61348250c9603ba173b9e76","isMergeCommit":false,"messageTitle":"Add: Level 4 (Inheritance)","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":211,"deletions":29}}}]},{"date":"2023-08-24","commitResults":[{"hash":"bd2242b062dea0bd5b69251836bb71ff7d7afe9c","isMergeCommit":false,"messageTitle":"Add: TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":11,"deletions":7},"sh":{"insertions":1,"deletions":1}}},{"hash":"fb2e8c345308b0826f3d109f1dd0fa2f9eb109ad","isMergeCommit":false,"messageTitle":"Add: Level 5 (Error Handling)","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":274,"deletions":120}}},{"hash":"1a627d36771499e66e649ca2fc7f0883cb86a84b","isMergeCommit":false,"messageTitle":"Add: Level 6 (Delete)","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":32}}}]},{"date":"2023-08-30","commitResults":[{"hash":"96e54877d988faa531c909256ef0686df7575be1","isMergeCommit":false,"messageTitle":"Add level 7 save task functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":364,"deletions":126}}}]},{"date":"2023-09-01","commitResults":[{"hash":"50ff6cb103a03ddbd9d75bcd85e2f93b683ab4a6","isMergeCommit":false,"messageTitle":"Add level 8 dates and times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":197,"deletions":27}}},{"hash":"029c0c8c3ef0ea694da3c1168d52b86d0a6cfe5b","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":940,"deletions":420}}},{"hash":"6b3d521d8dc57c697a60882e3c99604526dc38dc","isMergeCommit":false,"messageTitle":"Add divide classes into multiple packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":0}}},{"hash":"073eeef3831475809711e13aed3b1e39b55c2e45","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"acccbbe5e77760ddaae2fff28a4c7deb293e8289","isMergeCommit":false,"messageTitle":"Merge branch add-gradle-support and set up Gradle build and run","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"633c72ebb3afda4dbc3a62be1c7d8b3e5826ef4f","isMergeCommit":false,"messageTitle":"Add JUnit tests to test ToDo and Event class","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":161,"deletions":13}}},{"hash":"e159f77ffa6102d52d6b0a1310e8b1b1af14f409","isMergeCommit":false,"messageTitle":"Create a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"f9b816d63838e3764435fd9947603f20a3fad88d","isMergeCommit":false,"messageTitle":"Add Javadoc for methods and classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":1}}},{"hash":"736701ff7003c5f3cd23d0bdc7194d3b784b87ef","isMergeCommit":false,"messageTitle":"Follow the coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":33}}},{"hash":"05eff13008ad78fa1b4ffaba7f8927ab6e536ccf","isMergeCommit":false,"messageTitle":"Implement find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":173,"deletions":7}}},{"hash":"96a4288d2bf4e099801bd1b3dbb88b7bc1486a41","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n Follow the coding standard\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"6597da22b1edc90cb99e88df82c6e13a9fc64cc5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Implement find functionality\n\n# Conflicts:\n#\tsrc/main/java/evo/commands/FindCommand.java\n#\tsrc/main/java/evo/exceptions/InvalidInputException.java\n#\tsrc/main/java/evo/exceptions/MissingTaskToFindException.java\n#\tsrc/main/java/evo/exceptions/NoTaskFindException.java\n\nResolution: keep \u0027branch-Level-9\u0027\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"a33684bea690437795ab2ea654b1561f70f6ead1","isMergeCommit":false,"messageTitle":"Add coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-06","commitResults":[{"hash":"3599b01b22ffb8ef94b380cefcb7ac4e56a3878b","isMergeCommit":false,"messageTitle":"Add Checkstyle and fix all the coding style violations","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":26,"deletions":0},"java":{"insertions":129,"deletions":72}}}]},{"date":"2023-09-08","commitResults":[{"hash":"84f281fa554b70adba033b3d3c386ae56dc382b0","isMergeCommit":false,"messageTitle":"Add GUI to the chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":5},"fxml":{"insertions":47,"deletions":0},"java":{"insertions":725,"deletions":309}}}]},{"date":"2023-09-14","commitResults":[{"hash":"4e4496fea00aa2a691a8ab70c7348b654c50881d","isMergeCommit":false,"messageTitle":"Add styles","messageBody":"The user interface is a bit plain.\n\nAdd styles so that the application looks more attractive.\n","tags":["Add-Style"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":6,"deletions":0},"fxml":{"insertions":15,"deletions":8},"java":{"insertions":1,"deletions":1}}},{"hash":"9e0c5f0c620d857d38c524cc4479bc2a97cff1dc","isMergeCommit":false,"messageTitle":"Add assertions to document assumptions","messageBody":"* add assertion statements at the point to check the array\nlength and the validity of task number\n\nThese parts consist of checking the input length of\nactionType array is of valid length or not and also\nchecking the task number is greater than one or not.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":15,"deletions":2}}},{"hash":"427987616b98b4e1c17e900fa6a683e09e67bf25","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"* Refactor key functions to enhance readability and\nmaintainability\n* Resolve code style inconsistencies\n* Conduct thorough code review\n* Ensure proper error handling and edge case coverage\n\nThese changes improve the overall quality of the codebase\nand making it easier to maintain and understand.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"d85c492583a9035d3ccf01371ba1afc8b4f47744","isMergeCommit":true,"messageTitle":"Merge pull request #2 from NgChunMan/branch-A-Assertions","messageBody":"Add assertions to document assumptions","fileTypesAndContributionMap":{}},{"hash":"bec80ab1e102a34f707a9226f1196a3579c7e42b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from NgChunMan/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"91e202fb37acb159e199c4311d4ecafaaf3c722e","isMergeCommit":false,"messageTitle":"Add an extension which is DoAfterTask","messageBody":"This commit introduces the DoAfterCommand class, which\nhandles the creation of \u0027Do After\u0027 tasks and updates the task\nlist in storage. The class parses user input, constructs new\nDoAfter tasks, and provides user feedback. It also includes a\nutility method for string concatenation.\n\n* Implement DoAfterCommand class\n* Add parsing of user input for \u0027Do After\u0027 tasks\n* Create and added \u0027Do After\u0027 tasks to the task list\n* Update storage with the new task data\n* Add a utility method for string concatenation\n","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":6},"java":{"insertions":191,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"NgChunMan":{"java":2619,"md":0,"fxml":54,"sh":1,"bat":0,"gradle":33,"txt":9}},"authorContributionVariance":{"NgChunMan":145260.77},"authorDisplayNameMap":{"NgChunMan":"CS2103T-W15-2 NG C.. MAN"}} diff --git a/Propene-Dan_ip_master/authorship.json b/Propene-Dan_ip_master/authorship.json index 6c6ce117..fbd17cb1 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.java` file, right-click it, and choose `Run 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-14"},{"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":"src/main/java/Veneto.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Propene-Dan"},"content":"import veneto.command.Command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"Propene-Dan"},"content":"import veneto.command.ExitCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"Propene-Dan"},"content":"import veneto.exceptions.DanException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"Propene-Dan"},"content":"import veneto.storage.Storage;","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":"import veneto.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Propene-Dan"},"content":"public class Veneto {","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"Propene-Dan"},"content":" /** Fields */","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"Propene-Dan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"Propene-Dan"},"content":" private Storage storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"Propene-Dan"},"content":" private Ui ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Propene-Dan"},"content":" /** Constructor */","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" public Veneto(String filePath) {","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Propene-Dan"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"Propene-Dan"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"Propene-Dan"},"content":" tasks \u003d storage.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"Propene-Dan"},"content":" } catch (DanException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"Propene-Dan"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Propene-Dan"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"Propene-Dan"},"content":" storage.init(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"Propene-Dan"},"content":" }","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-10"},{"lineNumber":28,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Propene-Dan"},"content":" /** Methods */","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"Propene-Dan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"Propene-Dan"},"content":" new Veneto(\"data/dan.txt\").run();","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Propene-Dan"},"content":" public void run() {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" ui.hello();","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"Propene-Dan"},"content":" chat();","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"Propene-Dan"},"content":" private void chat() {","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"Propene-Dan"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" while (!(command instanceof ExitCommand)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Propene-Dan"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Propene-Dan"},"content":" command \u003d ui.getCommand();","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"Propene-Dan"},"content":" command.op(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"Propene-Dan"},"content":" storage.checkChange(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"Propene-Dan"},"content":" ui.afterCommand(command, tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"Propene-Dan"},"content":" } catch (DanException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Propene-Dan"},"content":" ui.showError(e);","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-10"},{"lineNumber":52,"author":{"gitId":"Propene-Dan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Propene-Dan"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Propene-Dan":55}},{"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-14"},{"lineNumber":16,"author":{"gitId":"Propene-Dan"},"content":" private final static String[] commands \u003d new String[] {","lastModifiedDate":"2023-09-12"},{"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-13"},{"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-13"},{"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-13"},{"lineNumber":36,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(\" 你可以跟我说:\\n\" + Arrays.toString(commands) + \"\\n\");","lastModifiedDate":"2023-09-13"},{"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-13"},{"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-13"},{"lineNumber":42,"author":{"gitId":"Propene-Dan"},"content":" System.out.println(\" 你可以跟我说:\\n\" + Arrays.toString(commands) + \"\\n\");","lastModifiedDate":"2023-09-13"},{"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-13"},{"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-12"},{"lineNumber":56,"author":{"gitId":"Propene-Dan"},"content":" \"!\\n 现在有\" + tasks.size() + \"项任务哦!\\n\"","lastModifiedDate":"2023-09-12"},{"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-12"},{"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-12"},{"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-12"},{"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-12"},{"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-12"},{"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-12"},{"lineNumber":93,"author":{"gitId":"Propene-Dan"},"content":" \" 我是小丹!\\n\" +","lastModifiedDate":"2023-09-12"},{"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-12"},{"lineNumber":101,"author":{"gitId":"Propene-Dan"},"content":" \" 拜拜啦!下次见!\\n\"","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-12"},{"lineNumber":105,"author":{"gitId":"Propene-Dan"},"content":"// try {","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"Propene-Dan"},"content":"// chat();","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"Propene-Dan"},"content":"// } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"Propene-Dan"},"content":"// if (e instanceof dan.exceptions.DanException ) {","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"Propene-Dan"},"content":"// System.out.println(greets + \" 你输入的东西不太对哦!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"Propene-Dan"},"content":"// } else if (e instanceof IndexOutOfBoundsException) {","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"Propene-Dan"},"content":"// System.out.println(greets + \" 输入格式不对!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"Propene-Dan"},"content":"// } else if (e instanceof IllegalArgumentException) {","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"Propene-Dan"},"content":"//","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"Propene-Dan"},"content":"// }","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"Propene-Dan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"Propene-Dan":115}},{"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 \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-14"},{"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.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}}] diff --git a/Propene-Dan_ip_master/commits.json b/Propene-Dan_ip_master/commits.json index 7b388fe2..03a01453 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":{}}]}]},"authorFileTypeContributionMap":{"Propene-Dan":{"java":849,"md":9,"fxml":0,"sh":1,"bat":1,"gradle":0,"txt":11}},"authorContributionVariance":{"Propene-Dan":23440.201},"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":{}}]}]},"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"}} diff --git a/RoeReRe_ip_master/authorship.json b/RoeReRe_ip_master/authorship.json index 6d5b900a..ee3378d2 100644 --- a/RoeReRe_ip_master/authorship.json +++ b/RoeReRe_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":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"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":"RoeReRe"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-02"},{"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":{"RoeReRe":16,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" * Main class that drives the Duke chatbot.","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" public Storage storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" protected TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" * Creates a Duke chatbot that initialises new Storage and TaskList objects.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" * @param filePath File path of the local text database.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" this.tasks \u003d new TaskList(storage.readFromDatabase(), this);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" this.tasks \u003d new TaskList(new ArrayList\u003cTask\u003e(), this);","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"RoeReRe":27,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RoeReRe":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.text.Font;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" private static Duke duke \u003d new Duke(\"data/duke.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" private static VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainView.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" scene.getStylesheets().add(getClass().getResource(\"/styles/palette.css\").toExternalForm());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" stage.setTitle(\"Roe\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" dialogContainer \u003d (VBox) scene.lookup(\"#dialogContainer\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" TextField userInput \u003d (TextField) scene.lookup(\"#userInput\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" ScrollPane scrollPane \u003d (ScrollPane) scene.lookup(\"#scrollPane\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" String userInputText \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" outputDialog(userInputText, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" Parser.processInput(userInputText, duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" outputDialog(e.getMessage(), false);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" });","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" outputDialog(\"Hello! I\u0027m Roe!\\n\" + \"What can I do for you?\", false);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" * Outputs a string into the GUI.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" * @param text The text to be outputted.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" * @param isUser Decides whether the output is to be printed on the LHS or RHS.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" public static void outputDialog(String text, boolean isUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" HBox newDialog \u003d formatDialog(text, isUser);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" dialogContainer.getChildren().add(newDialog);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" * Outputs a string into the GUI. The source is assumed to be Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" * @param text The text to be outputted.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" public static void outputDialog(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" outputDialog(text, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" private static HBox formatDialog(String text, boolean isUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" textToAdd.setFont(new Font(\"Calibri Light\", 18));","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" textToAdd.getStyleClass().add(\"dialog\");","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":" textToAdd.setMaxWidth(250);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" HBox dialogBox \u003d new HBox(textToAdd);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":" if (isUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" dialogBox.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" dialogBox.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":" return dialogBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RoeReRe":102}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" * This class handles the logic for processing user input.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" * List of valid user commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" public static enum Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" INVALID(\"\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" SORT(\"sort\"),","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" TODO(\"todo\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" DEADLINE(\"deadline\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" EVENT(\"event\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" FIND(\"find\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" private final String text;","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" Command(final String text) {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" return this.text;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" * Processes the user input and calls the relevant background functions.","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" * @param userInput The raw input entered by the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" * @param dukeBot The context.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" * @return A Command enum that states the user command entered.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" * @throws DukeException If invalid input.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" public static Command processInput(String userInput, Duke dukeBot) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":" String[] inputArray \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" Command userCommand \u003d Command.INVALID;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":" for (Command command : Command.values()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" if (command.toString().equals(inputArray[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" userCommand \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" String inputInfo \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" if (inputArray.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" inputInfo \u003d inputArray[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":" switch (userCommand) {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" case BYE:","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" case LIST:","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.listTasks();","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" case SORT:","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.sortTasks();","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" case MARK:","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.markTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" case UNMARK:","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.unmarkTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" case DELETE:","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.deleteTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" case TODO: {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d inputInfo;","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Todo(taskName);","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" case DEADLINE: {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d inputInfo.split(\" /by \");","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo.length !\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d taskInfo[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" String deadline \u003d taskInfo[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" case EVENT: {","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d inputInfo.split(\" /from \");","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo.length !\u003d 2 || taskInfo[1].split(\"/to\").length !\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d taskInfo[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":" String startTime \u003d taskInfo[1].split(\" /to \")[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" String endTime \u003d taskInfo[1].split(\" /to \")[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"RoeReRe"},"content":" case FIND:","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.findTasks(inputInfo);","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"RoeReRe"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"RoeReRe"},"content":" return userCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":123}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" * This class encapsulates a local database for Duke bot.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" private final Path DATABASE_PATH;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" this.DATABASE_PATH \u003d java.nio.file.Paths.get(","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" System.getProperty(\"user.dir\"), filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" if (!databaseExist()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" createDatabase();","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" * Creates a local text file for saving the lists of tasks if it does not exist.","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" public void createDatabase() {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" File database \u003d new File(DATABASE_PATH.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" database.getParentFile().mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" database.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":" * Checks if the database exists.","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" * @return True if the text file exists.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" public boolean databaseExist() {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" File database \u003d new File(DATABASE_PATH.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" return database.exists();","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":" * Parses the string of tasks from the database into Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" * @return The list of tasks stored in the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" * @throws DukeException If corrupted database.","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" protected ArrayList\u003cTask\u003e readFromDatabase() throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" FileReader reader \u003d new FileReader(DATABASE_PATH.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(reader);","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" String line;","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" while ((line \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" taskList.add(stringToTask(line));","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" reader.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" return taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" * Updates the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":" * @param taskList The list containing the tasks to be saved.","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" public void writeToDatabase(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":" assert databaseExist();","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" FileWriter writer \u003d new FileWriter(DATABASE_PATH.toString(), false);","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(writer);","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":" bufferedWriter.write(task.toDatabaseRepresentation());","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"RoeReRe"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" private static Task stringToTask(String line) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"RoeReRe"},"content":" Task newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"RoeReRe"},"content":" switch (taskInfo[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"RoeReRe"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Todo(taskInfo[2]);","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"RoeReRe"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Deadline(taskInfo[2], taskInfo[3]);","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"RoeReRe"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Event(taskInfo[2], taskInfo[3], taskInfo[4]);","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"RoeReRe"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"Database is corrupted.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo[1].equals(\"1\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"RoeReRe"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"RoeReRe"},"content":" return newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"RoeReRe"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"RoeReRe"},"content":" * Converts a predefined format of string to LocalDateTime.","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"RoeReRe"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"RoeReRe"},"content":" * @return The LocalDateTime containing the date written in the input.","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"RoeReRe"},"content":" public static LocalDateTime stringToDate(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"RoeReRe"},"content":" return LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"RoeReRe"},"content":" * Converts LocalDateTime to a format that is more tilable in the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"RoeReRe"},"content":" * @param date The date to be converted.","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"RoeReRe"},"content":" * @return The database representation of the date inputted.","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"RoeReRe"},"content":" public static String dateToDatabaseRepresentation(LocalDateTime date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"RoeReRe"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"RoeReRe"},"content":" * Converts LocalDateTime to a format that is more readable.","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"RoeReRe"},"content":" * @param date The date to be converted.","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"RoeReRe"},"content":" * @return Date in a more readable format.","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":167,"author":{"gitId":"RoeReRe"},"content":" public static String dateToString(LocalDateTime date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":168,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy, hh:mma\");","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"RoeReRe"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":171,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":171}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":" * This class implements all checked exceptions that can occur that is specific to Duke.","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":" * The error message contains the string to be printed for the user to view.","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" public DukeException(String errorMessage, Throwable err) {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" super(errorMessage, err);","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":15}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" * Deadline represents a task with an end date.","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" public Deadline(String taskName, String deadline) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" super(taskName);","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" this.deadline \u003d Storage.stringToDate(deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" public String toDatabaseRepresentation() {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"D | %s | %s | %s\",","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" isDone() ? 1 : 0, getTaskName(), Storage.dateToDatabaseRepresentation(this.deadline));","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" return this.deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), Storage.dateToString(this.deadline));","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":33}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" * Event represents a task with a start and end date.","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" public Event(String taskName, String startTime, String endTime) {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" super(taskName);","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" this.startTime \u003d Storage.stringToDate(startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" this.endTime \u003d Storage.stringToDate(endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" public String toDatabaseRepresentation() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"E | %s | %s | %s | %s\",","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" isDone() ? 1 : 0, getTaskName(), Storage.dateToDatabaseRepresentation(startTime),","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" Storage.dateToDatabaseRepresentation(endTime));","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" return this.startTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" super.toString(), Storage.dateToString(startTime), Storage.dateToString(endTime));","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":37}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":" * Task is a class that represents a task that can be added for the chatbot to keep track of.","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":" * It also manages the list of tasks in a local database.","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" private String taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" * Turns the task into a string that can be stored in the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" * @return The task information in the form of a string.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" public abstract String toDatabaseRepresentation();","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" * Returns the LocalDateTime that is used to chronologically order the task if it is present.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" * @return","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" return LocalDateTime.MIN;","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" protected void markAsUndone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" return isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" protected String getTaskName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" return this.taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":" return this.isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"%s %s\", this.getStatusIcon(), this.getTaskName());","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":56}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"import duke.Main;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" * TaskList encapsulates a list of tasks as well as the various task related functions for Duke.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" * List of all tasks added.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" private Duke dukeBot;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Duke dukeBot) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" this.dukeBot \u003d dukeBot;","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(String.format(\"Now you have %s tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" public void markTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" assert i \u003c\u003d taskList.size();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" taskList.get(i - 1).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(taskList.get(i - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" public void unmarkTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":" assert i \u003c\u003d taskList.size();","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" taskList.get(i - 1).markAsUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(taskList.get(i - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" public void deleteTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" assert i \u003c\u003d taskList.size();","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" Task removedTask \u003d taskList.remove(i - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(removedTask.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(String.format(\"Now you have %s tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":" * Lists out all the tasks that are in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" res +\u003d String.format(\"%s.%s%n\", i + 1, taskList.get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(res);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":" * Prints all tasks with names strictly containing a keyword.","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" * @param key The keyword.","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"RoeReRe"},"content":" public void findTasks(String key) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"RoeReRe"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"RoeReRe"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"RoeReRe"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"RoeReRe"},"content":" if (task.getTaskName().contains(key)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"RoeReRe"},"content":" res +\u003d String.format(\"%s. %s%n\", count++, task);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(res);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"RoeReRe"},"content":" * Sorts the tasks by chronological order.","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"RoeReRe"},"content":" public void sortTasks() {","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"RoeReRe"},"content":" Collections.sort(taskList, new Comparator\u003cTask\u003e() {","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"RoeReRe"},"content":" public int compare(Task o1, Task o2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"RoeReRe"},"content":" return o1.getDateTime().compareTo(o2.getDateTime());","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"RoeReRe"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Okay! Your tasks have been sorted.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":135}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":" * This class represents a basic task that can be marked.","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" public Todo(String taskName) throws DukeException {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" super(taskName);","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" if (taskName.isEmpty()) {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" public String toDatabaseRepresentation() {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"T | %s | %s\", isDone() ? 1 : 0, getTaskName());","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":25}},{"path":"src/main/resources/view/MainView.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"800.0\"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" prefWidth\u003d\"600.0\" styleClass\u003d\"root\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" \u003cLabel layoutX\u003d\"205.0\" layoutY\u003d\"14.0\" text\u003d\"RoeBot\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" \u003cFont name\u003d\"ROGFonts-Regular\" size\u003d\"36.0\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" \u003cAnchorPane layoutX\u003d\"50.0\" layoutY\u003d\"75.0\" prefHeight\u003d\"600.0\" prefWidth\u003d\"500.0\" styleClass\u003d\"dialogBox\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\" styleClass\u003d\"dialogBox\"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" AnchorPane.bottomAnchor\u003d\"0.0\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"0.0\"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" AnchorPane.topAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" spacing\u003d\"10.0\" styleClass\u003d\"dialogBox\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" \u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutX\u003d\"50.0\" layoutY\u003d\"675.0\" prefHeight\u003d\"63.0\" prefWidth\u003d\"500.0\"","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" promptText\u003d\"Enter message here\" styleClass\u003d\"text-area\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" \u003cFont name\u003d\"Calibri Light\" size\u003d\"24.0\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" \u003c/TextField\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RoeReRe":48}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" public void createValidTodo_addSuccessfully() {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" Duke duke \u003d new Duke(\"/testData/duke.txt\");","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" assertAll(() -\u003e duke.tasks.addTask(new Todo(\"Sample task name\")));","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" public void invalidTodo_exceptionThrown() {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" Duke duke \u003d new Duke(\"/testData/duke.txt\");","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" assertThrows(DukeException.class, () -\u003e duke.tasks.addTask(new Todo(\"\")));","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" public void createValidDate_addSuccessfully() {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" Duke duke \u003d new Duke(\"/testData/duke.txt\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" assertAll(() -\u003e duke.tasks.addTask(new Deadline(\"Sample task name\", \"23-09-2024 13:00\")));","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" public void invalidDate_exceptionThrown() {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" Duke duke \u003d new Duke(\"/testData/duke.txt\");","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" assertThrows(DateTimeParseException.class,","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" () -\u003e duke.tasks.addTask(new Deadline(\"Sample task name\", \"3-09-2024 13:00\")));","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":37}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"todo read book","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"todo join sports club","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"mark 1","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"mark 4","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"todo borrow book","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":10}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"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":"RoeReRe"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-02"},{"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":"RoeReRe"},"content":" archiveBaseName \u003d \"RoeBot\"","lastModifiedDate":"2023-09-16"},{"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":{"RoeReRe":17,"-":40}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"# RoeBot","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"RoeBot is a CLI-based application that allows you to manage and track simple","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"tasks such as to-dos and deadlines.","lastModifiedDate":"2023-09-16"},{"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":"RoeReRe"},"content":"### To-dos, deadlines and events","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"RoeBot features 3 different types of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"### List tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":"List out tasks in chronological order.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":"### Mark tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":"Mark a task as done or undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":"## Quick Start","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":"Run the jar file with:","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":"java -jar RoeBot.jar","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"## Caution","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":"All date time must be in typed in the format `dd-MM-yyyy HH:mm`.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":"Example:","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":"05-09-2023 13:15","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":"## Usage","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":"### `todo {taskDescription}`","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":"### `deadline {taskDescription} /by {dateTime}`","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":"### `event {taskDescription} /from {fromDateTime} /to {toDateTime}`","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":"### `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":"List out all the tasks in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":"### `sort`","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":"Sort the tasks in chronological order. The ordering is preserved thereafter.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":"### `mark {index}`","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":"Mark the `index`th task as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":"### `unmark {index}`","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":"Mark the `index`th task as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":"### `delete {index}`","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":"Delete the `index`th task.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":"### `find {keyWord}`","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":"List out all tasks containing `keyWord`.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"RoeReRe":51,"-":16}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" * Main class that drives the Duke chatbot.","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" public Storage storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" protected TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" * Creates a Duke chatbot that initialises new Storage and TaskList objects.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" * @param filePath File path of the local text database.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" this.tasks \u003d new TaskList(storage.readFromDatabase(), this);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" this.tasks \u003d new TaskList(new ArrayList\u003cTask\u003e(), this);","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"RoeReRe":27,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RoeReRe":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"import javafx.scene.text.Font;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" private static Duke duke \u003d new Duke(\"data/duke.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" private static VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainView.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" scene.getStylesheets().add(getClass().getResource(\"/styles/palette.css\").toExternalForm());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" stage.setTitle(\"Roe\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" dialogContainer \u003d (VBox) scene.lookup(\"#dialogContainer\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" TextField userInput \u003d (TextField) scene.lookup(\"#userInput\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" ScrollPane scrollPane \u003d (ScrollPane) scene.lookup(\"#scrollPane\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" String userInputText \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" outputDialog(userInputText, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" Parser.processInput(userInputText, duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" outputDialog(e.getMessage(), false);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" });","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" outputDialog(\"Hello! I\u0027m Roe!\\n\" + \"What can I do for you?\", false);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" * Outputs a string into the GUI.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" * @param text The text to be outputted.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" * @param isUser Decides whether the output is to be printed on the LHS or RHS.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" public static void outputDialog(String text, boolean isUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" HBox newDialog \u003d formatDialog(text, isUser);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" dialogContainer.getChildren().add(newDialog);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" * Outputs a string into the GUI. The source is assumed to be Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" * @param text The text to be outputted.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" public static void outputDialog(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" outputDialog(text, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" private static HBox formatDialog(String text, boolean isUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" textToAdd.setFont(new Font(\"Calibri Light\", 18));","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" textToAdd.getStyleClass().add(\"dialog\");","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":" textToAdd.setMaxWidth(250);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" HBox dialogBox \u003d new HBox(textToAdd);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":" if (isUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" dialogBox.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" dialogBox.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":" return dialogBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RoeReRe":102}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" * This class handles the logic for processing user input.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" * List of valid user commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" public static enum Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" INVALID(\"\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" SORT(\"sort\"),","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" TODO(\"todo\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" DEADLINE(\"deadline\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" EVENT(\"event\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" FIND(\"find\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" private final String text;","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" Command(final String text) {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" return this.text;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" * Processes the user input and calls the relevant background functions.","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" * @param userInput The raw input entered by the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" * @param dukeBot The context.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" * @return A Command enum that states the user command entered.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" * @throws DukeException If invalid input.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" public static Command processInput(String userInput, Duke dukeBot) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":" String[] inputArray \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" Command userCommand \u003d Command.INVALID;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":" for (Command command : Command.values()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" if (command.toString().equals(inputArray[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" userCommand \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" String inputInfo \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" if (inputArray.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" inputInfo \u003d inputArray[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":" switch (userCommand) {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" case BYE:","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" case LIST:","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.listTasks();","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" case SORT:","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.sortTasks();","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" case MARK:","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.markTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" case UNMARK:","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.unmarkTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" case DELETE:","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.deleteTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" case TODO: {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d inputInfo;","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Todo(taskName);","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" case DEADLINE: {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d inputInfo.split(\" /by \");","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo.length !\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d taskInfo[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" String deadline \u003d taskInfo[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" case EVENT: {","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d inputInfo.split(\" /from \");","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo.length !\u003d 2 || taskInfo[1].split(\"/to\").length !\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d taskInfo[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":" String startTime \u003d taskInfo[1].split(\" /to \")[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" String endTime \u003d taskInfo[1].split(\" /to \")[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"RoeReRe"},"content":" case FIND:","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.findTasks(inputInfo);","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"RoeReRe"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"RoeReRe"},"content":" return userCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":123}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" * This class encapsulates a local database for Duke bot.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" private final Path DATABASE_PATH;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" this.DATABASE_PATH \u003d java.nio.file.Paths.get(","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" System.getProperty(\"user.dir\"), filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" if (!databaseExist()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" createDatabase();","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" * Creates a local text file for saving the lists of tasks if it does not exist.","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" public void createDatabase() {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" File database \u003d new File(DATABASE_PATH.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" database.getParentFile().mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" database.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":" * Checks if the database exists.","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" * @return True if the text file exists.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" public boolean databaseExist() {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" File database \u003d new File(DATABASE_PATH.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" return database.exists();","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":" * Parses the string of tasks from the database into Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" * @return The list of tasks stored in the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" * @throws DukeException If corrupted database.","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" protected ArrayList\u003cTask\u003e readFromDatabase() throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" FileReader reader \u003d new FileReader(DATABASE_PATH.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(reader);","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" String line;","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" while ((line \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" taskList.add(stringToTask(line));","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" reader.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" return taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" * Updates the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":" * @param taskList The list containing the tasks to be saved.","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" public void writeToDatabase(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":" assert databaseExist();","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" FileWriter writer \u003d new FileWriter(DATABASE_PATH.toString(), false);","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(writer);","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":" bufferedWriter.write(task.toDatabaseRepresentation());","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"RoeReRe"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" private static Task stringToTask(String line) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"RoeReRe"},"content":" Task newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"RoeReRe"},"content":" switch (taskInfo[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"RoeReRe"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Todo(taskInfo[2]);","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"RoeReRe"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Deadline(taskInfo[2], taskInfo[3]);","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"RoeReRe"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Event(taskInfo[2], taskInfo[3], taskInfo[4]);","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"RoeReRe"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"Database is corrupted.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo[1].equals(\"1\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"RoeReRe"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"RoeReRe"},"content":" return newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"RoeReRe"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"RoeReRe"},"content":" * Converts a predefined format of string to LocalDateTime.","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"RoeReRe"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"RoeReRe"},"content":" * @return The LocalDateTime containing the date written in the input.","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"RoeReRe"},"content":" public static LocalDateTime stringToDate(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"RoeReRe"},"content":" return LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"RoeReRe"},"content":" * Converts LocalDateTime to a format that is more tilable in the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"RoeReRe"},"content":" * @param date The date to be converted.","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"RoeReRe"},"content":" * @return The database representation of the date inputted.","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"RoeReRe"},"content":" public static String dateToDatabaseRepresentation(LocalDateTime date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"RoeReRe"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"RoeReRe"},"content":" * Converts LocalDateTime to a format that is more readable.","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"RoeReRe"},"content":" * @param date The date to be converted.","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"RoeReRe"},"content":" * @return Date in a more readable format.","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":167,"author":{"gitId":"RoeReRe"},"content":" public static String dateToString(LocalDateTime date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":168,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy, hh:mma\");","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"RoeReRe"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":171,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":171}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":" * This class implements all checked exceptions that can occur that is specific to Duke.","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":" * The error message contains the string to be printed for the user to view.","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" public DukeException(String errorMessage, Throwable err) {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" super(errorMessage, err);","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":15}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" * Deadline represents a task with an end date.","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" public Deadline(String taskName, String deadline) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" super(taskName);","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" this.deadline \u003d Storage.stringToDate(deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" public String toDatabaseRepresentation() {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"D | %s | %s | %s\",","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" isDone() ? 1 : 0, getTaskName(), Storage.dateToDatabaseRepresentation(this.deadline));","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" return this.deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), Storage.dateToString(this.deadline));","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":33}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" * Event represents a task with a start and end date.","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" public Event(String taskName, String startTime, String endTime) {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" super(taskName);","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" this.startTime \u003d Storage.stringToDate(startTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" this.endTime \u003d Storage.stringToDate(endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" public String toDatabaseRepresentation() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"E | %s | %s | %s | %s\",","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" isDone() ? 1 : 0, getTaskName(), Storage.dateToDatabaseRepresentation(startTime),","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" Storage.dateToDatabaseRepresentation(endTime));","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" return this.startTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" super.toString(), Storage.dateToString(startTime), Storage.dateToString(endTime));","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":37}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":" * Task is a class that represents a task that can be added for the chatbot to keep track of.","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":" * It also manages the list of tasks in a local database.","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" private String taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" * Turns the task into a string that can be stored in the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" * @return The task information in the form of a string.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" public abstract String toDatabaseRepresentation();","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" * Returns the LocalDateTime that is used to chronologically order the task if it is present.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" * @return","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" return LocalDateTime.MIN;","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" protected void markAsUndone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" return isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" protected String getTaskName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" return this.taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":" return this.isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"%s %s\", this.getStatusIcon(), this.getTaskName());","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":56}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"import duke.Main;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" * TaskList encapsulates a list of tasks as well as the various task related functions for Duke.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" * List of all tasks added.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" private Duke dukeBot;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Duke dukeBot) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" this.dukeBot \u003d dukeBot;","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(String.format(\"Now you have %s tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" public void markTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" assert i \u003c\u003d taskList.size();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" taskList.get(i - 1).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(taskList.get(i - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" public void unmarkTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":" assert i \u003c\u003d taskList.size();","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" taskList.get(i - 1).markAsUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(taskList.get(i - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" public void deleteTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" assert i \u003c\u003d taskList.size();","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" Task removedTask \u003d taskList.remove(i - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(removedTask.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(String.format(\"Now you have %s tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":" * Lists out all the tasks that are in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" res +\u003d String.format(\"%s.%s%n\", i + 1, taskList.get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(res);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":" * Prints all tasks with names strictly containing a keyword.","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" * @param key The keyword.","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"RoeReRe"},"content":" public void findTasks(String key) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"RoeReRe"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"RoeReRe"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"RoeReRe"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"RoeReRe"},"content":" if (task.getTaskName().contains(key)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"RoeReRe"},"content":" res +\u003d String.format(\"%s. %s%n\", count++, task);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(res);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"RoeReRe"},"content":" * Sorts the tasks by chronological order.","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"RoeReRe"},"content":" public void sortTasks() {","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"RoeReRe"},"content":" Collections.sort(taskList, new Comparator\u003cTask\u003e() {","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"RoeReRe"},"content":" public int compare(Task o1, Task o2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"RoeReRe"},"content":" return o1.getDateTime().compareTo(o2.getDateTime());","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"RoeReRe"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Okay! Your tasks have been sorted.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":135}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":" * This class represents a basic task that can be marked.","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" public Todo(String taskName) throws DukeException {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" super(taskName);","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" if (taskName.isEmpty()) {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" public String toDatabaseRepresentation() {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"T | %s | %s\", isDone() ? 1 : 0, getTaskName());","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":25}},{"path":"src/main/resources/view/MainView.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"800.0\"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" prefWidth\u003d\"600.0\" styleClass\u003d\"root\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" \u003cLabel layoutX\u003d\"205.0\" layoutY\u003d\"14.0\" text\u003d\"RoeBot\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" \u003cFont name\u003d\"ROGFonts-Regular\" size\u003d\"36.0\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" \u003cAnchorPane layoutX\u003d\"50.0\" layoutY\u003d\"75.0\" prefHeight\u003d\"600.0\" prefWidth\u003d\"500.0\" styleClass\u003d\"dialogBox\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\" styleClass\u003d\"dialogBox\"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" AnchorPane.bottomAnchor\u003d\"0.0\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"0.0\"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" AnchorPane.topAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" spacing\u003d\"10.0\" styleClass\u003d\"dialogBox\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" \u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutX\u003d\"50.0\" layoutY\u003d\"675.0\" prefHeight\u003d\"63.0\" prefWidth\u003d\"500.0\"","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" promptText\u003d\"Enter message here\" styleClass\u003d\"text-area\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" \u003cFont name\u003d\"Calibri Light\" size\u003d\"24.0\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" \u003c/TextField\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RoeReRe":48}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" public void createValidTodo_addSuccessfully() {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" Duke duke \u003d new Duke(\"/testData/duke.txt\");","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" assertAll(() -\u003e duke.tasks.addTask(new Todo(\"Sample task name\")));","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" public void invalidTodo_exceptionThrown() {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" Duke duke \u003d new Duke(\"/testData/duke.txt\");","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" assertThrows(DukeException.class, () -\u003e duke.tasks.addTask(new Todo(\"\")));","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" public void createValidDate_addSuccessfully() {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" Duke duke \u003d new Duke(\"/testData/duke.txt\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" assertAll(() -\u003e duke.tasks.addTask(new Deadline(\"Sample task name\", \"23-09-2024 13:00\")));","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" public void invalidDate_exceptionThrown() {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" Duke duke \u003d new Duke(\"/testData/duke.txt\");","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" assertThrows(DateTimeParseException.class,","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" () -\u003e duke.tasks.addTask(new Deadline(\"Sample task name\", \"3-09-2024 13:00\")));","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":37}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RoeReRe"},"content":"todo read book","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"RoeReRe"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"RoeReRe"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"RoeReRe"},"content":"todo join sports club","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"mark 1","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"mark 4","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"todo borrow book","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":10}}] diff --git a/RoeReRe_ip_master/commits.json b/RoeReRe_ip_master/commits.json index 8bf4c2fc..0b19e5d2 100644 --- a/RoeReRe_ip_master/commits.json +++ b/RoeReRe_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"RoeReRe":[{"date":"2023-08-19","commitResults":[{"hash":"25807c414534c7ef62fcd0acf2dbd6a9e1a80036","isMergeCommit":false,"messageTitle":"Initial skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":6}}},{"hash":"e8fe6cf623dbd880289671649d2f4887c6310d00","isMergeCommit":false,"messageTitle":"Added echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":9}}},{"hash":"16bdda65f3f46e5cbf2e2589a77639687be43dfe","isMergeCommit":false,"messageTitle":"Added feature to add and list tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":16}}},{"hash":"8684ca8850ce4a5e485e40f687e286e545b72ec0","isMergeCommit":false,"messageTitle":"Added ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":2}}},{"hash":"c1254faea34c6e49d2b3fed7c0f562a2adc50daa","isMergeCommit":false,"messageTitle":"Added todos, deadlines and events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":11}}},{"hash":"23b9db57d22ab61b4c84f36235e9673d5a79f6cf","isMergeCommit":false,"messageTitle":"test with io redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":33,"deletions":23}}},{"hash":"1de4dd0d662f00faf7aee0b9b99b2e72b6f49262","isMergeCommit":false,"messageTitle":"Added error handling and retested with io technique","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":80,"deletions":42}}},{"hash":"23de2a8a9b0255ad8933412e7b32e83a5819783a","isMergeCommit":false,"messageTitle":"Added feature to delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"688d302f163e9a3053dc4ab8a4dfbc2af9f167be","isMergeCommit":false,"messageTitle":"Added javadoc to public methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}}]},{"date":"2023-08-20","commitResults":[{"hash":"79f0f650814e4610c125e1e4334897fde802da96","isMergeCommit":false,"messageTitle":"Edited implementation of prompt to prevent overflow","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-08-26","commitResults":[{"hash":"75f4fd2d8c3b85d7b90a1dd7acfb124f6830b5cc","isMergeCommit":false,"messageTitle":"Add local database for tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":53}}},{"hash":"5fc47c1dd3f6512a598687bb4d1b7355bd4bbde9","isMergeCommit":true,"messageTitle":"Merge Level 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"7aafcf7988f670b84ba4d6edf5057f53909671b6","isMergeCommit":false,"messageTitle":"Change task date representation to java LocalDataTime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":10}}},{"hash":"db033962eba281a533fe298ea9d4d16c041c5349","isMergeCommit":true,"messageTitle":"Merge Level 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"3dda1f2f6b8d1dd6a958faf198e5d8b39f728803","isMergeCommit":false,"messageTitle":"Refactored the main Duke logic into additional classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":432,"deletions":300}}},{"hash":"320218bbd0a324dc3197a0107184bbf0a5a7f87a","isMergeCommit":false,"messageTitle":"Divide classes into package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":10}}},{"hash":"5f1e876b6c5de3a5fffec6021dba8f8f3d27ba0d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"The project currently is lacking Gradle support.\n\nAdding Gradle would expedite JUnit tests.\n","fileTypesAndContributionMap":{}},{"hash":"7ce9cca1a3dbe13a00c27f08733b68d0f8590e99","isMergeCommit":false,"messageTitle":"Set up gradle for project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":9,"deletions":1}}},{"hash":"65c405a889f144bebcd85e2d05803276ed21016b","isMergeCommit":false,"messageTitle":"Add Junit tests for Todo and Deadline","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":0}}},{"hash":"25243091d5c1f1bdeaed818cfe2af271d13c841e","isMergeCommit":false,"messageTitle":"Add more JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"a04cbc2a7d461282aeef471c2bf2b7af517b4559","isMergeCommit":false,"messageTitle":"Edited code to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":163,"deletions":146}}},{"hash":"f0203a417ccb6e6020dddbf4ea992b662639899e","isMergeCommit":false,"messageTitle":"Add Find feature for tasks","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"d24a96b08872f36fd0e392bbe3f6fe434759f2be","isMergeCommit":true,"messageTitle":"Merge origin/branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d9b57232fe7b6e5c04a5adeb4a193ce8e78714fa","isMergeCommit":true,"messageTitle":"Merge origin/branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"1439092f5bf0bac84fda2234a2cb7d7187be714c","isMergeCommit":true,"messageTitle":"Merge origin/branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"7190626e4ff93b784e588720567fc9acbf5da476","isMergeCommit":false,"messageTitle":"Change UI from text-based to GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":43,"deletions":0},"java":{"insertions":151,"deletions":28}}},{"hash":"8c536e12ad53f3a90469defac0bb8d7e3af8fc20","isMergeCommit":false,"messageTitle":"Revert \"Change UI from text-based to GUI\"","messageBody":"This reverts commit 7190626e4ff93b784e588720567fc9acbf5da476.\nThe reason is due to fast-forward which is not in line with the iP\nspecs.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":16},"fxml":{"insertions":0,"deletions":43},"java":{"insertions":28,"deletions":151}}}]},{"date":"2023-09-03","commitResults":[{"hash":"60c0a58cda03057a78bad01e58f8c2aa5563bb22","isMergeCommit":true,"messageTitle":"Merge branch Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"00bd900759baef742d43073c4844388728e9c6de","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cf52545333ee768d8861d47aeaf91e6d3c65fd99","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"fd3c7d4a06ef2cf523cc79cb125e2ed19dcc6835","isMergeCommit":false,"messageTitle":"Add Java assertions","messageBody":"There are several methods that could use some extra layers of check to\nprevent errors from causing damage.\n\nAdding Java assertions would prevent these key errors from proceeding.\n\nLet\u0027s add assertions to Storage and TaskList to prevent any corruption\nto the database.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"b7efd27bff58eb8d64ac32a0183cfc0746f212d1","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"The current codebase contains old code that is no longer in used.\n\nRemoving these unused classes would keep the repository clean and easy\nto follow.\n\nLet\u0027s improve the readability of the codebase.\n","fileTypesAndContributionMap":{"fxml":{"insertions":37,"deletions":32},"java":{"insertions":71,"deletions":167}}},{"hash":"801ac1dbe58c1301f3a0848f401129505977bd3f","isMergeCommit":true,"messageTitle":"Merge pull request #1 from RoeReRe/branch-A-Assertions","messageBody":"Add Java assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"a7147cf18a76bf1680f88dd134b8a26c0702637e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from RoeReRe/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"d86dbf68fec5759592e3e0c7bf275567e0f8db99","isMergeCommit":false,"messageTitle":"Add sort feature for tasks","messageBody":"The list function is very unreadable as the tasks are not in any sorted\norder\n\nBy adding a sort function, we can sort Deadlines and Events by\nchronological order\n\nLet\u0027s keep the ToDos at the front and order the rest by date to make the\nlist more readable\n","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":0}}},{"hash":"c4c7cb50727375a36bc8bb988ca4e24285e9f024","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Sort\u0027","messageBody":"The master branch is lacking a sort function for tasks that is present\nin branch-C-Sort\n\nLet\u0027s merge the branch to improve the functionality of the bot\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"RoeReRe":{"java":773,"md":0,"fxml":48,"sh":0,"bat":0,"gradle":16,"txt":10}},"authorContributionVariance":{"RoeReRe":104950.22},"authorDisplayNameMap":{"RoeReRe":"CS2103T-T15-2 ONG ..IANG"}} +{"authorDailyContributionsMap":{"RoeReRe":[{"date":"2023-08-19","commitResults":[{"hash":"25807c414534c7ef62fcd0acf2dbd6a9e1a80036","isMergeCommit":false,"messageTitle":"Initial skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":6}}},{"hash":"e8fe6cf623dbd880289671649d2f4887c6310d00","isMergeCommit":false,"messageTitle":"Added echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":9}}},{"hash":"16bdda65f3f46e5cbf2e2589a77639687be43dfe","isMergeCommit":false,"messageTitle":"Added feature to add and list tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":16}}},{"hash":"8684ca8850ce4a5e485e40f687e286e545b72ec0","isMergeCommit":false,"messageTitle":"Added ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":2}}},{"hash":"c1254faea34c6e49d2b3fed7c0f562a2adc50daa","isMergeCommit":false,"messageTitle":"Added todos, deadlines and events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":11}}},{"hash":"23b9db57d22ab61b4c84f36235e9673d5a79f6cf","isMergeCommit":false,"messageTitle":"test with io redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":33,"deletions":23}}},{"hash":"1de4dd0d662f00faf7aee0b9b99b2e72b6f49262","isMergeCommit":false,"messageTitle":"Added error handling and retested with io technique","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":80,"deletions":42}}},{"hash":"23de2a8a9b0255ad8933412e7b32e83a5819783a","isMergeCommit":false,"messageTitle":"Added feature to delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"688d302f163e9a3053dc4ab8a4dfbc2af9f167be","isMergeCommit":false,"messageTitle":"Added javadoc to public methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}}]},{"date":"2023-08-20","commitResults":[{"hash":"79f0f650814e4610c125e1e4334897fde802da96","isMergeCommit":false,"messageTitle":"Edited implementation of prompt to prevent overflow","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-08-26","commitResults":[{"hash":"75f4fd2d8c3b85d7b90a1dd7acfb124f6830b5cc","isMergeCommit":false,"messageTitle":"Add local database for tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":53}}},{"hash":"5fc47c1dd3f6512a598687bb4d1b7355bd4bbde9","isMergeCommit":true,"messageTitle":"Merge Level 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"7aafcf7988f670b84ba4d6edf5057f53909671b6","isMergeCommit":false,"messageTitle":"Change task date representation to java LocalDataTime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":10}}},{"hash":"db033962eba281a533fe298ea9d4d16c041c5349","isMergeCommit":true,"messageTitle":"Merge Level 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"3dda1f2f6b8d1dd6a958faf198e5d8b39f728803","isMergeCommit":false,"messageTitle":"Refactored the main Duke logic into additional classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":432,"deletions":300}}},{"hash":"320218bbd0a324dc3197a0107184bbf0a5a7f87a","isMergeCommit":false,"messageTitle":"Divide classes into package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":10}}},{"hash":"5f1e876b6c5de3a5fffec6021dba8f8f3d27ba0d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"The project currently is lacking Gradle support.\n\nAdding Gradle would expedite JUnit tests.\n","fileTypesAndContributionMap":{}},{"hash":"7ce9cca1a3dbe13a00c27f08733b68d0f8590e99","isMergeCommit":false,"messageTitle":"Set up gradle for project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":9,"deletions":1}}},{"hash":"65c405a889f144bebcd85e2d05803276ed21016b","isMergeCommit":false,"messageTitle":"Add Junit tests for Todo and Deadline","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":0}}},{"hash":"25243091d5c1f1bdeaed818cfe2af271d13c841e","isMergeCommit":false,"messageTitle":"Add more JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"a04cbc2a7d461282aeef471c2bf2b7af517b4559","isMergeCommit":false,"messageTitle":"Edited code to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":163,"deletions":146}}},{"hash":"f0203a417ccb6e6020dddbf4ea992b662639899e","isMergeCommit":false,"messageTitle":"Add Find feature for tasks","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"d24a96b08872f36fd0e392bbe3f6fe434759f2be","isMergeCommit":true,"messageTitle":"Merge origin/branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d9b57232fe7b6e5c04a5adeb4a193ce8e78714fa","isMergeCommit":true,"messageTitle":"Merge origin/branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"1439092f5bf0bac84fda2234a2cb7d7187be714c","isMergeCommit":true,"messageTitle":"Merge origin/branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"7190626e4ff93b784e588720567fc9acbf5da476","isMergeCommit":false,"messageTitle":"Change UI from text-based to GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":43,"deletions":0},"java":{"insertions":151,"deletions":28}}},{"hash":"8c536e12ad53f3a90469defac0bb8d7e3af8fc20","isMergeCommit":false,"messageTitle":"Revert \"Change UI from text-based to GUI\"","messageBody":"This reverts commit 7190626e4ff93b784e588720567fc9acbf5da476.\nThe reason is due to fast-forward which is not in line with the iP\nspecs.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":16},"fxml":{"insertions":0,"deletions":43},"java":{"insertions":28,"deletions":151}}}]},{"date":"2023-09-03","commitResults":[{"hash":"60c0a58cda03057a78bad01e58f8c2aa5563bb22","isMergeCommit":true,"messageTitle":"Merge branch Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"00bd900759baef742d43073c4844388728e9c6de","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cf52545333ee768d8861d47aeaf91e6d3c65fd99","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"fd3c7d4a06ef2cf523cc79cb125e2ed19dcc6835","isMergeCommit":false,"messageTitle":"Add Java assertions","messageBody":"There are several methods that could use some extra layers of check to\nprevent errors from causing damage.\n\nAdding Java assertions would prevent these key errors from proceeding.\n\nLet\u0027s add assertions to Storage and TaskList to prevent any corruption\nto the database.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"b7efd27bff58eb8d64ac32a0183cfc0746f212d1","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"The current codebase contains old code that is no longer in used.\n\nRemoving these unused classes would keep the repository clean and easy\nto follow.\n\nLet\u0027s improve the readability of the codebase.\n","fileTypesAndContributionMap":{"fxml":{"insertions":37,"deletions":32},"java":{"insertions":71,"deletions":167}}},{"hash":"801ac1dbe58c1301f3a0848f401129505977bd3f","isMergeCommit":true,"messageTitle":"Merge pull request #1 from RoeReRe/branch-A-Assertions","messageBody":"Add Java assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"a7147cf18a76bf1680f88dd134b8a26c0702637e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from RoeReRe/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"d86dbf68fec5759592e3e0c7bf275567e0f8db99","isMergeCommit":false,"messageTitle":"Add sort feature for tasks","messageBody":"The list function is very unreadable as the tasks are not in any sorted\norder\n\nBy adding a sort function, we can sort Deadlines and Events by\nchronological order\n\nLet\u0027s keep the ToDos at the front and order the rest by date to make the\nlist more readable\n","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":0}}},{"hash":"c4c7cb50727375a36bc8bb988ca4e24285e9f024","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Sort\u0027","messageBody":"The master branch is lacking a sort function for tasks that is present\nin branch-C-Sort\n\nLet\u0027s merge the branch to improve the functionality of the bot\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"8d6df5f605c2a8c349e51befa787ed422f850cf6","isMergeCommit":false,"messageTitle":"Add user guide and screenshot","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"md":{"insertions":51,"deletions":13}}},{"hash":"890a2bcda93a62ccb40c5d4b6017f9723dae79ce","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"RoeReRe":{"java":773,"md":51,"fxml":48,"sh":0,"bat":0,"gradle":17,"txt":10}},"authorContributionVariance":{"RoeReRe":82854.625},"authorDisplayNameMap":{"RoeReRe":"CS2103T-T15-2 ONG ..IANG"}} diff --git a/Saezenn_ip_master/authorship.json b/Saezenn_ip_master/authorship.json index 2799fb9d..60716776 100644 --- a/Saezenn_ip_master/authorship.json +++ b/Saezenn_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"# Sae project template","lastModifiedDate":"2023-08-23"},{"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":"Saezenn"},"content":"3. After that, locate the `src/main/java/Sae.java` file, right-click it, and choose `Run Sae.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-23"},{"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":{"Saezenn":2,"-":22}},{"path":"data/sae.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"D | 0 | return book | 2 December 2019 6pm","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"T | 0 | sleep","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"E | 1 | sleep | 2pm | 3pm","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"T | 0 | sleep","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Saezenn":4}},{"path":"src/main/java/sae/Sae.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.task.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import sae.util.Parser;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import sae.util.Storage;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"import sae.util.Ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"import sae.exceptions.SaeException;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":" * The Sae class represents an interactive sae.task manager.","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" * Users can add, list, mark, and unmark tasks using this program.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":"public class Sae {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" private final TaskList store;","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" public Sae(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" TaskList temp;","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" temp \u003d storage.loadTasks(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" temp \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" this.store \u003d temp;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" public void run() {","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" ui.greetUser();","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":" TaskList store \u003d this.store;","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Saezenn"},"content":" while (true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"Saezenn"},"content":" String str \u003d input.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Saezenn"},"content":" String[] commandTask \u003d str.split(\" \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Saezenn"},"content":" String command \u003d commandTask[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Saezenn"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Saezenn"},"content":" ui.bidGoodbye();","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"Saezenn"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Saezenn"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"Saezenn"},"content":" parser.executeCommand(store, commandTask);","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"Saezenn"},"content":" this.storage.saveTasks(store);","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"Saezenn"},"content":" } catch (SaeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"☹ \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"Saezenn"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"An error occurred while saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"Saezenn"},"content":" input.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Saezenn"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"Saezenn"},"content":" Sae sae \u003d new Sae(\"./data/sae.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"Saezenn"},"content":" sae.run();","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Saezenn":74}},{"path":"src/main/java/sae/exceptions/InvalidDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.exceptions;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"public class InvalidDateTimeFormatException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":" public InvalidDateTimeFormatException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Saezenn":8}},{"path":"src/main/java/sae/exceptions/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.exceptions;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"public class InvalidDeadlineException extends SaeException{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":" return \"☹ OOPS!!! The deadline command should be followed by a description and /by.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":9}},{"path":"src/main/java/sae/exceptions/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.exceptions;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"public class InvalidEventException extends SaeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":" return \"☹ OOPS!!! The event command should be followed by a description, /from, and /to.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":10}},{"path":"src/main/java/sae/exceptions/InvalidTodoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.exceptions;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"public class InvalidTodoException extends SaeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":" return \"☹ OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":9}},{"path":"src/main/java/sae/exceptions/SaeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.exceptions;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":" * Custom exception class for handling errors specific to the Sae chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"public class SaeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":" * Returns a formatted error message to indicate that the chatbot is unable to understand the input.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":" * @return A string containing the error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" return \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":16}},{"path":"src/main/java/sae/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" * The Deadline class represents a sae.task with a specific deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":" * It extends the sae.task.Task class and adds a \u0027by\u0027 field to store the deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" * Constructs a new Deadline sae.task with the given description and deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" * @param description The description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" * @param by The deadline of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" * Overrides the toString method to format the Deadline sae.task\u0027s details.","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" * @return A formatted string representing the Deadline sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d MMMM yyyy ha\");","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(formatter) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" String completionStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d MMMM yyyy ha\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":" String formattedBy \u003d by.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" return String.format(\"%s | %s | %s | %s\", \"D\", completionStatus, description.trim(), formattedBy);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":44}},{"path":"src/main/java/sae/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":" * The sae.task.Event class represents a sae.task that occurs within a specific time frame.","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":" * It extends the sae.task.Task class and adds \u0027from\u0027 and \u0027to\u0027 fields to store the event timing.","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" * Constructs a new sae.task.Event sae.task with the given description, start time, and end time.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" * @param description The description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" * Overrides the toString method to format the sae.task.Event sae.task\u0027s details.","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" * @return A formatted string representing the sae.task.Event sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":" String completionStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" return String.format(\"%s | %s | %s | %s | %s\", \"E\", completionStatus, description.trim(), from.trim(), to.trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":44}},{"path":"src/main/java/sae/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" * The sae.task.Task class represents a sae.task with a description and a status indicating whether it\u0027s done or not.","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"abstract public class Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" * Constructs a new sae.task with the given description. By default, the sae.task is marked as not done.","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" * @param description The description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" * Returns the status icon of the sae.task. The icon is \"X\" if the sae.task is done, or a space if it\u0027s not done.","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" * @return The status icon of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" * Returns the description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" * @return The description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" return \"[\" + this.getStatus() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" * Marks the sae.task as done by setting its status to true.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Saezenn"},"content":" public void markTask() {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"Saezenn"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Saezenn"},"content":" public void unMarkTask() {","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"Saezenn"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Saezenn"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":55}},{"path":"src/main/java/sae/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.util.Ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":" private Ui msg;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" this.msg \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" msg.deleteTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Invalid sae.task index.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" task.markTask();","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" msg.markAsDoneMessage(task);","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" public void unMarkTaskAsDone(int index) {","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":" task.unMarkTask();","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":" msg.unMarkAsDoneMessage(task);","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Saezenn"},"content":" int len \u003d tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Saezenn"},"content":" for (int i \u003d 0; i \u003c len; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Saezenn"},"content":" Task curr \u003d tasks.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Saezenn"},"content":" System.out.println((i + 1) + \".\" + curr.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Saezenn"},"content":" public void addToDoTask(String description) {","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"Saezenn"},"content":" Todo task \u003d new Todo(description);","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"Saezenn"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"Saezenn"},"content":" msg.addTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"Saezenn"},"content":" public void addDeadlineTask(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"Saezenn"},"content":" Deadline task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"Saezenn"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"Saezenn"},"content":" msg.addTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Saezenn"},"content":" public void addEventTask(String description, String from, String to) {","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"Saezenn"},"content":" Event task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"Saezenn"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"Saezenn"},"content":" msg.addTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"Saezenn"},"content":" public Task get(int pos) {","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"Saezenn"},"content":" return tasks.get(pos);","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Saezenn"},"content":" public int size(){","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"Saezenn"},"content":" return tasks.size();","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Saezenn":78}},{"path":"src/main/java/sae/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.task.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":" * The sae.task.Todo class represents a simple sae.task without any additional details.","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":" * It extends the sae.task.Task class and inherits its description field.","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" * Constructs a new sae.task.Todo sae.task with the given description.","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" * @param description The description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" super(description);","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" * Overrides the toString method to format the sae.task.Todo sae.task\u0027s details.","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" * @return A formatted string representing the sae.task.Todo sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" String completionStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" return String.format(\"%s | %s | %s\" , \"T\", completionStatus, description.trim());","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Saezenn":35}},{"path":"src/main/java/sae/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.util;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.task.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import sae.exceptions.InvalidTodoException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import sae.exceptions.SaeException;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"import sae.exceptions.InvalidDeadlineException;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"import sae.exceptions.InvalidEventException;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":"public class Parser {","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" public static void executeCommand(TaskList store, String[] commandTask) throws SaeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" String command \u003d commandTask[0];","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" if (command.equals(\"delete\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" int number \u003d Integer.parseInt(commandTask[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" store.deleteTask(number - 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" store.listTasks();","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" int number \u003d Integer.parseInt(commandTask[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" store.markTaskAsDone(number - 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" int number \u003d Integer.parseInt(commandTask[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" store.unMarkTaskAsDone(number - 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" if (commandTask.length \u003c 2 || commandTask[1].isEmpty()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" throw new InvalidTodoException();","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" store.addToDoTask(commandTask[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" if (commandTask.length \u003c 2 || !commandTask[1].contains(\"/by\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" String[] parts \u003d commandTask[1].split(\"/by\");","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":" String dateTimeString \u003d parts[1].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(dateTimeString, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":" store.addDeadlineTask(description, dateTime);","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"Saezenn"},"content":" if (commandTask.length \u003c 2 || !commandTask[1].contains(\"/from\") || !commandTask[1].contains(\"/to\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"Saezenn"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"Saezenn"},"content":" String[] parts \u003d commandTask[1].split(\"/from|/to\");","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"Saezenn"},"content":" store.addEventTask(parts[0].trim(), parts[1].trim(), parts[2].trim());","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"Saezenn"},"content":" } else {","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"Saezenn"},"content":" throw new SaeException();","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"Saezenn"},"content":" } catch (SaeException errorMessage) {","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"Saezenn"},"content":" System.out.println(errorMessage.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Saezenn":58}},{"path":"src/main/java/sae/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.util;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.task.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import sae.task.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import sae.task.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"import sae.task.Todo;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"import sae.task.Deadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" private static String filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" private void createFile(File f) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" public TaskList loadTasks(String filePath) throws IOException {","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" // if the files doesn\u0027t exist, we make the file","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" createFile(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" throw new FileNotFoundException(\"The file has not been created. Try again.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" else {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" return readTasks(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":" public TaskList readTasks(String filePath) throws FileNotFoundException {","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" Scanner tasks \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"Saezenn"},"content":" while (tasks.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Saezenn"},"content":" String str \u003d tasks.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Saezenn"},"content":" String[] taskDetails \u003d str.split(\"\\\\|\"); // Escape the pipe character","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Saezenn"},"content":" String taskType \u003d taskDetails[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Saezenn"},"content":" String completion \u003d taskDetails[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Saezenn"},"content":" String description \u003d taskDetails[2].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Saezenn"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Saezenn"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Saezenn"},"content":" Todo newTodo \u003d new Todo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Saezenn"},"content":" if (completion.equals(\"1\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"Saezenn"},"content":" newTodo.markTask();","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"Saezenn"},"content":" taskList.addTask(newTodo);","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"Saezenn"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Saezenn"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Saezenn"},"content":" String by \u003d taskDetails[3].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Saezenn"},"content":" // Parse the \u0027by\u0027 string into LocalDateTime using a formatter","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Saezenn"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d MMMM yyyy ha\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Saezenn"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Saezenn"},"content":" Deadline newDeadline \u003d new Deadline(description, dateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Saezenn"},"content":" if (completion.equals(\"1\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"Saezenn"},"content":" newDeadline.markTask();","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"Saezenn"},"content":" taskList.addTask(newDeadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"Saezenn"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Saezenn"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Saezenn"},"content":" String from \u003d taskDetails[3].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Saezenn"},"content":" String to \u003d taskDetails[4].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Saezenn"},"content":" Event newEvent \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Saezenn"},"content":" if (completion.equals(\"1\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"Saezenn"},"content":" newEvent.markTask();","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"Saezenn"},"content":" taskList.addTask(newEvent);","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"Saezenn"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Saezenn"},"content":" tasks.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Saezenn"},"content":" return taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Saezenn"},"content":" public void saveTasks(TaskList taskList) throws IOException {","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"Saezenn"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Saezenn"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Saezenn"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"Saezenn"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"Saezenn"},"content":" String taskString \u003d task.toFileString();","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Saezenn"},"content":" fw.write(taskString + System.lineSeparator());","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Saezenn"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Saezenn":104}},{"path":"src/main/java/sae/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.util;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.task.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"public class Ui {","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":" public void greetUser() {","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Hello! I\u0027m Sae\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":" public void bidGoodbye() {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" public void unknownInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" public void addTaskMessage(Task task, int taskcount) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Now you have \" + taskcount + \" task(s) in the list.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" public void deleteTaskMessage(Task task, int taskcount) {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Now you have \" + taskcount + \" tasks in the list.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" public void markAsDoneMessage(Task task) {","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" public void unMarkAsDoneMessage(Task task) {","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"I have unmarked this task as done: \");","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Saezenn":40}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"todo sleep","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"deadline cs2103T ip /by thurs 2359","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"event lak class /from thur 6pm /to thur 8pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":4}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"javac -cp C:\\Users\\Admin\\ip\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":"java -classpath C:\\Users\\Admin\\ip\\bin Sae \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":{"Saezenn":2,"-":19}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"# Sae project template","lastModifiedDate":"2023-08-23"},{"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":"Saezenn"},"content":"3. After that, locate the `src/main/java/Sae.java` file, right-click it, and choose `Run Sae.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-23"},{"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":{"Saezenn":2,"-":22}},{"path":"src/main/java/sae/Sae.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.task.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import sae.util.Parser;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import sae.util.Storage;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"import sae.util.Ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"import sae.exceptions.SaeException;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":" * The Sae class represents an interactive sae.task manager.","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" * Users can add, list, mark, and unmark tasks using this program.","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":"public class Sae {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" private final TaskList store;","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" public Sae(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" TaskList temp;","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" temp \u003d storage.loadTasks(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" temp \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" this.store \u003d temp;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" public void run() {","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" ui.greetUser();","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":" TaskList store \u003d this.store;","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Saezenn"},"content":" while (true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"Saezenn"},"content":" String str \u003d input.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Saezenn"},"content":" String[] commandTask \u003d str.split(\" \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Saezenn"},"content":" String command \u003d commandTask[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Saezenn"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Saezenn"},"content":" ui.bidGoodbye();","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"Saezenn"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Saezenn"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"Saezenn"},"content":" parser.executeCommand(store, commandTask);","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"Saezenn"},"content":" this.storage.saveTasks(store);","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"Saezenn"},"content":" } catch (SaeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"☹ \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"Saezenn"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"An error occurred while saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"Saezenn"},"content":" input.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Saezenn"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"Saezenn"},"content":" Sae sae \u003d new Sae(\"./data/sae.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"Saezenn"},"content":" sae.run();","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Saezenn":74}},{"path":"src/main/java/sae/exceptions/InvalidDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.exceptions;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"public class InvalidDateTimeFormatException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":" public InvalidDateTimeFormatException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Saezenn":8}},{"path":"src/main/java/sae/exceptions/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.exceptions;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"public class InvalidDeadlineException extends SaeException{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":" return \"☹ OOPS!!! The deadline command should be followed by a description and /by.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":9}},{"path":"src/main/java/sae/exceptions/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.exceptions;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"public class InvalidEventException extends SaeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":" return \"☹ OOPS!!! The event command should be followed by a description, /from, and /to.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":10}},{"path":"src/main/java/sae/exceptions/InvalidTodoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.exceptions;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"public class InvalidTodoException extends SaeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":" return \"☹ OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":9}},{"path":"src/main/java/sae/exceptions/SaeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.exceptions;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":" * Custom exception class for handling errors specific to the Sae chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"public class SaeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":" * Returns a formatted error message to indicate that the chatbot is unable to understand the input.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":" * @return A string containing the error message.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" return \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":16}},{"path":"src/main/java/sae/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" * The Deadline class represents a sae.task with a specific deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":" * It extends the sae.task.Task class and adds a \u0027by\u0027 field to store the deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" * Constructs a new Deadline sae.task with the given description and deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" * @param description The description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" * @param by The deadline of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" * Overrides the toString method to format the Deadline sae.task\u0027s details.","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" * @return A formatted string representing the Deadline sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d MMMM yyyy ha\");","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(formatter) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" String completionStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d MMMM yyyy ha\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":" String formattedBy \u003d by.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" return String.format(\"%s | %s | %s | %s\", \"D\", completionStatus, description.trim(), formattedBy);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":44}},{"path":"src/main/java/sae/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":" * The sae.task.Event class represents a sae.task that occurs within a specific time frame.","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":" * It extends the sae.task.Task class and adds \u0027from\u0027 and \u0027to\u0027 fields to store the event timing.","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" * Constructs a new sae.task.Event sae.task with the given description, start time, and end time.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" * @param description The description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" * Overrides the toString method to format the sae.task.Event sae.task\u0027s details.","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" * @return A formatted string representing the sae.task.Event sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":" String completionStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" return String.format(\"%s | %s | %s | %s | %s\", \"E\", completionStatus, description.trim(), from.trim(), to.trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":44}},{"path":"src/main/java/sae/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" * The sae.task.Task class represents a sae.task with a description and a status indicating whether it\u0027s done or not.","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"abstract public class Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" * Constructs a new sae.task with the given description. By default, the sae.task is marked as not done.","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" * @param description The description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" * Returns the status icon of the sae.task. The icon is \"X\" if the sae.task is done, or a space if it\u0027s not done.","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" * @return The status icon of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" * Returns the description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" * @return The description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" return \"[\" + this.getStatus() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" * Marks the sae.task as done by setting its status to true.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Saezenn"},"content":" public void markTask() {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"Saezenn"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Saezenn"},"content":" public void unMarkTask() {","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"Saezenn"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Saezenn"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":55}},{"path":"src/main/java/sae/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.util.Ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":" private Ui msg;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" this.msg \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" msg.deleteTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Invalid sae.task index.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" task.markTask();","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" msg.markAsDoneMessage(task);","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" public void unMarkTaskAsDone(int index) {","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":" task.unMarkTask();","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":" msg.unMarkAsDoneMessage(task);","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Saezenn"},"content":" int len \u003d tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"-"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"-"},"content":" str.append(\"1.\" + tasks.get(0).toString());","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"-"},"content":" for (int i \u003d 1; i \u003c len; i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"Saezenn"},"content":" Task curr \u003d tasks.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"-"},"content":" str \u003d str.append(\"\\n\" + (i + 1) + \".\" + curr.toString());","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"-"},"content":" System.out.println(str.toString());","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Saezenn"},"content":" public void addToDoTask(String description) {","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"Saezenn"},"content":" Todo task \u003d new Todo(description);","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"Saezenn"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"Saezenn"},"content":" msg.addTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"Saezenn"},"content":" public void addDeadlineTask(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"Saezenn"},"content":" Deadline task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"Saezenn"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"Saezenn"},"content":" msg.addTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Saezenn"},"content":" public void addEventTask(String description, String from, String to) {","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"Saezenn"},"content":" Event task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"Saezenn"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"Saezenn"},"content":" msg.addTaskMessage(task, tasks.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"Saezenn"},"content":" public Task get(int pos) {","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"Saezenn"},"content":" return tasks.get(pos);","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Saezenn"},"content":" public int size(){","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"Saezenn"},"content":" return tasks.size();","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Saezenn":76,"-":5}},{"path":"src/main/java/sae/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.task;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.task.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":" * The sae.task.Todo class represents a simple sae.task without any additional details.","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":" * It extends the sae.task.Task class and inherits its description field.","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" * Constructs a new sae.task.Todo sae.task with the given description.","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" * @param description The description of the sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" super(description);","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" * Overrides the toString method to format the sae.task.Todo sae.task\u0027s details.","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" * @return A formatted string representing the sae.task.Todo sae.task.","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" public String toString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" String completionStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" return String.format(\"%s | %s | %s\" , \"T\", completionStatus, description.trim());","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Saezenn":35}},{"path":"src/main/java/sae/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.util;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.task.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import sae.exceptions.InvalidTodoException;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import sae.exceptions.SaeException;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"import sae.exceptions.InvalidDeadlineException;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"import sae.exceptions.InvalidEventException;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":"public class Parser {","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":" public static void executeCommand(TaskList store, String[] commandTask) throws SaeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" String command \u003d commandTask[0];","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" if (command.equals(\"delete\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" int number \u003d Integer.parseInt(commandTask[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" store.deleteTask(number - 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" store.listTasks();","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" int number \u003d Integer.parseInt(commandTask[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" store.markTaskAsDone(number - 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" int number \u003d Integer.parseInt(commandTask[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" store.unMarkTaskAsDone(number - 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" if (commandTask.length \u003c 2 || commandTask[1].isEmpty()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" throw new InvalidTodoException();","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" store.addToDoTask(commandTask[1]);","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" if (commandTask.length \u003c 2 || !commandTask[1].contains(\"/by\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" String[] parts \u003d commandTask[1].split(\"/by\");","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":" String dateTimeString \u003d parts[1].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(dateTimeString, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":" store.addDeadlineTask(description, dateTime);","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"Saezenn"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"Saezenn"},"content":" if (commandTask.length \u003c 2 || !commandTask[1].contains(\"/from\") || !commandTask[1].contains(\"/to\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"Saezenn"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"Saezenn"},"content":" String[] parts \u003d commandTask[1].split(\"/from|/to\");","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"Saezenn"},"content":" store.addEventTask(parts[0].trim(), parts[1].trim(), parts[2].trim());","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"Saezenn"},"content":" } else {","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"Saezenn"},"content":" throw new SaeException();","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"Saezenn"},"content":" } catch (SaeException errorMessage) {","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"Saezenn"},"content":" System.out.println(errorMessage.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"Saezenn":58}},{"path":"src/main/java/sae/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.util;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.task.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"import sae.task.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"import sae.task.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"import sae.task.Todo;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":"import sae.task.Deadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":" private static String filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":" private void createFile(File f) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Saezenn"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":" public TaskList loadTasks(String filePath) throws IOException {","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" // if the files doesn\u0027t exist, we make the file","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" createFile(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":" throw new FileNotFoundException(\"The file has not been created. Try again.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" else {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" return readTasks(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Saezenn"},"content":" public TaskList readTasks(String filePath) throws FileNotFoundException {","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"Saezenn"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Saezenn"},"content":" Scanner tasks \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Saezenn"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"Saezenn"},"content":" while (tasks.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Saezenn"},"content":" String str \u003d tasks.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Saezenn"},"content":" String[] taskDetails \u003d str.split(\"\\\\|\"); // Escape the pipe character","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Saezenn"},"content":" String taskType \u003d taskDetails[0].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Saezenn"},"content":" String completion \u003d taskDetails[1].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Saezenn"},"content":" String description \u003d taskDetails[2].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Saezenn"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Saezenn"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Saezenn"},"content":" Todo newTodo \u003d new Todo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Saezenn"},"content":" if (completion.equals(\"1\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"Saezenn"},"content":" newTodo.markTask();","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"Saezenn"},"content":" taskList.addTask(newTodo);","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"Saezenn"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Saezenn"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Saezenn"},"content":" String by \u003d taskDetails[3].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Saezenn"},"content":" // Parse the \u0027by\u0027 string into LocalDateTime using a formatter","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Saezenn"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d MMMM yyyy ha\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Saezenn"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Saezenn"},"content":" Deadline newDeadline \u003d new Deadline(description, dateTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Saezenn"},"content":" if (completion.equals(\"1\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"Saezenn"},"content":" newDeadline.markTask();","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"Saezenn"},"content":" taskList.addTask(newDeadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"Saezenn"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Saezenn"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Saezenn"},"content":" String from \u003d taskDetails[3].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Saezenn"},"content":" String to \u003d taskDetails[4].trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Saezenn"},"content":" Event newEvent \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Saezenn"},"content":" if (completion.equals(\"1\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"Saezenn"},"content":" newEvent.markTask();","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"Saezenn"},"content":" taskList.addTask(newEvent);","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"Saezenn"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Saezenn"},"content":" tasks.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Saezenn"},"content":" return taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Saezenn"},"content":" public void saveTasks(TaskList taskList) throws IOException {","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"Saezenn"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Saezenn"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Saezenn"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"Saezenn"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"Saezenn"},"content":" String taskString \u003d task.toFileString();","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Saezenn"},"content":" fw.write(taskString + System.lineSeparator());","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Saezenn"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Saezenn":104}},{"path":"src/main/java/sae/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"package sae.util;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"import sae.task.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"Saezenn"},"content":"public class Ui {","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Saezenn"},"content":" public void greetUser() {","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Hello! I\u0027m Sae\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Saezenn"},"content":" public void bidGoodbye() {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Saezenn"},"content":" public void unknownInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Saezenn"},"content":" public void addTaskMessage(Task task, int taskcount) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Saezenn"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Now you have \" + taskcount + \" task(s) in the list.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Saezenn"},"content":" public void deleteTaskMessage(Task task, int taskcount) {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"-"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":" + \" \" + task.toString() + \"\\n\" + \"Now you have \" + taskcount + \" tasks in the list.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Saezenn"},"content":" public void markAsDoneMessage(Task task) {","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Saezenn"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Saezenn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Saezenn"},"content":" public void unMarkAsDoneMessage(Task task) {","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"Saezenn"},"content":" System.out.println(\"I have unmarked this task as done: \");","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"Saezenn"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"Saezenn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Saezenn"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Saezenn":37,"-":2}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Saezenn"},"content":"todo sleep","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Saezenn"},"content":"deadline cs2103T ip /by thurs 2359","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Saezenn"},"content":"event lak class /from thur 6pm /to thur 8pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Saezenn"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Saezenn":4}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Saezenn"},"content":"javac -cp C:\\Users\\Admin\\ip\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Saezenn"},"content":"java -classpath C:\\Users\\Admin\\ip\\bin Sae \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":{"Saezenn":2,"-":19}}] diff --git a/Saezenn_ip_master/commits.json b/Saezenn_ip_master/commits.json index 1b12cf9a..2fac0f42 100644 --- a/Saezenn_ip_master/commits.json +++ b/Saezenn_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Saezenn":[{"date":"2023-08-23","commitResults":[{"hash":"f8d396fb8c8171283f68ba68cf219f1aa0b5fd1b","isMergeCommit":false,"messageTitle":"Level-0, Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"2ef1c24da91e4a1186457075c6070e9d739b8a15","isMergeCommit":false,"messageTitle":"Level-1, Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"62bebaa3ccd11951e62eafecb0875d2d933e5235","isMergeCommit":false,"messageTitle":"Level-2, Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"91e1dc3cdcacd81188327b6f73ff42c06f1e98f8","isMergeCommit":false,"messageTitle":"Level-3, Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":14}}},{"hash":"1d7b87418ca9a21f77618fb620ae77ff40ed4820","isMergeCommit":false,"messageTitle":"Level-4, Todo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":13}}},{"hash":"ce08159df7ede71ac8596c9bfe6dd61ad97d989a","isMergeCommit":false,"messageTitle":"Level-5, Handle Erorrs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":16}}},{"hash":"feed665eb20c15f36473334f10e39cda5a7a9fe3","isMergeCommit":false,"messageTitle":"Level-6, Delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"125ccc54133ca0df3d33f891c997af1ea114c858","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"bat":{"insertions":2,"deletions":2}}},{"hash":"02bdb5229f3a383b5bbf13eed41864b1eef6a9dd","isMergeCommit":false,"messageTitle":"Fixed Exceptions, Text-Ui-Testing","messageBody":"","tags":["Level-6","Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":34}}}]},{"date":"2023-08-31","commitResults":[{"hash":"fab70cfbc926508bed3dea86d84a08aa38c9ca87","isMergeCommit":false,"messageTitle":"Level-7, Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":258,"deletions":101}}},{"hash":"11a80518c910f0717b1dfb465dc7be1edbb712fb","isMergeCommit":false,"messageTitle":"Level-8, Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":71,"deletions":22}}},{"hash":"a2c1a97571fb5c0ea0a8ab666943574537c04a4c","isMergeCommit":true,"messageTitle":"merging branch-Level-8 to master","messageBody":"","tags":["Level-8","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3885698fb693340da7a57e191a546c93eed2016d","isMergeCommit":false,"messageTitle":"A-MoreOOP, TaskList, Storage, WIP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":42,"deletions":0}}},{"hash":"14994ee0875d2b1f8283a99c8a8b4ed6bfacaae4","isMergeCommit":true,"messageTitle":"Merge gradle-support to main","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"c12acf1041431824e353c5bb4c69a5fc2f4e775e","isMergeCommit":true,"messageTitle":"a-gradle","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"ab7de79854aa86f2b2c58031329bab8d5a104956","isMergeCommit":false,"messageTitle":"small updates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":35,"deletions":0}}}]},{"date":"2023-09-15","commitResults":[{"hash":"bbf731b8fd20e9b45fa3f6c76d622d603ed8e98f","isMergeCommit":false,"messageTitle":"Fixed OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":130,"deletions":212}}},{"hash":"27a2cc25b64cf22e6ea8879835cc6a998f7a91bd","isMergeCommit":false,"messageTitle":"added packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":114,"deletions":77}}}]}]},"authorFileTypeContributionMap":{"Saezenn":{"java":584,"md":2,"fxml":0,"sh":0,"bat":2,"gradle":0,"txt":8}},"authorContributionVariance":{"Saezenn":24294.443},"authorDisplayNameMap":{"Saezenn":"CS2103T-W15-3 TENG..ICIA"}} +{"authorDailyContributionsMap":{"Saezenn":[{"date":"2023-08-23","commitResults":[{"hash":"f8d396fb8c8171283f68ba68cf219f1aa0b5fd1b","isMergeCommit":false,"messageTitle":"Level-0, Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"2ef1c24da91e4a1186457075c6070e9d739b8a15","isMergeCommit":false,"messageTitle":"Level-1, Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"62bebaa3ccd11951e62eafecb0875d2d933e5235","isMergeCommit":false,"messageTitle":"Level-2, Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"91e1dc3cdcacd81188327b6f73ff42c06f1e98f8","isMergeCommit":false,"messageTitle":"Level-3, Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":14}}},{"hash":"1d7b87418ca9a21f77618fb620ae77ff40ed4820","isMergeCommit":false,"messageTitle":"Level-4, Todo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":13}}},{"hash":"ce08159df7ede71ac8596c9bfe6dd61ad97d989a","isMergeCommit":false,"messageTitle":"Level-5, Handle Erorrs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":16}}},{"hash":"feed665eb20c15f36473334f10e39cda5a7a9fe3","isMergeCommit":false,"messageTitle":"Level-6, Delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"125ccc54133ca0df3d33f891c997af1ea114c858","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"bat":{"insertions":2,"deletions":2}}},{"hash":"02bdb5229f3a383b5bbf13eed41864b1eef6a9dd","isMergeCommit":false,"messageTitle":"Fixed Exceptions, Text-Ui-Testing","messageBody":"","tags":["Level-6","Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":34}}}]},{"date":"2023-08-31","commitResults":[{"hash":"fab70cfbc926508bed3dea86d84a08aa38c9ca87","isMergeCommit":false,"messageTitle":"Level-7, Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":258,"deletions":101}}},{"hash":"11a80518c910f0717b1dfb465dc7be1edbb712fb","isMergeCommit":false,"messageTitle":"Level-8, Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":71,"deletions":22}}},{"hash":"a2c1a97571fb5c0ea0a8ab666943574537c04a4c","isMergeCommit":true,"messageTitle":"merging branch-Level-8 to master","messageBody":"","tags":["Level-8","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3885698fb693340da7a57e191a546c93eed2016d","isMergeCommit":false,"messageTitle":"A-MoreOOP, TaskList, Storage, WIP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":42,"deletions":0}}},{"hash":"14994ee0875d2b1f8283a99c8a8b4ed6bfacaae4","isMergeCommit":true,"messageTitle":"Merge gradle-support to main","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"c12acf1041431824e353c5bb4c69a5fc2f4e775e","isMergeCommit":true,"messageTitle":"a-gradle","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"ab7de79854aa86f2b2c58031329bab8d5a104956","isMergeCommit":false,"messageTitle":"small updates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":35,"deletions":0}}}]},{"date":"2023-09-15","commitResults":[{"hash":"bbf731b8fd20e9b45fa3f6c76d622d603ed8e98f","isMergeCommit":false,"messageTitle":"Fixed OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":130,"deletions":212}}},{"hash":"27a2cc25b64cf22e6ea8879835cc6a998f7a91bd","isMergeCommit":false,"messageTitle":"added packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":114,"deletions":77}}}]}]},"authorFileTypeContributionMap":{"Saezenn":{"java":579,"md":2,"fxml":0,"sh":0,"bat":2,"gradle":0,"txt":4}},"authorContributionVariance":{"Saezenn":24294.443},"authorDisplayNameMap":{"Saezenn":"CS2103T-W15-3 TENG..ICIA"}} diff --git a/Sheeepen_ip_master/authorship.json b/Sheeepen_ip_master/authorship.json index 4d72df98..04f5d56d 100644 --- a/Sheeepen_ip_master/authorship.json +++ b/Sheeepen_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":"Sheeepen"},"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" mainClass.set(\"Launcher\")","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"Sheeepen":6}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"D false dd /2023-09-10 18:00","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"T false aa","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":2}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"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":"Sheeepen"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"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":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":61}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" * The Main class for the Duke application.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" * This class initialises a new Duke instance that handles the","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" * control and flow of the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" public static final String VERSION \u003d \"NotCrazy ─ a CS2103T iP ─ Week 4 Update\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/joemama.jpeg\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/kanye.jpeg\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" * Constructs a new Duke object, along with a Storage object and an Ui object.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" public Duke() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" Command c;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" c \u003d parser.parse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" String response \u003d c.execute(tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" storage.save(tasks.getTaskList());","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" return response;","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"-":3,"Sheeepen":61}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":8}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":29}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" private Duke duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/joemama.jpeg\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/kanye.jpeg\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" public void exitApp() {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" int delaySeconds \u003d 2;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" Platform.runLater(() -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" Thread.sleep(delaySeconds * 1000);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"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":48,"author":{"gitId":"Sheeepen"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" if (response.startsWith(\"Bye\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" exitApp();","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":64}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates a command given to the Duke application to run a certain set of instructions.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" * Execute the set of instructions based on the Command subclass","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * @param tasks A TaskList object containing all tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" return \"done\";","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":19}},{"path":"src/main/java/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This child class instructs the application to create a Deadline object","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * to add to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" private String endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * Constructs a DeadlineCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * @param endTime","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public DeadlineCommand(String description, String endTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return tasks.addDeadlineTask(description, endTime);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":30}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to delete a task from the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * Constructs a DeleteCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * @param taskNum","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" return tasks.deleteTask(taskNumber);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":26}},{"path":"src/main/java/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This child class instructs the application to create an Event object","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * to add to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" private String start;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" private String end;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * Constructs an EventCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" * @param start","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" * @param end","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" public EventCommand(String description, String start, String end) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" return tasks.addEventTask(description, start, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":33}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to exit.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"exit\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE \u003d \"Bye my yeezy. Yeezup #GODDID\";","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" return MESSAGE;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * Checks whether the Command object is an instance of an ExitCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" * @param command","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" * @return true if Command is an ExitCommand, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" return command instanceof ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":27}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private String keyword;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" ArrayList\u003cTask\u003e filteredTaskList \u003d tasks.findByKeyword(keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" for (Task task: filteredTaskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" message +\u003d task.toString() + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Sheeepen":30}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to list the available commands for the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" return MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":17}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to list all current tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" return tasks.listTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":16}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to mark a task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * Constructs a MarkCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * @param taskNum","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" public MarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" return tasks.markTaskDone(taskNumber);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":31}},{"path":"src/main/java/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This child class instructs the application to create a ToDo object","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * to add to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Todo object.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * @param input","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public TodoCommand(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d input;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" return tasks.addTodoTask(description);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":27}},{"path":"src/main/java/commands/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * This class handles all unsupported or unknown commands the user inputs.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"Unknown input! Please type a proper command.\\n\" + MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":18}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to mark a task as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" * Constructs an UnmarkCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * @param taskNum","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" return tasks.unmarkTaskDone(taskNumber);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":32}},{"path":"src/main/java/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package exceptions;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" return \"/ᐠ。ⱉ。ᐟ\\\\ノ OOPS! \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":13}},{"path":"src/main/java/helpers/DateTimeDetection.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package helpers;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" * This helper class detects the input to be either a date, a time, or both.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" * It then correctly formats the string to a LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"public class DateTimeDetection {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * Returns a LocalDateTime object based in the String input.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" * Inputs without a date are set to the date the task was created.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * Inputs without a time are set to 23:59HRS on the day the task was created.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" * @param input The user input for date/time.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" * @return A LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" public static LocalDateTime detectDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" if (isDateTime(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" return dateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" } else if (isDate(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" LocalDate date \u003d LocalDate.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" return date.atTime(LocalTime.of(23, 59));","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" } else if (isTime(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" LocalTime time \u003d LocalTime.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" return LocalDateTime.of(LocalDate.now(), time);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Invalid format.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" * Determines if the string contains both date and time.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" * @param input","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" * @return true if String contains both date and time, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" public static boolean isDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" LocalDate.parse(input, dateFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" * Determines if the string contains only date.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" * @param input","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" * @return true if String only contains date, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" public static boolean isDate(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" LocalDate.parse(input, dateFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" * Determines if the string contains only time.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" * @param input","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" * @return true if String only contains time, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" public static boolean isTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" LocalTime.parse(input, timeFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" * Returns an alternative representation of the LocalDateTime object, in the form of","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":" * dd MM yyyy HH:mm","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":" * E.g. 20 Oct 2001 18:23","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":" * @param dateTime","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" * @return String representation of LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":" public static String formatDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":" return dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":104}},{"path":"src/main/java/messages/Message.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package messages;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public class Message {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" public static final String LOGO \u003d \" OOOO OOOO\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" \" O O w w O O\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" \" O O w w w w O O\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" \" O O w w w w O O\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" \" OOOO w w OOOO\";","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_WELCOME \u003d","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" \"Hello \u003eu\u003c! I\u0027m OwO_bot\\n\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" LOGO + \"\\n\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" \"How can I help today ♥w♥ ?\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_EXIT \u003d \"Bye! Hope to see you again soon! x3\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_INSTRUCTIONS \u003d \"List of available commands:\\n\" + \"list\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" \"todo \u003ctask name\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" \"deadline \u003ctask name\u003e /by \u003cyyyy-MM-dd HH-mm\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" \"event \u003ctask name\u003e /from \u003cyyyy-MM-dd HH-mm\u003e /to \u003cyyyy-MM-dd HH-mm\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" \"mark \u003ctask number\u003e\\n\" + \"unmark \u003ctask number\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" \"find \u003ctask description\u003e\\n\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" \"delete \u003ctask number\u003e\\n\" + \"exit\";","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":25}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import commands.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import commands.DeadlineCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import commands.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import commands.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import commands.HelpCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"import commands.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"import commands.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"import commands.TodoCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"import commands.UnknownCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"import commands.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * This class parses the user input to make sense of user commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" * The Parser object then returns Command objects that tell the","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * application what to do.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" * Returns a Command object based on the user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" * @param userInput","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" * @return A subclass of the Command object.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" public Command parse(String userInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" String commandWord;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" String arguments \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" if (isSingleWord(userInput)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" commandWord \u003d userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" commandWord \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" arguments \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" return prepareTodo(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" return prepareDeadline(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" return prepareEvent(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" return prepareMark(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" return prepareUnmark(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" return prepareDelete(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" return prepareFind(arguments);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" return new HelpCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed for a ToDo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" * @return A ToDoCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" public Command prepareTodo(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" return new TodoCommand(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed for a Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":" * @return A DeadlineCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":" public Command prepareDeadline(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d args.split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" String description \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":" String endTime \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":" return new DeadlineCommand(description, endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed for an Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Sheeepen"},"content":" * @return An EventCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Sheeepen"},"content":" public Command prepareEvent(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d args.split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sheeepen"},"content":" String description \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Sheeepen"},"content":" String startTime \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Sheeepen"},"content":" String endTime \u003d arr[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Sheeepen"},"content":" return new EventCommand(description, startTime, endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed to mark a Task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"Sheeepen"},"content":" * @return A MarkCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"Sheeepen"},"content":" public Command prepareMark(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sheeepen"},"content":" return new MarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed to mark a Task as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"Sheeepen"},"content":" * @return An UnmarkCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"Sheeepen"},"content":" public Command prepareUnmark(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Sheeepen"},"content":" return new UnmarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed to delete a task.","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"Sheeepen"},"content":" * @return A DeleteCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"Sheeepen"},"content":" public Command prepareDelete(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Sheeepen"},"content":" return new DeleteCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"Sheeepen"},"content":" public Command prepareFind(String args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"Sheeepen"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"Sheeepen"},"content":" * Determines if the input contains only one word, or is more than one word.","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"Sheeepen"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"Sheeepen"},"content":" * @return true if input is one word, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"Sheeepen"},"content":" public boolean isSingleWord(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"Sheeepen"},"content":" return input.matches(\"\\\\b\\\\w+\\\\b\");","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":165}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" * This class handles loading and saving user inputs for","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" * continuity between sessions. Inputs are formatted correctly before","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" * saved into the file path specified.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * The file to load from and save into.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" private static final String FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Storage object.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" * Creates the directory and file of the specified file path if it does not already exist.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" public Storage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" File directory \u003d new File(\"data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" boolean var \u003d file.createNewFile();","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" assert var \u003d\u003d true : \"var should be true\";","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" * Loads the save data from the previous session.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" * @return String representation of the Task objects created in the previous session.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" public String load() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(FILE_PATH));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" content.append(line).append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" return content.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" * Saves the current task list into the specified file path.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" * @param taskList A TaskList object that stores all current tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":" public void save(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" FileWriter writer \u003d new FileWriter(file, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" String content \u003d taskList.get(i).toText();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" writer.write(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" writer.write(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Updated task list saved under data/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":94}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import helpers.DateTimeDetection;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates a Deadline child class","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" * that contains a description, and an end date/time.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * @param end Date or Time, or both, when the Deadline is due.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public Deadline(String description, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" setDateTime(end);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Deadline object that specifies whether it has been completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" * @param end Date or Time, or both, when the Deadline is due.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public Deadline(String description, boolean isDone, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" setDateTime(end);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" * Sets the String input of the end date/time to a LocalDateTime","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" * @param input In the form of yyyy-MM-dd HH:mm. Either Date or Time may be omitted but not both.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" public void setDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d DateTimeDetection.detectDateTime(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" return \"D \" + this.getDoneStatus() + \" \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" this.description + \" /\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" this.end.toString().replace(\"T\", \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" return \"[D] \" + super.toString() +","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" \" (\" + DateTimeDetection.formatDateTime(this.end) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":61}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates an Event child class","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * that contains a description, a start date/time and an end date/time.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" protected String start;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" protected String end;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * Constructs an Event object.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * @param start start date/time of the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" * @param end end date/time of the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" * Constructs an Event object that specifies whether it has been completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" * @param start start date/time of the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" * @param end end date/time of the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" public Event(String description, boolean isDone, String start, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" return \"E \" + this.getDoneStatus() + \" \" + this.description + \" /\" + this.start + \" /\" + this.end;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" return \"[E] \" + super.toString() + \" (\" + this.start + this.end + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":49}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates an abstract Parent class Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" * that users can create to add to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Task object that specifies whether it has been completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public void setIsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" public void setIsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" public boolean getDoneStatus() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" * Returns a String representation of whether the Task has been completed,","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" * indicated by an \"X\" for completion.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" * @return String representation of completion status.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" return this.isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" * Returns the String representation of the Task object when saved to the Duke.txt file.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" * @return String representation of Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" public abstract String toText();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":" return this.getStatus() + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":69}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates a TaskList that stores all the Task objects","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * the user has created, and handles updating of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * Constructs a TaskList object with an empty task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" * Constructs a TaskList object that creates Task objects and","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" * stores them in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" * @param content A String containing information of the Task objects to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" public TaskList(String content) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" addTextToTask(content);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" * Converts the String to Task objects to be added to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" * @param content A String containing information of the Task objects to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" public void addTextToTask(String content) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" String[] lines \u003d content.split(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" for (String line: lines) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" String[] parts \u003d line.split(\" \", 3);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" if (parts[0].equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" ToDo task \u003d new ToDo(parts[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" } else if (parts[0].equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d parts[2].split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" Deadline task \u003d new Deadline(arr[0], arr[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d parts[2].split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" Event task \u003d new Event(arr[0], arr[1], arr[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" return this.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" * Prints onto the console all tasks on the current task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":" assert (tasks.size() \u003e\u003d 0);","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"There\u0027s nothing in your list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" message +\u003d ((i + 1) + \". \" + tasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" * Sets a particular task to \u0027Done\u0027 status.","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" * @param taskNumber The task to be set to \u0027Done\u0027 based on the order of the task list. Starts at 1.","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" * @throws IndexOutOfBoundsException When the taskNumber does not exist.","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" public String markTaskDone(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1).setIsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"That\u0027s the hustle ye. You is good on this task:\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"Sheeepen"},"content":" * Sets a particular task to \u0027Not Done\u0027 status.","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"Sheeepen"},"content":" * @param taskNumber The task to be set to \u0027Not Done\u0027 based on the order of the task list. Starts at 1.","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Sheeepen"},"content":" * @throws IndexOutOfBoundsException When the taskNumber does not exist.","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Sheeepen"},"content":" public String unmarkTaskDone(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1).setIsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"Ok... Guess you\u0027re not actually done with this:\\n\" + tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"Sheeepen"},"content":" * Deletes a Task from the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"Sheeepen"},"content":" * @param taskNumber The task to be set to deleted based on the order of the task list. Starts at 1.","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"Sheeepen"},"content":" * @throws IndexOutOfBoundsException When the taskNumber does not exist.","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"Sheeepen"},"content":" public String deleteTask(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Sheeepen"},"content":" Task removedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Sheeepen"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"banished this task to the shadow realm:\\n\" + removedTask + \"\\n\" + getNumTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"Sheeepen"},"content":" * Adds a ToDo task object to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"Sheeepen"},"content":" * @param description Description of the ToDo object.","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"Sheeepen"},"content":" public String addTodoTask(String description) {","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"added new task:\\n\" + todo + \"\\n\" + getNumTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"Sheeepen"},"content":" * Adds a Deadline task object to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"Sheeepen"},"content":" * @param description Description of the Deadline object.","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"Sheeepen"},"content":" * @param end end Date/Time of the Deadline object.","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"Sheeepen"},"content":" public String addDeadlineTask(String description, String end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"Sheeepen"},"content":" Deadline deadline \u003d new Deadline(description, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"added new task:\\n\" + deadline + \"\\n\" + getNumTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"Sheeepen"},"content":" * Adds an Event task object to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"Sheeepen"},"content":" * @param description Description of the Event object.","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"Sheeepen"},"content":" * @param start start Date/Time of the Event object.","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"Sheeepen"},"content":" * @param end end Date/Time of the Event object.","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"Sheeepen"},"content":" public String addEventTask(String description, String start, String end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"Sheeepen"},"content":" Event event \u003d new Event(description, start, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"added new task:\\n\" + event + \"\\n\" + getNumTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"Sheeepen"},"content":" public ArrayList\u003cTask\u003e findByKeyword(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":202,"author":{"gitId":"Sheeepen"},"content":" ArrayList\u003cTask\u003e filteredTaskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":203,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"Sheeepen"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"Sheeepen"},"content":" String taskDescription \u003d task.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"Sheeepen"},"content":" if (taskDescription.contains(keyword)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":207,"author":{"gitId":"Sheeepen"},"content":" filteredTaskList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":208,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":210,"author":{"gitId":"Sheeepen"},"content":" return filteredTaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":211,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":212,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":213,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"Sheeepen"},"content":" * Prints onto the console the number of tasks currently in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":216,"author":{"gitId":"Sheeepen"},"content":" public String getNumTasks() {","lastModifiedDate":"2023-09-10"},{"lineNumber":217,"author":{"gitId":"Sheeepen"},"content":" assert tasks.size() \u003e\u003d 0 : \"task list is empty or not empty\";","lastModifiedDate":"2023-09-15"},{"lineNumber":218,"author":{"gitId":"Sheeepen"},"content":" return \"you now have \" + tasks.size() + \" tasks in your list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":219,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":220}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates a ToDo child class","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * that contains a description.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" * Constructs a ToDo object.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" * Constructs a ToDo object that specifies whether it has been completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" return \"T \" + this.getDoneStatus() + \" \" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":40}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_WELCOME;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_EXIT;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" * This class handles all the user interactions for the Duke application,","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" * responsible for receiving input and displaying output.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" private final Scanner in;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" private final PrintStream out;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Ui object.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Ui object capable of receiving inputs and displaying outputs.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" * @param in A Scanner object that handles input.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" * @param out Logs output onto the console.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" this.out \u003d out;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" * A line divider.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" private static final String LINE_DIVIDER \u003d \"────────────────────────────────────\";","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" * Prints the line divider onto the console.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" public void printLineDivider() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" * Prints the welcome message when the Duke application starts.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" * @param version The current version of Duke implemented.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" public void printWelcomeMessage(String version) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" printToUser(version);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_WELCOME);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" * Prints instructions on how to use the Duke application.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" public void printInstructions() {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_INSTRUCTIONS);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":" * Prints the exit message upon exiting of the Duke application.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" public void printExitMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_EXIT);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" * Prints the correctly formatted output based on the user\u0027s actions.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" * @param text The output.","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" public void printToUser(String text) {","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" out.println(text);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" * Returns true if the user input should be ignored by the application, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" * @return true if ignored, false if not.","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" public boolean shouldIgnoreInput(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" return input.trim().isEmpty();","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":" * Prompts the user to enter an input.","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":" * @return The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":" printLineDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" out.println(\"Please enter command below:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sheeepen"},"content":" String userInput \u003d in.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sheeepen"},"content":" while (shouldIgnoreInput(userInput)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sheeepen"},"content":" userInput \u003d in.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sheeepen"},"content":" return userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":111}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"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":"Sheeepen"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"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":"Sheeepen"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"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\"MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"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":"Sheeepen"},"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":"Sheeepen"},"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":"Sheeepen"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":19}},{"path":"src/test/java/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public void testSetIsDoneMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"marry a hot babe\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" todo.setIsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" assertTrue(todo.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public void testSetIsNotDoneMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" Event event \u003d new Event(\"wedding for hot babe\",","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" true, \"1200\", \"1600\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" event.setIsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" assertFalse(event.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public void testGetDoneStatus() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"book venue\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" assertFalse(todo.getDoneStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public void testGetDescriptionMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" Deadline deadline \u003d new Deadline(\"send out invitations\",","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" \"2023/12/30 23:59\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"send out invitations\", deadline.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" public void testGetStatusMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" ToDo todo1 \u003d new ToDo(\"hire photographers\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" ToDo todo2 \u003d new ToDo(\"hire musicians\", false);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[X]\", todo1.getStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[ ]\", todo2.getStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sheeepen":48}},{"path":"src/test/java/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" public void testConstructorWithDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Eat potato\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"Eat potato\", todo.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" assertFalse(todo.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" public void testConstructorWithDescriptionAndIsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" ToDo todo1 \u003d new ToDo(\"Eat potati\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"Eat potati\", todo1.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" assertTrue(todo1.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public void testToTextMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Watch paint dry\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"T false Watch paint dry\", todo.toText());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public void testToStringMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Sleep\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[T] [X] Sleep\", todo.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sheeepen":38}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"todo eat dinner","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"deadline read book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"event meeting /from 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":8}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" mainClass.set(\"Launcher\")","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"Sheeepen":6}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"D false dd /2023-09-16 18:00","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"T false aa","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":2}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"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":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":60}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" * The Main class for the Duke application.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" * This class initialises a new Duke instance that handles the","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" * control and flow of the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" * Constructs a new Duke object, along with a Storage object and an Ui object.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" public Duke() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" Command c;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" c \u003d parser.parse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" String response \u003d c.execute(tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" storage.save(tasks.getTaskList());","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" return response;","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"-":3,"Sheeepen":40}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":8}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":29}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" private Duke duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/joemama.jpeg\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/kanye.jpeg\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" public void exitApp() {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" int delaySeconds \u003d 2;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" Platform.runLater(() -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" Thread.sleep(delaySeconds * 1000);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"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":48,"author":{"gitId":"Sheeepen"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" if (response.startsWith(\"Bye\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" exitApp();","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":65}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates a command given to the Duke application to run a certain set of instructions.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public interface Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" * Execute the set of instructions based on the Command subclass","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" * @param tasks A TaskList object containing all tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * @return The message to be displayed upon completion.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" abstract String execute(TaskList tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":17}},{"path":"src/main/java/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This child class instructs the application to create a Deadline object","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * to add to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class DeadlineCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" private String endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * Constructs a DeadlineCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * @param endTime","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public DeadlineCommand(String description, String endTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return tasks.addDeadlineTask(description, endTime);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":30}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to delete a task from the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * Constructs a DeleteCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * @param taskNum","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" return tasks.deleteTask(taskNumber);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":26}},{"path":"src/main/java/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This child class instructs the application to create an Event object","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * to add to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class EventCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" private String start;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" private String end;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * Constructs an EventCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" * @param start","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" * @param end","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" public EventCommand(String description, String start, String end) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" return tasks.addEventTask(description, start, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":33}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to exit.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"exit\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE \u003d \"Bye my yeezy. Yeezup #GODDID\";","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" return MESSAGE;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * Checks whether the Command object is an instance of an ExitCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" * @param command","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" * @return true if Command is an ExitCommand, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" return command instanceof ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":27}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to find all tasks that match the keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" private String keyword;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" ArrayList\u003cTask\u003e filteredTaskList \u003d tasks.findByKeyword(keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" for (Task task: filteredTaskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" message +\u003d task.toString() + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Sheeepen":33}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to list the available commands for the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"public class HelpCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" return MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":18}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to list all current tasks in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" return tasks.listTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":16}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to mark a task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * Constructs a MarkCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * @param taskNum","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" public MarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" return tasks.markTaskDone(taskNumber);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":31}},{"path":"src/main/java/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This child class instructs the application to create a ToDo object","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * to add to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class TodoCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Todo object.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * @param input","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public TodoCommand(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d input;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" return tasks.addTodoTask(description);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":27}},{"path":"src/main/java/commands/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" * This class handles all unsupported or unknown commands the user inputs.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"public class UnknownCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"Unknown input! Please type a proper command.\\n\" + MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":19}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class instructs the application to mark a task as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" * Constructs an UnmarkCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * @param taskNum","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" return tasks.unmarkTaskDone(taskNumber);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":32}},{"path":"src/main/java/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package exceptions;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" return \"/ᐠ。ⱉ。ᐟ\\\\ノ OOPS! \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":13}},{"path":"src/main/java/helpers/DateTimeDetection.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package helpers;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" * This helper class detects the input to be either a date, a time, or both.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" * It then correctly formats the string to a LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"public class DateTimeDetection {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" * Returns a LocalDateTime object based in the String input.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * Inputs without a date are set to the date the task was created.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * Inputs without a time are set to 23:59HRS on the day the task was created.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * @param input The user input for date/time.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" * @return A LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" public static LocalDateTime detectDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" if (isDateTime(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" return dateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" } else if (isDate(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" LocalDate date \u003d LocalDate.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" return date.atTime(LocalTime.of(23, 59));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" } else if (isTime(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" LocalTime time \u003d LocalTime.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" return LocalDateTime.of(LocalDate.now(), time);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Invalid format.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" * Determines if the string contains both date and time.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" * @param input","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" * @return true if String contains both date and time, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" public static boolean isDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" LocalDate.parse(input, dateFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" * Determines if the string contains only date.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" * @param input","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" * @return true if String only contains date, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" public static boolean isDate(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":" LocalDate.parse(input, dateFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":" * Determines if the string contains only time.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" * @param input","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" * @return true if String only contains time, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" public static boolean isTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" LocalTime.parse(input, timeFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" * Returns an alternative representation of the LocalDateTime object, in the form of","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" * dd MM yyyy HH:mm","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" * E.g. 20 Oct 2001 18:23","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":" * @param dateTime","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":" * @return String representation of LocalDateTime object.","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" public static String formatDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":" return dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":102}},{"path":"src/main/java/messages/Message.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package messages;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates all the Messages the application will use.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" * It is packaged into its own class for reusability and readability.","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * It is recommended to statically import the specific MESSAGE_{type} that needs to be used.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class Message {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String LOGO \u003d \" OOOO OOOO\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" + \" O O w w O O\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" + \" O O w w w w O O\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" + \" O O w w w w O O\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" + \" OOOO w w OOOO\";","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_WELCOME \u003d","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" \"Hello \u003eu\u003c! I\u0027m OwO_bot\\n\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" + LOGO + \"\\n\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" + \"How can I help today ♥w♥ ?\";","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_EXIT \u003d \"Bye! Hope to see you again soon! x3\";","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_INSTRUCTIONS \u003d","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" \"List of available commands:\\n\" + \"list\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" + \"todo \u003ctask name\u003e\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" + \"deadline \u003ctask name\u003e /by \u003cyyyy-MM-dd HH-mm\u003e\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" + \"event \u003ctask name\u003e /from \u003cyyyy-MM-dd HH-mm\u003e /to \u003cyyyy-MM-dd HH-mm\u003e\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" + \"mark \u003ctask number\u003e\\n\" + \"unmark \u003ctask number\u003e\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" + \"find \u003ctask description\u003e\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" + \"delete \u003ctask number\u003e\\n\" + \"exit\";","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_VERSION \u003d \"NotCrazy ─ a CS2103T iP ─ Week 5 Update\";","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":33}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import commands.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import commands.DeadlineCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import commands.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import commands.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import commands.HelpCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"import commands.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"import commands.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"import commands.TodoCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"import commands.UnknownCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"import commands.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * This class parses the user input to make sense of user commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" * The Parser object then returns Command objects that tell the","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" * application what to do.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" * Returns a Command object based on the user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" * @param userInput","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" * @return A subclass of the Command object.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" public Command parse(String userInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" String commandWord;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" String arguments \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" if (isSingleWord(userInput)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" commandWord \u003d userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" commandWord \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" arguments \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" return prepareTodo(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" return prepareDeadline(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" return prepareEvent(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" return prepareMark(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" return prepareUnmark(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" return prepareDelete(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" return prepareFind(arguments);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" return new HelpCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed for a ToDo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" * @return A ToDoCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" public Command prepareTodo(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" return new TodoCommand(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed for a Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":" * @return A DeadlineCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":" public Command prepareDeadline(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d args.split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" String description \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":" String endTime \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":" return new DeadlineCommand(description, endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed for an Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Sheeepen"},"content":" * @return An EventCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Sheeepen"},"content":" public Command prepareEvent(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d args.split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sheeepen"},"content":" String description \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Sheeepen"},"content":" String startTime \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Sheeepen"},"content":" String endTime \u003d arr[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Sheeepen"},"content":" return new EventCommand(description, startTime, endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed to mark a Task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"Sheeepen"},"content":" * @return A MarkCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"Sheeepen"},"content":" public Command prepareMark(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sheeepen"},"content":" return new MarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed to mark a Task as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"Sheeepen"},"content":" * @return An UnmarkCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"Sheeepen"},"content":" public Command prepareUnmark(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Sheeepen"},"content":" return new UnmarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"Sheeepen"},"content":" * Formats the parameters needed to delete a task.","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"Sheeepen"},"content":" * @param args The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"Sheeepen"},"content":" * @return A DeleteCommand object.","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"Sheeepen"},"content":" public Command prepareDelete(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Sheeepen"},"content":" return new DeleteCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"Sheeepen"},"content":" public Command prepareFind(String args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"Sheeepen"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"Sheeepen"},"content":" * Determines if the input contains only one word, or is more than one word.","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"Sheeepen"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"Sheeepen"},"content":" * @return true if input is one word, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"Sheeepen"},"content":" public boolean isSingleWord(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"Sheeepen"},"content":" return input.matches(\"\\\\b\\\\w+\\\\b\");","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":165}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.io.File;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * This class handles loading and saving user inputs for","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" * continuity between sessions. Inputs are formatted correctly before","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * saved into the file path specified.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" * The file to load from and save into.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" private static final String FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Storage object.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" * Creates the directory and file of the specified file path if it does not already exist.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" public Storage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" File directory \u003d new File(\"data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" createFileIfDoesNotExist(directory, file);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" * Loads the save data from the previous session.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" * @return String representation of the Task objects created in the previous session.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" public String load() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(FILE_PATH));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" content.append(line).append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" return content.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" * Saves the current task list into the specified file path.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" * @param taskList A TaskList object that stores all current tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":" public void save(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" FileWriter writer \u003d new FileWriter(file, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" String content \u003d taskList.get(i).toText();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":" writer.write(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" writer.write(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Updated task list saved under data/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" * Creates the text file to save to if it does not exist.","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" * @param directory The directory containing the file.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" * @param file The file.","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" public void createFileIfDoesNotExist(File directory, File file) {","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":" directory.mkdir();","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":" boolean var \u003d file.createNewFile();","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" assert var \u003d\u003d true : \"var should be true\";","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":108}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import helpers.DateTimeDetection;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates a Deadline child class","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" * that contains a description, and an end date/time.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" * @param end Date or Time, or both, when the Deadline is due.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" public Deadline(String description, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" setDateTime(end);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Deadline object that specifies whether it has been completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" * @param end Date or Time, or both, when the Deadline is due.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" public Deadline(String description, boolean isDone, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" setDateTime(end);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" * Sets the String input of the end date/time to a LocalDateTime","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" * @param input In the form of yyyy-MM-dd HH:mm. Either Date or Time may be omitted but not both.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" public void setDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d DateTimeDetection.detectDateTime(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" return \"D \" + this.getDoneStatus() + \" \"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" + this.description + \" /\"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" + this.end.toString().replace(\"T\", \" \");","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" return \"[D] \" + super.toString()","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" + \" (\" + DateTimeDetection.formatDateTime(this.end) + \")\";","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":60}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates an Event child class","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" * that contains a description, a start date/time and an end date/time.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" protected String start;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" protected String end;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" * Constructs an Event object.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" * @param start start date/time of the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" * @param end end date/time of the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" * Constructs an Event object that specifies whether it has been completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" * @param start start date/time of the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" * @param end end date/time of the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" public Event(String description, boolean isDone, String start, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" return \"E \" + this.getDoneStatus() + \" \" + this.description + \" /\" + this.start + \" /\" + this.end;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" return \"[E] \" + super.toString() + \" (\" + this.start + this.end + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":47}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates an abstract Parent class Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" * that users can create to add to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Task object that specifies whether it has been completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public void setIsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" public void setIsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" public boolean getDoneStatus() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" * Returns a String representation of whether the Task has been completed,","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" * indicated by an \"X\" for completion.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" * @return String representation of completion status.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" return this.isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" * Returns the String representation of the Task object when saved to the Duke.txt file.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" * @return String representation of Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" public abstract String toText();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":" return this.getStatus() + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":69}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates a TaskList that stores all the Task objects","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" * the user has created, and handles updating of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" * Constructs a TaskList object with an empty task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" * Constructs a TaskList object that creates Task objects and","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" * stores them in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" * @param content A String containing information of the Task objects to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" public TaskList(String content) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" addTextToTask(content);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" * Converts the String to Task objects to be added to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" * @param content A String containing information of the Task objects to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" public void addTextToTask(String content) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" String[] lines \u003d content.split(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" for (String line: lines) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" String[] parts \u003d line.split(\" \", 3);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" if (parts[0].equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" ToDo task \u003d new ToDo(parts[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" } else if (parts[0].equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d parts[2].split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" Deadline task \u003d new Deadline(arr[0], arr[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d parts[2].split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" Event task \u003d new Event(arr[0], arr[1], arr[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" return this.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" * Prints onto the console all tasks on the current task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" * @return The message to be displayed upon completion.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" assert (tasks.size() \u003e\u003d 0);","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"There\u0027s nothing in your list\";","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" message +\u003d ((i + 1) + \". \" + tasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" * Sets a particular task to \u0027Done\u0027 status.","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" * @param taskNumber The task to be set to \u0027Done\u0027 based on the order of the task list. Starts at 1.","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" * @return The message to be displayed upon completion.","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":" * @throws IndexOutOfBoundsException When the taskNumber does not exist.","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":" public String markTaskDone(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1).setIsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"That\u0027s the hustle ye. You is good on this task:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"Sheeepen"},"content":" + tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Sheeepen"},"content":" * Sets a particular task to \u0027Not Done\u0027 status.","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Sheeepen"},"content":" * @param taskNumber The task to be set to \u0027Not Done\u0027 based on the order of the task list. Starts at 1.","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Sheeepen"},"content":" * @return The message to be displayed upon completion.","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"Sheeepen"},"content":" * @throws IndexOutOfBoundsException When the taskNumber does not exist.","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"Sheeepen"},"content":" public String unmarkTaskDone(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1).setIsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"Ok... Guess you\u0027re not actually done with this:\\n\" + tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"Sheeepen"},"content":" * Deletes a Task from the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"Sheeepen"},"content":" * @param taskNumber The task to be set to deleted based on the order of the task list. Starts at 1.","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"Sheeepen"},"content":" * @return The message to be displayed upon completion.","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"Sheeepen"},"content":" * @throws IndexOutOfBoundsException When the taskNumber does not exist.","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"Sheeepen"},"content":" public String deleteTask(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Sheeepen"},"content":" Task removedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Sheeepen"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"banished this task to the shadow realm:\\n\" + removedTask + \"\\n\" + getNumTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"Sheeepen"},"content":" * Adds a ToDo task object to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"Sheeepen"},"content":" * @param description Description of the ToDo object.","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"Sheeepen"},"content":" * @return The message to be displayed upon completion.","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"Sheeepen"},"content":" public String addTodoTask(String description) {","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"added new task:\\n\" + todo + \"\\n\" + getNumTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"Sheeepen"},"content":" * Adds a Deadline task object to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"Sheeepen"},"content":" * @param description Description of the Deadline object.","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"Sheeepen"},"content":" * @param end end Date/Time of the Deadline object.","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"Sheeepen"},"content":" * @return The message to be displayed upon completion.","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"Sheeepen"},"content":" public String addDeadlineTask(String description, String end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"Sheeepen"},"content":" Deadline deadline \u003d new Deadline(description, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"added new task:\\n\" + deadline + \"\\n\" + getNumTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"Sheeepen"},"content":" * Adds an Event task object to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"Sheeepen"},"content":" * @param description Description of the Event object.","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"Sheeepen"},"content":" * @param start start Date/Time of the Event object.","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"Sheeepen"},"content":" * @param end end Date/Time of the Event object.","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"Sheeepen"},"content":" * @return The message to be displayed upon completion.","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"Sheeepen"},"content":" public String addEventTask(String description, String start, String end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"Sheeepen"},"content":" Event event \u003d new Event(description, start, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"Sheeepen"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"Sheeepen"},"content":" message +\u003d \"added new task:\\n\" + event + \"\\n\" + getNumTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"Sheeepen"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":210,"author":{"gitId":"Sheeepen"},"content":" * Searches the Task List by the task description, according to the keyword given.","lastModifiedDate":"2023-09-16"},{"lineNumber":211,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":212,"author":{"gitId":"Sheeepen"},"content":" * @param keyword The keyword to search by.","lastModifiedDate":"2023-09-16"},{"lineNumber":213,"author":{"gitId":"Sheeepen"},"content":" * @return The filtered task list containing only tasks with their descriptions matching the keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":214,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"Sheeepen"},"content":" public ArrayList\u003cTask\u003e findByKeyword(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":216,"author":{"gitId":"Sheeepen"},"content":" ArrayList\u003cTask\u003e filteredTaskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":217,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":218,"author":{"gitId":"Sheeepen"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":219,"author":{"gitId":"Sheeepen"},"content":" String taskDescription \u003d task.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":220,"author":{"gitId":"Sheeepen"},"content":" if (taskDescription.contains(keyword)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":221,"author":{"gitId":"Sheeepen"},"content":" filteredTaskList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":222,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":223,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":224,"author":{"gitId":"Sheeepen"},"content":" return filteredTaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":225,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":226,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":227,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":228,"author":{"gitId":"Sheeepen"},"content":" * Prints onto the console the number of tasks currently in the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":229,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":230,"author":{"gitId":"Sheeepen"},"content":" * @return The message to be displayed upon completion.","lastModifiedDate":"2023-09-16"},{"lineNumber":231,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"Sheeepen"},"content":" public String getNumTasks() {","lastModifiedDate":"2023-09-10"},{"lineNumber":233,"author":{"gitId":"Sheeepen"},"content":" assert tasks.size() \u003e\u003d 0 : \"task list is empty or not empty\";","lastModifiedDate":"2023-09-15"},{"lineNumber":234,"author":{"gitId":"Sheeepen"},"content":" return \"you now have \" + tasks.size() + \" tasks in your list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":235,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":236}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":" * This class encapsulates a ToDo child class","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" * that contains a description.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" * Constructs a ToDo object.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" * Constructs a ToDo object that specifies whether it has been completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" * @param description","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" * @param isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" return \"T \" + this.getDoneStatus() + \" \" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":38}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_EXIT;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_WELCOME;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" * This class handles all the user interactions for the Duke application,","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" * responsible for receiving input and displaying output.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" private static final String LINE_DIVIDER \u003d \"────────────────────────────────────\";","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" private final Scanner in;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" private final PrintStream out;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Ui object.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" * Constructs a Ui object capable of receiving inputs and displaying outputs.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" * @param in A Scanner object that handles input.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" * @param out Logs output onto the console.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" this.out \u003d out;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" * Prints the line divider onto the console.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" public void printLineDivider() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" * Prints the welcome message when the Duke application starts.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" * @param version The current version of Duke implemented.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" public void printWelcomeMessage(String version) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" printToUser(version);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_WELCOME);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" * Prints instructions on how to use the Duke application.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" public void printInstructions() {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_INSTRUCTIONS);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" * Prints the exit message upon exiting of the Duke application.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":" public void printExitMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_EXIT);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" * Prints the correctly formatted output based on the user\u0027s actions.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" * @param text The output.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" public void printToUser(String text) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" out.println(text);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" * Returns true if the user input should be ignored by the application, false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" * @return true if ignored, false if not.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" public boolean shouldIgnoreInput(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":" return input.trim().isEmpty();","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" * Prompts the user to enter an input.","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":" * @return The user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" printLineDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":" out.println(\"Please enter command below:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" String userInput \u003d in.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sheeepen"},"content":" while (shouldIgnoreInput(userInput)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sheeepen"},"content":" userInput \u003d in.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Sheeepen"},"content":" return userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":109}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"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":"Sheeepen"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"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":"Sheeepen"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"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\"MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"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":"Sheeepen"},"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":"Sheeepen"},"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":"Sheeepen"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sheeepen":19}},{"path":"src/test/java/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public void testSetIsDoneMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"marry a hot babe\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" todo.setIsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" assertTrue(todo.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public void testSetIsNotDoneMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" Event event \u003d new Event(\"wedding for hot babe\",","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" true, \"1200\", \"1600\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" event.setIsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" assertFalse(event.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public void testGetDoneStatus() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"book venue\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" assertFalse(todo.getDoneStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public void testGetDescriptionMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" Deadline deadline \u003d new Deadline(\"send out invitations\",","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" \"2023/12/30 23:59\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"send out invitations\", deadline.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" public void testGetStatusMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" ToDo todo1 \u003d new ToDo(\"hire photographers\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" ToDo todo2 \u003d new ToDo(\"hire musicians\", false);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[X]\", todo1.getStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[ ]\", todo2.getStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sheeepen":48}},{"path":"src/test/java/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" public void testConstructorWithDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Eat potato\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"Eat potato\", todo.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" assertFalse(todo.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" public void testConstructorWithDescriptionAndIsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" ToDo todo1 \u003d new ToDo(\"Eat potati\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"Eat potati\", todo1.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" assertTrue(todo1.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public void testToTextMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Watch paint dry\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"T false Watch paint dry\", todo.toText());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public void testToStringMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Sleep\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[T] [X] Sleep\", todo.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sheeepen":38}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"todo eat dinner","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"deadline read book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"event meeting /from 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":8}}] diff --git a/Sheeepen_ip_master/commits.json b/Sheeepen_ip_master/commits.json index 230fef58..da034109 100644 --- a/Sheeepen_ip_master/commits.json +++ b/Sheeepen_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Sheeepen":[{"date":"2023-08-23","commitResults":[{"hash":"d3a170072c64d563ea8f9153eabb5c11f649ca7d","isMergeCommit":false,"messageTitle":"added welcome and exit message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"36ea0f84da02cf58b8db22b726fcd4c941c30e62","isMergeCommit":false,"messageTitle":"added echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":8}}},{"hash":"4efea27fff98e7b9a2f55697b91301ab1000035d","isMergeCommit":false,"messageTitle":"added list functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"6c1e6a71c317f047c84b533ceb67781727edd0a7","isMergeCommit":false,"messageTitle":"added Task class and functionality","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":8}}},{"hash":"1e9edabeb46485a3c4d9bd717fd90b9410c1addb","isMergeCommit":false,"messageTitle":"added Task subclasses","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":8}}},{"hash":"fd1b9fec5cc40ae1537e8f02e4f512fd615d87d7","isMergeCommit":false,"messageTitle":"added automated text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"ec0f44b891f46c1b28f08c149b4fc175f32b5452","isMergeCommit":false,"messageTitle":"refactored code and added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":91}}},{"hash":"45b9e82fe74b5af7e2a2af6c0bb21839854bce76","isMergeCommit":false,"messageTitle":"added delete task functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":22}}}]},{"date":"2023-08-31","commitResults":[{"hash":"202c85d2624a87c087193e1ac30cec627ebfe28c","isMergeCommit":false,"messageTitle":"Add save function, user can retrieve list from previous session","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":163,"deletions":24}}},{"hash":"0fa0c49f1b29f3d8836685f337ad736b289b4c91","isMergeCommit":true,"messageTitle":"merge branch-level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"26da5a396b8d9a0028e28e8c9557a2c002dae08a","isMergeCommit":false,"messageTitle":"Add LocalDateTime support to Deadline class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":83,"deletions":5}}},{"hash":"4b5d4bf7ba8ebb5a394c7adc2eecc7e351b897a2","isMergeCommit":true,"messageTitle":"merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"45b4505069f0038da67e1982fc9f2c328fd56307","isMergeCommit":false,"messageTitle":"Add Storage class, handles load and save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":127,"deletions":95}}},{"hash":"2730bcd3cacf8c4b6c3a0d7696fad6e1574799ff","isMergeCommit":false,"messageTitle":"Reorganise Duke.java logic","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":12,"deletions":2}}},{"hash":"d0c289b05a7fac5aebbe7a3f69eef9221502bdb5","isMergeCommit":false,"messageTitle":"Add Ui class to handle user interactions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":66,"deletions":30}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d24e599cc456e5c016d8d39e759909a92b79361f","isMergeCommit":false,"messageTitle":"Add Parser and Command classes and sub-classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":512,"deletions":223}}},{"hash":"3c3f3f889fd0b8b1493a0f8b63db1ae9d60c6a20","isMergeCommit":true,"messageTitle":"merge branch-A-MoreOOP","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"a58f6fbff845e5b337acc48f40ee6043a455892d","isMergeCommit":false,"messageTitle":"edit duke.txt file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"636eb177b58ffc93bb290ea7163aaec0eb800070","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027 into add-gradle-support merge add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"bf86cc1062288604a640c349cabdd0d582ff4dbe","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 merge add-gradle-support branch","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"04188510caf995596fbf26e0546d2da19523941e","isMergeCommit":false,"messageTitle":"Add JUnit tests for Task and ToDo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":1}}},{"hash":"3a12ebcf25207fc0819c9332ac35a23e2ff278d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027 merge JUnit tests branch","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"8ee37778a8d8b2c90734de2bbb2955031506bb85","isMergeCommit":false,"messageTitle":"update build.gradle for shadowJar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"091d99ec071ae540c8f1ec129194c81d5097853a","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":406,"deletions":3}}},{"hash":"5df00f011fabff380ce0bd9e9b22b50d656d80b4","isMergeCommit":false,"messageTitle":"Change import lines to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"db4c804ac5629004702c3c09c97641a299a02824","isMergeCommit":false,"messageTitle":"Add search functionality, fix isSingleWord function bug","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":50,"deletions":1}}},{"hash":"6f93b7cfbd132c05ffca72ef838c3509b9e89f2b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 merge JavaDocs branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"976ef0dba5925dc4bf60c4ca386eae1fd6c08a35","isMergeCommit":true,"messageTitle":"resolve merge conflicts","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"fcb06be2fe8fccbe8bad863eebc4c0344e3b4396","isMergeCommit":false,"messageTitle":"edit duke.txt file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"ab3434423a57f95420c0b54e5ea21e7855d377ae","isMergeCommit":false,"messageTitle":"add checkstyle functionality","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"b5899cd6b95b0a16c226a8b5d8d2d1b4845e9837","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027 merge checkstyle branch","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"c92ec5eb2e929d0d671dd743c8e6e0b48c01ca5c","isMergeCommit":false,"messageTitle":"edit application entry point","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-10","commitResults":[{"hash":"29ef3b13928d0b57c9154f42ac0370dc55417a9a","isMergeCommit":false,"messageTitle":"Add GUI application with JavaFX","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":275,"deletions":100}}},{"hash":"b6452c2c6bb23221496b9c57ac02370a396a009c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027 merge branch level 10","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"375106f8daa8e4294892c1a05bdaac1890e22376","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"a905bb0219ebee3a50d274a92f7c6aec6bfda4f9","isMergeCommit":true,"messageTitle":"Merge pull request #5 from Sheeepen/A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Sheeepen":{"java":1566,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":6,"txt":10}},"authorContributionVariance":{"Sheeepen":42227.406},"authorDisplayNameMap":{"Sheeepen":"CS2103T-W13-4 STEP..G XI"}} +{"authorDailyContributionsMap":{"Sheeepen":[{"date":"2023-08-23","commitResults":[{"hash":"d3a170072c64d563ea8f9153eabb5c11f649ca7d","isMergeCommit":false,"messageTitle":"added welcome and exit message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"36ea0f84da02cf58b8db22b726fcd4c941c30e62","isMergeCommit":false,"messageTitle":"added echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":8}}},{"hash":"4efea27fff98e7b9a2f55697b91301ab1000035d","isMergeCommit":false,"messageTitle":"added list functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"6c1e6a71c317f047c84b533ceb67781727edd0a7","isMergeCommit":false,"messageTitle":"added Task class and functionality","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":8}}},{"hash":"1e9edabeb46485a3c4d9bd717fd90b9410c1addb","isMergeCommit":false,"messageTitle":"added Task subclasses","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":8}}},{"hash":"fd1b9fec5cc40ae1537e8f02e4f512fd615d87d7","isMergeCommit":false,"messageTitle":"added automated text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"ec0f44b891f46c1b28f08c149b4fc175f32b5452","isMergeCommit":false,"messageTitle":"refactored code and added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":91}}},{"hash":"45b9e82fe74b5af7e2a2af6c0bb21839854bce76","isMergeCommit":false,"messageTitle":"added delete task functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":22}}}]},{"date":"2023-08-31","commitResults":[{"hash":"202c85d2624a87c087193e1ac30cec627ebfe28c","isMergeCommit":false,"messageTitle":"Add save function, user can retrieve list from previous session","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":163,"deletions":24}}},{"hash":"0fa0c49f1b29f3d8836685f337ad736b289b4c91","isMergeCommit":true,"messageTitle":"merge branch-level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"26da5a396b8d9a0028e28e8c9557a2c002dae08a","isMergeCommit":false,"messageTitle":"Add LocalDateTime support to Deadline class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":83,"deletions":5}}},{"hash":"4b5d4bf7ba8ebb5a394c7adc2eecc7e351b897a2","isMergeCommit":true,"messageTitle":"merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"45b4505069f0038da67e1982fc9f2c328fd56307","isMergeCommit":false,"messageTitle":"Add Storage class, handles load and save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":127,"deletions":95}}},{"hash":"2730bcd3cacf8c4b6c3a0d7696fad6e1574799ff","isMergeCommit":false,"messageTitle":"Reorganise Duke.java logic","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":12,"deletions":2}}},{"hash":"d0c289b05a7fac5aebbe7a3f69eef9221502bdb5","isMergeCommit":false,"messageTitle":"Add Ui class to handle user interactions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":66,"deletions":30}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d24e599cc456e5c016d8d39e759909a92b79361f","isMergeCommit":false,"messageTitle":"Add Parser and Command classes and sub-classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":512,"deletions":223}}},{"hash":"3c3f3f889fd0b8b1493a0f8b63db1ae9d60c6a20","isMergeCommit":true,"messageTitle":"merge branch-A-MoreOOP","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"a58f6fbff845e5b337acc48f40ee6043a455892d","isMergeCommit":false,"messageTitle":"edit duke.txt file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"636eb177b58ffc93bb290ea7163aaec0eb800070","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027 into add-gradle-support merge add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"bf86cc1062288604a640c349cabdd0d582ff4dbe","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 merge add-gradle-support branch","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"04188510caf995596fbf26e0546d2da19523941e","isMergeCommit":false,"messageTitle":"Add JUnit tests for Task and ToDo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":1}}},{"hash":"3a12ebcf25207fc0819c9332ac35a23e2ff278d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027 merge JUnit tests branch","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"8ee37778a8d8b2c90734de2bbb2955031506bb85","isMergeCommit":false,"messageTitle":"update build.gradle for shadowJar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"091d99ec071ae540c8f1ec129194c81d5097853a","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":406,"deletions":3}}},{"hash":"5df00f011fabff380ce0bd9e9b22b50d656d80b4","isMergeCommit":false,"messageTitle":"Change import lines to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"db4c804ac5629004702c3c09c97641a299a02824","isMergeCommit":false,"messageTitle":"Add search functionality, fix isSingleWord function bug","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":50,"deletions":1}}},{"hash":"6f93b7cfbd132c05ffca72ef838c3509b9e89f2b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 merge JavaDocs branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"976ef0dba5925dc4bf60c4ca386eae1fd6c08a35","isMergeCommit":true,"messageTitle":"resolve merge conflicts","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"fcb06be2fe8fccbe8bad863eebc4c0344e3b4396","isMergeCommit":false,"messageTitle":"edit duke.txt file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"ab3434423a57f95420c0b54e5ea21e7855d377ae","isMergeCommit":false,"messageTitle":"add checkstyle functionality","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"b5899cd6b95b0a16c226a8b5d8d2d1b4845e9837","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027 merge checkstyle branch","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"c92ec5eb2e929d0d671dd743c8e6e0b48c01ca5c","isMergeCommit":false,"messageTitle":"edit application entry point","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-10","commitResults":[{"hash":"29ef3b13928d0b57c9154f42ac0370dc55417a9a","isMergeCommit":false,"messageTitle":"Add GUI application with JavaFX","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":275,"deletions":100}}},{"hash":"b6452c2c6bb23221496b9c57ac02370a396a009c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027 merge branch level 10","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"375106f8daa8e4294892c1a05bdaac1890e22376","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"a905bb0219ebee3a50d274a92f7c6aec6bfda4f9","isMergeCommit":true,"messageTitle":"Merge pull request #5 from Sheeepen/A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"e7b846a0104fcddbd780b02f7182862c06e54507","isMergeCommit":false,"messageTitle":"Change Command to abstract class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":5}}},{"hash":"8f823fa6654ea6dde52ddbc4399cb23f361ebdbe","isMergeCommit":false,"messageTitle":"Change Command to an Interface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":16}}},{"hash":"f2168b6586eed2e04d9ff9db6f4af717a163790e","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":19,"deletions":31}}},{"hash":"86411bfcc79882f60949e2d79a523463ab4e5551","isMergeCommit":false,"messageTitle":"Fix styling issues","messageBody":"","tags":["A-FullCommitMessage","A-CodeQuality","A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":50}}},{"hash":"88e0397d8486bcd4b8186edf96e0f3260017a3fa","isMergeCommit":true,"messageTitle":"Merge pull request #7 from Sheeepen/branch-A-CodeQuality","messageBody":"Merge branch-A-CodeQuality","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Sheeepen":{"java":1577,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":6,"txt":10}},"authorContributionVariance":{"Sheeepen":41258.32},"authorDisplayNameMap":{"Sheeepen":"CS2103T-W13-4 STEP..G XI"}} diff --git a/SynapseProgramming_ip_master/authorship.json b/SynapseProgramming_ip_master/authorship.json index 84817e83..1bab8d16 100644 --- a/SynapseProgramming_ip_master/authorship.json +++ b/SynapseProgramming_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SynapseProgramming":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":"SynapseProgramming"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-11"},{"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":"SynapseProgramming"},"content":" implementation \u0027com.fasterxml.jackson.core:jackson-core:2.12.3\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" implementation \u0027com.fasterxml.jackson.core:jackson-databind:2.12.3\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" implementation \u0027com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","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":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" mainClass.set(\"fxgui.Launcher\")","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" archiveBaseName \u003d \"kimochiusagi\"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":"checkstyle {","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"SynapseProgramming":24,"-":40}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.List;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import exceptions.ParserException;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import io.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import io.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" * The Duke class is the main entrypoint for the chatbot. It contains the main logic.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" * Creates a Duke object, which is the main entrypoint for the chatbot.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" public Duke() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" this.storage \u003d new Storage(this.taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" storage.loadTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to list all tasks","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" public void listTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"list is empty!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" String index \u003d Integer.toString(i + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" Task selectedTask \u003d taskList.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(index + \" \" + ui.displayTask(selectedTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to unmark a task","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" // set current task as un-done","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" Task selectedTask \u003d taskList.get(parser.getIndex());","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" selectedTask.setUnDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" ui.displayAction(\"Marked selected task as un-done desu\", selectedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a valid index!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to mark a task as done.","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" public void markTaskAsDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":" // set current task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":" Task selectedTask \u003d taskList.get(parser.getIndex());","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"SynapseProgramming"},"content":" selectedTask.setDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"SynapseProgramming"},"content":" ui.displayAction(\"Marked selected task as done\", selectedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a valid index!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to add a todo task","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"SynapseProgramming"},"content":" public void addTodo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"SynapseProgramming"},"content":" Task curentTask \u003d new Todo(parser.getTaskName());","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"SynapseProgramming"},"content":" taskList.add(curentTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"added:\\t\" + ui.displayTask(curentTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"SynapseProgramming"},"content":" } catch (StringIndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a name after the todo command!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to add a deadline","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"SynapseProgramming"},"content":" public void addDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"SynapseProgramming"},"content":" Task curentTask \u003d parser.parseDeadline();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"SynapseProgramming"},"content":" taskList.add(curentTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"added:\\t\" + ui.displayTask(curentTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ParserException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(ex.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to add an event","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"SynapseProgramming"},"content":" public void addEvent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"SynapseProgramming"},"content":" Task curentTask \u003d parser.parseEvent();","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"SynapseProgramming"},"content":" taskList.add(curentTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"added:\\t\" + ui.displayTask(curentTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ParserException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(ex.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to delete a task","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"SynapseProgramming"},"content":" public void deleteTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"SynapseProgramming"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"The list is empty!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"SynapseProgramming"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"SynapseProgramming"},"content":" // remove the current task","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"SynapseProgramming"},"content":" Task selectedTask \u003d taskList.get(parser.getIndex());","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"SynapseProgramming"},"content":" taskList.remove(parser.getIndex());","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"SynapseProgramming"},"content":" ui.displayAction(\"Deleting selected task!\", selectedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a valid index!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to find a task","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"SynapseProgramming"},"content":" public void findTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"finding task!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d parser.getTaskName();","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"SynapseProgramming"},"content":" List\u003cTask\u003e tasks \u003d taskList.findTasks(name);","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Found:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":153,"author":{"gitId":"SynapseProgramming"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"SynapseProgramming"},"content":" String index \u003d Integer.toString(i + 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"SynapseProgramming"},"content":" Task selectedTask \u003d tasks.get(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(index + \" \" + ui.displayTask(selectedTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":158,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":162,"author":{"gitId":"SynapseProgramming"},"content":" * Displays greetings text","lastModifiedDate":"2023-09-12"},{"lineNumber":163,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":164,"author":{"gitId":"SynapseProgramming"},"content":" public String start() {","lastModifiedDate":"2023-09-06"},{"lineNumber":165,"author":{"gitId":"SynapseProgramming"},"content":" ui.displayGreetings();","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"SynapseProgramming"},"content":" return ui.getPrintStatement();","lastModifiedDate":"2023-09-06"},{"lineNumber":167,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":168,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":169,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":170,"author":{"gitId":"SynapseProgramming"},"content":" * Main function decides what to do based on the users input.","lastModifiedDate":"2023-09-12"},{"lineNumber":171,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":172,"author":{"gitId":"SynapseProgramming"},"content":" * @param input a string that the user has entered","lastModifiedDate":"2023-09-12"},{"lineNumber":173,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":174,"author":{"gitId":"SynapseProgramming"},"content":" public void run(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":175,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":176,"author":{"gitId":"SynapseProgramming"},"content":" parser.update(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":177,"author":{"gitId":"SynapseProgramming"},"content":" // there is no input","lastModifiedDate":"2023-09-06"},{"lineNumber":178,"author":{"gitId":"SynapseProgramming"},"content":" switch (parser.getCommandString()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"SynapseProgramming"},"content":" case \"bye\":","lastModifiedDate":"2023-08-22"},{"lineNumber":180,"author":{"gitId":"SynapseProgramming"},"content":" ui.displayGoodbye();","lastModifiedDate":"2023-09-06"},{"lineNumber":181,"author":{"gitId":"SynapseProgramming"},"content":" storage.saveTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":182,"author":{"gitId":"SynapseProgramming"},"content":" Platform.exit();","lastModifiedDate":"2023-09-06"},{"lineNumber":183,"author":{"gitId":"SynapseProgramming"},"content":" System.exit(0);","lastModifiedDate":"2023-09-06"},{"lineNumber":184,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":185,"author":{"gitId":"SynapseProgramming"},"content":" case \"list\":","lastModifiedDate":"2023-08-22"},{"lineNumber":186,"author":{"gitId":"SynapseProgramming"},"content":" listTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":188,"author":{"gitId":"SynapseProgramming"},"content":" case \"mark\": {","lastModifiedDate":"2023-08-22"},{"lineNumber":189,"author":{"gitId":"SynapseProgramming"},"content":" markTaskAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":191,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":192,"author":{"gitId":"SynapseProgramming"},"content":" case \"unmark\": {","lastModifiedDate":"2023-08-22"},{"lineNumber":193,"author":{"gitId":"SynapseProgramming"},"content":" unmarkTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":195,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":196,"author":{"gitId":"SynapseProgramming"},"content":" case \"todo\": {","lastModifiedDate":"2023-08-22"},{"lineNumber":197,"author":{"gitId":"SynapseProgramming"},"content":" addTodo();","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":199,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":200,"author":{"gitId":"SynapseProgramming"},"content":" case \"deadline\": {","lastModifiedDate":"2023-08-22"},{"lineNumber":201,"author":{"gitId":"SynapseProgramming"},"content":" addDeadline();","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":203,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":204,"author":{"gitId":"SynapseProgramming"},"content":" case \"event\": {","lastModifiedDate":"2023-08-23"},{"lineNumber":205,"author":{"gitId":"SynapseProgramming"},"content":" addEvent();","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":207,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":208,"author":{"gitId":"SynapseProgramming"},"content":" case \"delete\": {","lastModifiedDate":"2023-08-24"},{"lineNumber":209,"author":{"gitId":"SynapseProgramming"},"content":" deleteTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":211,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":212,"author":{"gitId":"SynapseProgramming"},"content":" case \"find\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":213,"author":{"gitId":"SynapseProgramming"},"content":" findTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":214,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":215,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"SynapseProgramming"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":217,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a suitable task!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":218,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":219,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":220,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":221,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":222,"author":{"gitId":"SynapseProgramming"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":223,"author":{"gitId":"SynapseProgramming"},"content":" run(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":224,"author":{"gitId":"SynapseProgramming"},"content":" return ui.getPrintStatement();","lastModifiedDate":"2023-09-06"},{"lineNumber":225,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"SynapseProgramming":224,"-":2}},{"path":"src/main/java/exceptions/ParserException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":" * The ParserException is thrown whenever there is some parsing error from the Parser object","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"public class ParserException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":" public ParserException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" public ParserException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SynapseProgramming":17}},{"path":"src/main/java/fxgui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package fxgui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" * An example of a custom control using FXML. This control represents a dialog box consisting of an","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" * ImageView to represent the speaker\u0027s face and a label containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SynapseProgramming":62}},{"path":"src/main/java/fxgui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package fxgui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"SynapseProgramming":14}},{"path":"src/main/java/fxgui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package fxgui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"SynapseProgramming":35}},{"path":"src/main/java/fxgui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package fxgui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/noodles.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/usagi.jpeg\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(duke.start(), dukeImage));","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" * then appends them to the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"SynapseProgramming":58}},{"path":"src/main/java/io/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package io;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import exceptions.ParserException;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" * The Parser class handles user input from the command line.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" private String inputString;","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" private String[] inputTokens;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" * Creates a Parser object, which handles text based user inputs and outputs","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" public Parser() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" inputTokens \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" inputString \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" * Waits for new input from the command line and updates internal variables.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" * @throws NoSuchElementException If no further input is available.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" public void update() throws NoSuchElementException {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" inputString \u003d scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" inputTokens \u003d inputString.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" * updates the internal input string function","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" public void update(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" inputString \u003d input;","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" inputTokens \u003d inputString.split(\" \");","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" * Returns the currently stored input string.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" * @return The stored input string.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" public String getInputString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" return this.inputString;","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" * Returns the current input tokens stored in the parser.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" * @return An array of input tokens.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":" public String[] getInputTokens() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":" return this.inputTokens;","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":" * Returns an integer that the user has input after a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":" * @return The integer input by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" * @throws IndexOutOfBoundsException If the index is not within bounds.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":" public int getIndex() throws IndexOutOfBoundsException {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":" String input \u003d inputTokens[1];","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"SynapseProgramming"},"content":" assert input.matches(\"-?\\\\d+\") : \"Non-numeric string entered!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"SynapseProgramming"},"content":" int index \u003d Integer.parseInt(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"SynapseProgramming"},"content":" index--;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"SynapseProgramming"},"content":" return index;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"SynapseProgramming"},"content":" * Parses the user\u0027s input and returns a Deadline task if the input is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"SynapseProgramming"},"content":" * @return A Deadline task parsed from the user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"SynapseProgramming"},"content":" * @throws ParserException If the input is not valid for parsing.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"SynapseProgramming"},"content":" public Deadline parseDeadline() throws ParserException {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"SynapseProgramming"},"content":" Deadline result \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"SynapseProgramming"},"content":" String taskName \u003d this.getTaskName();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"SynapseProgramming"},"content":" String[] parts \u003d taskName.split(\"/by\", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"SynapseProgramming"},"content":" String endDate \u003d parts[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"SynapseProgramming"},"content":" endDate \u003d endDate.replace(\" \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"SynapseProgramming"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"SynapseProgramming"},"content":" LocalDate date \u003d LocalDate.parse(endDate, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"SynapseProgramming"},"content":" result \u003d new Deadline(name, date);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ArrayIndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(\"Please include a (/by) command, followed by a date\");","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"SynapseProgramming"},"content":" } catch (StringIndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"SynapseProgramming"},"content":" \"Please enter a name, followed by a (/by) command, followed by a date\");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"SynapseProgramming"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(\"Please enter a time format as dd/MM/yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"SynapseProgramming"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"SynapseProgramming"},"content":" * Parses the user\u0027s input and returns an Event object if the input is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"SynapseProgramming"},"content":" * @return An Event object parsed from the user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"SynapseProgramming"},"content":" * @throws ParserException If the input is not valid for parsing.","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"SynapseProgramming"},"content":" public Event parseEvent() throws ParserException {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"SynapseProgramming"},"content":" Event result \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"SynapseProgramming"},"content":" String taskName \u003d this.getTaskName();","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"SynapseProgramming"},"content":" String[] parts \u003d taskName.split(\"/from\", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"SynapseProgramming"},"content":" String dates \u003d parts[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"SynapseProgramming"},"content":" String[] datesplit \u003d dates.split(\"/to\", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"SynapseProgramming"},"content":" String startDate \u003d datesplit[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"SynapseProgramming"},"content":" String endDate \u003d datesplit[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"SynapseProgramming"},"content":" result \u003d new Event(name, startDate, endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"SynapseProgramming"},"content":" } catch (StringIndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(\"The event command cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ArrayIndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"SynapseProgramming"},"content":" \"Please enter a name, followed by a (/from) command, \"","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"SynapseProgramming"},"content":" + \"followed by a date, \"","lastModifiedDate":"2023-09-12"},{"lineNumber":142,"author":{"gitId":"SynapseProgramming"},"content":" + \"followed by a (/to) command and a date\");","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"SynapseProgramming"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"SynapseProgramming"},"content":" * Returns the user\u0027s input command.","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"SynapseProgramming"},"content":" * @return The input command as a string.","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"SynapseProgramming"},"content":" public String getCommandString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"SynapseProgramming"},"content":" if (inputTokens.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"SynapseProgramming"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"SynapseProgramming"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"SynapseProgramming"},"content":" return inputTokens[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"SynapseProgramming"},"content":" * Returns the task name that the user has input.","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"SynapseProgramming"},"content":" * @return The task name as a string.","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"SynapseProgramming"},"content":" public String getTaskName() {","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"SynapseProgramming"},"content":" String commandString \u003d this.getCommandString();","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"SynapseProgramming"},"content":" int commandLength \u003d commandString.length() + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"SynapseProgramming"},"content":" return inputString.substring(commandLength);","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"SynapseProgramming"},"content":" * Checks if the user has entered any input.","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"SynapseProgramming"},"content":" * @return true if there is input, false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"SynapseProgramming"},"content":" public boolean isInputThere() {","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"SynapseProgramming"},"content":" return inputTokens.length \u003d\u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"SynapseProgramming":183}},{"path":"src/main/java/io/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package io;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" * The Ui class displays information to the user","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" private ArrayList\u003cString\u003e printArray;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" public Ui() {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" printArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" * Adds input string to the print array.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" * @param input the String to add to the print array","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" public void addPrintStatement(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" printArray.add(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" * Returns everything in the print array as a single string. Also resets the print array","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" * @return A string representing the output from duke.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" public String getPrintStatement() {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" for (String x : printArray) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" output.append(x).append(\"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" printArray.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" * Displays the greeting message to the user","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" public void displayGreetings() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" String greeting \u003d \"Hello! I\u0027m KimochiUsagi (きもち うさぎ)!\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" String info \u003d \"Ask the bunny a question!\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" addPrintStatement(greeting);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" addPrintStatement(info);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" * Displays a message and the display of a given Task one after the other.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" * @param task The Task object whose display will be shown.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" public void displayAction(String message, Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":" addPrintStatement(message);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":" addPrintStatement(displayTask(task));","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":" * Displays the goodbye text.","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":" public void displayGoodbye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":" String goodbye \u003d \"Bye. See you again! (またね)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":" addPrintStatement(goodbye);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"SynapseProgramming"},"content":" * Generates and returns the appropriate display string for the given Task object, based on its","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"SynapseProgramming"},"content":" * subtype.","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"SynapseProgramming"},"content":" * @param task The Task object for which to generate the display.","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"SynapseProgramming"},"content":" * @return The display string representing the given task.","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"SynapseProgramming"},"content":" public String displayTask(Task task) {","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"SynapseProgramming"},"content":" String answer \u003d \"\";","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"SynapseProgramming"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"SynapseProgramming"},"content":" answer \u003d","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"SynapseProgramming"},"content":" \"[\" + Todo.TASK_TYPE + \"]\" + \"[\" + task.getDoneIcon() + \"] \" + task.getDescription();","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"SynapseProgramming"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"SynapseProgramming"},"content":" Deadline deadTask \u003d (Deadline) task;","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"SynapseProgramming"},"content":" answer \u003d","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"SynapseProgramming"},"content":" \"[\" + Deadline.TASK_TYPE + \"]\" + \"[\" + task.getDoneIcon() + \"] \"","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"SynapseProgramming"},"content":" + task.getDescription()","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"SynapseProgramming"},"content":" + \"(\"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"SynapseProgramming"},"content":" + deadTask.getDeadDate() + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"SynapseProgramming"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"SynapseProgramming"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"SynapseProgramming"},"content":" answer \u003d","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"SynapseProgramming"},"content":" \"[\" + Event.TASK_TYPE + \"]\" + \"[\" + task.getDoneIcon() + \"] \" + task.getDescription()","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"SynapseProgramming"},"content":" + \"(\"","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"SynapseProgramming"},"content":" + eventTask.getStartDate() + \" to \" + eventTask.getEndDate() + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":108,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":109,"author":{"gitId":"SynapseProgramming"},"content":" return answer;","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":112,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SynapseProgramming":112}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.PropertyAccessor;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.core.JsonProcessingException;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.databind.ObjectMapper;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" * This class handles the loading and saving of tasks to a JSON file.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" private ObjectMapper taskMapper;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" * Initializes the Storage object with the provided TaskList. The TaskList object passed as a","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" * parameter will be populated with tasks from the \"task.json\" file.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" * @param tasks The TaskList object to be initialized with tasks from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" public Storage(TaskList tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" this.taskList \u003d tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" this.taskMapper \u003d new ObjectMapper();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" this.taskMapper.registerModule(new JavaTimeModule());","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" PolymorphicTypeValidator ptv \u003d BasicPolymorphicTypeValidator.builder()","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" .allowIfSubType(\"java.util.ArrayList\")","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" .allowIfSubType(\"ReceivedTasks\")","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" .allowIfSubType(\"tasks.Task\")","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" .build();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" this.taskMapper.activateDefaultTyping(ptv, DefaultTyping.NON_FINAL);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" this.taskMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" * Loads tasks from the \"tasks.json\" file.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" public void loadTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" Path filePath \u003d Paths.get(\"tasks.json\");","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" String content \u003d new String(Files.readAllBytes(filePath));","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" TaskList plist \u003d this.taskMapper.readValue(content, TaskList.class);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" for (int i \u003d 0; i \u003c plist.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" Task wow \u003d plist.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" taskList.add(wow);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(ex.getMessage() + \" not found! No list loaded!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" * Saves tasks from the current TaskList to the \"tasks.json\" file.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" public void saveTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"SynapseProgramming"},"content":" Path filePath \u003d Paths.get(\"tasks.json\");","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"SynapseProgramming"},"content":" String output \u003d","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"SynapseProgramming"},"content":" this.taskMapper.writeValueAsString(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"SynapseProgramming"},"content":" Files.write(filePath, output.getBytes());","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"SynapseProgramming"},"content":" } catch (JsonProcessingException ex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(\"something went wrong\");","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(\"Unable to save to file!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"SynapseProgramming":88}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonTypeName;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":" * The deadline class represents a deadline. It has a name and a deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"@JsonTypeName(\"tasks.Deadline\")","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" public static final String TASK_TYPE \u003d \"D\";","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" private LocalDate deadDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" * Creates a new Deadline Task","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" * @param desc users description of the task","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" * @param deaddate the task deadline","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" public Deadline(String desc, LocalDate deaddate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" super(desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" this.deadDate \u003d deaddate;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" public Deadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" super(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" public String getDeadDate() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" return this.deadDate.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SynapseProgramming":36}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonTypeName;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":" * The Event class represents an event. It has a name, a start and end time.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"@JsonTypeName(\"tasks.Event\")","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" public static final String TASK_TYPE \u003d \"E\";","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" private String startDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" private String endDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" * A event task. It has a start and end date","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" * @param desc users description of the event","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" * @param startDate start date as a string.","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" * @param endDate end date as a string.","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" public Event(String desc, String startDate, String endDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" super(desc);","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" public Event() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" super(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" public String getStartDate() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" return this.startDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" public String getEndDate() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" return this.endDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"SynapseProgramming":43}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonIgnoreProperties;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonSubTypes;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonTypeInfo;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":" * The Task class represents a task. it has a description, and a checkbox to indicate if it is","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" * complete or not.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"@JsonIgnoreProperties(ignoreUnknown \u003d true)","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"@JsonTypeInfo(use \u003d JsonTypeInfo.Id.NAME, include \u003d JsonTypeInfo.As.PROPERTY)","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"@JsonSubTypes({","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" @JsonSubTypes.Type(value \u003d Todo.class, name \u003d \"tasks.Todo\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" @JsonSubTypes.Type(value \u003d Deadline.class, name \u003d \"tasks.Deadline\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" @JsonSubTypes.Type(value \u003d Event.class, name \u003d \"tasks.Event\")}","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":")","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" private Boolean done;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" * A class representing a Task","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" * @param desc description of the task","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" this.description \u003d desc;","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" public void setDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" this.done \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" public void setUnDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" public String getDoneIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" return this.done ? \"X\" : \" \";","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" return this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SynapseProgramming":52}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonIgnore;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":" * The TaskList class is a arraylist of Tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" * A function which returns a list of tasks which matches the given description","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" * @param description The description of the task to search for","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" * @return A list of tasks which loosely matches the description","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" public List\u003cTask\u003e findTasks(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" List\u003cTask\u003e output;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" output \u003d tasks.stream().filter(task -\u003e task.getDescription().contains(description)).collect(","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" Collectors.toList());","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" public int size() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" return tasks.isEmpty();","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" public void remove(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"SynapseProgramming":66}},{"path":"src/main/java/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonTypeName;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":" * The Todo class represents a Todo.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"@JsonTypeName(\"tasks.Todo\")","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" public static final String TASK_TYPE \u003d \"T\";","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" public Todo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" super(\"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" public Todo(String desc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" super(desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SynapseProgramming":23}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SynapseProgramming":19}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"fxgui.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SynapseProgramming":24}},{"path":"src/test/java/io/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package io;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import java.io.ByteArrayInputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"import exceptions.ParserException;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" public void parseDeadline_noByStatement_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" String input \u003d \"deadline hello test\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" InputStream in \u003d new ByteArrayInputStream(input.getBytes());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(in);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" parser.update();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" } catch (NoSuchElementException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(\"Should not reach here\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" parser.parseDeadline();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ParserException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(ex.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" public void parseDeadline_invalidDate_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" String input \u003d \"deadline /by somedate\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" InputStream in \u003d new ByteArrayInputStream(input.getBytes());","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(in);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" parser.update();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" } catch (NoSuchElementException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(\"Should not reach here\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" parser.parseDeadline();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ParserException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(ex.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" public void parseDeadline_noName_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":" String input \u003d \"deadline\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":" InputStream in \u003d new ByteArrayInputStream(input.getBytes());","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(in);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" parser.update();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":" } catch (NoSuchElementException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(\"Should not reach here\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"SynapseProgramming"},"content":" parser.parseDeadline();","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"SynapseProgramming"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ParserException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(ex.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SynapseProgramming":83}},{"path":"src/test/java/io/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package io;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"public class UiTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" public void displayTask_deadline_output() {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" LocalDate date \u003d LocalDate.of(2021, 1, 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d \"hello \";","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" Deadline input \u003d new Deadline(name, date);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" String output \u003d ui.displayTask(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" assertEquals(\"[D][ ] hello (2021-01-01)\", output);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" public void displayTask_event_output() {","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d \"hello \";","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" String start \u003d \"mon\";","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" String end \u003d \"sun\";","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" Event input \u003d new Event(name, start, end);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" String output \u003d ui.displayTask(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" assertEquals(\"[E][ ] hello (mon to sun)\", output);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" public void displayTask_todoobj_output() {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d \"hello \";","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" Todo input \u003d new Todo(name);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" String output \u003d ui.displayTask(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" assertEquals(\"[T][ ] hello \", output);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"SynapseProgramming":48}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"todo hello","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"deadline world /by thursday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"event find bunnies /from monday /to sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"list","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"SynapseProgramming":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":"SynapseProgramming"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SynapseProgramming":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":"-"},"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":"SynapseProgramming"},"content":"#dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-23"},{"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":{"SynapseProgramming":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SynapseProgramming":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":"SynapseProgramming"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-11"},{"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":"SynapseProgramming"},"content":" implementation \u0027com.fasterxml.jackson.core:jackson-core:2.12.3\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" implementation \u0027com.fasterxml.jackson.core:jackson-databind:2.12.3\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" implementation \u0027com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","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":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" mainClass.set(\"fxgui.Launcher\")","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" archiveBaseName \u003d \"kimochiusagi\"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":"checkstyle {","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"SynapseProgramming":24,"-":40}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.Duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.List;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import exceptions.ParserException;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import io.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import io.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" * The Duke class is the main entrypoint for the chatbot. It contains the main logic.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" * Creates a Duke object, which is the main entrypoint for the chatbot.","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" public Duke() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" this.storage \u003d new Storage(this.taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" storage.loadTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to list all tasks","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" public void listTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"list is empty!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" String index \u003d Integer.toString(i + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" Task selectedTask \u003d taskList.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(index + \" \" + ui.displayTask(selectedTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to unmark a task","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" // set current task as un-done","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":" Task selectedTask \u003d taskList.get(parser.getIndex());","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":" selectedTask.setUnDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":" ui.displayAction(\"Marked selected task as un-done desu\", selectedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a valid index!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to mark a task as done.","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":" public void markTaskAsDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"SynapseProgramming"},"content":" // set current task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"SynapseProgramming"},"content":" Task selectedTask \u003d taskList.get(parser.getIndex());","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"SynapseProgramming"},"content":" selectedTask.setDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"SynapseProgramming"},"content":" ui.displayAction(\"Marked selected task as done\", selectedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a valid index!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to add a todo task","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"SynapseProgramming"},"content":" public void addTodo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"SynapseProgramming"},"content":" Task curentTask \u003d new Todo(parser.getTaskName());","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"SynapseProgramming"},"content":" taskList.add(curentTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"added:\\t\" + ui.displayTask(curentTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"SynapseProgramming"},"content":" } catch (StringIndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a name after the todo command!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to add a deadline","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"SynapseProgramming"},"content":" public void addDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"SynapseProgramming"},"content":" Task curentTask \u003d parser.parseDeadline();","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"SynapseProgramming"},"content":" taskList.add(curentTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"added:\\t\" + ui.displayTask(curentTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ParserException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(ex.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"SynapseProgramming"},"content":" private boolean doesConflict(Event event) {","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"SynapseProgramming"},"content":" List\u003cEvent\u003e events \u003d taskList.getEvents();","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"SynapseProgramming"},"content":" if (events.isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"SynapseProgramming"},"content":" return false;","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"SynapseProgramming"},"content":" for (Event x : events) {","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"SynapseProgramming"},"content":" if (x.isConflict(event)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"The current task clashes with an existing task!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(ui.displayTask(x));","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"SynapseProgramming"},"content":" return true;","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"SynapseProgramming"},"content":" return false;","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to add an event","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"SynapseProgramming"},"content":" public void addEvent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"SynapseProgramming"},"content":" Event currentTask \u003d parser.parseEvent();","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"SynapseProgramming"},"content":" if (!doesConflict(currentTask)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"added:\\t\" + ui.displayTask(currentTask));","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"SynapseProgramming"},"content":" taskList.add(currentTask);","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ParserException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(ex.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to delete a task","lastModifiedDate":"2023-09-12"},{"lineNumber":148,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":149,"author":{"gitId":"SynapseProgramming"},"content":" public void deleteTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"SynapseProgramming"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"The list is empty!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"SynapseProgramming"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"SynapseProgramming"},"content":" // remove the current task","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"SynapseProgramming"},"content":" Task selectedTask \u003d taskList.get(parser.getIndex());","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"SynapseProgramming"},"content":" taskList.remove(parser.getIndex());","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"SynapseProgramming"},"content":" ui.displayAction(\"Deleting selected task!\", selectedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a valid index!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":161,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":165,"author":{"gitId":"SynapseProgramming"},"content":" * Contains core logic to find a task","lastModifiedDate":"2023-09-12"},{"lineNumber":166,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":167,"author":{"gitId":"SynapseProgramming"},"content":" public void findTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"finding task!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":169,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d parser.getTaskName();","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"SynapseProgramming"},"content":" List\u003cTask\u003e tasks \u003d taskList.findTasks(name);","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Found:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":173,"author":{"gitId":"SynapseProgramming"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"SynapseProgramming"},"content":" String index \u003d Integer.toString(i + 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"SynapseProgramming"},"content":" Task selectedTask \u003d tasks.get(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(index + \" \" + ui.displayTask(selectedTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":178,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":182,"author":{"gitId":"SynapseProgramming"},"content":" * Finds the earliest x hour slot.","lastModifiedDate":"2023-09-16"},{"lineNumber":183,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"SynapseProgramming"},"content":" public void freeTime() {","lastModifiedDate":"2023-09-16"},{"lineNumber":185,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"SynapseProgramming"},"content":" int hours \u003d parser.getIndex() + 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"SynapseProgramming"},"content":" List\u003cEvent\u003e events \u003d taskList.getEvents();","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"SynapseProgramming"},"content":" if (events.isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"You have no events! Any time is a free time!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"SynapseProgramming"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"SynapseProgramming"},"content":" events.sort(Comparator.comparing(Event::getStartDate));","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"SynapseProgramming"},"content":" for (int i \u003d 0; i \u003c events.size() - 1; i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"SynapseProgramming"},"content":" Event current \u003d events.get(i);","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"SynapseProgramming"},"content":" Event next \u003d events.get(i + 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":195,"author":{"gitId":"SynapseProgramming"},"content":" Duration timediff \u003d Duration.between(current.getEndDate(), next.getStartDate());","lastModifiedDate":"2023-09-16"},{"lineNumber":196,"author":{"gitId":"SynapseProgramming"},"content":" long freehours \u003d timediff.toHours();","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"SynapseProgramming"},"content":" if (hours \u003c\u003d freehours) {","lastModifiedDate":"2023-09-16"},{"lineNumber":198,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(","lastModifiedDate":"2023-09-16"},{"lineNumber":199,"author":{"gitId":"SynapseProgramming"},"content":" \"the earliest free timeslot is: \" + current.getEndDateName());","lastModifiedDate":"2023-09-16"},{"lineNumber":200,"author":{"gitId":"SynapseProgramming"},"content":" return;","lastModifiedDate":"2023-09-16"},{"lineNumber":201,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":202,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":203,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(","lastModifiedDate":"2023-09-16"},{"lineNumber":204,"author":{"gitId":"SynapseProgramming"},"content":" \"The earliest free timeslot is: \" + events.get(events.size() - 1)","lastModifiedDate":"2023-09-16"},{"lineNumber":205,"author":{"gitId":"SynapseProgramming"},"content":" .getEndDateName());","lastModifiedDate":"2023-09-16"},{"lineNumber":206,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":207,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-16"},{"lineNumber":208,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a valid time!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":209,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":210,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":211,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":212,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"SynapseProgramming"},"content":" * Displays greetings text","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":215,"author":{"gitId":"SynapseProgramming"},"content":" public String start() {","lastModifiedDate":"2023-09-06"},{"lineNumber":216,"author":{"gitId":"SynapseProgramming"},"content":" ui.displayGreetings();","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"SynapseProgramming"},"content":" return ui.getPrintStatement();","lastModifiedDate":"2023-09-06"},{"lineNumber":218,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":219,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":220,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":221,"author":{"gitId":"SynapseProgramming"},"content":" * Main function decides what to do based on the users input.","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"SynapseProgramming"},"content":" * @param input a string that the user has entered","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":225,"author":{"gitId":"SynapseProgramming"},"content":" public void run(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":226,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":227,"author":{"gitId":"SynapseProgramming"},"content":" parser.update(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":228,"author":{"gitId":"SynapseProgramming"},"content":" // there is no input","lastModifiedDate":"2023-09-06"},{"lineNumber":229,"author":{"gitId":"SynapseProgramming"},"content":" switch (parser.getCommandString()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"SynapseProgramming"},"content":" case \"bye\":","lastModifiedDate":"2023-08-22"},{"lineNumber":231,"author":{"gitId":"SynapseProgramming"},"content":" ui.displayGoodbye();","lastModifiedDate":"2023-09-06"},{"lineNumber":232,"author":{"gitId":"SynapseProgramming"},"content":" storage.saveTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":233,"author":{"gitId":"SynapseProgramming"},"content":" Platform.exit();","lastModifiedDate":"2023-09-06"},{"lineNumber":234,"author":{"gitId":"SynapseProgramming"},"content":" System.exit(0);","lastModifiedDate":"2023-09-06"},{"lineNumber":235,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-09-06"},{"lineNumber":236,"author":{"gitId":"SynapseProgramming"},"content":" case \"list\":","lastModifiedDate":"2023-08-22"},{"lineNumber":237,"author":{"gitId":"SynapseProgramming"},"content":" listTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":239,"author":{"gitId":"SynapseProgramming"},"content":" case \"mark\": {","lastModifiedDate":"2023-08-22"},{"lineNumber":240,"author":{"gitId":"SynapseProgramming"},"content":" markTaskAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":242,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":243,"author":{"gitId":"SynapseProgramming"},"content":" case \"unmark\": {","lastModifiedDate":"2023-08-22"},{"lineNumber":244,"author":{"gitId":"SynapseProgramming"},"content":" unmarkTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":246,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":247,"author":{"gitId":"SynapseProgramming"},"content":" case \"todo\": {","lastModifiedDate":"2023-08-22"},{"lineNumber":248,"author":{"gitId":"SynapseProgramming"},"content":" addTodo();","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":250,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":251,"author":{"gitId":"SynapseProgramming"},"content":" case \"deadline\": {","lastModifiedDate":"2023-08-22"},{"lineNumber":252,"author":{"gitId":"SynapseProgramming"},"content":" addDeadline();","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":254,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":255,"author":{"gitId":"SynapseProgramming"},"content":" case \"event\": {","lastModifiedDate":"2023-08-23"},{"lineNumber":256,"author":{"gitId":"SynapseProgramming"},"content":" addEvent();","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":258,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":259,"author":{"gitId":"SynapseProgramming"},"content":" case \"delete\": {","lastModifiedDate":"2023-08-24"},{"lineNumber":260,"author":{"gitId":"SynapseProgramming"},"content":" deleteTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":262,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":263,"author":{"gitId":"SynapseProgramming"},"content":" case \"find\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":264,"author":{"gitId":"SynapseProgramming"},"content":" findTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":265,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":266,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":267,"author":{"gitId":"SynapseProgramming"},"content":" case \"free\": {","lastModifiedDate":"2023-09-16"},{"lineNumber":268,"author":{"gitId":"SynapseProgramming"},"content":" freeTime();","lastModifiedDate":"2023-09-16"},{"lineNumber":269,"author":{"gitId":"SynapseProgramming"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":270,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":271,"author":{"gitId":"SynapseProgramming"},"content":" default:","lastModifiedDate":"2023-08-22"},{"lineNumber":272,"author":{"gitId":"SynapseProgramming"},"content":" ui.addPrintStatement(\"Please enter a suitable task!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":273,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":274,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":275,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":276,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":277,"author":{"gitId":"SynapseProgramming"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":278,"author":{"gitId":"SynapseProgramming"},"content":" run(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":279,"author":{"gitId":"SynapseProgramming"},"content":" return ui.getPrintStatement();","lastModifiedDate":"2023-09-06"},{"lineNumber":280,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"SynapseProgramming":279,"-":2}},{"path":"src/main/java/exceptions/ParserException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":" * The ParserException is thrown whenever there is some parsing error from the Parser object","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"public class ParserException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":" public ParserException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" super();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" public ParserException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SynapseProgramming":17}},{"path":"src/main/java/fxgui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package fxgui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" * An example of a custom control using FXML. This control represents a dialog box consisting of an","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" * ImageView to represent the speaker\u0027s face and a label containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SynapseProgramming":62}},{"path":"src/main/java/fxgui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package fxgui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"SynapseProgramming":14}},{"path":"src/main/java/fxgui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package fxgui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"SynapseProgramming":35}},{"path":"src/main/java/fxgui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package fxgui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/noodles.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/usagi.jpeg\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(duke.start(), dukeImage));","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" * then appends them to the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"SynapseProgramming":58}},{"path":"src/main/java/io/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package io;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import exceptions.ParserException;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" * The Parser class handles user input from the command line.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" private String inputString;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" private String[] inputTokens;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" * Creates a Parser object, which handles text based user inputs and outputs","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" public Parser() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" inputTokens \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" inputString \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" * Waits for new input from the command line and updates internal variables.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" * @throws NoSuchElementException If no further input is available.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" public void update() throws NoSuchElementException {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" inputString \u003d scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" inputTokens \u003d inputString.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" * updates the internal input string function","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" public void update(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" inputString \u003d input;","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" inputTokens \u003d inputString.split(\" \");","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" * Returns the currently stored input string.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" * @return The stored input string.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" public String getInputString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" return this.inputString;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" * Returns the current input tokens stored in the parser.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" * @return An array of input tokens.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":" public String[] getInputTokens() {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":" return this.inputTokens;","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" * Returns an integer that the user has input after a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" * @return The integer input by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":" * @throws IndexOutOfBoundsException If the index is not within bounds.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":" public int getIndex() throws IndexOutOfBoundsException {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"SynapseProgramming"},"content":" String input \u003d inputTokens[1];","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"SynapseProgramming"},"content":" assert input.matches(\"-?\\\\d+\") : \"Non-numeric string entered!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"SynapseProgramming"},"content":" int index \u003d Integer.parseInt(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"SynapseProgramming"},"content":" index--;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"SynapseProgramming"},"content":" return index;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"SynapseProgramming"},"content":" * Parses the user\u0027s input and returns a Deadline task if the input is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"SynapseProgramming"},"content":" * @return A Deadline task parsed from the user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"SynapseProgramming"},"content":" * @throws ParserException If the input is not valid for parsing.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"SynapseProgramming"},"content":" public Deadline parseDeadline() throws ParserException {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"SynapseProgramming"},"content":" Deadline result \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"SynapseProgramming"},"content":" String taskName \u003d this.getTaskName();","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"SynapseProgramming"},"content":" String[] parts \u003d taskName.split(\"/by\", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"SynapseProgramming"},"content":" String endDate \u003d parts[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"SynapseProgramming"},"content":" endDate \u003d endDate.replace(\" \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"SynapseProgramming"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"SynapseProgramming"},"content":" LocalDate date \u003d LocalDate.parse(endDate, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"SynapseProgramming"},"content":" result \u003d new Deadline(name, date);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ArrayIndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(\"Please include a (/by) command, followed by a date\");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"SynapseProgramming"},"content":" } catch (StringIndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"SynapseProgramming"},"content":" \"Please enter a name, followed by a (/by) command, followed by a date\");","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"SynapseProgramming"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(\"Please enter a time format as dd/MM/yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"SynapseProgramming"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"SynapseProgramming"},"content":" private LocalDateTime parseDate(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"SynapseProgramming"},"content":" date \u003d date.replace(\" \", \"\");","lastModifiedDate":"2023-09-15"},{"lineNumber":122,"author":{"gitId":"SynapseProgramming"},"content":" return LocalDateTime.parse(date, DateTimeFormatter.ISO_LOCAL_DATE_TIME);","lastModifiedDate":"2023-09-15"},{"lineNumber":123,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"SynapseProgramming"},"content":" * Parses the user\u0027s input and returns an Event object if the input is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"SynapseProgramming"},"content":" * @return An Event object parsed from the user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"SynapseProgramming"},"content":" * @throws ParserException If the input is not valid for parsing.","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"SynapseProgramming"},"content":" public Event parseEvent() throws ParserException {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"SynapseProgramming"},"content":" Event result \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"SynapseProgramming"},"content":" String taskName \u003d this.getTaskName();","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"SynapseProgramming"},"content":" String[] parts \u003d taskName.split(\"/from\", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"SynapseProgramming"},"content":" String dates \u003d parts[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"SynapseProgramming"},"content":" String[] datesplit \u003d dates.split(\"/to\", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"SynapseProgramming"},"content":" LocalDateTime startDateTime \u003d parseDate(datesplit[0]);","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"SynapseProgramming"},"content":" LocalDateTime endDateTime \u003d parseDate(datesplit[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"SynapseProgramming"},"content":" if (!startDateTime.isBefore(endDateTime)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"SynapseProgramming"},"content":" \"The end date time must be later than the start date time\");","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"SynapseProgramming"},"content":" result \u003d new Event(name, startDateTime, endDateTime);","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"SynapseProgramming"},"content":" } catch (StringIndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(\"The event command cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ArrayIndexOutOfBoundsException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"SynapseProgramming"},"content":" \"Please enter a name, followed by a (/from) command, \"","lastModifiedDate":"2023-09-12"},{"lineNumber":154,"author":{"gitId":"SynapseProgramming"},"content":" + \"followed by a date, \"","lastModifiedDate":"2023-09-12"},{"lineNumber":155,"author":{"gitId":"SynapseProgramming"},"content":" + \"followed by a (/to) command and a date\");","lastModifiedDate":"2023-09-12"},{"lineNumber":156,"author":{"gitId":"SynapseProgramming"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-09-15"},{"lineNumber":157,"author":{"gitId":"SynapseProgramming"},"content":" throw new ParserException(\"Please enter a time format as yyyy/MM/ddThh:MM\");","lastModifiedDate":"2023-09-15"},{"lineNumber":158,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"SynapseProgramming"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"SynapseProgramming"},"content":" * Returns the user\u0027s input command.","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"SynapseProgramming"},"content":" * @return The input command as a string.","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"SynapseProgramming"},"content":" public String getCommandString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"SynapseProgramming"},"content":" if (inputTokens.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"SynapseProgramming"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"SynapseProgramming"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"SynapseProgramming"},"content":" return inputTokens[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"SynapseProgramming"},"content":" * Returns the task name that the user has input.","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"SynapseProgramming"},"content":" * @return The task name as a string.","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"SynapseProgramming"},"content":" public String getTaskName() {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"SynapseProgramming"},"content":" String commandString \u003d this.getCommandString();","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"SynapseProgramming"},"content":" int commandLength \u003d commandString.length() + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"SynapseProgramming"},"content":" return inputString.substring(commandLength);","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"SynapseProgramming"},"content":" * Checks if the user has entered any input.","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"SynapseProgramming"},"content":" * @return true if there is input, false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":192,"author":{"gitId":"SynapseProgramming"},"content":" public boolean isInputThere() {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"SynapseProgramming"},"content":" return inputTokens.length \u003d\u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"SynapseProgramming":197}},{"path":"src/main/java/io/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package io;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" * The Ui class displays information to the user","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" private ArrayList\u003cString\u003e printArray;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" public Ui() {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" printArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" * Adds input string to the print array.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" * @param input the String to add to the print array","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" public void addPrintStatement(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" printArray.add(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" * Returns everything in the print array as a single string. Also resets the print array","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" * @return A string representing the output from duke.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" public String getPrintStatement() {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" for (String x : printArray) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" output.append(x).append(\"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" printArray.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" return output.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" * Displays the greeting message to the user","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" public void displayGreetings() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" String greeting \u003d \"Hello! I\u0027m KimochiUsagi (きもち うさぎ)!\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" String info \u003d \"Ask the bunny a question!\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" addPrintStatement(greeting);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" addPrintStatement(info);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" * Displays a message and the display of a given Task one after the other.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" * @param task The Task object whose display will be shown.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" public void displayAction(String message, Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":" addPrintStatement(message);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":" addPrintStatement(displayTask(task));","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":" * Displays the goodbye text.","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":" public void displayGoodbye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":" String goodbye \u003d \"Bye. See you again! (またね)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":" addPrintStatement(goodbye);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"SynapseProgramming"},"content":" * Generates and returns the appropriate display string for the given Task object, based on its","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"SynapseProgramming"},"content":" * subtype.","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"SynapseProgramming"},"content":" * @param task The Task object for which to generate the display.","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"SynapseProgramming"},"content":" * @return The display string representing the given task.","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"SynapseProgramming"},"content":" public String displayTask(Task task) {","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"SynapseProgramming"},"content":" String answer \u003d \"\";","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"SynapseProgramming"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"SynapseProgramming"},"content":" answer \u003d","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"SynapseProgramming"},"content":" \"[\" + Todo.TASK_TYPE + \"]\" + \"[\" + task.getDoneIcon() + \"] \" + task.getDescription();","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"SynapseProgramming"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"SynapseProgramming"},"content":" Deadline deadTask \u003d (Deadline) task;","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"SynapseProgramming"},"content":" answer \u003d","lastModifiedDate":"2023-08-22"},{"lineNumber":95,"author":{"gitId":"SynapseProgramming"},"content":" \"[\" + Deadline.TASK_TYPE + \"]\" + \"[\" + task.getDoneIcon() + \"] \"","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"SynapseProgramming"},"content":" + task.getDescription()","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"SynapseProgramming"},"content":" + \"(\"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"SynapseProgramming"},"content":" + deadTask.getDeadDate() + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"SynapseProgramming"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"SynapseProgramming"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"SynapseProgramming"},"content":" answer \u003d","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"SynapseProgramming"},"content":" \"[\" + Event.TASK_TYPE + \"]\" + \"[\" + task.getDoneIcon() + \"] \" + task.getDescription()","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"SynapseProgramming"},"content":" + \"(\"","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"SynapseProgramming"},"content":" + eventTask.getStartDateName() + \" to \" + eventTask.getEndDateName() + \")\";","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":108,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":109,"author":{"gitId":"SynapseProgramming"},"content":" return answer;","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":112,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SynapseProgramming":112}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.PropertyAccessor;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.core.JsonProcessingException;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.databind.ObjectMapper;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" * This class handles the loading and saving of tasks to a JSON file.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" private ObjectMapper taskMapper;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" * Initializes the Storage object with the provided TaskList. The TaskList object passed as a","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" * parameter will be populated with tasks from the \"task.json\" file.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" * @param tasks The TaskList object to be initialized with tasks from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" public Storage(TaskList tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" this.taskList \u003d tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" this.taskMapper \u003d new ObjectMapper();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" this.taskMapper.registerModule(new JavaTimeModule());","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" PolymorphicTypeValidator ptv \u003d BasicPolymorphicTypeValidator.builder()","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" .allowIfSubType(\"java.util.ArrayList\")","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" .allowIfSubType(\"ReceivedTasks\")","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" .allowIfSubType(\"tasks.Task\")","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" .build();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" this.taskMapper.activateDefaultTyping(ptv, DefaultTyping.NON_FINAL);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" this.taskMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" * Loads tasks from the \"tasks.json\" file.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" public void loadTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" Path filePath \u003d Paths.get(\"tasks.json\");","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" String content \u003d new String(Files.readAllBytes(filePath));","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" TaskList plist \u003d this.taskMapper.readValue(content, TaskList.class);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" for (int i \u003d 0; i \u003c plist.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" Task wow \u003d plist.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" taskList.add(wow);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(ex.getMessage() + \" not found! No list loaded!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" * Saves tasks from the current TaskList to the \"tasks.json\" file.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" public void saveTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"SynapseProgramming"},"content":" Path filePath \u003d Paths.get(\"tasks.json\");","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"SynapseProgramming"},"content":" String output \u003d","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"SynapseProgramming"},"content":" this.taskMapper.writeValueAsString(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"SynapseProgramming"},"content":" Files.write(filePath, output.getBytes());","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"SynapseProgramming"},"content":" } catch (JsonProcessingException ex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(\"something went wrong\");","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"SynapseProgramming"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(\"Unable to save to file!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"SynapseProgramming":88}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonTypeName;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":" * The deadline class represents a deadline. It has a name and a deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"@JsonTypeName(\"tasks.Deadline\")","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" public static final String TASK_TYPE \u003d \"D\";","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" private LocalDate deadDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" * Creates a new Deadline Task","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" * @param desc users description of the task","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" * @param deaddate the task deadline","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" public Deadline(String desc, LocalDate deaddate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" super(desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" this.deadDate \u003d deaddate;","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" public Deadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" super(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" public String getDeadDate() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" return this.deadDate.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SynapseProgramming":36}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonIgnore;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonTypeName;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":" * The Event class represents an event. It has a name, a start and end time.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"@JsonTypeName(\"tasks.Event\")","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" public static final String TASK_TYPE \u003d \"E\";","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" private LocalDateTime startDate;","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" private LocalDateTime endDate;","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" * An event task. It has a start and end date","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" * @param desc users description of the event","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" * @param startDate start date as a string.","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" * @param endDate end date as a string.","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" public Event(String desc, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" super(desc);","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" public Event() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" super(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" * Checks if the given event conflicts with the current event","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" * @param e the event to check for conflicts","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" * @return true if there is a conflict. False otherwise","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" public boolean isConflict(Event e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" if (startDate.isAfter(e.startDate) \u0026\u0026 startDate.isBefore(e.endDate) \u0026\u0026 endDate.isAfter(","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" e.endDate)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" return true;","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" } else if (startDate.isBefore(e.startDate) \u0026\u0026 endDate.isAfter(e.endDate)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" return true;","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" } else if (startDate.isBefore(e.startDate) \u0026\u0026 endDate.isAfter(e.startDate)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" return true;","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" } else if (startDate.isAfter(e.startDate) \u0026\u0026 endDate.isBefore(e.endDate)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" return true;","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" return false;","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" public LocalDateTime getStartDate() {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" return startDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" public LocalDateTime getEndDate() {","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":" return endDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":" public String getStartDateName() {","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":" return this.startDate.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":" public String getEndDateName() {","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" return this.endDate.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"SynapseProgramming":75}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonIgnoreProperties;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonSubTypes;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonTypeInfo;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":" * The Task class represents a task. it has a description, and a checkbox to indicate if it is","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" * complete or not.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"@JsonIgnoreProperties(ignoreUnknown \u003d true)","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"@JsonTypeInfo(use \u003d JsonTypeInfo.Id.NAME, include \u003d JsonTypeInfo.As.PROPERTY)","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"@JsonSubTypes({","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" @JsonSubTypes.Type(value \u003d Todo.class, name \u003d \"tasks.Todo\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" @JsonSubTypes.Type(value \u003d Deadline.class, name \u003d \"tasks.Deadline\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" @JsonSubTypes.Type(value \u003d Event.class, name \u003d \"tasks.Event\")}","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":")","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" private Boolean done;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" * A class representing a Task","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" * @param desc description of the task","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" this.description \u003d desc;","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" public void setDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" this.done \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" public void setUnDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" public String getDoneIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" return this.done ? \"X\" : \" \";","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" return this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SynapseProgramming":52}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonIgnore;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":" * The TaskList class is a arraylist of Tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" * A function which returns a list of tasks which matches the given description","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" * @param description The description of the task to search for","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" * @return A list of tasks which loosely matches the description","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" public List\u003cTask\u003e findTasks(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" List\u003cTask\u003e output;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" output \u003d tasks.stream().filter(task -\u003e task.getDescription().contains(description)).collect(","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" Collectors.toList());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" public int size() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" return tasks.isEmpty();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":" public void remove(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":" @JsonIgnore","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":" public List\u003cEvent\u003e getEvents() {","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":" return tasks.stream().filter(task -\u003e task instanceof Event)","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":" .map(e -\u003e (Event) e).collect(","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":" Collectors.toList());","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"SynapseProgramming":73}},{"path":"src/main/java/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import com.fasterxml.jackson.annotation.JsonTypeName;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":" * The Todo class represents a Todo.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"@JsonTypeName(\"tasks.Todo\")","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" public static final String TASK_TYPE \u003d \"T\";","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" public Todo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" super(\"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" public Todo(String desc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" super(desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SynapseProgramming":23}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SynapseProgramming":19}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"fxgui.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"SynapseProgramming":24}},{"path":"src/test/java/io/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package io;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import java.io.ByteArrayInputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"import exceptions.ParserException;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" public void parseDeadline_noByStatement_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" String input \u003d \"deadline hello test\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" InputStream in \u003d new ByteArrayInputStream(input.getBytes());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(in);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" parser.update();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":" } catch (NoSuchElementException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(\"Should not reach here\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" parser.parseDeadline();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ParserException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(ex.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" public void parseDeadline_invalidDate_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" String input \u003d \"deadline /by somedate\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" InputStream in \u003d new ByteArrayInputStream(input.getBytes());","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(in);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":" parser.update();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"SynapseProgramming"},"content":" } catch (NoSuchElementException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(\"Should not reach here\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"SynapseProgramming"},"content":" parser.parseDeadline();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"SynapseProgramming"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ParserException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(ex.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"SynapseProgramming"},"content":" public void parseDeadline_noName_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"SynapseProgramming"},"content":" String input \u003d \"deadline\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"SynapseProgramming"},"content":" InputStream in \u003d new ByteArrayInputStream(input.getBytes());","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(in);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"SynapseProgramming"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"SynapseProgramming"},"content":" parser.update();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"SynapseProgramming"},"content":" } catch (NoSuchElementException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(\"Should not reach here\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"SynapseProgramming"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"SynapseProgramming"},"content":" parser.parseDeadline();","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"SynapseProgramming"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"SynapseProgramming"},"content":" } catch (ParserException ex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"SynapseProgramming"},"content":" System.out.println(ex.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"SynapseProgramming"},"content":" System.setIn(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SynapseProgramming":83}},{"path":"src/test/java/io/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"package io;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SynapseProgramming"},"content":"import tasks.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"SynapseProgramming"},"content":"public class UiTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"SynapseProgramming"},"content":" public void displayTask_deadline_output() {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"SynapseProgramming"},"content":" LocalDate date \u003d LocalDate.of(2021, 1, 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d \"hello \";","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"SynapseProgramming"},"content":" Deadline input \u003d new Deadline(name, date);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"SynapseProgramming"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"SynapseProgramming"},"content":" String output \u003d ui.displayTask(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"SynapseProgramming"},"content":" assertEquals(\"[D][ ] hello (2021-01-01)\", output);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"SynapseProgramming"},"content":" public void displayTask_event_output() {","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d \"hello \";","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"SynapseProgramming"},"content":" LocalDateTime start \u003d LocalDateTime.of(2012, 1, 1, 1, 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"SynapseProgramming"},"content":" LocalDateTime end \u003d LocalDateTime.of(2012, 1, 1, 2, 2);","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"SynapseProgramming"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"SynapseProgramming"},"content":" Event input \u003d new Event(name, start, end);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SynapseProgramming"},"content":" String output \u003d ui.displayTask(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SynapseProgramming"},"content":" assertEquals(\"[E][ ] hello (2012-01-01T01:01 to 2012-01-01T02:02)\", output);","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"SynapseProgramming"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"SynapseProgramming"},"content":" public void displayTask_todoobj_output() {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"SynapseProgramming"},"content":" String name \u003d \"hello \";","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"SynapseProgramming"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"SynapseProgramming"},"content":" Todo input \u003d new Todo(name);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"SynapseProgramming"},"content":" String output \u003d ui.displayTask(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"SynapseProgramming"},"content":" assertEquals(\"[T][ ] hello \", output);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"SynapseProgramming"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"SynapseProgramming"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"SynapseProgramming"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"SynapseProgramming":47}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"SynapseProgramming"},"content":"todo hello","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"SynapseProgramming"},"content":"deadline world /by thursday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"SynapseProgramming"},"content":"event find bunnies /from monday /to sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"SynapseProgramming"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"SynapseProgramming"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"SynapseProgramming"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"SynapseProgramming"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"SynapseProgramming"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"SynapseProgramming"},"content":"list","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"SynapseProgramming":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":"SynapseProgramming"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SynapseProgramming":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":"-"},"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":"SynapseProgramming"},"content":"#dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-23"},{"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":{"SynapseProgramming":1,"-":37}}] diff --git a/SynapseProgramming_ip_master/commits.json b/SynapseProgramming_ip_master/commits.json index e2515f78..14d0df03 100644 --- a/SynapseProgramming_ip_master/commits.json +++ b/SynapseProgramming_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"SynapseProgramming":[{"date":"2023-08-21","commitResults":[{"hash":"734a66800a1df6236875b7d340187a4d5e918bfe","isMergeCommit":false,"messageTitle":"Added in initial greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"906971659ddfe81607794f4e89bd46692972f870","isMergeCommit":false,"messageTitle":"Added in echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"e5e7fb40ea3aeb4902e5d65d2aad7d7b058d7e88","isMergeCommit":false,"messageTitle":"Completed level-2 feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"e9d07fa464a9267f944bb1254313e40713c7cad8","isMergeCommit":false,"messageTitle":"Added in mark command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"65fd77b4402c45ec1529d4b55ef40bd9e999c1c5","isMergeCommit":false,"messageTitle":"Modified input string parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"9d65caaa1d0ab01b17b1b023e7d60477dd74c249","isMergeCommit":false,"messageTitle":"Added in Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"91ac6f7cac3abec473eecb9f8c38d15212f305c1","isMergeCommit":false,"messageTitle":"Renamed userInputs array as taskList. Added in task marking","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"9cd8e335d38bf156320db24a0f7e23bfb7398f35","isMergeCommit":false,"messageTitle":"Added in unmark function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"e351321deeb8f26d7602e6fc3020bbdf207ff41f","isMergeCommit":false,"messageTitle":"Converted if-else chain to switch statement","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":30}}},{"hash":"620b1af2da7c57936d317d3a5d3f0318e0631722","isMergeCommit":false,"messageTitle":"Added in todo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"83be3198a5ffd93689fa4eb487c57265548744f2","isMergeCommit":false,"messageTitle":"Added in Todo class to represent Todo event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"92dec94f9625383f281bbb87a6c4522ba8b9b34f","isMergeCommit":false,"messageTitle":"Added in UiFormatter class for formatting objects of type Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"1ddf9793afc436d1e886522bae0ac4095eb9cb7d","isMergeCommit":false,"messageTitle":"completed \"todo\" command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"8ab10ba94c203b040a848338a9cb5c97e2c25a62","isMergeCommit":false,"messageTitle":"removed default add task, and changed print statements to use UiFormatter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}},{"hash":"aa02ffab6a8fc825b0fe43957b88d18a9e27f79f","isMergeCommit":false,"messageTitle":"Added in Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"5fd772a81b82f76f518667a986b44cc116ed49da","isMergeCommit":false,"messageTitle":"Added in formatting for Deadline objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"b293421d5f689a97effefd3e5193e4f0fa0106b6","isMergeCommit":false,"messageTitle":"Added in deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9f639de3829c1e5d8daa94b76289f53fd8bb8827","isMergeCommit":false,"messageTitle":"Added in Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"16cb6b6ff32d7ee3a8fb214014345da0b3ac0f42","isMergeCommit":false,"messageTitle":"Added in Event class to displayTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"b4af2cfbc1a3798dc7b61b99305ba167214ffff2","isMergeCommit":false,"messageTitle":"Added in Event command","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"f7fc11bccf2470470153ead65edf3e1bb13ffabf","isMergeCommit":false,"messageTitle":"Added in input testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"3dfb3a8d2af0b759fd94f36cd45c3a6f542fe518","isMergeCommit":false,"messageTitle":"Added in exception handling for mark and unmark commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":15}}},{"hash":"b7384cda1177eb094be86459b0dafe6c8dd29a64","isMergeCommit":false,"messageTitle":"Added in exception handling for end of line","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"83f297976e48dc683d69a7eb4316b1d58866e41e","isMergeCommit":false,"messageTitle":"Added in empty list check for list command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"510c9eb7cc9b6597ecfde7ee57cd757b2ac5521a","isMergeCommit":false,"messageTitle":"Added in exception handling for todo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"4ffd55777519714e535bf0dbc71fbc2edbda4a52","isMergeCommit":false,"messageTitle":"Added in exception handling for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"4f50adf72971fe54e1d8bc70e552839dd0bbcbdd","isMergeCommit":false,"messageTitle":"Added in exception handling for event command","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":13}}}]},{"date":"2023-08-24","commitResults":[{"hash":"1036360dc848b827a9715eb065dd553142e91bd3","isMergeCommit":false,"messageTitle":"Added in case for deleting entries from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"752aa3b6d4346be95f552c85d0f819f2e197a538","isMergeCommit":true,"messageTitle":"Merge pull request #1 from SynapseProgramming/devel","messageBody":"Completed week 2 tasks","fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"2d7c02079abf478b3a10917dfb40497639bbcdfc","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Level-7","messageBody":"* add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"1266a00de68a2ebbf6eed26d0c113898ffc185a0","isMergeCommit":false,"messageTitle":"Add json library as a dependency","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"0fff40c39e33eda6cb5128e0fbaeca0bb7ac383c","isMergeCommit":false,"messageTitle":"Add in Tasklistloader class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}},{"hash":"70d745c2f027557ec2b2be6c48e7489a76e5e04f","isMergeCommit":false,"messageTitle":"Add in test json file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"c6fc339d09b52a1d052298b0661cac1287a9b470","isMergeCommit":false,"messageTitle":"Enable polymorphism for json Task parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f377b3ee66bf57e0d94469c0635e8431f37d4f0d","isMergeCommit":false,"messageTitle":"Modify description field of Task class to private","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"2eb3e1fc0a4795485cb56b7ae643a4dd7b7d21d2","isMergeCommit":false,"messageTitle":"Fix missing fields in json file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"b398d003fe7df0da2741936c0457209da5a806ef","isMergeCommit":false,"messageTitle":"Modify access of description class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"b20bd5f86f411316f1ad75b80fa165a683db7249","isMergeCommit":false,"messageTitle":"Add in first working json serializing/ deserializing attempt","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":6}}}]},{"date":"2023-08-29","commitResults":[{"hash":"e08b009480795a21fe0823f50d2d829cae7799d1","isMergeCommit":false,"messageTitle":"Remove commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"2a1935e939be676b75fc53ce23cfa9df0738f3ab","isMergeCommit":false,"messageTitle":"Code linting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"92394c7d2fced822bd88623fd5207ab11945ef07","isMergeCommit":false,"messageTitle":"Add in empty constructor required by Jackson library","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"69676dee55f0afd869e5f3f2aedbbfd505f9497d","isMergeCommit":false,"messageTitle":"Remove unused headers and comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"d95bb5c643b50464caa5007ea04d5740e4fa3299","isMergeCommit":false,"messageTitle":"Fix class field visibility for Jackon. \u0026 Save previous data to arraylist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"f3a868d0274eb1decbfae1f6fa5bb35112e0369b","isMergeCommit":false,"messageTitle":"change done to boolean object type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"324ebe865d995928cf332233a26a509abd06aa4d","isMergeCommit":false,"messageTitle":"Remove print test statements and commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":8}}},{"hash":"4a80709181364571e0168a46829b97533a129229","isMergeCommit":false,"messageTitle":"Place save tasks function to end of main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"3698ca926892b8285891af0b7e0dc828aeaf320f","isMergeCommit":false,"messageTitle":"Add in more verbose warning for ( tasks.json not found)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ba398b9a123f7884d851e863d362c81eb4713df4","isMergeCommit":true,"messageTitle":"Merge pull request #2 from SynapseProgramming/branch-Level-7","messageBody":"Add task save to json file","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"3ba4a4eab3258662c2252648cecc66bd0dce231e","isMergeCommit":false,"messageTitle":"Add DeadTime support for parser","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":2,"deletions":0}}},{"hash":"b897a1d62d667622cb8b1d25d2f1aa59dde31d5b","isMergeCommit":false,"messageTitle":"Change date field to LocalDate type for Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"3e9087a23fbcd5d43065d4fffda87f9eec0c5534","isMergeCommit":false,"messageTitle":"Add in string formatting to Localdate type for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"9f48ef4302046558dbbcc9158205b9df671b12e5","isMergeCommit":false,"messageTitle":"Remove toto and test print statements","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}}]},{"date":"2023-08-30","commitResults":[{"hash":"6b5795d7bec7377c450d7fe598e725cad8f81365","isMergeCommit":true,"messageTitle":"Merge pull request #3 from SynapseProgramming/branch-Level-8","messageBody":"Change deaddate field from string type to Date type","fileTypesAndContributionMap":{}},{"hash":"9b52c284edf6ef1cd0d20f61ce765ecfbcea8676","isMergeCommit":false,"messageTitle":"Rename ReceivedTasks to TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"2f6b44637381a727654f17c896dde388c8a524a3","isMergeCommit":false,"messageTitle":"Rename Tasklistloader to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"da38f669d42ab65d7285369fa46c06d15689776e","isMergeCommit":false,"messageTitle":"Add in initial parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":3}}},{"hash":"dd800a99683fe8befd595700ff1519f066c29212","isMergeCommit":false,"messageTitle":"Remove commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"a18874ba037f99f786701e76b5986c65ddfc7b63","isMergeCommit":false,"messageTitle":"Add in getIndex function into parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"464bef9d7c370ad376e29c090f339ed8aa22029d","isMergeCommit":false,"messageTitle":"Add in getIndex function call for unmark command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"4046fa9ff61272777cee50af8afd21ff1aa8526b","isMergeCommit":false,"messageTitle":"Add in getCommandString function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":3}}},{"hash":"35180aace669e8020de7bbb32d9ad7c3c968faab","isMergeCommit":false,"messageTitle":"Added in getTaskName function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}},{"hash":"7188f53999b3ffefcd0c0386162e77fc1d22cde1","isMergeCommit":false,"messageTitle":"Add getTask name for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"5bcff6a3541b6f6d87e49873cd8ddaa7a0aca353","isMergeCommit":false,"messageTitle":"Add in getIndex for remove command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"4a128f3d79cc66ec46603cd56813f0d89be72932","isMergeCommit":false,"messageTitle":"Rename class UiFormatter to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"01be0b0055ba8d9056023e0c9e38d972116f2f22","isMergeCommit":false,"messageTitle":"Remove unused variables","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"1d6e13df250200e2ddf55aa9f338bceac51ce774","isMergeCommit":false,"messageTitle":"Remove unused variables and added in isInputThere function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}}]},{"date":"2023-08-31","commitResults":[{"hash":"30bd3d7a44eff74e25409f5a25ae3841ff59f3c5","isMergeCommit":false,"messageTitle":"Change TaskList to be the main array for storing tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}},{"hash":"71e2efa0d6657523bd080cd4abb3c1aee80cc19f","isMergeCommit":false,"messageTitle":"Change Storage class to handle tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"aa108eda1e195da71c572621dc86266918b6b104","isMergeCommit":false,"messageTitle":"Change taskList to be of type TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"3a9c099fd39053832ada868e4223c4c98dcf3736","isMergeCommit":false,"messageTitle":"Code refactor for main function","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":7}}},{"hash":"fa1ab0e59cb651b46cea113dfaad4b8d62aa59ec","isMergeCommit":true,"messageTitle":"Merge pull request #4 from SynapseProgramming/devel","messageBody":"Completed more OOP part. ","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"f6705ed98b28f1a46f9dad4dfa6998e2a049f905","isMergeCommit":false,"messageTitle":"Move all task related classes to tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":14}}},{"hash":"2309f470fabae1595144ec85eca5afb9e33c9cda","isMergeCommit":false,"messageTitle":"change import to get task related stuff from task package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"ad2fe54155287debe70696bff272777fe3fc7f3b","isMergeCommit":false,"messageTitle":"Move storage class to storage package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"a07be856e12d4c437fb07c44e0858f0d8be80ade","isMergeCommit":false,"messageTitle":"Move parser and ui class to io folder","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"a4e7879c6857e98a46cc5f2728b39a34cd7d66a1","isMergeCommit":false,"messageTitle":"update main duke class to import classes from the new packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"c12182c7ba714c38c984bab411aeef083e1093bd","isMergeCommit":true,"messageTitle":"Merge pull request #5 from SynapseProgramming/devel","messageBody":"Organised code into packages","fileTypesAndContributionMap":{}},{"hash":"8320b341347136090649c49b0a88b298b9254848","isMergeCommit":false,"messageTitle":"add in parseDeadline function, which handles parsing for deadline command.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"345646bf4b6eff362895be5a7a7bc562782f9535","isMergeCommit":false,"messageTitle":"Add in custom exception for Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"2fb7cecc46cf5b931e1d36a1df96e5e0859f8880","isMergeCommit":false,"messageTitle":"Integrate parser exception for parseDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":23}}},{"hash":"89d4f03a182a763c2ec530118691af30d91d66b7","isMergeCommit":false,"messageTitle":"Add in parseEvent function and modified duke run function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":16}}},{"hash":"91413a691b7b0624e76b68545338011226ef2bb4","isMergeCommit":false,"messageTitle":"Remove unused headers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":5}}},{"hash":"467b51b3e234158d71d374ef83e6619945377c6d","isMergeCommit":false,"messageTitle":"Add in display greetings function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"9c5bec3db52e0ed11fd5c7848c63c5b13a388b85","isMergeCommit":false,"messageTitle":"Add in display action function to ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"d7b2d951c06f4f69f673e489e967d2dd1a478cb2","isMergeCommit":false,"messageTitle":"Change print + action statements to use displayAction function.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"670c19e4d82476a4c820f8fc404725b5d5afa023","isMergeCommit":false,"messageTitle":"Add in displayGoodbye function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"0b39d9f2a086d95d4a1cbc7cb53729464aa3c40c","isMergeCommit":false,"messageTitle":"Add listTasks function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":14}}},{"hash":"498cd6094626414d8c859d6c9beab03286a89153","isMergeCommit":false,"messageTitle":"Add markTaskAsDone function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":9}}},{"hash":"f3cd9c5aad1815d7ab8b3df43a0846b35b62e562","isMergeCommit":false,"messageTitle":"Add unmarkTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":11}}},{"hash":"58fb305dc4e76b9bf28dbf12b1a1a40d5c18cb13","isMergeCommit":false,"messageTitle":"Add in addTodo function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":9}}},{"hash":"889a7fba03e370471325bfd55b9b06df25cc0279","isMergeCommit":false,"messageTitle":"Add in addDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":9}}},{"hash":"d1b027f36f7aae60ab81929a53622e75c2d1bb2e","isMergeCommit":false,"messageTitle":"Add in addEvent function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":7}}},{"hash":"2bca407321382cb38efc66688d9840d0243a7a91","isMergeCommit":false,"messageTitle":"Add in deleteTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":14}}},{"hash":"431cdc261810c43551c6c0241aa43f3b6047bc81","isMergeCommit":true,"messageTitle":"Merge pull request #6 from SynapseProgramming/devel","messageBody":"Code Refactoring and custom exceptions","fileTypesAndContributionMap":{}},{"hash":"470a2dd4ff32d59b48f72826d6d2be87597b0707","isMergeCommit":false,"messageTitle":"Add in J-unit test case for parseEvent function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"8c7ade6fce485cea34abb51ac261d8f0748e3d48","isMergeCommit":false,"messageTitle":"Add in additional tests for parseDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":2}}},{"hash":"cdc1181daac42f76d05adb37913359f658f643a0","isMergeCommit":false,"messageTitle":"Add in UiTest test file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"094a8fb32b8b68a1cbb2ea0ed62bdde94a3ea48b","isMergeCommit":false,"messageTitle":"Add in additional tests for displayTask function","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"6db809212d4e3d7c9510c8ba4b9966ce3c4e19a1","isMergeCommit":true,"messageTitle":"Merge pull request #7 from SynapseProgramming/devel","messageBody":"Add in J-unit tests","fileTypesAndContributionMap":{}},{"hash":"0e76be6de3f3e7cc8c0e27947198acaf9a00c4fc","isMergeCommit":false,"messageTitle":"Move Duke class to another packaged called duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"a1546c259dec2247fbb19781580682b632a83d87","isMergeCommit":false,"messageTitle":"Add in jar file creation","messageBody":"","tags":["V0.1","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"b3667c434572b1505a5c791aee9c4f5c5e94f549","isMergeCommit":true,"messageTitle":"Merge pull request #8 from SynapseProgramming/devel","messageBody":"Add in .jar file compilation settings, and moved duke class to its own package","fileTypesAndContributionMap":{}},{"hash":"f800e19738335518ab62598feb4383c8dae10125","isMergeCommit":false,"messageTitle":"Add in javadoc comments for all parser functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":1}}},{"hash":"3c84e35d89595858583b694ae7d0156f281a80e9","isMergeCommit":false,"messageTitle":"Add in javadoc comments for Storage functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"6000e3fc636060df4c49fdc025a08d3c125a7325","isMergeCommit":false,"messageTitle":"Add in javadoc comments for Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"f30cb0220ae1c9b5ac1accf629c3c9fcb9bedb90","isMergeCommit":false,"messageTitle":"Add in javadoc comments for all classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0}}},{"hash":"2e2f565104d7cf8f4f07d2d57cfc9bf4f6dd7c70","isMergeCommit":false,"messageTitle":"Apply updated code linting","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":374,"deletions":371}}},{"hash":"ffabe4470ce120bf6b3fc3bd9995e82357d9ffa5","isMergeCommit":false,"messageTitle":"Add in find function","messageBody":"","tags":["Level-9","A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":160}}},{"hash":"ffb61d42e32055141b89623e6df675bb1cfd10a0","isMergeCommit":true,"messageTitle":"Merge level-9 branch with main","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6d0fe108c0ad0977faa410fe14f6fcae8cae16a8","isMergeCommit":true,"messageTitle":"Merge javadoc branch with main","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"47aa6cf30286ae799502e261fddfa61b81addd3c","isMergeCommit":false,"messageTitle":"stashing here for now","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":97}}},{"hash":"1442c5256f31d995ca4a70f7e41fb41c832ff5ba","isMergeCommit":false,"messageTitle":"Add in printarray and related functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":35}}},{"hash":"5c0cb8f5f7ba41291d82af5430d5a18122b1b149","isMergeCommit":false,"messageTitle":"Replace print statements with add to string array list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"e713b8a0afec7b0e4612d84e146a4b07c0bebbd9","isMergeCommit":false,"messageTitle":"Migrate print statements through UI class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":79}}},{"hash":"443f938446dd9bc9a8f86c6ef1f9ea8d8951aa87","isMergeCommit":false,"messageTitle":"Add in java fx as dependencies","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0}}},{"hash":"7739190c241d2357d2eff7a0c9aa6045afc477cb","isMergeCommit":false,"messageTitle":"Add in dialog box and main window fxml files","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":43,"deletions":0}}},{"hash":"12ef9ae8bdc43eac723f3e8e4da861678145c31c","isMergeCommit":false,"messageTitle":"Add in fxml related files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":161,"deletions":0}}},{"hash":"0527c445cebc0426c9969e16d07fdcfc61f6aff0","isMergeCommit":false,"messageTitle":"Remove main function and fix list function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":16}}},{"hash":"fe0ae7269519d9875c2de5f4f731c52405db45ef","isMergeCommit":false,"messageTitle":"Remove unused headers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"22516a88a3a7eea6b4bc4fc9a3ab19a0f2146907","isMergeCommit":false,"messageTitle":"Add in start message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"31873dba0cfa66456263129e1f5bfaea9f9f0b7e","isMergeCommit":false,"messageTitle":"Code linting for storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":26}}},{"hash":"3eac53bc8714f057bf7b6e775715b1d63c6ef92f","isMergeCommit":false,"messageTitle":"Add in exit functions to bye command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"983f7bdd94f79dea7595458ae22fab0416735fd4","isMergeCommit":true,"messageTitle":"Merge pull request #9 from SynapseProgramming/fxml","messageBody":"Add in fxml code","fileTypesAndContributionMap":{}},{"hash":"f07d00a7011331186b11b1c73001483bda6a5a93","isMergeCommit":false,"messageTitle":"Code linting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"9ba747de51e21bba06f2ab7d05ae5fababa5d7d4","isMergeCommit":false,"messageTitle":"Add in javadoc for print statement.","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"2a22e95219895df3db343274344fc149098ca6d2","isMergeCommit":true,"messageTitle":"Merge pull request #10 from SynapseProgramming/Level-10","messageBody":"Replace text based gui with java fx gui","fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"de9e6db0cd266364ded04109e62b45d45ef0f882","isMergeCommit":false,"messageTitle":"Add in checkstyle tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"13c9e18b985a4b9cc834b36e91d1ddf5e4c77f74","isMergeCommit":false,"messageTitle":"Apply correct indentation rules for test code","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":83}}},{"hash":"42419f13f16d0e642e5e8aee709252a37df56777","isMergeCommit":true,"messageTitle":"Merge pull request #11 from SynapseProgramming/checkstyle","messageBody":"Add in checkstyle checks","fileTypesAndContributionMap":{}},{"hash":"722f3dfdd6e7bcf40b3cdc56804c1fe5e55739c2","isMergeCommit":false,"messageTitle":"Set fxgui.Launcher as the main entry class","messageBody":"","tags":["V0.2"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"8c4a686992fcf9a166f659951350061e3f1922d3","isMergeCommit":false,"messageTitle":"Separate import groups","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"ea93e1a78b182a01128985217d38d75e64574b01","isMergeCommit":false,"messageTitle":"Add in assertions to getIndex function","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"ce91dca089265490f7607e1c70471d6d8705b7f0","isMergeCommit":true,"messageTitle":"Merge pull request #12 from SynapseProgramming/A-Assertions","messageBody":"Add in assertions check for getIndex function","fileTypesAndContributionMap":{}},{"hash":"e87f3d710862c31a04f1c3a56197b84d008b3d37","isMergeCommit":false,"messageTitle":"Update import ordering for storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"c0fb9215992bf762095b48daaa838ecf1357c24c","isMergeCommit":false,"messageTitle":"Update import ordering for parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"29cccb268cbbc57e8eea76bbd996a7a6bbec8e9b","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues for Duke class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":42}}},{"hash":"53e5e704baa8d4f458cf41600f1c79d2e923ef5f","isMergeCommit":false,"messageTitle":"Add newline for Launcher class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"90aaa810cf86143461f2d869e65da278cb0e774e","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with Main class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":2}}},{"hash":"8e4b1598cac18c887e60e6d61c573e3ec8301fbd","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with MainWindow class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"6342030edf6bca75b06b18c85e5211cf70baab5f","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}},{"hash":"0822fa7485276f7fd001906693397ba58e3d0334","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with DeadlineClass","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}},{"hash":"fac72df503798d4ee027f8f5061850774448e8d0","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with Event Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}},{"hash":"080e4faf0960e4fc7b005abab3f90507ee1e1f53","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with Task Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"1899d79092d174f65735b4417bdf7ff413ddc490","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"4ba832eace8090af5ecad4bf983220e69b7db8c9","isMergeCommit":false,"messageTitle":"Resolved checkstyle issues with the Todo class","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"3371595df33c341a7d8cedc68570823eef376de1","isMergeCommit":true,"messageTitle":"Merge pull request #13 from SynapseProgramming/A-CodeQuality","messageBody":"Fix most code quality issues","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"2e274f410fe6ca7f202b59d3ad0b5e22811916a5","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with ParserTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}},{"hash":"1a66989a6606f5a59a26a99efe64abed403a7d33","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with UiTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"SynapseProgramming":{"java":1144,"md":2,"fxml":43,"sh":1,"bat":1,"gradle":24,"txt":9}},"authorContributionVariance":{"SynapseProgramming":81961.82},"authorDisplayNameMap":{"SynapseProgramming":"CS2103T-W10-3 ONG ..OALD"}} +{"authorDailyContributionsMap":{"SynapseProgramming":[{"date":"2023-08-21","commitResults":[{"hash":"734a66800a1df6236875b7d340187a4d5e918bfe","isMergeCommit":false,"messageTitle":"Added in initial greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"906971659ddfe81607794f4e89bd46692972f870","isMergeCommit":false,"messageTitle":"Added in echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"e5e7fb40ea3aeb4902e5d65d2aad7d7b058d7e88","isMergeCommit":false,"messageTitle":"Completed level-2 feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"e9d07fa464a9267f944bb1254313e40713c7cad8","isMergeCommit":false,"messageTitle":"Added in mark command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"65fd77b4402c45ec1529d4b55ef40bd9e999c1c5","isMergeCommit":false,"messageTitle":"Modified input string parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"9d65caaa1d0ab01b17b1b023e7d60477dd74c249","isMergeCommit":false,"messageTitle":"Added in Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"91ac6f7cac3abec473eecb9f8c38d15212f305c1","isMergeCommit":false,"messageTitle":"Renamed userInputs array as taskList. Added in task marking","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"9cd8e335d38bf156320db24a0f7e23bfb7398f35","isMergeCommit":false,"messageTitle":"Added in unmark function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"e351321deeb8f26d7602e6fc3020bbdf207ff41f","isMergeCommit":false,"messageTitle":"Converted if-else chain to switch statement","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":30}}},{"hash":"620b1af2da7c57936d317d3a5d3f0318e0631722","isMergeCommit":false,"messageTitle":"Added in todo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"83be3198a5ffd93689fa4eb487c57265548744f2","isMergeCommit":false,"messageTitle":"Added in Todo class to represent Todo event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"92dec94f9625383f281bbb87a6c4522ba8b9b34f","isMergeCommit":false,"messageTitle":"Added in UiFormatter class for formatting objects of type Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"1ddf9793afc436d1e886522bae0ac4095eb9cb7d","isMergeCommit":false,"messageTitle":"completed \"todo\" command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"8ab10ba94c203b040a848338a9cb5c97e2c25a62","isMergeCommit":false,"messageTitle":"removed default add task, and changed print statements to use UiFormatter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}},{"hash":"aa02ffab6a8fc825b0fe43957b88d18a9e27f79f","isMergeCommit":false,"messageTitle":"Added in Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"5fd772a81b82f76f518667a986b44cc116ed49da","isMergeCommit":false,"messageTitle":"Added in formatting for Deadline objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"b293421d5f689a97effefd3e5193e4f0fa0106b6","isMergeCommit":false,"messageTitle":"Added in deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9f639de3829c1e5d8daa94b76289f53fd8bb8827","isMergeCommit":false,"messageTitle":"Added in Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"16cb6b6ff32d7ee3a8fb214014345da0b3ac0f42","isMergeCommit":false,"messageTitle":"Added in Event class to displayTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"b4af2cfbc1a3798dc7b61b99305ba167214ffff2","isMergeCommit":false,"messageTitle":"Added in Event command","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"f7fc11bccf2470470153ead65edf3e1bb13ffabf","isMergeCommit":false,"messageTitle":"Added in input testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"3dfb3a8d2af0b759fd94f36cd45c3a6f542fe518","isMergeCommit":false,"messageTitle":"Added in exception handling for mark and unmark commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":15}}},{"hash":"b7384cda1177eb094be86459b0dafe6c8dd29a64","isMergeCommit":false,"messageTitle":"Added in exception handling for end of line","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"83f297976e48dc683d69a7eb4316b1d58866e41e","isMergeCommit":false,"messageTitle":"Added in empty list check for list command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"510c9eb7cc9b6597ecfde7ee57cd757b2ac5521a","isMergeCommit":false,"messageTitle":"Added in exception handling for todo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"4ffd55777519714e535bf0dbc71fbc2edbda4a52","isMergeCommit":false,"messageTitle":"Added in exception handling for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"4f50adf72971fe54e1d8bc70e552839dd0bbcbdd","isMergeCommit":false,"messageTitle":"Added in exception handling for event command","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":13}}}]},{"date":"2023-08-24","commitResults":[{"hash":"1036360dc848b827a9715eb065dd553142e91bd3","isMergeCommit":false,"messageTitle":"Added in case for deleting entries from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"752aa3b6d4346be95f552c85d0f819f2e197a538","isMergeCommit":true,"messageTitle":"Merge pull request #1 from SynapseProgramming/devel","messageBody":"Completed week 2 tasks","fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"2d7c02079abf478b3a10917dfb40497639bbcdfc","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Level-7","messageBody":"* add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"1266a00de68a2ebbf6eed26d0c113898ffc185a0","isMergeCommit":false,"messageTitle":"Add json library as a dependency","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"0fff40c39e33eda6cb5128e0fbaeca0bb7ac383c","isMergeCommit":false,"messageTitle":"Add in Tasklistloader class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}},{"hash":"70d745c2f027557ec2b2be6c48e7489a76e5e04f","isMergeCommit":false,"messageTitle":"Add in test json file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"c6fc339d09b52a1d052298b0661cac1287a9b470","isMergeCommit":false,"messageTitle":"Enable polymorphism for json Task parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f377b3ee66bf57e0d94469c0635e8431f37d4f0d","isMergeCommit":false,"messageTitle":"Modify description field of Task class to private","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"2eb3e1fc0a4795485cb56b7ae643a4dd7b7d21d2","isMergeCommit":false,"messageTitle":"Fix missing fields in json file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"b398d003fe7df0da2741936c0457209da5a806ef","isMergeCommit":false,"messageTitle":"Modify access of description class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"b20bd5f86f411316f1ad75b80fa165a683db7249","isMergeCommit":false,"messageTitle":"Add in first working json serializing/ deserializing attempt","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":6}}}]},{"date":"2023-08-29","commitResults":[{"hash":"e08b009480795a21fe0823f50d2d829cae7799d1","isMergeCommit":false,"messageTitle":"Remove commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"2a1935e939be676b75fc53ce23cfa9df0738f3ab","isMergeCommit":false,"messageTitle":"Code linting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"92394c7d2fced822bd88623fd5207ab11945ef07","isMergeCommit":false,"messageTitle":"Add in empty constructor required by Jackson library","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"69676dee55f0afd869e5f3f2aedbbfd505f9497d","isMergeCommit":false,"messageTitle":"Remove unused headers and comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"d95bb5c643b50464caa5007ea04d5740e4fa3299","isMergeCommit":false,"messageTitle":"Fix class field visibility for Jackon. \u0026 Save previous data to arraylist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"f3a868d0274eb1decbfae1f6fa5bb35112e0369b","isMergeCommit":false,"messageTitle":"change done to boolean object type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"324ebe865d995928cf332233a26a509abd06aa4d","isMergeCommit":false,"messageTitle":"Remove print test statements and commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":8}}},{"hash":"4a80709181364571e0168a46829b97533a129229","isMergeCommit":false,"messageTitle":"Place save tasks function to end of main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"3698ca926892b8285891af0b7e0dc828aeaf320f","isMergeCommit":false,"messageTitle":"Add in more verbose warning for ( tasks.json not found)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ba398b9a123f7884d851e863d362c81eb4713df4","isMergeCommit":true,"messageTitle":"Merge pull request #2 from SynapseProgramming/branch-Level-7","messageBody":"Add task save to json file","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"3ba4a4eab3258662c2252648cecc66bd0dce231e","isMergeCommit":false,"messageTitle":"Add DeadTime support for parser","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":2,"deletions":0}}},{"hash":"b897a1d62d667622cb8b1d25d2f1aa59dde31d5b","isMergeCommit":false,"messageTitle":"Change date field to LocalDate type for Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"3e9087a23fbcd5d43065d4fffda87f9eec0c5534","isMergeCommit":false,"messageTitle":"Add in string formatting to Localdate type for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"9f48ef4302046558dbbcc9158205b9df671b12e5","isMergeCommit":false,"messageTitle":"Remove toto and test print statements","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}}]},{"date":"2023-08-30","commitResults":[{"hash":"6b5795d7bec7377c450d7fe598e725cad8f81365","isMergeCommit":true,"messageTitle":"Merge pull request #3 from SynapseProgramming/branch-Level-8","messageBody":"Change deaddate field from string type to Date type","fileTypesAndContributionMap":{}},{"hash":"9b52c284edf6ef1cd0d20f61ce765ecfbcea8676","isMergeCommit":false,"messageTitle":"Rename ReceivedTasks to TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"2f6b44637381a727654f17c896dde388c8a524a3","isMergeCommit":false,"messageTitle":"Rename Tasklistloader to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"da38f669d42ab65d7285369fa46c06d15689776e","isMergeCommit":false,"messageTitle":"Add in initial parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":3}}},{"hash":"dd800a99683fe8befd595700ff1519f066c29212","isMergeCommit":false,"messageTitle":"Remove commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"a18874ba037f99f786701e76b5986c65ddfc7b63","isMergeCommit":false,"messageTitle":"Add in getIndex function into parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"464bef9d7c370ad376e29c090f339ed8aa22029d","isMergeCommit":false,"messageTitle":"Add in getIndex function call for unmark command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"4046fa9ff61272777cee50af8afd21ff1aa8526b","isMergeCommit":false,"messageTitle":"Add in getCommandString function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":3}}},{"hash":"35180aace669e8020de7bbb32d9ad7c3c968faab","isMergeCommit":false,"messageTitle":"Added in getTaskName function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}},{"hash":"7188f53999b3ffefcd0c0386162e77fc1d22cde1","isMergeCommit":false,"messageTitle":"Add getTask name for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"5bcff6a3541b6f6d87e49873cd8ddaa7a0aca353","isMergeCommit":false,"messageTitle":"Add in getIndex for remove command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"4a128f3d79cc66ec46603cd56813f0d89be72932","isMergeCommit":false,"messageTitle":"Rename class UiFormatter to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"01be0b0055ba8d9056023e0c9e38d972116f2f22","isMergeCommit":false,"messageTitle":"Remove unused variables","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"1d6e13df250200e2ddf55aa9f338bceac51ce774","isMergeCommit":false,"messageTitle":"Remove unused variables and added in isInputThere function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}}]},{"date":"2023-08-31","commitResults":[{"hash":"30bd3d7a44eff74e25409f5a25ae3841ff59f3c5","isMergeCommit":false,"messageTitle":"Change TaskList to be the main array for storing tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}},{"hash":"71e2efa0d6657523bd080cd4abb3c1aee80cc19f","isMergeCommit":false,"messageTitle":"Change Storage class to handle tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"aa108eda1e195da71c572621dc86266918b6b104","isMergeCommit":false,"messageTitle":"Change taskList to be of type TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"3a9c099fd39053832ada868e4223c4c98dcf3736","isMergeCommit":false,"messageTitle":"Code refactor for main function","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":7}}},{"hash":"fa1ab0e59cb651b46cea113dfaad4b8d62aa59ec","isMergeCommit":true,"messageTitle":"Merge pull request #4 from SynapseProgramming/devel","messageBody":"Completed more OOP part. ","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"f6705ed98b28f1a46f9dad4dfa6998e2a049f905","isMergeCommit":false,"messageTitle":"Move all task related classes to tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":14}}},{"hash":"2309f470fabae1595144ec85eca5afb9e33c9cda","isMergeCommit":false,"messageTitle":"change import to get task related stuff from task package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"ad2fe54155287debe70696bff272777fe3fc7f3b","isMergeCommit":false,"messageTitle":"Move storage class to storage package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"a07be856e12d4c437fb07c44e0858f0d8be80ade","isMergeCommit":false,"messageTitle":"Move parser and ui class to io folder","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"a4e7879c6857e98a46cc5f2728b39a34cd7d66a1","isMergeCommit":false,"messageTitle":"update main duke class to import classes from the new packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"c12182c7ba714c38c984bab411aeef083e1093bd","isMergeCommit":true,"messageTitle":"Merge pull request #5 from SynapseProgramming/devel","messageBody":"Organised code into packages","fileTypesAndContributionMap":{}},{"hash":"8320b341347136090649c49b0a88b298b9254848","isMergeCommit":false,"messageTitle":"add in parseDeadline function, which handles parsing for deadline command.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"345646bf4b6eff362895be5a7a7bc562782f9535","isMergeCommit":false,"messageTitle":"Add in custom exception for Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"2fb7cecc46cf5b931e1d36a1df96e5e0859f8880","isMergeCommit":false,"messageTitle":"Integrate parser exception for parseDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":23}}},{"hash":"89d4f03a182a763c2ec530118691af30d91d66b7","isMergeCommit":false,"messageTitle":"Add in parseEvent function and modified duke run function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":16}}},{"hash":"91413a691b7b0624e76b68545338011226ef2bb4","isMergeCommit":false,"messageTitle":"Remove unused headers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":5}}},{"hash":"467b51b3e234158d71d374ef83e6619945377c6d","isMergeCommit":false,"messageTitle":"Add in display greetings function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"9c5bec3db52e0ed11fd5c7848c63c5b13a388b85","isMergeCommit":false,"messageTitle":"Add in display action function to ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"d7b2d951c06f4f69f673e489e967d2dd1a478cb2","isMergeCommit":false,"messageTitle":"Change print + action statements to use displayAction function.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"670c19e4d82476a4c820f8fc404725b5d5afa023","isMergeCommit":false,"messageTitle":"Add in displayGoodbye function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"0b39d9f2a086d95d4a1cbc7cb53729464aa3c40c","isMergeCommit":false,"messageTitle":"Add listTasks function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":14}}},{"hash":"498cd6094626414d8c859d6c9beab03286a89153","isMergeCommit":false,"messageTitle":"Add markTaskAsDone function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":9}}},{"hash":"f3cd9c5aad1815d7ab8b3df43a0846b35b62e562","isMergeCommit":false,"messageTitle":"Add unmarkTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":11}}},{"hash":"58fb305dc4e76b9bf28dbf12b1a1a40d5c18cb13","isMergeCommit":false,"messageTitle":"Add in addTodo function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":9}}},{"hash":"889a7fba03e370471325bfd55b9b06df25cc0279","isMergeCommit":false,"messageTitle":"Add in addDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":9}}},{"hash":"d1b027f36f7aae60ab81929a53622e75c2d1bb2e","isMergeCommit":false,"messageTitle":"Add in addEvent function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":7}}},{"hash":"2bca407321382cb38efc66688d9840d0243a7a91","isMergeCommit":false,"messageTitle":"Add in deleteTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":14}}},{"hash":"431cdc261810c43551c6c0241aa43f3b6047bc81","isMergeCommit":true,"messageTitle":"Merge pull request #6 from SynapseProgramming/devel","messageBody":"Code Refactoring and custom exceptions","fileTypesAndContributionMap":{}},{"hash":"470a2dd4ff32d59b48f72826d6d2be87597b0707","isMergeCommit":false,"messageTitle":"Add in J-unit test case for parseEvent function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"8c7ade6fce485cea34abb51ac261d8f0748e3d48","isMergeCommit":false,"messageTitle":"Add in additional tests for parseDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":2}}},{"hash":"cdc1181daac42f76d05adb37913359f658f643a0","isMergeCommit":false,"messageTitle":"Add in UiTest test file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"094a8fb32b8b68a1cbb2ea0ed62bdde94a3ea48b","isMergeCommit":false,"messageTitle":"Add in additional tests for displayTask function","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"6db809212d4e3d7c9510c8ba4b9966ce3c4e19a1","isMergeCommit":true,"messageTitle":"Merge pull request #7 from SynapseProgramming/devel","messageBody":"Add in J-unit tests","fileTypesAndContributionMap":{}},{"hash":"0e76be6de3f3e7cc8c0e27947198acaf9a00c4fc","isMergeCommit":false,"messageTitle":"Move Duke class to another packaged called duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"a1546c259dec2247fbb19781580682b632a83d87","isMergeCommit":false,"messageTitle":"Add in jar file creation","messageBody":"","tags":["V0.1","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"b3667c434572b1505a5c791aee9c4f5c5e94f549","isMergeCommit":true,"messageTitle":"Merge pull request #8 from SynapseProgramming/devel","messageBody":"Add in .jar file compilation settings, and moved duke class to its own package","fileTypesAndContributionMap":{}},{"hash":"f800e19738335518ab62598feb4383c8dae10125","isMergeCommit":false,"messageTitle":"Add in javadoc comments for all parser functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":1}}},{"hash":"3c84e35d89595858583b694ae7d0156f281a80e9","isMergeCommit":false,"messageTitle":"Add in javadoc comments for Storage functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"6000e3fc636060df4c49fdc025a08d3c125a7325","isMergeCommit":false,"messageTitle":"Add in javadoc comments for Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"f30cb0220ae1c9b5ac1accf629c3c9fcb9bedb90","isMergeCommit":false,"messageTitle":"Add in javadoc comments for all classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0}}},{"hash":"2e2f565104d7cf8f4f07d2d57cfc9bf4f6dd7c70","isMergeCommit":false,"messageTitle":"Apply updated code linting","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":374,"deletions":371}}},{"hash":"ffabe4470ce120bf6b3fc3bd9995e82357d9ffa5","isMergeCommit":false,"messageTitle":"Add in find function","messageBody":"","tags":["Level-9","A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":160}}},{"hash":"ffb61d42e32055141b89623e6df675bb1cfd10a0","isMergeCommit":true,"messageTitle":"Merge level-9 branch with main","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6d0fe108c0ad0977faa410fe14f6fcae8cae16a8","isMergeCommit":true,"messageTitle":"Merge javadoc branch with main","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"47aa6cf30286ae799502e261fddfa61b81addd3c","isMergeCommit":false,"messageTitle":"stashing here for now","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":97}}},{"hash":"1442c5256f31d995ca4a70f7e41fb41c832ff5ba","isMergeCommit":false,"messageTitle":"Add in printarray and related functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":35}}},{"hash":"5c0cb8f5f7ba41291d82af5430d5a18122b1b149","isMergeCommit":false,"messageTitle":"Replace print statements with add to string array list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"e713b8a0afec7b0e4612d84e146a4b07c0bebbd9","isMergeCommit":false,"messageTitle":"Migrate print statements through UI class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":79}}},{"hash":"443f938446dd9bc9a8f86c6ef1f9ea8d8951aa87","isMergeCommit":false,"messageTitle":"Add in java fx as dependencies","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0}}},{"hash":"7739190c241d2357d2eff7a0c9aa6045afc477cb","isMergeCommit":false,"messageTitle":"Add in dialog box and main window fxml files","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":43,"deletions":0}}},{"hash":"12ef9ae8bdc43eac723f3e8e4da861678145c31c","isMergeCommit":false,"messageTitle":"Add in fxml related files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":161,"deletions":0}}},{"hash":"0527c445cebc0426c9969e16d07fdcfc61f6aff0","isMergeCommit":false,"messageTitle":"Remove main function and fix list function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":16}}},{"hash":"fe0ae7269519d9875c2de5f4f731c52405db45ef","isMergeCommit":false,"messageTitle":"Remove unused headers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"22516a88a3a7eea6b4bc4fc9a3ab19a0f2146907","isMergeCommit":false,"messageTitle":"Add in start message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"31873dba0cfa66456263129e1f5bfaea9f9f0b7e","isMergeCommit":false,"messageTitle":"Code linting for storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":26}}},{"hash":"3eac53bc8714f057bf7b6e775715b1d63c6ef92f","isMergeCommit":false,"messageTitle":"Add in exit functions to bye command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"983f7bdd94f79dea7595458ae22fab0416735fd4","isMergeCommit":true,"messageTitle":"Merge pull request #9 from SynapseProgramming/fxml","messageBody":"Add in fxml code","fileTypesAndContributionMap":{}},{"hash":"f07d00a7011331186b11b1c73001483bda6a5a93","isMergeCommit":false,"messageTitle":"Code linting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"9ba747de51e21bba06f2ab7d05ae5fababa5d7d4","isMergeCommit":false,"messageTitle":"Add in javadoc for print statement.","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"2a22e95219895df3db343274344fc149098ca6d2","isMergeCommit":true,"messageTitle":"Merge pull request #10 from SynapseProgramming/Level-10","messageBody":"Replace text based gui with java fx gui","fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"de9e6db0cd266364ded04109e62b45d45ef0f882","isMergeCommit":false,"messageTitle":"Add in checkstyle tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"13c9e18b985a4b9cc834b36e91d1ddf5e4c77f74","isMergeCommit":false,"messageTitle":"Apply correct indentation rules for test code","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":83}}},{"hash":"42419f13f16d0e642e5e8aee709252a37df56777","isMergeCommit":true,"messageTitle":"Merge pull request #11 from SynapseProgramming/checkstyle","messageBody":"Add in checkstyle checks","fileTypesAndContributionMap":{}},{"hash":"722f3dfdd6e7bcf40b3cdc56804c1fe5e55739c2","isMergeCommit":false,"messageTitle":"Set fxgui.Launcher as the main entry class","messageBody":"","tags":["V0.2"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"8c4a686992fcf9a166f659951350061e3f1922d3","isMergeCommit":false,"messageTitle":"Separate import groups","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"ea93e1a78b182a01128985217d38d75e64574b01","isMergeCommit":false,"messageTitle":"Add in assertions to getIndex function","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"ce91dca089265490f7607e1c70471d6d8705b7f0","isMergeCommit":true,"messageTitle":"Merge pull request #12 from SynapseProgramming/A-Assertions","messageBody":"Add in assertions check for getIndex function","fileTypesAndContributionMap":{}},{"hash":"e87f3d710862c31a04f1c3a56197b84d008b3d37","isMergeCommit":false,"messageTitle":"Update import ordering for storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"c0fb9215992bf762095b48daaa838ecf1357c24c","isMergeCommit":false,"messageTitle":"Update import ordering for parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"29cccb268cbbc57e8eea76bbd996a7a6bbec8e9b","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues for Duke class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":42}}},{"hash":"53e5e704baa8d4f458cf41600f1c79d2e923ef5f","isMergeCommit":false,"messageTitle":"Add newline for Launcher class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"90aaa810cf86143461f2d869e65da278cb0e774e","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with Main class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":2}}},{"hash":"8e4b1598cac18c887e60e6d61c573e3ec8301fbd","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with MainWindow class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"6342030edf6bca75b06b18c85e5211cf70baab5f","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}},{"hash":"0822fa7485276f7fd001906693397ba58e3d0334","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with DeadlineClass","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}},{"hash":"fac72df503798d4ee027f8f5061850774448e8d0","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with Event Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}},{"hash":"080e4faf0960e4fc7b005abab3f90507ee1e1f53","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with Task Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"1899d79092d174f65735b4417bdf7ff413ddc490","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"4ba832eace8090af5ecad4bf983220e69b7db8c9","isMergeCommit":false,"messageTitle":"Resolved checkstyle issues with the Todo class","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"3371595df33c341a7d8cedc68570823eef376de1","isMergeCommit":true,"messageTitle":"Merge pull request #13 from SynapseProgramming/A-CodeQuality","messageBody":"Fix most code quality issues","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"2e274f410fe6ca7f202b59d3ad0b5e22811916a5","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with ParserTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}},{"hash":"1a66989a6606f5a59a26a99efe64abed403a7d33","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues with UiTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}}]},{"date":"2023-09-15","commitResults":[{"hash":"25629b7fcaa7964af2d1015499a7de858f58e6f2","isMergeCommit":false,"messageTitle":"Change event to use LocalDateTime to represent start and end times","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":7}}},{"hash":"d992f6b1df966efee77c604ecc9a426d48aa585b","isMergeCommit":false,"messageTitle":"Update unit tests for display task event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"d5c3c070c8b8cd00a1b4bf3166da3874f8ed290e","isMergeCommit":false,"messageTitle":"Fix checkstyle warnings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":5}}}]},{"date":"2023-09-16","commitResults":[{"hash":"c22ed16b66717a039ad9dfa3df80fd780742505c","isMergeCommit":false,"messageTitle":"Add in checks to ensure that the end date time is later than the start date time","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":3}}},{"hash":"cb3832f8aed71af39cd5e52c9dde7e3ada8f74a2","isMergeCommit":false,"messageTitle":"Add in getEvents function to get all events from list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"d3c7d6e78447f702cc5431917a5f611dcebcf22d","isMergeCommit":false,"messageTitle":"Add in isConflict function, which checks if there is a conflict between two events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":1}}},{"hash":"460d7d532e66c66b3cfa709e880a12487b5df319","isMergeCommit":false,"messageTitle":"Add in conflict checks for adding tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":4}}},{"hash":"5f15c31e7f400e365363c4c8babeac70de2e10a0","isMergeCommit":false,"messageTitle":"Add in start and end date getter functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":4}}},{"hash":"2dd9d2a00f824ddc0da0a571c397fd8261531cfc","isMergeCommit":false,"messageTitle":"Add in freeTime function, which returns the users next available datetime","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"58170a171850a00afb03c63218de23c07c34ae80","isMergeCommit":true,"messageTitle":"Merge pull request #15 from SynapseProgramming/B-FindFreeTimes","messageBody":"Completed find free Times functionality","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SynapseProgramming":{"java":1251,"md":2,"fxml":43,"sh":1,"bat":1,"gradle":24,"txt":9}},"authorContributionVariance":{"SynapseProgramming":74791.12},"authorDisplayNameMap":{"SynapseProgramming":"CS2103T-W10-3 ONG ..OALD"}} diff --git a/TohLiYuan_ip_master/authorship.json b/TohLiYuan_ip_master/authorship.json index d409d8f3..79d22a41 100644 --- a/TohLiYuan_ip_master/authorship.json +++ b/TohLiYuan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"TohLiYuan":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":"TohLiYuan"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-08"},{"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":"TohLiYuan"},"content":" mainClass.set(\"Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-01"},{"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":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":"javafx {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":"mainClassName \u003d \u0027Launcher\u0027","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"TohLiYuan":15,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"# KnowledgeYuan","lastModifiedDate":"2023-09-15"},{"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":"TohLiYuan"},"content":"### Tasks","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"Categorizes Tasks into 3 categories:","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"1. Todo","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" - A short task to be done","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"2. Deadline","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" - A Task to be done before a given date","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"3. Event","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" - A Task to be done throughout a given period of time","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"### Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":"Stores a list of your tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":"A user can add, remove, and mark a task as done/undone with the user of commands.","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":"### Reminder","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":"Reminds you of the most urgent tasks to be completed.","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":"A user can also see what needs to be done in the next few days with a command.","lastModifiedDate":"2023-09-15"},{"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":"TohLiYuan"},"content":"### `todo` - Add a new Todo Task","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":"Adds a new Todo Task to the Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":"`todo [name]`","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":"A new Todo Task will be added to your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":"### `deadline` - Add a new Deadline Task","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":"Adds a new Deadline Task to the Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":"`Deadline [name] /by [time]`","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":"*The time should be in `D/M/YYYY HHmm` format*","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":"A new Deadline Task will be added to your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":"### `event` - Add a new Event Task","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":"Adds a new Event Task to the Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":"`event [name] /from [time] /to [time]`","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":"*The time should be in `D/M/YYYY HHmm` format*","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":"A new Event Task will be added to your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":"### `list` - List all Tasks","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":"List all Tasks in your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"TohLiYuan"},"content":"`list`","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"TohLiYuan"},"content":"A list of Tasks currently in your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"TohLiYuan"},"content":"### `delete` - Delete a Task","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"TohLiYuan"},"content":"Deletes the specified Task from your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"TohLiYuan"},"content":"`delete [index]`","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"TohLiYuan"},"content":"*[index] is the number of the Task as shown in the Task List*","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"TohLiYuan"},"content":"The Task will be removed from your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"TohLiYuan"},"content":"### `mark` - Marks a Task as done","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":97,"author":{"gitId":"TohLiYuan"},"content":"Marks the specified Task as done","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":99,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":101,"author":{"gitId":"TohLiYuan"},"content":"`mark [index]`","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"TohLiYuan"},"content":"*[index] is the number of the Task as shown in the Task List*","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":105,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":107,"author":{"gitId":"TohLiYuan"},"content":"The marked task should now have a \"tick\" sign in the status","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"TohLiYuan"},"content":"### `unmark` - Marks a Task as not done","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"TohLiYuan"},"content":"Marks the specified Task as not done","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"TohLiYuan"},"content":"`unmark [index]`","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"TohLiYuan"},"content":"*[index] is the number of the Task as shown in the Task List*","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"TohLiYuan"},"content":"The marked task should no longer have a \"tick\" sign in the status","lastModifiedDate":"2023-09-15"},{"lineNumber":122,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":123,"author":{"gitId":"TohLiYuan"},"content":"### `find` - Finds Tasks in the Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"TohLiYuan"},"content":"Finds all Tasks in the Task List that has the specified keyword","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":127,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"TohLiYuan"},"content":"`find [keyword]`","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":132,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"TohLiYuan"},"content":"A list of Task with the keyword in their name","lastModifiedDate":"2023-09-15"},{"lineNumber":134,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"TohLiYuan"},"content":"### `remind` - Reminds you of urgent Tasks","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"TohLiYuan"},"content":"Tells you the urgent Tasks that should be completed in a specified time","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":139,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":140,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"TohLiYuan"},"content":"`remind (number of days)`","lastModifiedDate":"2023-09-15"},{"lineNumber":142,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":143,"author":{"gitId":"TohLiYuan"},"content":"*(number of days) represents the number of days you want to seek ahead* ","lastModifiedDate":"2023-09-15"},{"lineNumber":144,"author":{"gitId":"TohLiYuan"},"content":"*By default it looks for tasks 7 days in advance*","lastModifiedDate":"2023-09-15"},{"lineNumber":145,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":146,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":147,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":148,"author":{"gitId":"TohLiYuan"},"content":"A list of task that you should complete within the next n days","lastModifiedDate":"2023-09-15"},{"lineNumber":149,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":150,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":151,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":152,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":153,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":154,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":155,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":156,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"TohLiYuan":136,"-":21}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":" * The launcher entry point for duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"TohLiYuan":10}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" * The main entry class to launch the duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Duke.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" stage.setTitle(\"KnowledgeYuan\");","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" public void stop() {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" Thread.sleep(1000);","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"TohLiYuan":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.ByeCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.parser.CommandParser;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"public class Duke {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private static final String INIT_PHRASE \u003d \"KnowledgeYuan, at your service!\\nWhat can I do for you today?\";","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" private static final String REMINDER_PHRASE \u003d","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" \"The following tasks are urgent! Please remove them from the list after completing!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" private boolean isEnd \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" private CommandParser cp;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" private ChatRecord chatRecord;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * Initialises the Duke program.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" * @return the greeting string.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" public String init() {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" cp \u003d new CommandParser();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" chatRecord \u003d new ChatRecord();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" chatRecord.loadData();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" String reminders \u003d chatRecord.getReminder(LocalDate.now(), 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" if (reminders.length() \u003e\u003d 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" return INIT_PHRASE + \"\\n\" + REMINDER_PHRASE + \"\\n\" + reminders;","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" return INIT_PHRASE;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" * Returns a response from Duke from a given input.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" * @param input the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" * @return the response from duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand((input));","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" if (ByeCommand.isBye(cmd)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" isEnd \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" cmd.init(chatRecord);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" String out \u003d cmd.execute();","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" assert out !\u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" return out;","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" public boolean isTerminate() {","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" return isEnd;","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"TohLiYuan":58}},{"path":"src/main/java/duke/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * The command to exit the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"bye\";","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" private static final String BYE_PHRASE \u003d \"Access Terminated! Hope to see you again soon!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public ByeCommand() { }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) { }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Bye Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @return The bye phrase to be displayed as feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" return BYE_PHRASE;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" public static boolean isBye(Command command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" return command instanceof ByeCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":29}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * The abstract class for commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" protected ChatRecord chatRecord;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" public abstract void init(ChatRecord chatRecord);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public abstract String execute();","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":13}},{"path":"src/main/java/duke/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" * The command to create a Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"deadline\";","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"New Deadline Task added to list!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" private String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime date;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to add Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" * @param date the date of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" public DeadlineCommand(String name, LocalDateTime date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Deadline Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" * A new Deadline Task will be added to the records.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" * @return The string to be displayed as feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" Deadline ddl \u003d new Deadline(name, date);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord.addTask(ddl);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \" \" + ddl.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + name + \" /by \" + date.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":55}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.InvalidTaskException;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * The command to delete a Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"delete\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"The following task has been deleted: \";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" private int toDelete;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" public DeleteCommand(int i) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" this.toDelete \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Delete Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" * The selected Task will be deleted from the record.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" * @return The string representation of the Task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" assert toDelete \u003c this.chatRecord.getCount();","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" Task task \u003d this.chatRecord.deleteTask(toDelete);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \" \" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + toDelete;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":46}},{"path":"src/main/java/duke/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" * The command to add an Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"event\";","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"New Event Task added to list!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" private String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to add an Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" * @param startDate the starting date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" * @param endDate the ending date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" public EventCommand(String name, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Event Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" * A new Event Task will be added to the records.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" * @return The string to be displayed as feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" Event ev \u003d new Event(name, startDate, endDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord.addTask(ev);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \" \" + ev.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + name + \" /from \"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" + startDate.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" + \" /to \" + endDate.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":58}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * The command to find tasks with the given keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"find\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"These are the tasks with the matching keyword:\";","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private static final String NO_RESULT \u003d \"You have no tasks in the list with the matching keyword!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" private String findWord;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" private ChatRecord records;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" public FindCommand(String findWord) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" this.findWord \u003d findWord;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" this.records \u003d records;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cString\u003e res \u003d records.findMessage(findWord);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" if (res.isPresent()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \"\\n\" + res.get();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" return NO_RESULT;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + findWord;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"TohLiYuan":39}},{"path":"src/main/java/duke/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * A placeholder command for invalid commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" private String prefix \u003d \"Invalid Command! \";","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" private String errMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command for invalid commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * @param errMessage the error message to show to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" public InvalidCommand(String errMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" this.errMessage \u003d errMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) { }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Invalid Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" * @return The error string to be displayed as feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" return prefix + errMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" return prefix + errMessage;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":39}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * The command to list all recorded tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"list\";","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" public ListCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created List Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * @return The list of task to be displayed to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" return \"You have \" + chatRecord.getCount() + \" tasks in your list!\\n\" + chatRecord.listMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":28}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * The command to mark a task as complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"mark\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"Marked the following task as completed!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private int toMark;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to mark a task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @param i the task number of the task to be marked in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" public MarkCommand(int i) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" this.toMark \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Mark Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * @return The string representation of task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" Task task \u003d chatRecord.setMark(toMark);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \"\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + toMark;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":45}},{"path":"src/main/java/duke/commands/RemindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * The command to list all urgent tasks within a time period.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"public class RemindCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"remind\";","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private LocalDate currDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" private int days;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to display reminder to the user.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * @param days The number of days to seek for urgent tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public RemindCommand(int days) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" this.currDate \u003d LocalDate.now();","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" this.days \u003d days;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Remind Command.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" * @return The reminder list to be displayed to the user.","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" String reminders \u003d this.chatRecord.getReminder(currDate, days);","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" if (reminders.length() \u003c 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" return \"You have no urgent tasks!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"These are the tasks you need to finish by next %d day(s):\\n%s\", this.days, reminders);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"TohLiYuan":46}},{"path":"src/main/java/duke/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * The command to add a Todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"todo\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"New Todo Task added to list!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" private String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to add a Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public TodoCommand(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Todo Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * A new Todo Task will be added to the records.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" * @return The string to be displayed as feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" Todo td \u003d new Todo(this.name);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord.addTask(td);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \" \" + td.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + name;","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":49}},{"path":"src/main/java/duke/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * The command to unmark a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"unmark\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"Marked the following task as incomplete!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private int toUnmark;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to unmark a Task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @param i the task number of the task to be unmarked in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" public UnmarkCommand(int i) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" this.toUnmark \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Unmark Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * @return The string representation of task to be unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" Task task \u003d chatRecord.setUnmark(toUnmark);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \"\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + toUnmark;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":45}},{"path":"src/main/java/duke/parser/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.ByeCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.DeadlineCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.EventCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.InvalidCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.RemindCommand;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.TodoCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * Parses user input into command.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":"public class CommandParser {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" private static final Pattern COMMAND_PATTERN \u003d Pattern.compile(\"(?\u003ccommandWord\u003e\\\\S+)(?\u003carguments\u003e.*)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" private static final Pattern TODO_ARGS_PATTERN \u003d Pattern.compile(\"(?\u003cname\u003e\\\\S.*)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" private static final Pattern DEADLINE_ARGS_PATTERN \u003d Pattern.compile(\"(?\u003cname\u003e\\\\S+.*)( /by )(?\u003ctime\u003e\\\\S.*)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" private static final Pattern EVENT_ARGS_PATTERN \u003d","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" Pattern.compile(\"(?\u003cname\u003e\\\\S+.*)( /from )(?\u003cstartTime\u003e\\\\S.*)( /to )(?\u003cendTime\u003e\\\\S.*)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" public CommandParser() { }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * Processes a user input to a command.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" * @param input the input string from the user","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" * @return the correct command from user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" * Returns an Invalid Command if a syntax error in the command is found.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" public Command parseCommand(String input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" Matcher matcher \u003d COMMAND_PATTERN.matcher(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Invalid command format\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" String commandWord \u003d matcher.group(\"commandWord\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" String args \u003d matcher.group(\"arguments\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" switch (commandWord) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" case MarkCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" return new MarkCommand(Integer.parseInt(args.trim()));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" case UnmarkCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" return new UnmarkCommand(Integer.parseInt(args.trim()));","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" case ListCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" case ByeCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" case FindCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" return new FindCommand(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" case DeleteCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" return new DeleteCommand(Integer.parseInt(args.trim()));","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" case TodoCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" Matcher tdMatcher \u003d TODO_ARGS_PATTERN.matcher(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" if (tdMatcher.find()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" return new TodoCommand(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Name cannot be empty!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" case EventCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" Matcher evMatcher \u003d EVENT_ARGS_PATTERN.matcher(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":" if (evMatcher.find()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":" return new EventCommand(evMatcher.group(\"name\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.parseTime(evMatcher.group(\"startTime\").trim()),","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.parseTime(evMatcher.group(\"endTime\").trim()));","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Bad event arguments!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"TohLiYuan"},"content":" case DeadlineCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"TohLiYuan"},"content":" Matcher ddlMatcher \u003d DEADLINE_ARGS_PATTERN.matcher(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"TohLiYuan"},"content":" if (ddlMatcher.find()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"TohLiYuan"},"content":" return new DeadlineCommand(ddlMatcher.group(\"name\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.parseTime(ddlMatcher.group(\"time\").trim()));","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Bad deadline argument!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"TohLiYuan"},"content":" case RemindCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"TohLiYuan"},"content":" if (args.trim().length() \u003e 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"TohLiYuan"},"content":" int days \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"TohLiYuan"},"content":" return new RemindCommand(days);","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"TohLiYuan"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Please type in a valid number for your argument!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"TohLiYuan"},"content":" return new RemindCommand(7);","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"TohLiYuan"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Command not found\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":100}},{"path":"src/main/java/duke/parser/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" * Parses Task into string and vice versa.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"public class TaskParser {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * Formats an array of Task for local storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @param tasks the array of Task to be stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * @return the formatted string to be stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public static String generateSaveString(Task[] tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" StringBuilder ret \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" ret.append(task.toSave());","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" ret.append(\"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" return ret.toString().trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * Parses a string of saved data into Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" * @param saveLine the string of saved data.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" * @return an Optional class containing the parsed Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" public static Optional\u003cTask\u003e parseSave(String saveLine) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" String[] splitArray \u003d saveLine.split(Task.DISCRIMINATOR.replaceAll(\"\\\\|\", \"\\\\\\\\|\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cTask\u003e ret \u003d Optional.empty();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" switch (splitArray[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" case \"T\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" boolean status \u003d Integer.parseInt(splitArray[2]) \u003e\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" ret \u003d Optional.of(new Todo(splitArray[1], status));","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" case \"D\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" boolean status \u003d Integer.parseInt(splitArray[2]) \u003e\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" ret \u003d Optional.of(new Deadline(splitArray[1], status, TimeParser.parseTime(splitArray[3])));","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" case \"E\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" boolean status \u003d Integer.parseInt(splitArray[2]) \u003e\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" String[] timeDescriptor \u003d splitArray[3].split(\" to \");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" ret \u003d Optional.of(new Event(splitArray[1], status, TimeParser.parseTime(timeDescriptor[0]),","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.parseTime(timeDescriptor[1])));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" default: {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" return ret;","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"TohLiYuan":65}},{"path":"src/main/java/duke/parser/TimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * Parses Java DateTime to string and vice versa.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"public class TimeParser {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" private static DateTimeFormatter inputFormat \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private static DateTimeFormatter outputFormat \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm:ss\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" * Parses a string of time into a Java DateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * @param timeString the input string.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @return the parsed DateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" public static LocalDateTime parseTime(String timeString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" return LocalDateTime.parse(timeString, inputFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" * Parses a Java DateTime into plain text for display.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" * @param dateTime the Java DateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" * @return the formatted string.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" public static String returnTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" return dateTime.format(outputFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" * Changes a Java DateTime to the predefined input format of a date string.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" * Used for local storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" * @param dateTime the Java DateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" * @return the formatted string.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" public static String toSaveString(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" return dateTime.format(inputFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":46}},{"path":"src/main/java/duke/records/ChatRecord.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.records;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.parser.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.InvalidTaskException;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" * Records all tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"public class ChatRecord {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" private ArrayList\u003cTask\u003e chatRecords;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" public ChatRecord() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" chatRecords \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" * Load the data from local storage to the current records instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" * @return the status of the import.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" public String loadData() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" ArrayList\u003cTask\u003e temp \u003d SaveData.loadData();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" if (temp.size() \u003e\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" chatRecords \u003d temp;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" return \"Save loaded successfully!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" return \"No valid save found! Starting a new instance...\";","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" chatRecords.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" * @param n the task number of the task in the records.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" * @return the removed task.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" public Task deleteTask(int n) throws InvalidTaskException {","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" if (n \u003e chatRecords.size()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" throw new InvalidTaskException(\"Task not found! Please specify a task available in the task list!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" return chatRecords.remove(n - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" * Lists all tasks in the record.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" * @return the string representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" public String listMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" StringBuilder ret \u003d new StringBuilder();","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" for (int i \u003d 0; i \u003c chatRecords.size(); i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" ret.append(String.format(\"\\t%d. %s\\n\", i + 1, chatRecords.get(i).toString()));","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" return ret.toString().stripTrailing();","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" * Finds all tasks that contains the specified find word.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":" * @param findWord the word or phrase to find.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":" * @return an Optional of the string representation of all tasks with the specified find word.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"TohLiYuan"},"content":" public Optional\u003cString\u003e findMessage(String findWord) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"TohLiYuan"},"content":" StringBuilder ret \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"TohLiYuan"},"content":" for (Task task : chatRecords) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"TohLiYuan"},"content":" if (task.getName().contains(findWord)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"TohLiYuan"},"content":" ret.append(String.format(\"\\t%s\\n\", task));","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"TohLiYuan"},"content":" if (ret.length() \u003c\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"TohLiYuan"},"content":" return Optional.empty();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"TohLiYuan"},"content":" return Optional.of(ret.toString().stripTrailing());","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"TohLiYuan"},"content":" * Returns the string representation for the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"TohLiYuan"},"content":" * @return the string representation for the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"TohLiYuan"},"content":" public String toSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"TohLiYuan"},"content":" assert chatRecords !\u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"TohLiYuan"},"content":" Task[] temp \u003d new Task[chatRecords.size()];","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"TohLiYuan"},"content":" temp \u003d chatRecords.toArray(temp);","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"TohLiYuan"},"content":" return TaskParser.generateSaveString(temp);","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"TohLiYuan"},"content":" public int getCount() {","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"TohLiYuan"},"content":" return chatRecords.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"TohLiYuan"},"content":" public Task setMark(int n) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"TohLiYuan"},"content":" Task task \u003d chatRecords.get(n - 1).mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"TohLiYuan"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"TohLiYuan"},"content":" public Task setUnmark(int n) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"TohLiYuan"},"content":" Task task \u003d chatRecords.get(n - 1).unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"TohLiYuan"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"TohLiYuan"},"content":" public String getReminder(LocalDate date, int days) {","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"TohLiYuan"},"content":" StringBuilder ret \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"TohLiYuan"},"content":" int n \u003d 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"TohLiYuan"},"content":" for (Task task : chatRecords) {","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"TohLiYuan"},"content":" n++;","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"TohLiYuan"},"content":" String temp \u003d task.getReminder(date, days);","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"TohLiYuan"},"content":" if (temp \u003d\u003d null) {","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"TohLiYuan"},"content":" continue;","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"TohLiYuan"},"content":" ret.append(String.format(\"%d. %s\\n\", n, temp));","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"TohLiYuan"},"content":" return ret.toString().stripTrailing();","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":126}},{"path":"src/main/java/duke/storage/SaveData.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Optional;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import duke.parser.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" * Handles saving and loading from local storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":"public class SaveData {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" private static final String SAVE_FILE_LOCATION \u003d \"./SaveFile.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" * Saves the formatted data to local storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" * @param taskData the formatted string of the data to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" public static void saveData(String taskData) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" File f \u003d new File(SAVE_FILE_LOCATION);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" if (f.createNewFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" FileWriter fw \u003d new FileWriter(SAVE_FILE_LOCATION);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" fw.write(taskData);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" if (f.delete()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" FileWriter fw \u003d new FileWriter(SAVE_FILE_LOCATION);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" fw.write(taskData);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" throw new Exception(\"The file cannot be deleted!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(\"IO Error! \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" * Loads the data from the local storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" * @return An ArrayList of the loaded data. Returns an empty ArrayList if no stored data is found.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" public static ArrayList\u003cTask\u003e loadData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" File f \u003d new File(SAVE_FILE_LOCATION);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" Scanner sc \u003d new Scanner(f);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cTask\u003e optionalTask \u003d TaskParser.parseSave(sc.nextLine());","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" if (optionalTask.isPresent()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" optionalTask.ifPresent(tasks::add);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" sc.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(\"No save file found! Starting base instance\");","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(\"IO Error! \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"TohLiYuan":71}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.parser.TimeParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * Represents a Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime date;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @param date the date of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" public Deadline(String name, LocalDateTime date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" this.status \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.DEADLINE;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * @param status the completion status of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * @param date the date of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public Deadline(String name, boolean status, LocalDateTime date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" this.status \u003d status;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.DEADLINE;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" String statusMark \u003d this.status ? \"[✓]\" : \"[✕]\";","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"[D]%s %s (by: %s)\", statusMark, name, TimeParser.returnTime(date));","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" public String toSave() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"D%s%s%s%d%s%s\", DISCRIMINATOR, name, DISCRIMINATOR,","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" Boolean.compare(status, false), DISCRIMINATOR, TimeParser.toSaveString(date));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" public String getReminder(LocalDate currDate, int days) {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" if (this.status) {","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" if (this.date.getYear() !\u003d currDate.getYear()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" if (currDate.getDayOfYear() + days - this.date.getDayOfYear() \u003e\u003d 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" return this.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":69}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.parser.TimeParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * Represents an Event Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Event Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * @param startDate the starting date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" * @param endDate the ending date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" public Event(String name, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" this.status \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.EVENT;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Event Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" * @param status the completion status of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" * @param startDate the starting date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" * @param endDate the ending date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" public Event(String name, boolean status, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" this.status \u003d status;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.EVENT;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" String statusMark \u003d this.status ? \"[✓]\" : \"[✕]\";","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"[E]%s %s (from: %s to: %s)\", statusMark, name,","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.returnTime(startDate), TimeParser.returnTime(endDate));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" public String toSave() {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"E%s%s%s%d%s%s to %s\", DISCRIMINATOR, name, DISCRIMINATOR,","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" Boolean.compare(status, false), DISCRIMINATOR, TimeParser.toSaveString(startDate),","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.toSaveString(endDate));","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" public String getReminder(LocalDate currDate, int days) {","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" if (this.status) {","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" if (this.endDate.getYear() !\u003d currDate.getYear()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":" if (currDate.getDayOfYear() + days - this.endDate.getDayOfYear() \u003e\u003d 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":" return this.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":75}},{"path":"src/main/java/duke/task/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":" * An exception for invalid tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":" * Used when task operations are invalid.","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"public class InvalidTaskException extends RuntimeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" public InvalidTaskException(String message) {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" super(message);","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"TohLiYuan":13}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * The abstract class for Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" public static final String DISCRIMINATOR \u003d \" || \";","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" protected String name;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" protected boolean status;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" protected TaskTypes type;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * @return this Task that has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" public Task mark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" this.status \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" return this;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" * @return this Task that has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" public Task unmark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" this.status \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" return this;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public String getName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" return this.name;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" String statusMark \u003d this.status ? \"[✓]\" : \"[✕]\";","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"%s %s\", statusMark, name);","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" public abstract String toSave();","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" public abstract String getReminder(LocalDate currDate, int days);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":48}},{"path":"src/main/java/duke/task/TaskTypes.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":" * Contains all available Task Types.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"public enum TaskTypes {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" TODO,","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" DEADLINE,","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" EVENT;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":11}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * Represents a Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" this.status \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.TODO;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" * @param status the completion status of the Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" public Todo(String name, boolean status) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" this.status \u003d status;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.TODO;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" String statusMark \u003d this.status ? \"[✓]\" : \"[✕]\";","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"[T]%s %s\", statusMark, name);","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" public String toSave() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"T%s%s%s%d\", DISCRIMINATOR, name, DISCRIMINATOR, Boolean.compare(this.status, false));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" public String getReminder(LocalDate currDate, int days) {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":48}},{"path":"src/main/java/duke/ui/ChatView.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":" * Handles the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"public class ChatView {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" private static final String LINE_BREAK \u003d \"____________________________\";","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" public ChatView() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" * Starts the text UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" public void startMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(String.format(\"%s\\nKnowledgeYuan, at your service!\\nWhat can I do for you today?\\n%s\",","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" LINE_BREAK, LINE_BREAK));","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * Displays the stylised string result from actions to the console.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" * @param str the string to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" public void displayOutput(String str) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(beautifyString(str));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" * Displays the basic string result from actions to the console.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * @param str the string to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public void displayBasic(String str) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(str);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" private String beautifyString(String str) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"\\t%s\\n%s\\n%s\", LINE_BREAK, str, LINE_BREAK).replace(\"\\n\", \"\\n\\t\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"TohLiYuan":43}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.paint.ImagePattern;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.shape.Ellipse;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * The dialog box controller class for duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * Displays the input from the player and response from duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" private Ellipse imageClip;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" imageClip.setFill(new ImagePattern(img));","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" this.setAlignment(Pos.CENTER_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" public static DialogBox getUserDialog(String text, Image iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" return new DialogBox(text, iv);","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" public static DialogBox getDukeDialog(String text, Image iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" var db \u003d new DialogBox(text, iv);","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"TohLiYuan":58}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" * The main display window for duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" private AnchorPane anchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" private TextField inputField;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" private Duke duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/image/DaUser.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/image/DaDuke.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * Initialises the duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" public void initialize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" anchorPane.widthProperty().addListener((observable, oldValue, newValue) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" dialogContainer.setPrefWidth(newValue.doubleValue() - 12);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" this.duke \u003d d;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" String welcomeMsg \u003d this.duke.init();","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(welcomeMsg, dukeImage));","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" String input \u003d inputField.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" inputField.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" if (duke.isTerminate()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" exitApp();","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" return duke.getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" private void exitApp() {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" Platform.exit();","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"TohLiYuan":71}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.shape.Ellipse?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"\u003cfx:root alignment\u003d\"CENTER_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-09"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"CENTER_RIGHT\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" \u003cFont name\u003d\"SansSerif Regular\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" \u003cInsets right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" \u003cEllipse fx:id\u003d\"imageClip\" centerX\u003d\"50.0\" centerY\u003d\"50.0\" fill\u003d\"DODGERBLUE\" radiusX\u003d\"40.0\" radiusY\u003d\"50.0\" stroke\u003d\"BLACK\" strokeType\u003d\"INSIDE\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" \u003cInsets right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" \u003c/Ellipse\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"TohLiYuan":33}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"\u003cAnchorPane fx:id\u003d\"anchorPane\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" 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-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" \u003cTextField fx:id\u003d\"inputField\" layoutX\u003d\"5.0\" layoutY\u003d\"551.6666666666666\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"311.0\" promptText\u003d\"Type here\" AnchorPane.bottomAnchor\u003d\"7.0\" AnchorPane.leftAnchor\u003d\"5.0\" AnchorPane.rightAnchor\u003d\"77.0\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" \u003cFont name\u003d\"SansSerif Regular\" size\u003d\"18.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"551.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"70.0\" text\u003d\"Send\" AnchorPane.bottomAnchor\u003d\"7.0\" AnchorPane.rightAnchor\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"545.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\" AnchorPane.bottomAnchor\u003d\"50.0\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"0.0\" AnchorPane.topAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"545.0\" prefWidth\u003d\"388.0\" AnchorPane.bottomAnchor\u003d\"50.0\" AnchorPane.leftAnchor\u003d\"6.0\" AnchorPane.rightAnchor\u003d\"-.0\" AnchorPane.topAnchor\u003d\"0.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"TohLiYuan":23}},{"path":"src/test/java/duke/parser/CommandParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"public class CommandParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" public void todoParseTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"todo test123 test456\";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(testInput, cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public void deadlineParseTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"deadline test123 test456 /by 3/8/2023 1200\";","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(testInput, cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" public void eventParseTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"event test123 test456 /from 3/8/2023 1200 /to 5/8/2023 1200\";","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(testInput, cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" public void invalidCommandTest() {","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"test123 test456\";","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(\"Invalid Command! Command not found\", cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" public void invalidArgumentTest() {","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(\"Invalid Command! Name cannot be empty!\", cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" public void complexParseTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"todo deadline event /from 8/2/2023 1200 /to 8/3/2023 1400 /to 6/5/2023\";","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" // Expected: Todo Command with deadline event... as its name","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(testInput, cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"TohLiYuan":67}},{"path":"src/test/java/duke/parser/TaskParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"public class TaskParserTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" public void todoSaveString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" Todo td \u003d new Todo(\"Test\", true);","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" String parseOutput \u003d TaskParser.generateSaveString(new Task[]{td});","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" String expectedStr \u003d \"T || Test || 1\";","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(expectedStr, parseOutput);","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" public void deadlineSaveString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" LocalDateTime date \u003d LocalDateTime.of(2023, 8, 19, 10, 00);","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" Deadline ddl \u003d new Deadline(\"Test\", date);","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" String parseOutput \u003d TaskParser.generateSaveString(new Task[]{ddl});","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" String expectedStr \u003d \"D || Test || 0 || 19/8/2023 1000\";","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(expectedStr, parseOutput);","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public void eventSaveString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" LocalDateTime startDate \u003d LocalDateTime.of(2023, 8, 19, 10, 00);","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" LocalDateTime endDate \u003d LocalDateTime.of(2023, 8, 20, 22, 30);","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" Event evt \u003d new Event(\"Test\", true, startDate, endDate);","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" String parseOutput \u003d TaskParser.generateSaveString(new Task[]{evt});","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" String expectedStr \u003d \"E || Test || 1 || 19/8/2023 1000 to 20/8/2023 2230\";","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(expectedStr, parseOutput);","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" public void todoSaveParse() {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" String saveString \u003d \"T || test || 1\";","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cTask\u003e taskOptional \u003d TaskParser.parseSave(saveString);","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.isPresent());","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.get() instanceof Todo);","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(\"test\", taskOptional.get().getName());","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" public void deadlineSaveParse() {","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" String saveString \u003d \"D || test2 || 0 || 19/9/2023 1800\";","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cTask\u003e taskOptional \u003d TaskParser.parseSave(saveString);","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.isPresent());","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.get() instanceof Deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(\"test2\", taskOptional.get().getName());","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" public void eventSaveParse() {","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" String saveString \u003d \"E || test3 || 0 || 19/8/2023 1000 to 21/8/2023 2000\";","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cTask\u003e taskOptional \u003d TaskParser.parseSave(saveString);","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.isPresent());","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.get() instanceof Event);","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(\"test3\", taskOptional.get().getName());","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"TohLiYuan":71}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"idk","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":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":"TohLiYuan"},"content":"if not exist ..\\bin\\duke.task mkdir ..\\bin\\duke.task","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"javac -classpath ..\\src\\main\\java\\duke.task -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":"REM run the program, feed duke.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"TohLiYuan":5,"-":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":"-"},"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":"TohLiYuan"},"content":"# run the program, feed duke.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"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":{"TohLiYuan":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"TohLiYuan":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":"TohLiYuan"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-08"},{"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":"TohLiYuan"},"content":" mainClass.set(\"Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-01"},{"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":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":"javafx {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":"mainClassName \u003d \u0027Launcher\u0027","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"TohLiYuan":15,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"# KnowledgeYuan","lastModifiedDate":"2023-09-15"},{"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":"TohLiYuan"},"content":"### Tasks","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"Categorizes Tasks into 3 categories:","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"1. Todo","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" - A short task to be done","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"2. Deadline","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" - A Task to be done before a given date","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"3. Event","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" - A Task to be done throughout a given period of time","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"### Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":"Stores a list of your tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":"A user can add, remove, and mark a task as done/undone with the user of commands.","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":"### Reminder","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":"Reminds you of the most urgent tasks to be completed.","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":"A user can also see what needs to be done in the next few days with a command.","lastModifiedDate":"2023-09-15"},{"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":"TohLiYuan"},"content":"### `todo` - Add a new Todo Task","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":"Adds a new Todo Task to the Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":"`todo [name]`","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":"A new Todo Task will be added to your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":"### `deadline` - Add a new Deadline Task","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":"Adds a new Deadline Task to the Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":"`Deadline [name] /by [time]`","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":"*The time should be in `D/M/YYYY HHmm` format*","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":"A new Deadline Task will be added to your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":"### `event` - Add a new Event Task","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":"Adds a new Event Task to the Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":"`event [name] /from [time] /to [time]`","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":"*The time should be in `D/M/YYYY HHmm` format*","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":"A new Event Task will be added to your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":"### `list` - List all Tasks","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":"List all Tasks in your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"TohLiYuan"},"content":"`list`","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"TohLiYuan"},"content":"A list of Tasks currently in your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"TohLiYuan"},"content":"### `delete` - Delete a Task","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"TohLiYuan"},"content":"Deletes the specified Task from your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"TohLiYuan"},"content":"`delete [index]`","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"TohLiYuan"},"content":"*[index] is the number of the Task as shown in the Task List*","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"TohLiYuan"},"content":"The Task will be removed from your Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"TohLiYuan"},"content":"### `mark` - Marks a Task as done","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":97,"author":{"gitId":"TohLiYuan"},"content":"Marks the specified Task as done","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":99,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":101,"author":{"gitId":"TohLiYuan"},"content":"`mark [index]`","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"TohLiYuan"},"content":"*[index] is the number of the Task as shown in the Task List*","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":105,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":107,"author":{"gitId":"TohLiYuan"},"content":"The marked task should now have a \"tick\" sign in the status","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"TohLiYuan"},"content":"### `unmark` - Marks a Task as not done","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"TohLiYuan"},"content":"Marks the specified Task as not done","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"TohLiYuan"},"content":"`unmark [index]`","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"TohLiYuan"},"content":"*[index] is the number of the Task as shown in the Task List*","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"TohLiYuan"},"content":"The marked task should no longer have a \"tick\" sign in the status","lastModifiedDate":"2023-09-15"},{"lineNumber":122,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":123,"author":{"gitId":"TohLiYuan"},"content":"### `find` - Finds Tasks in the Task List","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"TohLiYuan"},"content":"Finds all Tasks in the Task List that has the specified keyword","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":127,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"TohLiYuan"},"content":"`find [keyword]`","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":132,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"TohLiYuan"},"content":"A list of Task with the keyword in their name","lastModifiedDate":"2023-09-15"},{"lineNumber":134,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"TohLiYuan"},"content":"### `remind` - Reminds you of urgent Tasks","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"TohLiYuan"},"content":"Tells you the urgent Tasks that should be completed in a specified time","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":139,"author":{"gitId":"TohLiYuan"},"content":"Example of usage:","lastModifiedDate":"2023-09-15"},{"lineNumber":140,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"TohLiYuan"},"content":"`remind (number of days)`","lastModifiedDate":"2023-09-15"},{"lineNumber":142,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":143,"author":{"gitId":"TohLiYuan"},"content":"*(number of days) represents the number of days you want to seek ahead* ","lastModifiedDate":"2023-09-15"},{"lineNumber":144,"author":{"gitId":"TohLiYuan"},"content":"*By default it looks for tasks 7 days in advance*","lastModifiedDate":"2023-09-15"},{"lineNumber":145,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":146,"author":{"gitId":"TohLiYuan"},"content":"Expected outcome:","lastModifiedDate":"2023-09-15"},{"lineNumber":147,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":148,"author":{"gitId":"TohLiYuan"},"content":"A list of task that you should complete within the next n days","lastModifiedDate":"2023-09-15"},{"lineNumber":149,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":150,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":151,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":152,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":153,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":154,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":155,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":156,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"TohLiYuan":136,"-":21}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":" * The launcher entry point for duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"TohLiYuan":10}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" * The main entry class to launch the duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Duke.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" stage.setTitle(\"KnowledgeYuan\");","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" public void stop() {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" Thread.sleep(1000);","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"TohLiYuan":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.ByeCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.parser.CommandParser;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"public class Duke {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private static final String INIT_PHRASE \u003d \"KnowledgeYuan, at your service!\\nWhat can I do for you today?\";","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" private static final String REMINDER_PHRASE \u003d","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" \"The following tasks are urgent! Please remove them from the list after completing!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" private boolean isEnd \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" private CommandParser cp;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" private ChatRecord chatRecord;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * Initialises the Duke program.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" * @return the greeting string.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" public String init() {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" cp \u003d new CommandParser();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" chatRecord \u003d new ChatRecord();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" chatRecord.loadData();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" String reminders \u003d chatRecord.getReminder(LocalDate.now(), 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" if (reminders.length() \u003e\u003d 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" return INIT_PHRASE + \"\\n\" + REMINDER_PHRASE + \"\\n\" + reminders;","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" return INIT_PHRASE;","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" * Returns a response from Duke from a given input.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" * @param input the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" * @return the response from duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand((input));","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" if (ByeCommand.isBye(cmd)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" isEnd \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" cmd.init(chatRecord);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" String out \u003d cmd.execute();","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" assert out !\u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" return out;","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" public boolean isTerminate() {","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" return isEnd;","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"TohLiYuan":58}},{"path":"src/main/java/duke/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * The command to exit the program.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"bye\";","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" private static final String BYE_PHRASE \u003d \"Access Terminated! Hope to see you again soon!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public ByeCommand() { }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) { }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Bye Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @return The bye phrase to be displayed as feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" return BYE_PHRASE;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" public static boolean isBye(Command command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" return command instanceof ByeCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":29}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * The abstract class for commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" protected ChatRecord chatRecord;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" public abstract void init(ChatRecord chatRecord);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public abstract String execute();","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":13}},{"path":"src/main/java/duke/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" * The command to create a Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"deadline\";","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"New Deadline Task added to list!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" private String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime date;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to add Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" * @param date the date of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" public DeadlineCommand(String name, LocalDateTime date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Deadline Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" * A new Deadline Task will be added to the records.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" * @return The string to be displayed as feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" Deadline ddl \u003d new Deadline(name, date);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord.addTask(ddl);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \" \" + ddl.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + name + \" /by \" + date.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":55}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.InvalidTaskException;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * The command to delete a Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"delete\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"The following task has been deleted: \";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" private int toDelete;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" public DeleteCommand(int i) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" this.toDelete \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Delete Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" * The selected Task will be deleted from the record.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" * @return The string representation of the Task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" assert toDelete \u003c this.chatRecord.getCount();","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" Task task \u003d this.chatRecord.deleteTask(toDelete);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \" \" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + toDelete;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":46}},{"path":"src/main/java/duke/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" * The command to add an Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"event\";","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"New Event Task added to list!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" private String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to add an Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" * @param startDate the starting date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" * @param endDate the ending date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" public EventCommand(String name, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Event Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" * A new Event Task will be added to the records.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" * @return The string to be displayed as feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" Event ev \u003d new Event(name, startDate, endDate);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord.addTask(ev);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \" \" + ev.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + name + \" /from \"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" + startDate.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" + \" /to \" + endDate.format(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":58}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * The command to find tasks with the given keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"find\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"These are the tasks with the matching keyword:\";","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private static final String NO_RESULT \u003d \"You have no tasks in the list with the matching keyword!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" private String findWord;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" private ChatRecord records;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" public FindCommand(String findWord) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" this.findWord \u003d findWord;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" this.records \u003d records;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cString\u003e res \u003d records.findMessage(findWord);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" if (res.isPresent()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \"\\n\" + res.get();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" return NO_RESULT;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + findWord;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"TohLiYuan":39}},{"path":"src/main/java/duke/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * A placeholder command for invalid commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" private String prefix \u003d \"Invalid Command! \";","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" private String errMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command for invalid commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * @param errMessage the error message to show to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" public InvalidCommand(String errMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" this.errMessage \u003d errMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) { }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Invalid Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" * @return The error string to be displayed as feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" return prefix + errMessage;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" return prefix + errMessage;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":39}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * The command to list all recorded tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"list\";","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" public ListCommand() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created List Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * @return The list of task to be displayed to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" return \"You have \" + chatRecord.getCount() + \" tasks in your list!\\n\" + chatRecord.listMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":28}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * The command to mark a task as complete.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"mark\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"Marked the following task as completed!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private int toMark;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to mark a task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @param i the task number of the task to be marked in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" public MarkCommand(int i) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" this.toMark \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Mark Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * @return The string representation of task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" Task task \u003d chatRecord.setMark(toMark);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \"\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + toMark;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":45}},{"path":"src/main/java/duke/commands/RemindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * The command to list all urgent tasks within a time period.","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"public class RemindCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"remind\";","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private LocalDate currDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" private int days;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to display reminder to the user.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * @param days The number of days to seek for urgent tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public RemindCommand(int days) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" this.currDate \u003d LocalDate.now();","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" this.days \u003d days;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Remind Command.","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" * @return The reminder list to be displayed to the user.","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" String reminders \u003d this.chatRecord.getReminder(currDate, days);","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" if (reminders.length() \u003c 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" return \"You have no urgent tasks!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"These are the tasks you need to finish by next %d day(s):\\n%s\", this.days, reminders);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"TohLiYuan":46}},{"path":"src/main/java/duke/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * The command to add a Todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"todo\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"New Todo Task added to list!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" private String name;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to add a Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public TodoCommand(String name) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Todo Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * A new Todo Task will be added to the records.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" * @return The string to be displayed as feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" Todo td \u003d new Todo(this.name);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord.addTask(td);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \" \" + td.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + name;","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":49}},{"path":"src/main/java/duke/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.records.ChatRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * The command to unmark a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" public static final String COMMAND_PHRASE \u003d \"unmark\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private static final String COMMAND_DESC \u003d \"Marked the following task as incomplete!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private int toUnmark;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * Creates a command to unmark a Task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @param i the task number of the task to be unmarked in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" public UnmarkCommand(int i) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" this.toUnmark \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" public void init(ChatRecord records) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" this.chatRecord \u003d records;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" * Executes the created Unmark Command.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * @return The string representation of task to be unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public String execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" Task task \u003d chatRecord.setUnmark(toUnmark);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" SaveData.saveData(this.chatRecord.toSave());","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_DESC + \"\\n\" + task.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" return COMMAND_PHRASE + \" \" + toUnmark;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":45}},{"path":"src/main/java/duke/parser/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.ByeCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.DeadlineCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.EventCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.InvalidCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.RemindCommand;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.TodoCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * Parses user input into command.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":"public class CommandParser {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" private static final Pattern COMMAND_PATTERN \u003d Pattern.compile(\"(?\u003ccommandWord\u003e\\\\S+)(?\u003carguments\u003e.*)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" private static final Pattern TODO_ARGS_PATTERN \u003d Pattern.compile(\"(?\u003cname\u003e\\\\S.*)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" private static final Pattern DEADLINE_ARGS_PATTERN \u003d Pattern.compile(\"(?\u003cname\u003e\\\\S+.*)( /by )(?\u003ctime\u003e\\\\S.*)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" private static final Pattern EVENT_ARGS_PATTERN \u003d","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" Pattern.compile(\"(?\u003cname\u003e\\\\S+.*)( /from )(?\u003cstartTime\u003e\\\\S.*)( /to )(?\u003cendTime\u003e\\\\S.*)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" public CommandParser() { }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * Processes a user input to a command.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" * @param input the input string from the user","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" * @return the correct command from user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" * Returns an Invalid Command if a syntax error in the command is found.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" public Command parseCommand(String input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" Matcher matcher \u003d COMMAND_PATTERN.matcher(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Invalid command format\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" String commandWord \u003d matcher.group(\"commandWord\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" String args \u003d matcher.group(\"arguments\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" switch (commandWord) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" case MarkCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" return new MarkCommand(Integer.parseInt(args.trim()));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" case UnmarkCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" return new UnmarkCommand(Integer.parseInt(args.trim()));","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" case ListCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" case ByeCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" case FindCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" return new FindCommand(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" case DeleteCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" return new DeleteCommand(Integer.parseInt(args.trim()));","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" case TodoCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" Matcher tdMatcher \u003d TODO_ARGS_PATTERN.matcher(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" if (tdMatcher.find()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" return new TodoCommand(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Name cannot be empty!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" case EventCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" Matcher evMatcher \u003d EVENT_ARGS_PATTERN.matcher(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":" if (evMatcher.find()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":" return new EventCommand(evMatcher.group(\"name\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.parseTime(evMatcher.group(\"startTime\").trim()),","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.parseTime(evMatcher.group(\"endTime\").trim()));","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Bad event arguments!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"TohLiYuan"},"content":" case DeadlineCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"TohLiYuan"},"content":" Matcher ddlMatcher \u003d DEADLINE_ARGS_PATTERN.matcher(args.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"TohLiYuan"},"content":" if (ddlMatcher.find()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"TohLiYuan"},"content":" return new DeadlineCommand(ddlMatcher.group(\"name\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.parseTime(ddlMatcher.group(\"time\").trim()));","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Bad deadline argument!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"TohLiYuan"},"content":" case RemindCommand.COMMAND_PHRASE:","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"TohLiYuan"},"content":" if (args.trim().length() \u003e 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"TohLiYuan"},"content":" int days \u003d Integer.parseInt(args.trim());","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"TohLiYuan"},"content":" return new RemindCommand(days);","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"TohLiYuan"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Please type in a valid number for your argument!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"TohLiYuan"},"content":" return new RemindCommand(7);","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"TohLiYuan"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"TohLiYuan"},"content":" return new InvalidCommand(\"Command not found\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":100}},{"path":"src/main/java/duke/parser/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" * Parses Task into string and vice versa.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"public class TaskParser {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * Formats an array of Task for local storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @param tasks the array of Task to be stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * @return the formatted string to be stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public static String generateSaveString(Task[] tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" StringBuilder ret \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" ret.append(task.toSave());","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" ret.append(\"\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" return ret.toString().trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * Parses a string of saved data into Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" * @param saveLine the string of saved data.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" * @return an Optional class containing the parsed Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" public static Optional\u003cTask\u003e parseSave(String saveLine) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" String[] splitArray \u003d saveLine.split(Task.DISCRIMINATOR.replaceAll(\"\\\\|\", \"\\\\\\\\|\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cTask\u003e ret \u003d Optional.empty();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" switch (splitArray[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" case \"T\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" boolean status \u003d Integer.parseInt(splitArray[2]) \u003e\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" ret \u003d Optional.of(new Todo(splitArray[1], status));","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" case \"D\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" boolean status \u003d Integer.parseInt(splitArray[2]) \u003e\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" ret \u003d Optional.of(new Deadline(splitArray[1], status, TimeParser.parseTime(splitArray[3])));","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" case \"E\": {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" boolean status \u003d Integer.parseInt(splitArray[2]) \u003e\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" String[] timeDescriptor \u003d splitArray[3].split(\" to \");","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" ret \u003d Optional.of(new Event(splitArray[1], status, TimeParser.parseTime(timeDescriptor[0]),","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.parseTime(timeDescriptor[1])));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" default: {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" return ret;","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"TohLiYuan":65}},{"path":"src/main/java/duke/parser/TimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * Parses Java DateTime to string and vice versa.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"public class TimeParser {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" private static DateTimeFormatter inputFormat \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private static DateTimeFormatter outputFormat \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm:ss\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" * Parses a string of time into a Java DateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * @param timeString the input string.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @return the parsed DateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" public static LocalDateTime parseTime(String timeString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" return LocalDateTime.parse(timeString, inputFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" * Parses a Java DateTime into plain text for display.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" * @param dateTime the Java DateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" * @return the formatted string.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" public static String returnTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" return dateTime.format(outputFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" * Changes a Java DateTime to the predefined input format of a date string.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" * Used for local storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" * @param dateTime the Java DateTime.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" * @return the formatted string.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" public static String toSaveString(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" return dateTime.format(inputFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"TohLiYuan":46}},{"path":"src/main/java/duke/records/ChatRecord.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.records;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import duke.parser.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.storage.SaveData;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.InvalidTaskException;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" * Records all tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"public class ChatRecord {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" private ArrayList\u003cTask\u003e chatRecords;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" public ChatRecord() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" chatRecords \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" * Loads the data from local storage to the current records instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" * @return the status of the import.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" public String loadData() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" ArrayList\u003cTask\u003e temp \u003d SaveData.loadData();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" if (temp.size() \u003e\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" chatRecords \u003d temp;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" return \"Save loaded successfully!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" return \"No valid save found! Starting a new instance...\";","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" chatRecords.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" * @param n the task number of the task in the records.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" * @return the removed task.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" public Task deleteTask(int n) throws InvalidTaskException {","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" if (n \u003e chatRecords.size()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" throw new InvalidTaskException(\"Task not found! Please specify a task available in the task list!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" return chatRecords.remove(n - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" * Lists all tasks in the record.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" * @return the string representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" public String listMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" StringBuilder ret \u003d new StringBuilder();","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" for (int i \u003d 0; i \u003c chatRecords.size(); i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" ret.append(String.format(\"\\t%d. %s\\n\", i + 1, chatRecords.get(i).toString()));","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" return ret.toString().stripTrailing();","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" * Finds all tasks that contains the specified find word.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":" * @param findWord the word or phrase to find.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":" * @return an Optional of the string representation of all tasks with the specified find word.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"TohLiYuan"},"content":" public Optional\u003cString\u003e findMessage(String findWord) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"TohLiYuan"},"content":" StringBuilder ret \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"TohLiYuan"},"content":" for (Task task : chatRecords) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"TohLiYuan"},"content":" if (task.getName().contains(findWord)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"TohLiYuan"},"content":" ret.append(String.format(\"\\t%s\\n\", task));","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"TohLiYuan"},"content":" if (ret.length() \u003c\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"TohLiYuan"},"content":" return Optional.empty();","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"TohLiYuan"},"content":" return Optional.of(ret.toString().stripTrailing());","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"TohLiYuan"},"content":" * Returns the string representation for the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"TohLiYuan"},"content":" * @return the string representation for the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"TohLiYuan"},"content":" public String toSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"TohLiYuan"},"content":" assert chatRecords !\u003d null;","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"TohLiYuan"},"content":" Task[] temp \u003d new Task[chatRecords.size()];","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"TohLiYuan"},"content":" temp \u003d chatRecords.toArray(temp);","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"TohLiYuan"},"content":" return TaskParser.generateSaveString(temp);","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"TohLiYuan"},"content":" public int getCount() {","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"TohLiYuan"},"content":" return chatRecords.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"TohLiYuan"},"content":" public Task setMark(int n) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"TohLiYuan"},"content":" Task task \u003d chatRecords.get(n - 1).mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"TohLiYuan"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"TohLiYuan"},"content":" public Task setUnmark(int n) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"TohLiYuan"},"content":" Task task \u003d chatRecords.get(n - 1).unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"TohLiYuan"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"TohLiYuan"},"content":" public String getReminder(LocalDate date, int days) {","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"TohLiYuan"},"content":" StringBuilder ret \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"TohLiYuan"},"content":" int n \u003d 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"TohLiYuan"},"content":" for (Task task : chatRecords) {","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"TohLiYuan"},"content":" n++;","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"TohLiYuan"},"content":" String temp \u003d task.getReminder(date, days);","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"TohLiYuan"},"content":" if (temp \u003d\u003d null) {","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"TohLiYuan"},"content":" continue;","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"TohLiYuan"},"content":" ret.append(String.format(\"%d. %s\\n\", n, temp));","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"TohLiYuan"},"content":" return ret.toString().stripTrailing();","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":126}},{"path":"src/main/java/duke/storage/SaveData.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Optional;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import duke.parser.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" * Handles saving and loading from local storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":"public class SaveData {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" private static final String SAVE_FILE_LOCATION \u003d \"./SaveFile.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" * Saves the formatted data to local storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" * @param taskData the formatted string of the data to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" public static void saveData(String taskData) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" File f \u003d new File(SAVE_FILE_LOCATION);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" if (f.createNewFile()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" FileWriter fw \u003d new FileWriter(SAVE_FILE_LOCATION);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" fw.write(taskData);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" if (f.delete()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" FileWriter fw \u003d new FileWriter(SAVE_FILE_LOCATION);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" fw.write(taskData);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" throw new Exception(\"The file cannot be deleted!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(\"IO Error! \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" * Loads the data from the local storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" * @return An ArrayList of the loaded data. Returns an empty ArrayList if no stored data is found.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" public static ArrayList\u003cTask\u003e loadData() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" File f \u003d new File(SAVE_FILE_LOCATION);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" Scanner sc \u003d new Scanner(f);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cTask\u003e optionalTask \u003d TaskParser.parseSave(sc.nextLine());","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" if (optionalTask.isPresent()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" optionalTask.ifPresent(tasks::add);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" sc.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(\"No save file found! Starting base instance\");","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(\"IO Error! \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"TohLiYuan":71}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.parser.TimeParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * Represents a Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime date;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @param date the date of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" public Deadline(String name, LocalDateTime date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.DEADLINE;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * @param status the completion status of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * @param date the date of the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public Deadline(String name, boolean status, LocalDateTime date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" this.isDone \u003d status;","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.DEADLINE;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" String statusMark \u003d this.isDone ? \"[✓]\" : \"[✕]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"[D]%s %s (by: %s)\", statusMark, name, TimeParser.returnTime(date));","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" public String toSave() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"D%s%s%s%d%s%s\", DISCRIMINATOR, name, DISCRIMINATOR,","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" Boolean.compare(isDone, false), DISCRIMINATOR, TimeParser.toSaveString(date));","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" public String getReminder(LocalDate currDate, int days) {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" if (this.date.getYear() !\u003d currDate.getYear()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" if (currDate.getDayOfYear() + days - this.date.getDayOfYear() \u003e\u003d 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" return this.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":69}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import duke.parser.TimeParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" * Represents an Event Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" private LocalDateTime endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Event Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" * @param startDate the starting date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" * @param endDate the ending date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" public Event(String name, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.EVENT;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Event Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" * @param status the completion status of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" * @param startDate the starting date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" * @param endDate the ending date of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" public Event(String name, boolean status, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" this.isDone \u003d status;","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.EVENT;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" String statusMark \u003d this.isDone ? \"[✓]\" : \"[✕]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"[E]%s %s (from: %s to: %s)\", statusMark, name,","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.returnTime(startDate), TimeParser.returnTime(endDate));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" public String toSave() {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"E%s%s%s%d%s%s to %s\", DISCRIMINATOR, name, DISCRIMINATOR,","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" Boolean.compare(isDone, false), DISCRIMINATOR, TimeParser.toSaveString(startDate),","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" TimeParser.toSaveString(endDate));","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" public String getReminder(LocalDate currDate, int days) {","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" if (this.endDate.getYear() !\u003d currDate.getYear()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":" if (currDate.getDayOfYear() + days - this.endDate.getDayOfYear() \u003e\u003d 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":" return this.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":75}},{"path":"src/main/java/duke/task/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":" * An exception for invalid tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":" * Used when task operations are invalid.","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"public class InvalidTaskException extends RuntimeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" public InvalidTaskException(String message) {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" super(message);","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"TohLiYuan":13}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * The abstract class for Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" public static final String DISCRIMINATOR \u003d \" || \";","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" protected String name;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" protected TaskTypes type;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * @return this Task that has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" public Task mark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" return this;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" * @return this Task that has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" public Task unmark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" return this;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public String getName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" return this.name;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" String statusMark \u003d this.isDone ? \"[✓]\" : \"[✕]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"%s %s\", statusMark, name);","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" public abstract String toSave();","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" public abstract String getReminder(LocalDate currDate, int days);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":48}},{"path":"src/main/java/duke/task/TaskTypes.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":" * Contains all available Task Types.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"public enum TaskTypes {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" TODO,","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" DEADLINE,","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" EVENT;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":11}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" * Represents a Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.TODO;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * Creates a new Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" * @param name the name of the Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" * @param status the completion status of the Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" public Todo(String name, boolean status) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" this.isDone \u003d status;","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" this.type \u003d TaskTypes.TODO;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" String statusMark \u003d this.isDone ? \"[✓]\" : \"[✕]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"[T]%s %s\", statusMark, name);","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" public String toSave() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"T%s%s%s%d\", DISCRIMINATOR, name, DISCRIMINATOR, Boolean.compare(this.isDone, false));","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" public String getReminder(LocalDate currDate, int days) {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" return null;","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":48}},{"path":"src/main/java/duke/ui/ChatView.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":" * Handles the UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":" * @author Toh Li Yuan (A0255811H)","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"public class ChatView {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":" private static final String LINE_BREAK \u003d \"____________________________\";","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":" public ChatView() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" * Starts the text UI.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" public void startMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(String.format(\"%s\\nKnowledgeYuan, at your service!\\nWhat can I do for you today?\\n%s\",","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" LINE_BREAK, LINE_BREAK));","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" * Displays the stylised string result from actions to the console.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" * @param str the string to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" public void displayOutput(String str) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(beautifyString(str));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" * Displays the basic string result from actions to the console.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * @param str the string to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public void displayBasic(String str) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" System.out.println(str);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" private String beautifyString(String str) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" return String.format(\"\\t%s\\n%s\\n%s\", LINE_BREAK, str, LINE_BREAK).replace(\"\\n\", \"\\n\\t\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"TohLiYuan":43}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.paint.ImagePattern;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.shape.Ellipse;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" * The dialog box controller class for duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" * Displays the input from the player and response from duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" private Ellipse imageClip;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" imageClip.setFill(new ImagePattern(img));","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" this.setAlignment(Pos.CENTER_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" public static DialogBox getUserDialog(String text, Image iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" return new DialogBox(text, iv);","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" public static DialogBox getDukeDialog(String text, Image iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" var db \u003d new DialogBox(text, iv);","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"TohLiYuan":58}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" * The main display window for duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" private AnchorPane anchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" private TextField inputField;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" private Duke duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/image/DaUser.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/image/DaDuke.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" * Initialises the duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" public void initialize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" anchorPane.widthProperty().addListener((observable, oldValue, newValue) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" dialogContainer.setPrefWidth(newValue.doubleValue() - 12);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" this.duke \u003d d;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" String welcomeMsg \u003d this.duke.init();","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(welcomeMsg, dukeImage));","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" String input \u003d inputField.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" inputField.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" if (duke.isTerminate()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" exitApp();","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" return duke.getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" private void exitApp() {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" Platform.exit();","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"TohLiYuan":71}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.shape.Ellipse?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"\u003cfx:root alignment\u003d\"CENTER_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-09"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"CENTER_RIGHT\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" \u003cFont name\u003d\"SansSerif Regular\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" \u003cInsets right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" \u003cEllipse fx:id\u003d\"imageClip\" centerX\u003d\"50.0\" centerY\u003d\"50.0\" fill\u003d\"DODGERBLUE\" radiusX\u003d\"40.0\" radiusY\u003d\"50.0\" stroke\u003d\"BLACK\" strokeType\u003d\"INSIDE\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" \u003cInsets right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" \u003c/Ellipse\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"TohLiYuan":33}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"\u003cAnchorPane fx:id\u003d\"anchorPane\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" 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-09"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" \u003cTextField fx:id\u003d\"inputField\" layoutX\u003d\"5.0\" layoutY\u003d\"551.6666666666666\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"311.0\" promptText\u003d\"Type here\" AnchorPane.bottomAnchor\u003d\"7.0\" AnchorPane.leftAnchor\u003d\"5.0\" AnchorPane.rightAnchor\u003d\"77.0\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" \u003cFont name\u003d\"SansSerif Regular\" size\u003d\"18.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"551.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"70.0\" text\u003d\"Send\" AnchorPane.bottomAnchor\u003d\"7.0\" AnchorPane.rightAnchor\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"545.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\" AnchorPane.bottomAnchor\u003d\"50.0\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"0.0\" AnchorPane.topAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"545.0\" prefWidth\u003d\"388.0\" AnchorPane.bottomAnchor\u003d\"50.0\" AnchorPane.leftAnchor\u003d\"6.0\" AnchorPane.rightAnchor\u003d\"-.0\" AnchorPane.topAnchor\u003d\"0.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"TohLiYuan":23}},{"path":"src/test/java/duke/parser/CommandParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"public class CommandParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":" public void todoParseTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"todo test123 test456\";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(testInput, cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" public void deadlineParseTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"deadline test123 test456 /by 3/8/2023 1200\";","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(testInput, cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" public void eventParseTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"event test123 test456 /from 3/8/2023 1200 /to 5/8/2023 1200\";","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(testInput, cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" public void invalidCommandTest() {","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"test123 test456\";","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(\"Invalid Command! Command not found\", cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" public void invalidArgumentTest() {","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(\"Invalid Command! Name cannot be empty!\", cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" public void complexParseTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" CommandParser cp \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" String testInput \u003d \"todo deadline event /from 8/2/2023 1200 /to 8/3/2023 1400 /to 6/5/2023\";","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":" // Expected: Todo Command with deadline event... as its name","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" Command cmd \u003d cp.parseCommand(testInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" assertNotNull(cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(testInput, cmd.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"TohLiYuan":67}},{"path":"src/test/java/duke/parser/TaskParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"import java.util.Optional;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"TohLiYuan"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"TohLiYuan"},"content":"public class TaskParserTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"TohLiYuan"},"content":" public void todoSaveString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":" Todo td \u003d new Todo(\"Test\", true);","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":" String parseOutput \u003d TaskParser.generateSaveString(new Task[]{td});","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"TohLiYuan"},"content":" String expectedStr \u003d \"T || Test || 1\";","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(expectedStr, parseOutput);","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"TohLiYuan"},"content":" public void deadlineSaveString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"TohLiYuan"},"content":" LocalDateTime date \u003d LocalDateTime.of(2023, 8, 19, 10, 00);","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"TohLiYuan"},"content":" Deadline ddl \u003d new Deadline(\"Test\", date);","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"TohLiYuan"},"content":" String parseOutput \u003d TaskParser.generateSaveString(new Task[]{ddl});","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"TohLiYuan"},"content":" String expectedStr \u003d \"D || Test || 0 || 19/8/2023 1000\";","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(expectedStr, parseOutput);","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"TohLiYuan"},"content":" public void eventSaveString() {","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"TohLiYuan"},"content":" LocalDateTime startDate \u003d LocalDateTime.of(2023, 8, 19, 10, 00);","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"TohLiYuan"},"content":" LocalDateTime endDate \u003d LocalDateTime.of(2023, 8, 20, 22, 30);","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"TohLiYuan"},"content":" Event evt \u003d new Event(\"Test\", true, startDate, endDate);","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"TohLiYuan"},"content":" String parseOutput \u003d TaskParser.generateSaveString(new Task[]{evt});","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"TohLiYuan"},"content":" String expectedStr \u003d \"E || Test || 1 || 19/8/2023 1000 to 20/8/2023 2230\";","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(expectedStr, parseOutput);","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"TohLiYuan"},"content":" public void todoSaveParse() {","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"TohLiYuan"},"content":" String saveString \u003d \"T || test || 1\";","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cTask\u003e taskOptional \u003d TaskParser.parseSave(saveString);","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.isPresent());","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.get() instanceof Todo);","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(\"test\", taskOptional.get().getName());","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"TohLiYuan"},"content":" public void deadlineSaveParse() {","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"TohLiYuan"},"content":" String saveString \u003d \"D || test2 || 0 || 19/9/2023 1800\";","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cTask\u003e taskOptional \u003d TaskParser.parseSave(saveString);","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.isPresent());","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.get() instanceof Deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(\"test2\", taskOptional.get().getName());","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"TohLiYuan"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"TohLiYuan"},"content":" public void eventSaveParse() {","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"TohLiYuan"},"content":" String saveString \u003d \"E || test3 || 0 || 19/8/2023 1000 to 21/8/2023 2000\";","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"TohLiYuan"},"content":" Optional\u003cTask\u003e taskOptional \u003d TaskParser.parseSave(saveString);","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.isPresent());","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(true, taskOptional.get() instanceof Event);","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"TohLiYuan"},"content":" assertEquals(\"test3\", taskOptional.get().getName());","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"TohLiYuan"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"TohLiYuan"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"TohLiYuan":71}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"TohLiYuan"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"TohLiYuan"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"TohLiYuan"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"TohLiYuan"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"TohLiYuan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"TohLiYuan"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"TohLiYuan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"TohLiYuan"},"content":"idk","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"TohLiYuan"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"TohLiYuan"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"TohLiYuan":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":"TohLiYuan"},"content":"if not exist ..\\bin\\duke.task mkdir ..\\bin\\duke.task","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"TohLiYuan"},"content":"javac -classpath ..\\src\\main\\java\\duke.task -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"TohLiYuan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"TohLiYuan"},"content":"REM run the program, feed duke.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"TohLiYuan"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"TohLiYuan":5,"-":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":"-"},"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":"TohLiYuan"},"content":"# run the program, feed duke.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"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":{"TohLiYuan":1,"-":37}}] diff --git a/TohLiYuan_ip_master/commits.json b/TohLiYuan_ip_master/commits.json index ca0a4b34..1478f588 100644 --- a/TohLiYuan_ip_master/commits.json +++ b/TohLiYuan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"TohLiYuan":[{"date":"2023-08-23","commitResults":[{"hash":"154cc4b83969a47dc8e3eb043b3be205d677b2d3","isMergeCommit":false,"messageTitle":"Rename \u0026 Skeletal Version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"f419d8e1bc507baf02a98c2fd16b313abc3a2de5","isMergeCommit":false,"messageTitle":"Refactor, Chat Echoing","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":3}}},{"hash":"9baa02d1a2138f032dd8ec1159faa928742c1b97","isMergeCommit":false,"messageTitle":"Message Records \u0026 Command Refactor","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":5}}},{"hash":"ca206eebbfc1e5c9720ad8333bdb74e57f0f422c","isMergeCommit":false,"messageTitle":"Tasks \u0026 Marking, renamed variables to follow convention","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":11}}},{"hash":"8c450e068fa290da190a0b78e79e5bb7399bf39c","isMergeCommit":false,"messageTitle":"Task Types, Refactor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":16}}},{"hash":"44c0017b7290ffd7af3c9e1e01e731e01a1c0234","isMergeCommit":false,"messageTitle":"Minor Formatting","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"946b8037dea23940ec999b981e0076b02d36a960","isMergeCommit":false,"messageTitle":"Automated Test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"bat":{"insertions":3,"deletions":1}}},{"hash":"9974d8eff40bd2c248c13757d70a932fb07df322","isMergeCommit":false,"messageTitle":"Error Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":11}}},{"hash":"ed3c154da808b6dbd06bea62cc360ee0de7f8287","isMergeCommit":false,"messageTitle":"Deleting Tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":20,"deletions":15}}}]},{"date":"2023-08-28","commitResults":[{"hash":"1270151866d4479ada5998e19037136fdcf7dd9a","isMergeCommit":false,"messageTitle":"Primitive saving mechanism (to be tested)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":179,"deletions":1}}},{"hash":"8b061a9c97bf859476c08818258a52c5c24e80a9","isMergeCommit":false,"messageTitle":"Refactored new saving logic, better implementation","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":92,"deletions":127}}},{"hash":"d799c9babb3a70e6436878ba7d86ca844fd9abf0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"208d0001a92e71d5cb0c61d2982d232dfc4f50e1","isMergeCommit":false,"messageTitle":"Updated gitignore, cleanup","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"c75bea1555bff40a85a48b513ed64162af1a64de","isMergeCommit":false,"messageTitle":"Class Refactor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":21}}},{"hash":"3825993d4fea3b4b8242926ade544331fc812475","isMergeCommit":false,"messageTitle":"Primitive DateTime for deadline and event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":22}}},{"hash":"f68200bce41575d74b583c1c33601f0005eee917","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"eac6a37db817b11299159d03c52de80e13b93ff3","isMergeCommit":false,"messageTitle":"Commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"9bfa56b70559ef64c44df4300a4ecbdf8dc324bd","isMergeCommit":false,"messageTitle":"Moved commands to default package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":13},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"cb8216b19aa4845bd30d1a83b35281b115ee35e3","isMergeCommit":false,"messageTitle":"Command Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":11}}}]},{"date":"2023-09-01","commitResults":[{"hash":"e015d86a58e1de8103eeaf64bfe7549d43550a3e","isMergeCommit":false,"messageTitle":"Better Save Logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"628cad711278173aeab3f0b09b9440779410c287","isMergeCommit":false,"messageTitle":"Implement UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":173}}},{"hash":"8bf34c778609fb1a0aa1f49392b8e709cd1b3f10","isMergeCommit":false,"messageTitle":"Better regex matching","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"12f424ad08fd4d5174dfb195afb252cf68c6be12","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"935ee17e6018b834fce2351272b0ad0857a2942f","isMergeCommit":false,"messageTitle":"Organise packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":68},"bat":{"insertions":3,"deletions":3},"sh":{"insertions":1,"deletions":1}}},{"hash":"fceafdb06425add56099daced64e923a1ddd9537","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"c09237f74e5117ec5ca9b6e9f6c2045eb66f1288","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7b53a8860298896acddcf5f1d0c0e7c0c3e74588","isMergeCommit":false,"messageTitle":"Add Gradle Support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":8,"deletions":6}}},{"hash":"a34aa441ee3f718e13678f97457e89076e71130e","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":7}}},{"hash":"26f57c3aab844dff6634e7759b2414f8c2a80842","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f1e01950c10f4982c924854bd5786a3284f49b0f","isMergeCommit":false,"messageTitle":"Configure jar build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"426030c8d322cdcfa92a7754c484f4adb9adac32","isMergeCommit":false,"messageTitle":"Fix empty command parse bug","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":5}}},{"hash":"9f17bff6d8117f0914a084ef9de01d1a90c2b8c9","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":2}}},{"hash":"a028be7249d371a2b2f99f0bff39a5d567076375","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":81}}},{"hash":"935ee608d2be82d5e10a8aa97dfcd41d5ddf030c","isMergeCommit":false,"messageTitle":"Add more JavaDocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":1}}},{"hash":"99c26c804bda9fe5ac25ea7349ab5d097d421b55","isMergeCommit":false,"messageTitle":"Add Find command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":0}}},{"hash":"68c02414c81526a7376be4cb7487f680338a776e","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JavaDoc\u0027","messageBody":"JavaDoc\n","fileTypesAndContributionMap":{}},{"hash":"4e358ed45b3d9cb9535a7414e55098cbcdc5a5ff","isMergeCommit":true,"messageTitle":"Resolve merge conflict for branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"79612a7108ca212eb23061b3d6c83e3fe1736dcc","isMergeCommit":true,"messageTitle":"Resolve merge conflict for branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"54bd58ec75c6362798c85c63ef1445c1d05839db","isMergeCommit":false,"messageTitle":"Checkstyle fixes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}}]},{"date":"2023-09-08","commitResults":[{"hash":"288891ce5cd60141dd97110a53b2eaac8dbbe44d","isMergeCommit":false,"messageTitle":"Add basic UI and custom dialog box","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":0},"java":{"insertions":133,"deletions":1}}}]},{"date":"2023-09-09","commitResults":[{"hash":"21cfaf9c45a652c08cfd847a673f949232cb7bdb","isMergeCommit":false,"messageTitle":"Add image clipping","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":14,"deletions":0},"java":{"insertions":44,"deletions":7}}},{"hash":"da09dcadb22e1544507c893da8c13b44922aef8e","isMergeCommit":false,"messageTitle":"Implement fxml","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":56,"deletions":14},"java":{"insertions":174,"deletions":158},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"97fef6c88fac9b3ea4c158e66cb9fe975013422f","isMergeCommit":false,"messageTitle":"Add responsive UI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":5,"deletions":5},"java":{"insertions":11,"deletions":0}}},{"hash":"fc4efa005cf7806b55c2aa3d86b789aa6bdd601e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"99d5efee6852afde5b7b98eee026f4673cc19de2","isMergeCommit":false,"messageTitle":"Use Gradle CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":22}}},{"hash":"1d8d9cb0ba12a216156c1ec4414aab118687d618","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"224c9fb97c9bdec4c24f3a1b4f76f75bd7a6d275","isMergeCommit":false,"messageTitle":"Change method names","messageBody":"The following method names have been changed to sound more intuitive as per their return types:\n- Duke::getTermination() -\u003e Duke::isTerminate()\n- TaskParser::formatSave(Task[]) -\u003e TaskParser::generateSaveString(Task[])\n\nOther changes:\n- Update build.gradle for JavaFX JAR file\n- Update Duke.java to exclude Duke::main(String[]) in production code\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":23,"deletions":23}}},{"hash":"daf5dde7583ab4283f0cef068564bd4f7468e010","isMergeCommit":false,"messageTitle":"Use Assertions","messageBody":"Assertions are added to assume values that the program require to run smoothly, to prevent unexpected errors due to unchecked code\n\nOther changes:\n- Optimised the shutdown logic when typing the bye command\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":12}}},{"hash":"a24472be47bd83301a48826ab0fe08a8c933ec7d","isMergeCommit":false,"messageTitle":"Remove magic values","messageBody":"Remove hard code values\n- Use Task.DISCRIMINATOR instead of \u0027||\u0027 in TaskParser::parseSave()\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"6cd883393b2a69452bb72110c95fe02d6d5e708c","isMergeCommit":true,"messageTitle":"Merge pull request #1 from TohLiYuan/branch-A-Assertions","messageBody":"Use Assertions","fileTypesAndContributionMap":{}},{"hash":"61067f195e2c283c75659320c10c00c0fff22353","isMergeCommit":true,"messageTitle":"Merge pull request #2 from TohLiYuan/branch-A-CodeQuality","messageBody":"Remove magic values","fileTypesAndContributionMap":{}},{"hash":"355898670fc7a7b788edaea6ebe544799bf376dc","isMergeCommit":false,"messageTitle":"Add reminders","messageBody":"Reminders can remind the user when a task is about to reach or has reached its deadline or ending date\n\nNew Functionality: Reminds the user of urgent tasks ending in a day upon app launch\n\nNew Command: Remind Command\nRemind Command allows users to specify the scope of days to seek for tasks\n\neg. remind 10\nThis command will show the tasks reaching its deadline within 10 days\n\nIf no number of days is specified, the command defaults itself to 7 days\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":2}}},{"hash":"8702451f18f05f0fcd4b6ec4d470124557c604b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-B-Reminders\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8b3c6fd1c677d7f3ae9eb199b986e39ebfbc1898","isMergeCommit":false,"messageTitle":"Cleanup code and style checks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":35}}}]},{"date":"2023-09-15","commitResults":[{"hash":"6a93eba3c11b94c5adf795bf35da5f72a03e5ee8","isMergeCommit":false,"messageTitle":"Adjust main window UI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":4,"deletions":4}}},{"hash":"c4e0a70fd5e4c71789f1c2d902a932aa8d136a3d","isMergeCommit":false,"messageTitle":"Add window title","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"1f00424290a9ed0c1660418869f3ba7ac7c33ad7","isMergeCommit":false,"messageTitle":"Change reminder feature logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"5c42b9661d89c687af2d70762d5d46d00948d2bf","isMergeCommit":false,"messageTitle":"Add UG","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":139,"deletions":11}}},{"hash":"1dbfaeabd6f6b6f9d85d319c0dc72cf089c7f66d","isMergeCommit":false,"messageTitle":"Minor changes","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"bbd928b895b1415de94b0ef7ed58fb4c7f7027ed","isMergeCommit":false,"messageTitle":"Add TaskParser Tests","messageBody":"","tags":["A-MoreTesting"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":2}}},{"hash":"ad240530e49192886ee93a2b4991671f90b8ec2c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreTesting\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0b3dc5dec65285ac304887772a3ccd3a553c95df","isMergeCommit":false,"messageTitle":"Follow stylechecks for new tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"2e9cf289ca5ba32ea58fd5ba6bebcdafa62e1c5c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreTesting\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"TohLiYuan":{"java":1583,"md":138,"fxml":56,"sh":1,"bat":5,"gradle":15,"txt":11}},"authorContributionVariance":{"TohLiYuan":67138.44},"authorDisplayNameMap":{"TohLiYuan":"CS2103T-F10-3 TOH ..YUAN"}} +{"authorDailyContributionsMap":{"TohLiYuan":[{"date":"2023-08-23","commitResults":[{"hash":"154cc4b83969a47dc8e3eb043b3be205d677b2d3","isMergeCommit":false,"messageTitle":"Rename \u0026 Skeletal Version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"f419d8e1bc507baf02a98c2fd16b313abc3a2de5","isMergeCommit":false,"messageTitle":"Refactor, Chat Echoing","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":3}}},{"hash":"9baa02d1a2138f032dd8ec1159faa928742c1b97","isMergeCommit":false,"messageTitle":"Message Records \u0026 Command Refactor","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":5}}},{"hash":"ca206eebbfc1e5c9720ad8333bdb74e57f0f422c","isMergeCommit":false,"messageTitle":"Tasks \u0026 Marking, renamed variables to follow convention","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":11}}},{"hash":"8c450e068fa290da190a0b78e79e5bb7399bf39c","isMergeCommit":false,"messageTitle":"Task Types, Refactor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":16}}},{"hash":"44c0017b7290ffd7af3c9e1e01e731e01a1c0234","isMergeCommit":false,"messageTitle":"Minor Formatting","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"946b8037dea23940ec999b981e0076b02d36a960","isMergeCommit":false,"messageTitle":"Automated Test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"bat":{"insertions":3,"deletions":1}}},{"hash":"9974d8eff40bd2c248c13757d70a932fb07df322","isMergeCommit":false,"messageTitle":"Error Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":11}}},{"hash":"ed3c154da808b6dbd06bea62cc360ee0de7f8287","isMergeCommit":false,"messageTitle":"Deleting Tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":20,"deletions":15}}}]},{"date":"2023-08-28","commitResults":[{"hash":"1270151866d4479ada5998e19037136fdcf7dd9a","isMergeCommit":false,"messageTitle":"Primitive saving mechanism (to be tested)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":179,"deletions":1}}},{"hash":"8b061a9c97bf859476c08818258a52c5c24e80a9","isMergeCommit":false,"messageTitle":"Refactored new saving logic, better implementation","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":92,"deletions":127}}},{"hash":"d799c9babb3a70e6436878ba7d86ca844fd9abf0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"208d0001a92e71d5cb0c61d2982d232dfc4f50e1","isMergeCommit":false,"messageTitle":"Updated gitignore, cleanup","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"c75bea1555bff40a85a48b513ed64162af1a64de","isMergeCommit":false,"messageTitle":"Class Refactor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":21}}},{"hash":"3825993d4fea3b4b8242926ade544331fc812475","isMergeCommit":false,"messageTitle":"Primitive DateTime for deadline and event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":22}}},{"hash":"f68200bce41575d74b583c1c33601f0005eee917","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"eac6a37db817b11299159d03c52de80e13b93ff3","isMergeCommit":false,"messageTitle":"Commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"9bfa56b70559ef64c44df4300a4ecbdf8dc324bd","isMergeCommit":false,"messageTitle":"Moved commands to default package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":13},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"cb8216b19aa4845bd30d1a83b35281b115ee35e3","isMergeCommit":false,"messageTitle":"Command Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":11}}}]},{"date":"2023-09-01","commitResults":[{"hash":"e015d86a58e1de8103eeaf64bfe7549d43550a3e","isMergeCommit":false,"messageTitle":"Better Save Logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"628cad711278173aeab3f0b09b9440779410c287","isMergeCommit":false,"messageTitle":"Implement UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":173}}},{"hash":"8bf34c778609fb1a0aa1f49392b8e709cd1b3f10","isMergeCommit":false,"messageTitle":"Better regex matching","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"12f424ad08fd4d5174dfb195afb252cf68c6be12","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"935ee17e6018b834fce2351272b0ad0857a2942f","isMergeCommit":false,"messageTitle":"Organise packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":68},"bat":{"insertions":3,"deletions":3},"sh":{"insertions":1,"deletions":1}}},{"hash":"fceafdb06425add56099daced64e923a1ddd9537","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"c09237f74e5117ec5ca9b6e9f6c2045eb66f1288","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7b53a8860298896acddcf5f1d0c0e7c0c3e74588","isMergeCommit":false,"messageTitle":"Add Gradle Support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":8,"deletions":6}}},{"hash":"a34aa441ee3f718e13678f97457e89076e71130e","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":7}}},{"hash":"26f57c3aab844dff6634e7759b2414f8c2a80842","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f1e01950c10f4982c924854bd5786a3284f49b0f","isMergeCommit":false,"messageTitle":"Configure jar build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"426030c8d322cdcfa92a7754c484f4adb9adac32","isMergeCommit":false,"messageTitle":"Fix empty command parse bug","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":5}}},{"hash":"9f17bff6d8117f0914a084ef9de01d1a90c2b8c9","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":2}}},{"hash":"a028be7249d371a2b2f99f0bff39a5d567076375","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":81}}},{"hash":"935ee608d2be82d5e10a8aa97dfcd41d5ddf030c","isMergeCommit":false,"messageTitle":"Add more JavaDocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":1}}},{"hash":"99c26c804bda9fe5ac25ea7349ab5d097d421b55","isMergeCommit":false,"messageTitle":"Add Find command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":0}}},{"hash":"68c02414c81526a7376be4cb7487f680338a776e","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JavaDoc\u0027","messageBody":"JavaDoc\n","fileTypesAndContributionMap":{}},{"hash":"4e358ed45b3d9cb9535a7414e55098cbcdc5a5ff","isMergeCommit":true,"messageTitle":"Resolve merge conflict for branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"79612a7108ca212eb23061b3d6c83e3fe1736dcc","isMergeCommit":true,"messageTitle":"Resolve merge conflict for branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"54bd58ec75c6362798c85c63ef1445c1d05839db","isMergeCommit":false,"messageTitle":"Checkstyle fixes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}}]},{"date":"2023-09-08","commitResults":[{"hash":"288891ce5cd60141dd97110a53b2eaac8dbbe44d","isMergeCommit":false,"messageTitle":"Add basic UI and custom dialog box","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":0},"java":{"insertions":133,"deletions":1}}}]},{"date":"2023-09-09","commitResults":[{"hash":"21cfaf9c45a652c08cfd847a673f949232cb7bdb","isMergeCommit":false,"messageTitle":"Add image clipping","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":14,"deletions":0},"java":{"insertions":44,"deletions":7}}},{"hash":"da09dcadb22e1544507c893da8c13b44922aef8e","isMergeCommit":false,"messageTitle":"Implement fxml","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":56,"deletions":14},"java":{"insertions":174,"deletions":158},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"97fef6c88fac9b3ea4c158e66cb9fe975013422f","isMergeCommit":false,"messageTitle":"Add responsive UI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":5,"deletions":5},"java":{"insertions":11,"deletions":0}}},{"hash":"fc4efa005cf7806b55c2aa3d86b789aa6bdd601e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"99d5efee6852afde5b7b98eee026f4673cc19de2","isMergeCommit":false,"messageTitle":"Use Gradle CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":22}}},{"hash":"1d8d9cb0ba12a216156c1ec4414aab118687d618","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"224c9fb97c9bdec4c24f3a1b4f76f75bd7a6d275","isMergeCommit":false,"messageTitle":"Change method names","messageBody":"The following method names have been changed to sound more intuitive as per their return types:\n- Duke::getTermination() -\u003e Duke::isTerminate()\n- TaskParser::formatSave(Task[]) -\u003e TaskParser::generateSaveString(Task[])\n\nOther changes:\n- Update build.gradle for JavaFX JAR file\n- Update Duke.java to exclude Duke::main(String[]) in production code\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":23,"deletions":23}}},{"hash":"daf5dde7583ab4283f0cef068564bd4f7468e010","isMergeCommit":false,"messageTitle":"Use Assertions","messageBody":"Assertions are added to assume values that the program require to run smoothly, to prevent unexpected errors due to unchecked code\n\nOther changes:\n- Optimised the shutdown logic when typing the bye command\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":12}}},{"hash":"a24472be47bd83301a48826ab0fe08a8c933ec7d","isMergeCommit":false,"messageTitle":"Remove magic values","messageBody":"Remove hard code values\n- Use Task.DISCRIMINATOR instead of \u0027||\u0027 in TaskParser::parseSave()\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"6cd883393b2a69452bb72110c95fe02d6d5e708c","isMergeCommit":true,"messageTitle":"Merge pull request #1 from TohLiYuan/branch-A-Assertions","messageBody":"Use Assertions","fileTypesAndContributionMap":{}},{"hash":"61067f195e2c283c75659320c10c00c0fff22353","isMergeCommit":true,"messageTitle":"Merge pull request #2 from TohLiYuan/branch-A-CodeQuality","messageBody":"Remove magic values","fileTypesAndContributionMap":{}},{"hash":"355898670fc7a7b788edaea6ebe544799bf376dc","isMergeCommit":false,"messageTitle":"Add reminders","messageBody":"Reminders can remind the user when a task is about to reach or has reached its deadline or ending date\n\nNew Functionality: Reminds the user of urgent tasks ending in a day upon app launch\n\nNew Command: Remind Command\nRemind Command allows users to specify the scope of days to seek for tasks\n\neg. remind 10\nThis command will show the tasks reaching its deadline within 10 days\n\nIf no number of days is specified, the command defaults itself to 7 days\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":2}}},{"hash":"8702451f18f05f0fcd4b6ec4d470124557c604b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-B-Reminders\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8b3c6fd1c677d7f3ae9eb199b986e39ebfbc1898","isMergeCommit":false,"messageTitle":"Cleanup code and style checks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":35}}}]},{"date":"2023-09-15","commitResults":[{"hash":"6a93eba3c11b94c5adf795bf35da5f72a03e5ee8","isMergeCommit":false,"messageTitle":"Adjust main window UI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":4,"deletions":4}}},{"hash":"c4e0a70fd5e4c71789f1c2d902a932aa8d136a3d","isMergeCommit":false,"messageTitle":"Add window title","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"1f00424290a9ed0c1660418869f3ba7ac7c33ad7","isMergeCommit":false,"messageTitle":"Change reminder feature logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"5c42b9661d89c687af2d70762d5d46d00948d2bf","isMergeCommit":false,"messageTitle":"Add UG","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":139,"deletions":11}}},{"hash":"1dbfaeabd6f6b6f9d85d319c0dc72cf089c7f66d","isMergeCommit":false,"messageTitle":"Minor changes","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"bbd928b895b1415de94b0ef7ed58fb4c7f7027ed","isMergeCommit":false,"messageTitle":"Add TaskParser Tests","messageBody":"","tags":["A-MoreTesting"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":2}}},{"hash":"ad240530e49192886ee93a2b4991671f90b8ec2c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreTesting\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0b3dc5dec65285ac304887772a3ccd3a553c95df","isMergeCommit":false,"messageTitle":"Follow stylechecks for new tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"2e9cf289ca5ba32ea58fd5ba6bebcdafa62e1c5c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreTesting\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"23a6efa818559cf5d2d00c2729da04ae0e793481","isMergeCommit":false,"messageTitle":"Change method names","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":19}}}]}]},"authorFileTypeContributionMap":{"TohLiYuan":{"java":1583,"md":138,"fxml":56,"sh":1,"bat":5,"gradle":15,"txt":11}},"authorContributionVariance":{"TohLiYuan":65158.105},"authorDisplayNameMap":{"TohLiYuan":"CS2103T-F10-3 TOH ..YUAN"}} diff --git a/VN-Hao_ip_master/authorship.json b/VN-Hao_ip_master/authorship.json index 9a0d8b8b..f0632958 100644 --- a/VN-Hao_ip_master/authorship.json +++ b/VN-Hao_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":"VN-Hao"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-11"},{"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":"VN-Hao"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"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":"VN-Hao"},"content":" mainClass.set(\"qi.Launcher\")","lastModifiedDate":"2023-09-11"},{"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":"VN-Hao"},"content":" archiveBaseName \u003d \"qi\"","lastModifiedDate":"2023-09-06"},{"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":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":"checkstyle {","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"-":40,"VN-Hao":22}},{"path":"src/main/java/qi/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.Priority;","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" private Label dialog;","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" private void flip() {","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" public static DialogBox getQiDialog(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" db.flip();","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" return db;","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":63}},{"path":"src/main/java/qi/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"public class Launcher {","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":12}},{"path":"src/main/java/qi/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" * A GUI for Qi using FXML.","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" private Qi qi \u003d new Qi(\"data/tasks.txt\");","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" stage.setTitle(\"Qi - The ChatBot\");","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" Image icon \u003d new Image(Main.class.getResourceAsStream(\"/images/icon.png\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" stage.getIcons().add(icon);","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setQi(qi);","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" stage.show();","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":35}},{"path":"src/main/java/qi/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" private Qi qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" private Image qiImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Qi.png\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" public void initialize() {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" public void setQi(Qi qi) {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" dialogContainer.getChildren().add(DialogBox.getQiDialog(qi.showWelcome(), qiImage));","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" this.qi \u003d qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" String response \u003d qi.getResponse(input);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" DialogBox.getQiDialog(response, qiImage)","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" userInput.clear();","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" Platform.exit();","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":57}},{"path":"src/main/java/qi/Qi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.command.Command;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" * Serves as the driver program for","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" * all the functionalities of the chatbot.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"public class Qi {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * Takes in the file path as a string.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" * Initializes a chatbot with data from the given file path.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" * @param filePath File path to the data stored","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" public Qi(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" storage.load(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" } catch (QiException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":"// /**","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":"// * Starts the interaction with users once being called.","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":"// */","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":"// public void run() {","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":"// ui.showWelcome();","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":"//","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":"// boolean isExit \u003d false;","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":"// while (!isExit) {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":"// try {","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":"// String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":"// ui.showLine();","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":"// Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":"// c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":"// isExit \u003d c.isExit();","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":"// } catch (QiException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":"// ui.showError(e.getMessage());","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":"// } finally {","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":"// ui.showLine();","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":"// System.out.println();","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":"// }","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":"// }","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":"// }","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" String message \u003d c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" return \"Qi:\\n\" + message;","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" } catch (QiException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" return \"Qi:\\n\" + e.getMessage();","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" return this.ui.showWelcome();","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":76}},{"path":"src/main/java/qi/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * Represents the execution of adding a task into the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" private Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" * Receives information of a Todo.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" * @param taskDescription String description of a Todo.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" public AddCommand(String taskDescription) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d new Todo(taskDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * Receives information of a Deadline.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" * @param taskDescription String description of a Deadline.","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" * @param deadline LocalDate representing the deadline of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" public AddCommand(String taskDescription, LocalDate deadline) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d new Deadline(taskDescription, deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" * Receives information of an Event.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" * @param taskDescription String description of an Event.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" * @param startTime String representation of the event start time.","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" * @param endTime String representation of the event end time.","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" public AddCommand(String taskDescription, String startTime, String endTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d new Event(taskDescription, startTime, endTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" * Adds the task into the list and then updates the data on hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the file storing date cannot be written.","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" return ui.showTaskAdded(this.task, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":74}},{"path":"src/main/java/qi/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" * Represents the general command from users.","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" * More specific command classes extend this class.","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * Takes in a status to decide whether this is","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" * the last interaction with users or not.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" * @param isExit Boolean value indicating whether to exit","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * after the interaction or not.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" protected Command(Boolean isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" * Updates the data and shows messages to the users according","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" * to the command.","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If there are problems with accessing the data in the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws QiException;","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" return this.isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":40}},{"path":"src/main/java/qi/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" * Represents the execution of removing a task from the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" private int taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" * Takes in the Id of the task to be removed.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public DeleteCommand(int taskId) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" * Removes the task from the list and then updates the data on the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the file storing the data cannot be written.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" return ui.showTaskDeleted(this.taskId, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":45}},{"path":"src/main/java/qi/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" * Represents the last interaction of the chatbot with users.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" super(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" * Prints goodbye message on the screen and terminates the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":27}},{"path":"src/main/java/qi/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" * Represents the process of find tasks that match with a key word.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" private String keyWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" * Takes in the key word to find task.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * @param keyWord Key word to find task.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" public FindCommand(String keyWord) {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" this.keyWord \u003d keyWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" * Finds the tasks containing the key word.","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" return ui.showMatching(tasks.matchingKeyWord(this.keyWord));","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"VN-Hao":34}},{"path":"src/main/java/qi/command/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" * Represent the execution when the input is invalid.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" public InvalidCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * Notifies users that the input is invalid and allows them to retry.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" return ui.showInvalid();","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":26}},{"path":"src/main/java/qi/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" * Represents the process of listing out the tasks in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * Shows the tasks available in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" return ui.showList(tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":26}},{"path":"src/main/java/qi/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" * Represents the process of marking a task in the list as done.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" private int taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" * Takes in the Id of the task to be marked as done.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public MarkCommand(int taskId) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" * Marks the task with the given Id in the list as done and then","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" * updates the data on the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the file storing the data cannot be written.","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" return ui.showTaskMarked(this.taskId, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":46}},{"path":"src/main/java/qi/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" * Represents the process of unmarking a task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" private int taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" * Takes in the Id of the task to be unmarked.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public UnmarkCommand(int taskId) {","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" * Unmarks the task with the given Id in the list and then","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" * updates the data on the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the file storing the data cannot be written.","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" return ui.showTaskUnmarked(this.taskId, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":46}},{"path":"src/main/java/qi/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.command.AddCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.command.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.command.DeleteCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.command.ExitCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"import qi.command.FindCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import qi.command.InvalidCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"import qi.command.ListCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"import qi.command.MarkCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"import qi.command.UnmarkCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" * Processes string input from users","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" * Returns a suitable command to execute the input of users in","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" * the form of string.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" * @param command String representation of the user command.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" * @return Command to be executed","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the user input does not match the required format.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" public static Command parse(String command) throws QiException {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(command.substring(5));","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" return new MarkCommand(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! Please specify which task you want to mark.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(command.substring(7));","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" return new UnmarkCommand(taskId);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! Please specify which task you want to unmark.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" String task \u003d command.substring(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" return new AddCommand(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" int idx \u003d 9;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" while (idx \u003c command.length() \u0026\u0026 command.charAt(idx) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" idx++;","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" String task \u003d command.substring(9, idx - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" String deadline \u003d command.substring(idx + 4);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" return new AddCommand(task, LocalDate.parse(deadline));","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" // find the first slash","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" int idx1 \u003d 6;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" while (idx1 \u003c command.length() \u0026\u0026 command.charAt(idx1) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" idx1++;","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" // find the second slash","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" int idx2 \u003d idx1 + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" while (idx2 \u003c command.length() \u0026\u0026 command.charAt(idx2) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" idx2++;","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" String task \u003d command.substring(6, idx1 - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":" String startTime \u003d command.substring(idx1 + 6, idx2 - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":" String endTime \u003d command.substring(idx2 + 4);","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" return new AddCommand(task, startTime, endTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(command.substring(7));","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"VN-Hao"},"content":" return new DeleteCommand(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! Please specify which task you want to delete.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"VN-Hao"},"content":" String keyWord \u003d command.substring(5);","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"VN-Hao"},"content":" return new FindCommand(keyWord);","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"☹ OOPS!!! Please specify the keyword you want to find.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"VN-Hao"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":123}},{"path":"src/main/java/qi/qiexception/QiException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.qiexception;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" * Represents the exceptions specific to Qi - the chatbot.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"public class QiException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public QiException(String e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" super(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":10}},{"path":"src/main/java/qi/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Deadline;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Event;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Todo;","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" * Represents the I/O process with a specific file.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" private File file;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" * Takes in the path to file which needs to be read from and written to.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" * @param filePath String representation of the file path.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" File directory \u003d file.getParentFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" // Create directory to the file if it does not exist","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" directory.mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot create file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" * Takes in a task list to update it with the data on the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" * @param list TaskList where data on the hard disk are be loaded to.","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the file cannot be accessed.","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" public void load(TaskList list) throws QiException {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" String task;","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" task \u003d sc.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(1) \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Todo(task.substring(7)));","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" list.mark(list.size(), true);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" } else if (task.charAt(1) \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" idx++;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Deadline(task.substring(7, idx - 4),","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" LocalDate.parse(task.substring(idx + 2, task.length() - 1),","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))));","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" list.mark(list.size(), true);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" int idx1 \u003d 0;","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx1) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" idx1++;","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" int idx2 \u003d idx1 + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx2) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" idx2++;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Event(task.substring(7, idx1 - 6),","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx1 + 2, idx2 - 3),","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx2 + 2, task.length() - 1)));","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" list.mark(list.size(), true);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot read file!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":" * Replaces the data on the hard disk with the data from the current task list.","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"VN-Hao"},"content":" * @param list TaskList whose data are used to replace the data on the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"VN-Hao"},"content":" * @throws IOException If the file could not be written.","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"VN-Hao"},"content":" public void update(TaskList list) throws IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"VN-Hao"},"content":" FileWriter fw \u003d new FileWriter(this.file.getAbsolutePath());","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"VN-Hao"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"VN-Hao"},"content":" content.append(list.showTask(i + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"VN-Hao"},"content":" if (i \u003c list.size() - 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"VN-Hao"},"content":" content.append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"VN-Hao"},"content":" fw.write(content.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"VN-Hao"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":117}},{"path":"src/main/java/qi/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" private final LocalDate deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" public Deadline(String task, LocalDate deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" String checkBox \u003d this.done ? \"[D][X] \" : \"[D][ ] \";","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" String description \u003d String.format(\"%s (by: %s)\", this.task,","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" this.deadline.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" return checkBox + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":21}},{"path":"src/main/java/qi/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" private final String startTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" private final String endTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public Event(String task, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" String checkBox \u003d this.done ? \"[E][X] \" : \"[E][ ] \";","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" String description \u003d String.format(\"%s (from: %s to: %s)\", this.task, this.startTime, this.endTime);","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" return checkBox + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":19}},{"path":"src/main/java/qi/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" protected String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" protected boolean done;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" protected Task(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" public void mark(boolean status) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" this.done \u003d status;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" public boolean isMatching(String keyWord) {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" return this.task.contains(keyWord);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":19}},{"path":"src/main/java/qi/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" public Todo(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" if (this.done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" return \"[T][X] \" + this.task;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" return \"[T][ ] \" + this.task;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":15}},{"path":"src/main/java/qi/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.tasklist;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Task;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" * Represents the list of task.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"public class TaskList {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" * Initializes the inner data structure to store task.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" public TaskList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" * @param t Task to be added.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" public void addTask(Task t) {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" this.taskList.add(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" * Marks a task with the given Id as done or not done.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" * @param id Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" * @param isDone Boolean representing whether a task is done or not.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" public void mark(int id, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" this.taskList.get(id - 1).mark(isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" * Returns string description of the task with the given Id.","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" * @param id Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" * @return String description of the task with the given Id.","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" public String showTask(int id) {","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.get(id - 1).toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" * Deletes the task with given Id from the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" * @return Task deleted.","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" public Task deleteTask(int taskId) {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.remove(taskId - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" * @return Integer indicating the number of tasks in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" public String matchingKeyWord(String keyWord) {","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" StringBuilder ans \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" if (this.taskList.get(i).isMatching(keyWord)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" int id \u003d i + 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" ans.append(\" \" + id + \" \" + this.showTask(id));","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" ans.append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" return ans.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" * Returns list of tasks in the form of string.","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":" * @return String representation of the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" StringBuilder ans \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":" int id \u003d i + 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" String temp \u003d \" \" + id + \". \" + showTask(id);","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":" ans.append(temp);","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":" ans.append(\u0027\\n\u0027);","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":" return ans.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":100}},{"path":"src/main/java/qi/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" * Represents the interactions of the chatbot with users.","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * Initializes the chatbot","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" * Prints welcoming message on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" return \"Hello! I\u0027m Qi\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" + \"What can I do for you?\";","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" * Reads string input from users.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * @return String input read.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" return this.sc.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" * Shows the task added to the list on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" * @param task Task added to the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" * @param list Current TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" public String showTaskAdded(Task task, TaskList list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" + \" \" + task + \u0027\\n\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" + \"Now you have \" + list.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" * Shows the task removed from the list on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Id of the task removed.","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" * @param list Current TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" public String showTaskDeleted(int taskId, TaskList list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" + \" \" + list.deleteTask(taskId) + \u0027\\n\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" + \"Now you have \" + list.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" * Shows the task marked as done on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Id of the task marked as done.","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" * @param list Current TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" public String showTaskMarked(int taskId, TaskList list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" list.mark(taskId, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" + \" \" + list.showTask(taskId);","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" * Shows the task unmarked on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Id of the task unmarked.","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" * @param list Current TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" public String showTaskUnmarked(int taskId, TaskList list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" list.mark(taskId, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" + \" \" + list.showTask(taskId);","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" * Shows the content of the list on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" * @param list Current TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" public String showList(TaskList list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":" return \"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" + list;","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" public String showMatching(String matchingTasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":" return \"Here are the matching tasks in your list:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" + matchingTasks;","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"VN-Hao"},"content":" * Prints a message that the input is invalid.","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"VN-Hao"},"content":" public String showInvalid() {","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"VN-Hao"},"content":" return \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :\u003c\";","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"VN-Hao"},"content":" * Prints goodbye message on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"VN-Hao"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"VN-Hao"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"VN-Hao"},"content":" * Prints message that the file cannot be loaded.","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"VN-Hao"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"VN-Hao"},"content":" return \"Cannot load file!\";","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"VN-Hao"},"content":" * Shows errors while executing task.","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"VN-Hao"},"content":" * @param e Content of the error message.","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"VN-Hao"},"content":" public String showError(String e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"VN-Hao"},"content":" return \"\" + e;","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":132}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"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-14"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" \u003cFont name\u003d\"Monospaced Regular\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" \u003c/HBox.margin\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":23}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"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\"qi.MainWindow\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"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\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"76.0\" /\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"557.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" AnchorPane.bottomAnchor\u003d\"1.6666666666666288\" AnchorPane.rightAnchor\u003d\"0.0\" /\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"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\" AnchorPane.bottomAnchor\u003d\"42.66666666666663\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"0.0\" AnchorPane.topAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":19}},{"path":"src/test/java/qi/QiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class QiTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class CommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/ExitCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class ExitCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/FindCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"public class FindCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":6}},{"path":"src/test/java/qi/command/InvalidCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class InvalidCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/ListCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class ListCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class UnmarkCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" public void emptyTodo_exceptionThrown() {","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" Parser.parse(\"todo\");","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" fail();","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" } catch (QiException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\",","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" public void emptyMark_exceptionThrown() {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" Parser.parse(\"mark\");","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" fail();","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" } catch (QiException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" assertEquals(\"☹ OOPS!!! Please specify which task you want to mark.\",","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"VN-Hao":31}},{"path":"src/test/java/qi/qiexception/QiExceptionTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.qiexception;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class QiExceptionTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.storage;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":9}},{"path":"src/test/java/qi/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class EventTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":9}},{"path":"src/test/java/qi/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":9}},{"path":"src/test/java/qi/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" public void testStringDescription(){","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" assertEquals(\"[T][ ] read book\", new Todo(\"read book\").toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"VN-Hao":12}},{"path":"src/test/java/qi/tasklist/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.tasklist;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" public void testShowTask(){","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Todo(\"eat\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" assertEquals(\"[T][ ] eat\", list.showTask(1));","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" public void testDeleteTask(){","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Todo(\"eat\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" Task code \u003d new Todo(\"code\");","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" list.addTask(code);","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" assertEquals(code, list.deleteTask(2));","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"VN-Hao":25}},{"path":"src/test/java/qi/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.ui;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class UiTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":9}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"todo eat","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"deadline code /by today midnight","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"todo sleep","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"event ES2660 /from Friday 10am /to 12pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":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":"-"},"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":"VN-Hao"},"content":"java -classpath ..\\bin Qi \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":{"-":20,"VN-Hao":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":"VN-Hao"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-11"},{"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":"VN-Hao"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"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":"VN-Hao"},"content":" mainClass.set(\"qi.Launcher\")","lastModifiedDate":"2023-09-11"},{"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":"VN-Hao"},"content":" archiveBaseName \u003d \"qi\"","lastModifiedDate":"2023-09-06"},{"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":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":"checkstyle {","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"-":40,"VN-Hao":22}},{"path":"src/main/java/qi/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.awt.*;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.Border;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.BorderStroke;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.BorderStrokeStyle;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.BorderWidths;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.CornerRadii;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.paint.ImagePattern;","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" private Label dialog;","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" private Circle avatar;","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" dialog.setBorder(new Border(new BorderStroke(Color.GREEN,","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" BorderStrokeStyle.DASHED, new CornerRadii(5), BorderWidths.DEFAULT)));","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" avatar.setFill(new ImagePattern(img));","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" private void flip() {","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" public static DialogBox getQiDialog(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" db.flip();","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" return db;","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":73}},{"path":"src/main/java/qi/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"public class Launcher {","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":12}},{"path":"src/main/java/qi/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" * A GUI for Qi using FXML.","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" private Qi qi \u003d new Qi(\"data/tasks.txt\");","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" stage.setTitle(\"Qi - The ChatBot\");","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" Image icon \u003d new Image(Main.class.getResourceAsStream(\"/images/icon.png\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" stage.getIcons().add(icon);","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setQi(qi);","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" stage.show();","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":35}},{"path":"src/main/java/qi/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" private Qi qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" private Image qiImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Qi.png\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" public void initialize() {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" public void setQi(Qi qi) {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" dialogContainer.getChildren().add(DialogBox.getQiDialog(qi.showWelcome(), qiImage));","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" this.qi \u003d qi;","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" String response \u003d qi.getResponse(input);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" DialogBox.getQiDialog(response, qiImage)","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" userInput.clear();","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" Platform.exit();","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":57}},{"path":"src/main/java/qi/Qi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.command.Command;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.parser.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" * Serves as the driver program for","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" * all the functionalities of the chatbot.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"public class Qi {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * Takes in the file path as a string.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" * Initializes a chatbot with data from the given file path.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" * @param filePath File path to the data stored","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" public Qi(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" storage.load(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" } catch (QiException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" String message \u003d c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" return \"Qi:\\n\" + message;","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" } catch (QiException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" return \"Qi:\\n\" + e.getMessage();","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" return \"Qi:\\n\" + this.ui.showWelcome();","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":53}},{"path":"src/main/java/qi/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * Represents the execution of adding a task into the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" private Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" * Receives information of a Todo.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" * @param taskDescription String description of a Todo.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" public AddCommand(String taskDescription) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d new Todo(taskDescription);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * Receives information of a Deadline.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" * @param taskDescription String description of a Deadline.","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" * @param deadline LocalDate representing the deadline of the task.","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" public AddCommand(String taskDescription, LocalDate deadline) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d new Deadline(taskDescription, deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" * Receives information of an Event.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" * @param taskDescription String description of an Event.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" * @param startTime String representation of the event start time.","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" * @param endTime String representation of the event end time.","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" public AddCommand(String taskDescription, String startTime, String endTime) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d new Event(taskDescription, startTime, endTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" * Adds the task into the list and then updates the data on hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the file storing date cannot be written.","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" return ui.showTaskAdded(this.task, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":74}},{"path":"src/main/java/qi/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" * Represents the general command from users.","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" * More specific command classes extend this class.","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * Takes in a status to decide whether this is","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" * the last interaction with users or not.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" * @param isExit Boolean value indicating whether to exit","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * after the interaction or not.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" protected Command(Boolean isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" * Updates the data and shows messages to the users according","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" * to the command.","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If there are problems with accessing the data in the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws QiException;","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" return this.isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":40}},{"path":"src/main/java/qi/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" * Represents the execution of removing a task from the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" private int taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" * Takes in the Id of the task to be removed.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public DeleteCommand(int taskId) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" * Removes the task from the list and then updates the data on the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the file storing the data cannot be written.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" return ui.showTaskDeleted(this.taskId, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":45}},{"path":"src/main/java/qi/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" * Represents the last interaction of the chatbot with users.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" super(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" * Prints goodbye message on the screen and terminates the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":27}},{"path":"src/main/java/qi/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" * Represents the process of find tasks that match with a key word.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" private String keyWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" * Takes in the key word to find task.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * @param keyWord Key word to find task.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" public FindCommand(String keyWord) {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" this.keyWord \u003d keyWord;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" * Finds the tasks containing the key word.","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" return ui.showMatching(tasks.matchingKeyWord(this.keyWord));","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"VN-Hao":34}},{"path":"src/main/java/qi/command/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" * Represent the execution when the input is invalid.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" public InvalidCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * Notifies users that the input is invalid and allows them to retry.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" return ui.showInvalid();","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":26}},{"path":"src/main/java/qi/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" * Represents the process of listing out the tasks in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * Shows the tasks available in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" return ui.showList(tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":26}},{"path":"src/main/java/qi/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" * Represents the process of marking a task in the list as done.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" private int taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" * Takes in the Id of the task to be marked as done.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public MarkCommand(int taskId) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" * Marks the task with the given Id in the list as done and then","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" * updates the data on the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the file storing the data cannot be written.","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" return ui.showTaskMarked(this.taskId, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":46}},{"path":"src/main/java/qi/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.storage.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.ui.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" * Represents the process of unmarking a task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" private int taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" * Takes in the Id of the task to be unmarked.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" public UnmarkCommand(int taskId) {","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" this.taskId \u003d taskId;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" * Unmarks the task with the given Id in the list and then","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" * updates the data on the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" * @param tasks TaskList recording the current task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * @param ui Ui representing the current User Interface (UI).","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" * @param storage Storage updating data if necessary.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the file storing the data cannot be written.","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws QiException {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" storage.update(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot write to file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" return ui.showTaskUnmarked(this.taskId, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":46}},{"path":"src/main/java/qi/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.command.AddCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.command.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import qi.command.DeleteCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import qi.command.ExitCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"import qi.command.FindCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import qi.command.InvalidCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"import qi.command.ListCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"import qi.command.MarkCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"import qi.command.UnmarkCommand;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" * Processes string input from users","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" * Returns a suitable command to execute the input of users in","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" * the form of string.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" * @param command String representation of the user command.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" * @return Command to be executed","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the user input does not match the required format.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" public static Command parse(String command) throws QiException {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(command.substring(5));","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" return new MarkCommand(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"OOPS!!! Please specify which task you want to mark!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(command.substring(7));","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" return new UnmarkCommand(taskId);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"OOPS!!! Please specify which task you want to unmark!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" String task \u003d command.substring(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" return new AddCommand(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"OOPS!!! The description of a todo cannot be empty!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" int idx \u003d 9;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" while (idx \u003c command.length() \u0026\u0026 command.charAt(idx) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" idx++;","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" String task \u003d command.substring(9, idx - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" String deadline \u003d command.substring(idx + 4);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" return new AddCommand(task, LocalDate.parse(deadline));","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"OOPS!!! The description of a deadline cannot be empty!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" // find the first slash","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" int idx1 \u003d 6;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" while (idx1 \u003c command.length() \u0026\u0026 command.charAt(idx1) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" idx1++;","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" // find the second slash","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" int idx2 \u003d idx1 + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" while (idx2 \u003c command.length() \u0026\u0026 command.charAt(idx2) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" idx2++;","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" String task \u003d command.substring(6, idx1 - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":" String startTime \u003d command.substring(idx1 + 6, idx2 - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":" String endTime \u003d command.substring(idx2 + 4);","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" return new AddCommand(task, startTime, endTime);","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"OOPS!!! The description of an event cannot be empty!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(command.substring(7));","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"VN-Hao"},"content":" return new DeleteCommand(taskId);","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"OOPS!!! Please specify which task you want to delete!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"VN-Hao"},"content":" if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"VN-Hao"},"content":" String keyWord \u003d command.substring(5);","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"VN-Hao"},"content":" return new FindCommand(keyWord);","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"OOPS!!! Please specify the keyword you want to find!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"VN-Hao"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":123}},{"path":"src/main/java/qi/qiexception/QiException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.qiexception;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" * Represents the exceptions specific to Qi - the chatbot.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"public class QiException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public QiException(String e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" super(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":10}},{"path":"src/main/java/qi/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Deadline;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Event;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Todo;","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" * Represents the I/O process with a specific file.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" private File file;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" * Takes in the path to file which needs to be read from and written to.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" * @param filePath String representation of the file path.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" File directory \u003d file.getParentFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" // Create directory to the file if it does not exist","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" directory.mkdirs();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot create file!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" * Takes in a task list to update it with the data on the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" * @param list TaskList where data on the hard disk are be loaded to.","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" * @throws QiException If the file cannot be accessed.","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" public void load(TaskList list) throws QiException {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" String task;","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" task \u003d sc.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(1) \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Todo(task.substring(7)));","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" list.mark(list.size(), true);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" } else if (task.charAt(1) \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" idx++;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Deadline(task.substring(7, idx - 4),","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" LocalDate.parse(task.substring(idx + 2, task.length() - 1),","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))));","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" list.mark(list.size(), true);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" int idx1 \u003d 0;","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx1) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" idx1++;","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" int idx2 \u003d idx1 + 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx2) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" idx2++;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Event(task.substring(7, idx1 - 6),","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx1 + 2, idx2 - 3),","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx2 + 2, task.length() - 1)));","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" list.mark(list.size(), true);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":" throw new QiException(\"Cannot read file!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":" * Replaces the data on the hard disk with the data from the current task list.","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"VN-Hao"},"content":" * @param list TaskList whose data are used to replace the data on the hard disk.","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"VN-Hao"},"content":" * @throws IOException If the file could not be written.","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"VN-Hao"},"content":" public void update(TaskList list) throws IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"VN-Hao"},"content":" FileWriter fw \u003d new FileWriter(this.file.getAbsolutePath());","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"VN-Hao"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"VN-Hao"},"content":" content.append(list.showTask(i + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"VN-Hao"},"content":" if (i \u003c list.size() - 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"VN-Hao"},"content":" content.append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"VN-Hao"},"content":" fw.write(content.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"VN-Hao"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":117}},{"path":"src/main/java/qi/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" private final LocalDate deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" public Deadline(String task, LocalDate deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" String checkBox \u003d this.isDone ? \"[D][X] \" : \"[D][ ] \";","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" String description \u003d String.format(\"%s (by: %s)\", this.task,","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" this.deadline.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" return checkBox + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":21}},{"path":"src/main/java/qi/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" private final String startTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" private final String endTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public Event(String task, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" String checkBox \u003d this.isDone ? \"[E][X] \" : \"[E][ ] \";","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" String description \u003d String.format(\"%s (from: %s to: %s)\", this.task, this.startTime, this.endTime);","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" return checkBox + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":19}},{"path":"src/main/java/qi/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" protected String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" protected Task(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" public void mark(boolean isDone) {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" public boolean isMatching(String keyWord) {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" return this.task.contains(keyWord);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":19}},{"path":"src/main/java/qi/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" public Todo(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" return \"[T][X] \" + this.task;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" return \"[T][ ] \" + this.task;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":15}},{"path":"src/main/java/qi/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.tasklist;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Task;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" * Represents the list of task.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"public class TaskList {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" * Initializes the inner data structure to store task.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" public TaskList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" * @param t Task to be added.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" public void addTask(Task t) {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" this.taskList.add(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" * Marks a task with the given Id as done or not done.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" * @param id Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" * @param isDone Boolean representing whether a task is done or not.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" public void mark(int id, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" this.taskList.get(id - 1).mark(isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" * Returns string description of the task with the given Id.","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" * @param id Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" * @return String description of the task with the given Id.","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" public String showTask(int id) {","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.get(id - 1).toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" * Deletes the task with given Id from the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Integer representing the index (start from one)","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" * of the task in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" * @return Task deleted.","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" public Task deleteTask(int taskId) {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.remove(taskId - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" * @return Integer indicating the number of tasks in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" public String matchingKeyWord(String keyWord) {","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" StringBuilder ans \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" if (this.taskList.get(i).isMatching(keyWord)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" int id \u003d i + 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" ans.append(\" \" + id + \" \" + this.showTask(id));","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" ans.append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" return ans.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" * Returns list of tasks in the form of string.","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":" * @return String representation of the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" StringBuilder ans \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":" int id \u003d i + 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" String temp \u003d \" \" + id + \". \" + showTask(id);","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":" ans.append(temp);","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":" ans.append(\u0027\\n\u0027);","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":" return ans.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":100}},{"path":"src/main/java/qi/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import qi.tasklist.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" * Represents the interactions of the chatbot with users.","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" * Initializes the chatbot","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" * Prints welcoming message on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" return \"Hello! I\u0027m Qi\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" + \"What can I do for you?\";","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" * Reads string input from users.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" * @return String input read.","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" return this.sc.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" * Shows the task added to the list on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" * @param task Task added to the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" * @param list Current TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" public String showTaskAdded(Task task, TaskList list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" + \" \" + task + \u0027\\n\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" + \"Now you have \" + list.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" * Shows the task removed from the list on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Id of the task removed.","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" * @param list Current TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" public String showTaskDeleted(int taskId, TaskList list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" + \" \" + list.deleteTask(taskId) + \u0027\\n\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" + \"Now you have \" + list.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" * Shows the task marked as done on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Id of the task marked as done.","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" * @param list Current TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" public String showTaskMarked(int taskId, TaskList list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" list.mark(taskId, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" + \" \" + list.showTask(taskId);","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" * Shows the task unmarked on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" * @param taskId Id of the task unmarked.","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" * @param list Current TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" public String showTaskUnmarked(int taskId, TaskList list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" list.mark(taskId, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" + \" \" + list.showTask(taskId);","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" * Shows the content of the list on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" * @param list Current TaskList.","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" public String showList(TaskList list) {","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":" return \"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" + list;","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" public String showMatching(String matchingTasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":" return \"Here are the matching tasks in your list:\\n\"","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" + matchingTasks;","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"VN-Hao"},"content":" * Prints a message that the input is invalid.","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"VN-Hao"},"content":" public String showInvalid() {","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"VN-Hao"},"content":" return \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :\u003c\";","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"VN-Hao"},"content":" * Prints goodbye message on the screen.","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"VN-Hao"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"VN-Hao"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"VN-Hao"},"content":" * Prints message that the file cannot be loaded.","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"VN-Hao"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"VN-Hao"},"content":" return \"Cannot load file!\";","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"VN-Hao"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"VN-Hao"},"content":" * Shows errors while executing task.","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"VN-Hao"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"VN-Hao"},"content":" * @param e Content of the error message.","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"VN-Hao"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"VN-Hao"},"content":" public String showError(String e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"VN-Hao"},"content":" return \"\" + e;","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"VN-Hao":132}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"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-14"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" minHeight\u003d\"-Infinity\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" \u003cFont name\u003d\"Monospaced Regular\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" \u003c/HBox.margin\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" \u003cCircle fx:id\u003d\"avatar\" radius\u003d\"47.0\" stroke\u003d\"GRAY\" strokeType\u003d\"INSIDE\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":23}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"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\"qi.MainWindow\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"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\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"76.0\" /\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"557.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" AnchorPane.bottomAnchor\u003d\"1.6666666666666288\" AnchorPane.rightAnchor\u003d\"0.0\" /\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"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\" AnchorPane.bottomAnchor\u003d\"42.66666666666663\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"0.0\" AnchorPane.topAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":19}},{"path":"src/test/java/qi/QiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class QiTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class CommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/ExitCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class ExitCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/FindCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"public class FindCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":6}},{"path":"src/test/java/qi/command/InvalidCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class InvalidCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/ListCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class ListCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/command/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class UnmarkCommandTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.qiexception.QiException;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" public void emptyTodo_exceptionThrown() {","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" Parser.parse(\"todo\");","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" fail();","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" } catch (QiException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\",","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" public void emptyMark_exceptionThrown() {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" Parser.parse(\"mark\");","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" fail();","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" } catch (QiException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" assertEquals(\"☹ OOPS!!! Please specify which task you want to mark.\",","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"VN-Hao":31}},{"path":"src/test/java/qi/qiexception/QiExceptionTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.qiexception;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class QiExceptionTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.storage;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":8}},{"path":"src/test/java/qi/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":9}},{"path":"src/test/java/qi/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class EventTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":9}},{"path":"src/test/java/qi/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":9}},{"path":"src/test/java/qi/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" public void testStringDescription(){","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" assertEquals(\"[T][ ] read book\", new Todo(\"read book\").toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"VN-Hao":12}},{"path":"src/test/java/qi/tasklist/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.tasklist;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import qi.task.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" public void testShowTask(){","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Todo(\"eat\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" assertEquals(\"[T][ ] eat\", list.showTask(1));","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" public void testDeleteTask(){","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" list.addTask(new Todo(\"eat\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" Task code \u003d new Todo(\"code\");","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" list.addTask(code);","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" assertEquals(code, list.deleteTask(2));","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"VN-Hao":25}},{"path":"src/test/java/qi/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"package qi.ui;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"public class UiTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"VN-Hao":9}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"todo eat","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"deadline code /by today midnight","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"todo sleep","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"event ES2660 /from Friday 10am /to 12pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":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":"-"},"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":"VN-Hao"},"content":"java -classpath ..\\bin Qi \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":{"-":20,"VN-Hao":1}}] diff --git a/VN-Hao_ip_master/commits.json b/VN-Hao_ip_master/commits.json index 15391293..ad8baabd 100644 --- a/VN-Hao_ip_master/commits.json +++ b/VN-Hao_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"VN-Hao":[{"date":"2023-08-23","commitResults":[{"hash":"c18c3412730bd68e4f1d8b4104fc2c5951721e9e","isMergeCommit":false,"messageTitle":"New chatbot with simple greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"505812c237e94be4865ee300c42042a81ce045d2","isMergeCommit":false,"messageTitle":"echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2557383f0066a9221c936415bfcb983f0b3117f3","isMergeCommit":false,"messageTitle":"Add, store and display tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"2b26de26509d89821ea080cfcc483e46cdb57a9b","isMergeCommit":false,"messageTitle":"Mark and unmark task, reorganize classes","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":24}}},{"hash":"c993ec1559f480e91b8d90fd9aee86b60d3b0522","isMergeCommit":false,"messageTitle":"Categorize tasks into todos, deadlines and events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":19}}},{"hash":"f826b17885e4ca386bb892aeb63f754607a08a4c","isMergeCommit":false,"messageTitle":"Change input, EXPECTED and runtest file for UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"e9990677f78241b2b05f9cadec74a2fb1782ad9c","isMergeCommit":false,"messageTitle":"Handle simple errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":17}}},{"hash":"5fb67133ff4e1dc595713a69a5654943c0236624","isMergeCommit":false,"messageTitle":"Allow deletions of tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"f188f254916c8a6198ac39b35f620c7973780ff2","isMergeCommit":false,"messageTitle":"Minor changes in variable names. Rewrite some functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":55}}}]},{"date":"2023-09-02","commitResults":[{"hash":"3fe875498f790166f5671e8660ca2b0f35e3b92e","isMergeCommit":false,"messageTitle":"Allow saving list to hard disk","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":10}}},{"hash":"25459762cabb1471db821bd63405c79699479397","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"140bd1298db5f318b43c5bcb06fc623c23f6c1cd","isMergeCommit":false,"messageTitle":"Change type of deadline from String to java.time.LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"9cb5bd03ab14ae6ce60b6b9d3c53ab6fc25c50b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"935f16f43bf9c182e60281fd6c3775e90b989862","isMergeCommit":false,"messageTitle":"rewrite code by OOP principles","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":404,"deletions":306}}}]},{"date":"2023-09-06","commitResults":[{"hash":"e6410e11dd1af74338975c5569f8caaa30a884dc","isMergeCommit":false,"messageTitle":"handle input exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":32}}},{"hash":"68bfbaf201bd21844938162e8dc5ef768b753ba4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"5bc5270733af1372b3d7e8bdf3603b87b4d85d64","isMergeCommit":false,"messageTitle":"group java classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":5}}},{"hash":"2c3abbfcab83ce45297b1004c0cc05eafc2a1478","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f91f7561636b2de5d88819ab04b1befdeb75816c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"49cd1974dcdf7af8948ad988c3dfa235a1d04c48","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"205486802b33c2d4d1793a4b1174f9eaff836c74","isMergeCommit":false,"messageTitle":"add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":79,"deletions":3}}},{"hash":"a897a8ac932861fe9711508f2393b5dbcdaa8d64","isMergeCommit":false,"messageTitle":"add find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":6}}}]},{"date":"2023-09-07","commitResults":[{"hash":"750c913d945858fbf700fc56ddeee40863c2ce7c","isMergeCommit":false,"messageTitle":"Change the code to follow standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":9}}},{"hash":"d1840679d7da0329f0ce4dfa7b8f3637448fea3d","isMergeCommit":false,"messageTitle":"Write documentation for classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":282,"deletions":8}}},{"hash":"518fc9aaa020fcd00cd21fe276103acfbed53d39","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"15136674e20c8b439ded599e14aa526d8635e334","isMergeCommit":true,"messageTitle":"Resolve conflicts","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"8037f03a9021aab0af6cc2585dc055c907c69d10","isMergeCommit":false,"messageTitle":"Write documentation for FindCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"18a3071ed8fe80c8eb5beeb177713d952372eded","isMergeCommit":true,"messageTitle":"Resolve conflicts caused by adding new method","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"ca59f5e403c117ee8c7184f959d0ae8cd79a684f","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":145,"deletions":22}}},{"hash":"a097cfadc19167298e2fd797f719049f1128ac2b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"fe552764fb0e4419028edb0a7ec5f7636e722c4a","isMergeCommit":false,"messageTitle":"Implement basic GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":235,"deletions":80}}},{"hash":"9f79b32c0e786053fc901728275472c91ebea363","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"e0c3c5c7dc2bbcd924722115dddd6be9144ac40e","isMergeCommit":false,"messageTitle":"Make Qi greet when the program starts","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":15,"deletions":8},"java":{"insertions":19,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"VN-Hao":{"java":1361,"md":0,"fxml":42,"sh":0,"bat":1,"gradle":22,"txt":6}},"authorContributionVariance":{"VN-Hao":34899.145},"authorDisplayNameMap":{"VN-Hao":"CS2103T-T13-2 NGUY.. HAO"}} +{"authorDailyContributionsMap":{"VN-Hao":[{"date":"2023-08-23","commitResults":[{"hash":"c18c3412730bd68e4f1d8b4104fc2c5951721e9e","isMergeCommit":false,"messageTitle":"New chatbot with simple greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"505812c237e94be4865ee300c42042a81ce045d2","isMergeCommit":false,"messageTitle":"echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2557383f0066a9221c936415bfcb983f0b3117f3","isMergeCommit":false,"messageTitle":"Add, store and display tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"2b26de26509d89821ea080cfcc483e46cdb57a9b","isMergeCommit":false,"messageTitle":"Mark and unmark task, reorganize classes","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":24}}},{"hash":"c993ec1559f480e91b8d90fd9aee86b60d3b0522","isMergeCommit":false,"messageTitle":"Categorize tasks into todos, deadlines and events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":19}}},{"hash":"f826b17885e4ca386bb892aeb63f754607a08a4c","isMergeCommit":false,"messageTitle":"Change input, EXPECTED and runtest file for UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"e9990677f78241b2b05f9cadec74a2fb1782ad9c","isMergeCommit":false,"messageTitle":"Handle simple errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":17}}},{"hash":"5fb67133ff4e1dc595713a69a5654943c0236624","isMergeCommit":false,"messageTitle":"Allow deletions of tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"f188f254916c8a6198ac39b35f620c7973780ff2","isMergeCommit":false,"messageTitle":"Minor changes in variable names. Rewrite some functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":55}}}]},{"date":"2023-09-02","commitResults":[{"hash":"3fe875498f790166f5671e8660ca2b0f35e3b92e","isMergeCommit":false,"messageTitle":"Allow saving list to hard disk","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":10}}},{"hash":"25459762cabb1471db821bd63405c79699479397","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"140bd1298db5f318b43c5bcb06fc623c23f6c1cd","isMergeCommit":false,"messageTitle":"Change type of deadline from String to java.time.LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"9cb5bd03ab14ae6ce60b6b9d3c53ab6fc25c50b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"935f16f43bf9c182e60281fd6c3775e90b989862","isMergeCommit":false,"messageTitle":"rewrite code by OOP principles","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":404,"deletions":306}}}]},{"date":"2023-09-06","commitResults":[{"hash":"e6410e11dd1af74338975c5569f8caaa30a884dc","isMergeCommit":false,"messageTitle":"handle input exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":32}}},{"hash":"68bfbaf201bd21844938162e8dc5ef768b753ba4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"5bc5270733af1372b3d7e8bdf3603b87b4d85d64","isMergeCommit":false,"messageTitle":"group java classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":5}}},{"hash":"2c3abbfcab83ce45297b1004c0cc05eafc2a1478","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f91f7561636b2de5d88819ab04b1befdeb75816c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"49cd1974dcdf7af8948ad988c3dfa235a1d04c48","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"205486802b33c2d4d1793a4b1174f9eaff836c74","isMergeCommit":false,"messageTitle":"add JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":79,"deletions":3}}},{"hash":"a897a8ac932861fe9711508f2393b5dbcdaa8d64","isMergeCommit":false,"messageTitle":"add find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":6}}}]},{"date":"2023-09-07","commitResults":[{"hash":"750c913d945858fbf700fc56ddeee40863c2ce7c","isMergeCommit":false,"messageTitle":"Change the code to follow standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":9}}},{"hash":"d1840679d7da0329f0ce4dfa7b8f3637448fea3d","isMergeCommit":false,"messageTitle":"Write documentation for classes and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":282,"deletions":8}}},{"hash":"518fc9aaa020fcd00cd21fe276103acfbed53d39","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"15136674e20c8b439ded599e14aa526d8635e334","isMergeCommit":true,"messageTitle":"Resolve conflicts","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"8037f03a9021aab0af6cc2585dc055c907c69d10","isMergeCommit":false,"messageTitle":"Write documentation for FindCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"18a3071ed8fe80c8eb5beeb177713d952372eded","isMergeCommit":true,"messageTitle":"Resolve conflicts caused by adding new method","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"ca59f5e403c117ee8c7184f959d0ae8cd79a684f","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":145,"deletions":22}}},{"hash":"a097cfadc19167298e2fd797f719049f1128ac2b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"fe552764fb0e4419028edb0a7ec5f7636e722c4a","isMergeCommit":false,"messageTitle":"Implement basic GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":235,"deletions":80}}},{"hash":"9f79b32c0e786053fc901728275472c91ebea363","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"e0c3c5c7dc2bbcd924722115dddd6be9144ac40e","isMergeCommit":false,"messageTitle":"Make Qi greet when the program starts","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":15,"deletions":8},"java":{"insertions":19,"deletions":4}}}]},{"date":"2023-09-16","commitResults":[{"hash":"9828c4396b19ed415bf1ec512f6edf8aa018f81d","isMergeCommit":false,"messageTitle":"Make some changes in GUI","messageBody":"The avatars of User and Qi are in rectangle because they are\ndisplayed using javafx.scene.image.ImageView.\n\nChange the shape of the avatars to circle by replacing\njavafx.scene.image.ImageView with javafx.scene.shape.Circle.\n\nDoing so will make the UI more pleasant to users.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"fxml":{"insertions":3,"deletions":3},"java":{"insertions":29,"deletions":42}}}]}]},"authorFileTypeContributionMap":{"VN-Hao":{"java":1348,"md":0,"fxml":42,"sh":0,"bat":1,"gradle":22,"txt":6}},"authorContributionVariance":{"VN-Hao":32884.805},"authorDisplayNameMap":{"VN-Hao":"CS2103T-T13-2 NGUY.. HAO"}} diff --git a/WZWren_ip_master/authorship.json b/WZWren_ip_master/authorship.json index 05a50758..160fc525 100644 --- a/WZWren_ip_master/authorship.json +++ b/WZWren_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":"WZWren"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"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":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"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":"WZWren"},"content":" mainClass.set(\"trackerbot.Launcher\")","lastModifiedDate":"2023-09-07"},{"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":"WZWren"},"content":" archiveFileName \u003d \"trackerbot.jar\"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" archiveBaseName \u003d \"trackerbot\"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WZWren":20,"-":40}},{"path":"src/main/java/trackerbot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":" * Entry point for the app.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * @version Level-10","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":14}},{"path":"src/main/java/trackerbot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.MainWindow;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * A GUI for TrackerBot using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" * @version Level-10","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" private TrackerBot trackerBot \u003d TrackerBot.instantiate();","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" stage.titleProperty().set(\"TrackerBot\");","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setTrackerBot(trackerBot);","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * Attempts to save the data from TrackerBot in the exit sequence.","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" public void stop() {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" trackerBot.handleSave();","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":49}},{"path":"src/main/java/trackerbot/TrackerBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * Main Program for the application. \u003cbr\u003e","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" * As of Level-0, this has been renamed from Duke to TrackerBot","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * as part of the requirements for the iP.","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"public class TrackerBot {","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" /** Name of the app. **/","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" private static final String APP_NAME \u003d \"TrackerBot\";","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" /** Collection of tasks stored by TrackerBot */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" /** Displays user IO. */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" private UiHandler uiHandler;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" * Constructor for the TrackerBot instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * @param appName The name of the app to instantiate.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" private TrackerBot(String appName) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" uiHandler \u003d UiHandler.instantiate(appName);","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * Instantiates the TrackerBot object.","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" * @return The TrackerBot instance, with loaded data in the Task List, if any.","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" public static TrackerBot instantiate() {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" TrackerBot instance \u003d new TrackerBot(APP_NAME);","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" Storage.read(instance.tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" instance.uiHandler.setError(\"I failed to retrieve your save file. \"","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" + \"Here\u0027s the error I got: \\n\" + e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" return instance;","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" * Saves the tasks in TaskList, if any.","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the save fails.","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" public void handleSave() throws TrackerBotException {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" * Returns the message from the TrackerBot.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" * @return The message, stored in the UiHandler instance.","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" public String getLastMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" return uiHandler.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" * Parses a Command and executes it.","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" * @return The post-execution String in our UiHandler.","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" public String handleInput(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" command.execute(tasks, uiHandler);","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" return uiHandler.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"WZWren":82,"-":1}},{"path":"src/main/java/trackerbot/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"class AddCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" private final String commandFields;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" private final CommandType type;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" AddCommand(CommandType type, String commandFields) {","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" this.commandFields \u003d commandFields;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.addTask(type, commandFields));","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" uiHandler.setError(e.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":24}},{"path":"src/main/java/trackerbot/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" * Abstracts the Commands obtained from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003e Command nests its child classes inside its abstraction, as there is","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" * a small number of available commands that can be called through the UI. \u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eEvery nested Command should be assigned a corresponding CommandType enum.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" * Runs the command specified by the specific command.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" * @param tasks The Collection of Tasks stored by TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" * @param uiHandler The UI object of TrackerBot, to pass status messages into.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" public abstract void execute(TaskList tasks, UiHandler uiHandler);","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" * Factory method for Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eDepending on the keyword passed in, the method will generate an","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" * appropriate instance of a subtype of Command. Currently, this method can generate","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" * these subtypes:\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" * \u003cul\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eAddCommand, to add Tasks into the Tracker.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eDeleteCommand, to remove Tasks from the Tracker.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eToggleCommand, to mark/unmark Tasks.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eFindCommand, to find all Tasks matching a substring.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eListCommand, to display Tasks in the Tracker.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eExitCommand, to tell the Tracker to exit.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eUnknownCommand, which will throw an error on execute.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" * \u003c/ul\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * @param keyword The keyword passed in by the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" * @param commandField The description of the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * @return Some subtype of Command related to keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" public static Command of(String keyword, String commandField) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" CommandType parsedType \u003d getCommandType(keyword);","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" Command result;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" switch (parsedType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" // Fallthrough","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" // Fallthrough","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" result \u003d new AddCommand(parsedType, commandField);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" result \u003d new DeleteCommand(commandField);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" // Fallthrough","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" result \u003d new ToggleCommand(parsedType, commandField);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" case FIND:","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" result \u003d new FindCommand(commandField);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" result \u003d new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" result \u003d new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" result \u003d new UnknownCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" private static CommandType getCommandType(String keyword) {","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" CommandType result \u003d CommandType.UNKNOWN;","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" for (CommandType command: CommandType.values()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" if (keyword.equals(command.getKeyword())) {","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" result \u003d command;","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" return result;","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"WZWren":86}},{"path":"src/main/java/trackerbot/command/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":" * Enumerates the possible Command types that exist in the Command class.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eCommandType should directly mirror the number of nested implementations of the","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":" * Command subclass, which can be instantiated with Command.of().\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * @version A-JavaDoc","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.command.Command#of","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" /** Command to exit the program. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" /** Command to list all tasks in the task list. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" /** Command to add a new to-do task to the task list. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" TODO(\"todo\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" /** Command to add a new deadline task to the task list. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" DEADLINE(\"deadline\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /** Command to add a new event task to the task list. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" EVENT(\"event\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" /** Command to mark a task to be complete. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" /** Command to mark a task as incomplete. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" /** Command to delete a task. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" /** Command to search for a task. **/","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" FIND(\"find\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" /** Command to denote an unknown keyword call. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" UNKNOWN(\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" /** The String representation of the enum. Used to parse the command into enum. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" private final String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * Constructor for the enum Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eEnum constructors are implicitly private, so the tag is not included.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * @param keyword The keyword of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" CommandType(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" * Gets the keyword of the enum CommandType.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" * @return The associated String keyword with the Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" public String getKeyword() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" return keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WZWren":52}},{"path":"src/main/java/trackerbot/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"class DeleteCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" private final String commandFields;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" DeleteCommand(String commandFields) {","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" this.commandFields \u003d commandFields;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" int index \u003d getIndexFromFields();","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.deleteTask(index));","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" uiHandler.setError(e.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" private int getIndexFromFields() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" Scanner scanner \u003d new Scanner(commandFields);","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" if (!scanner.hasNextInt()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Invalid format: delete [number in list range]\");","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" int index \u003d scanner.nextInt();","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" if (scanner.hasNext()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Too many fields: delete [number in list range]\");","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" return index;","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":42}},{"path":"src/main/java/trackerbot/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"class ExitCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" ExitCommand() {}","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" uiHandler.exitApp();","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":13}},{"path":"src/main/java/trackerbot/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"class FindCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" private final String commandFields;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" FindCommand(String commandFields) {","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" this.commandFields \u003d commandFields;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.findAll(commandFields));","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":17}},{"path":"src/main/java/trackerbot/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"class ListCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" ListCommand() {}","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.list());","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":13}},{"path":"src/main/java/trackerbot/command/ToggleCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"class ToggleCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" private final String commandFields;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" private final CommandType type;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" ToggleCommand(CommandType type, String commandFields) {","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" this.commandFields \u003d commandFields;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" int index \u003d getIndexFromFields();","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" switch (type) {","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" case MARK:","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.markTask(index));","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" case UNMARK:","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.unmarkTask(index));","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" throw new IllegalStateException(\"Created ToggleCommand with invalid field.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" uiHandler.setError(e.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" private int getIndexFromFields() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" Scanner scanner \u003d new Scanner(commandFields);","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" if (!scanner.hasNextInt()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Invalid format: mark/unmark [number in list range]\");","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" int index \u003d scanner.nextInt();","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" if (scanner.hasNext()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Too many fields: mark/unmark [number in list range]\");","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" return index;","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":54}},{"path":"src/main/java/trackerbot/command/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"class UnknownCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" UnknownCommand() {}","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" uiHandler.setError(\"Unrecognised Command Type. Try another?\");","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":13}},{"path":"src/main/java/trackerbot/exception/TrackerBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":" * Dedicated Exception class for the TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eTrackerBotException handles any expected, recoverable errors that","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":" * happen in TrackerBot. The expected way to handle this exception is to","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" * pass the error message into a Ui object for handling.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" * @version A-JavaDoc","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"public class TrackerBotException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" public TrackerBotException(String errMsg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" super(errMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"WZWren":15}},{"path":"src/main/java/trackerbot/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" * Represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eSkeleton code from the JavaFX tutorial provided.\u003c/p\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * @version Level-10","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" /** Label for the DialogBox. */","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" /** Avatar image for the DialogBox. */","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" * Constructs the DialogBox controller object.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" * @param text The description to display in the box.","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * @param img The image of the avatar.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" Circle circleClip \u003d new Circle(","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" displayPicture.getLayoutX() + displayPicture.getFitWidth() / 2,","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" displayPicture.getLayoutY() + displayPicture.getFitHeight() / 2,","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" displayPicture.getFitWidth() / 2","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" displayPicture.setClip(circleClip);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" setAlignment(Pos.CENTER_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" * Creates a user dialog box, to represent the user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" * @param text The description to display in the box.","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" * @param img The image of the avatar.","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" * @return The constructed DialogBox object.","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" * Creates a bot dialog box, to represent the TrackerBot reply.","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" * @param text The description to display in the box.","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" * @param img The image of the avatar.","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" * @return The constructed DialogBox object, flipped by the flip method.","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" public static DialogBox getBotDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":94}},{"path":"src/main/java/trackerbot/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import trackerbot.TrackerBot;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eSkeleton code from the JavaFX tutorial provided.\u003c/p\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eNote that @FXML exposes the private methods to FXML files.\u003c/p\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" * @version Level-10","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /** Container that expands to have a ScrollBar, to use in conjunction with dialogContainer. */","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" /** Container to hold all the DialogBox instances. */","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" /** Text Field for user input. */","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" /** Button to send user input to program. */","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" /** TrackerBot instance, serving as a backend. */","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" private TrackerBot trackerBot;","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" /** User image of TrackerBot, referenced by DialogBox. */","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" /** Bot image of TrackerBot, referenced by DialogBox. */","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" private Image botImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Bot.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * Sets the TrackerBot instance to the initialized instance in Main.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eAdapted skeleton code to also immediately display the welcome message","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" * on initialization.\u003c/p\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" * @param bot The instance to preserve in MainWindow.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" public void setTrackerBot(TrackerBot bot) {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" trackerBot \u003d bot;","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" DialogBox.getBotDialog(trackerBot.getLastMessage(), botImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"WZWren"},"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":66,"author":{"gitId":"WZWren"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" String response \u003d trackerBot.handleInput(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" DialogBox.getBotDialog(response, botImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":78}},{"path":"src/main/java/trackerbot/gui/UiHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * Generates UI elements for TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * @version Level-10","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"public class UiHandler {","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" /** Name of the app. **/","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" private final String appName;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" /** Stores the last known message from the app. */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" private String uiMessage;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" * Constructor for the class.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis is private, as all instances of Ui should generate the bootup message","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * on creation.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" * @param appName The name of the instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" private UiHandler(String appName) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" this.appName \u003d appName;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * Factory method for UI.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" * This automatically sets the UiHandler message to be a greeting message.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * @param appName The name of the instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * @return A new Ui instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" public static UiHandler instantiate(String appName) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" UiHandler uiHandler \u003d new UiHandler(appName);","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" uiHandler.uiMessage \u003d \"Greetings from \" + uiHandler.appName + \"!\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" + \"How may I assist?\";","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" return uiHandler;","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" * Sets the error message in UiHandler.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" * @param message The error message to display.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" public void setError(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" uiMessage \u003d \"Oh dear.\\n\" + message;","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * Sets the message to be the exit message.","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" public void exitApp() {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" uiMessage \u003d \"Thank you for using \" + appName + \". Goodbye.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(0.5));","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" delay.setOnFinished(e -\u003e Platform.exit());","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" delay.play();","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" * Sets the message in UiHandler.","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" * @param message The status message to display.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" public void setMessage(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" uiMessage \u003d message;","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" * Gets the message in UiHandler.","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" * @return The String representation of the message in UiHandler.","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" return uiMessage;","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WZWren":79}},{"path":"src/main/java/trackerbot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.time.ZoneOffset;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.TaskDateHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" * The Deadline class for TrackerBot, inheriting from the Task class. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * This Task child contains a LocalDateTime object to complete the task by.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * @version A-JavaDoc","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" /** The Deadline of the task. **/","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" * Constructor for the class.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * @param desc The description of the Deadline task.","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" * @param by The String representation of the deadline to parse into a LocalDateTime object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the deadline cannot be parsed by TaskDateHandler.","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.utils.TaskDateHandler#convertInputToDate","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" public Deadline(String desc, String by) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" super(desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" this.by \u003d TaskDateHandler.convertInputToDate(by);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * Constructs a Deadline using a String array, for use in save parsing.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" * @param args The arguments for constructing Deadline, containing isDone status in index","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * 0, description in index 1 and an epoch Date string in index 2","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the deadline cannot be parsed by TaskDateHandler.","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * or if the epoch save string is corrupted.","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.utils.TaskDateHandler#convertSaveToDate","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" protected Deadline(String[] args) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" super(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" this.by \u003d TaskDateHandler.convertSaveToDate(args[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" return \"D|\" + getSaveInfo() + \"|\" + this.by.toEpochSecond(ZoneOffset.UTC);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * toString method of Deadline. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" * The String representation of To-do appends the [D] tag in front of the Task toString, and","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" * the deadline date to the end of the toString.","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" * @return \"[D]\" prefixed to task.toString(), and \"(by: [deadline])\" postfixed to task.toString().","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" return \"[D]\" + super.toString() + \" (by: \" + TaskDateHandler.convertDateToUi(this.by) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"WZWren":62}},{"path":"src/main/java/trackerbot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.time.ZoneOffset;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.TaskDateHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * The Event class for TrackerBot, inheriting from the Task class. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis Task child contains 2 LocalDateTime objects to denote the interval to","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * complete the Task by.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eAs of version A-JavaDoc, the interval does not explicitly check for validity of","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" * this time period.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" * @version A-JavaDoc","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" /** The start date of the event. **/","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" /** The end date of the event. **/","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" * Constructor for the class.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" * @param desc The description of the Event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * @param from The String representation of the start date to parse into a LocalDateTime object.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" * @param to The String representation of the end date to parse into a LocalDateTime object.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * @throws DateTimeParseException if the deadline cannot be parsed by TaskDateHandler.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.utils.TaskDateHandler#convertInputToDate(String, String)","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" public Event(String desc, String from, String to) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" super(desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" LocalDateTime[] fromToPair \u003d TaskDateHandler.convertInputToDate(from, to);","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" assert fromToPair.length \u003d\u003d 2 : \"input conversion to date failed without exception\";","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" this.from \u003d fromToPair[0];","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" this.to \u003d fromToPair[1];","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" assert this.to.isAfter(this.from) : \"start date should be earlier than end date\";","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" * Constructs a Event using a String array, for use in save parsing.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" * @param args The arguments for constructing Event, containing isDone status in index","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" * 0, description in index 1 and an epoch Date string in index 2 and 3.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the event dates cannot be parsed by TaskDateHandler,","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * or if the epoch save string is corrupted.","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.utils.TaskDateHandler#convertSaveToDate(String, String)","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" protected Event(String[] args) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" super(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" LocalDateTime[] fromToPair \u003d TaskDateHandler.convertSaveToDate(args[2], args[3]);","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" assert fromToPair.length \u003d\u003d 2 : \"input conversion to date failed without exception\";","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" this.from \u003d fromToPair[0];","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" this.to \u003d fromToPair[1];","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" assert this.to.isAfter(this.from) : \"start date should be earlier than end date\";","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" return \"E|\" + getSaveInfo() + \"|\"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" + this.from.toEpochSecond(ZoneOffset.UTC) + \"|\"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" + this.to.toEpochSecond(ZoneOffset.UTC);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" * toString method of Event. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" * The String representation of To-do appends the [E] tag in front of the Task toString, and","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" * the event period to the end of the toString.","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" * @return \"[D]\" prefixed to task.toString(), and \"(from: [start] / to: [end])\" postfixed to task.toString().","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" + \" (from: \" + TaskDateHandler.convertDateToUi(this.from)","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" + \" | to: \" + TaskDateHandler.convertDateToUi(this.to) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"WZWren":84}},{"path":"src/main/java/trackerbot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":" * The Task class for TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe Task class abstracts each checklist item inside a Reminder-Type app.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eTask should not be instantiated as a basic task. To instantiate a basic Task","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" * with no DateTime fields, use the To-do subtype instead.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" /** The description of the task instance. **/","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" private String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" /** The status of the task instance. If true, the task is done. */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" * Constructor for the Task class, to be called with super.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * @param desc The description of the task to create.","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" protected Task(String desc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" this.description \u003d desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * Constructs a Task using a String array, for use in save parsing.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis should only be called by child classes in their array constructors.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * @param args The arguments for constructing a Task, containing isDone status in index","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * 0 and description in index 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" protected Task(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" this.description \u003d args[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" this.isDone \u003d args[0].equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" * Returns the save string for the child class. \u003cbr\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" * The save string should have the following format: \u003cbr\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" * {Task Flag} | {Mark Status} | {Description} | {Fields...}","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" * \u003cul\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eTask Flag represents the type of Task to create.\u003c/li\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eMark Status is a 0/1 representation of the Checkmark status.\u003c/li\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eDescription is the main body of the Task item to display.\u003c/li\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eFields are the additional fields required by the Task, delimited by \u0027|\u0027.\u003c/li\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" * \u003c/ul\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * @return The \u0027|\u0027 delimited String to store in save file.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" public abstract String toSaveString();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" * Factory method to generate Tasks from the save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eofSaveString expects the save string to be split before passing into Task.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" * @param type The String representation of the Task in the save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" * @param args The Arguments for each task in the save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" * @return A Task corresponding to the type and args of the save string.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the save file is corrupted, or if","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" * the DateTime field is invalid.","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" public static Task ofSaveString(String type, String... args)","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" if (args.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Todos should have exactly 2 arguments.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" return new Todo(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" if (args.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Deadline should have exactly 3 arguments.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" return new Deadline(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" if (args.length !\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Events should have exactly 4 arguments.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" return new Event(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" throw new IllegalStateException(\"Unknown Task type.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" * Helper method for toSaveString. \u003cbr\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" * Gets a formatted description and mark status of the Task, and","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":" * passes it to the child classes.","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" * @return {Mark Status} | {Description} String, to append to toSaveString","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" * implementation in child classes.","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" protected String getSaveInfo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" String checkStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" return checkStatus + \"|\" + description;","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" * Helper function to determine the checkmark status of the Task.","lastModifiedDate":"2023-08-21"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":" * @return \"[X]\" if the task is done, \"[ ]\" otherwise.","lastModifiedDate":"2023-08-21"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":" private String getCheckbox() {","lastModifiedDate":"2023-08-21"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":" return isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-21"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":109,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":110,"author":{"gitId":"WZWren"},"content":" * Flags the task to be completed, if able.","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the Task is already done.","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"WZWren"},"content":" public void markTask() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"WZWren"},"content":" if (isDone) {","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"The specified task is already completed.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":116,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":117,"author":{"gitId":"WZWren"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":118,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":120,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"WZWren"},"content":" * Flags the task to be incomplete, if able.","lastModifiedDate":"2023-08-21"},{"lineNumber":122,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the Task is already still in progress.","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":124,"author":{"gitId":"WZWren"},"content":" public void unmarkTask() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"WZWren"},"content":" if (!isDone) {","lastModifiedDate":"2023-08-21"},{"lineNumber":126,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"This task is already in progress.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":128,"author":{"gitId":"WZWren"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":129,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":130,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":131,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"WZWren"},"content":" * Check if the description of the Task contains the query String.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"WZWren"},"content":" * @param searchStr The query to match any point in the description.","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"WZWren"},"content":" * @return true, if the description contains the searchStr, and false","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"WZWren"},"content":" * otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"WZWren"},"content":" public boolean doesContain(String searchStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"WZWren"},"content":" return description.contains(searchStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":142,"author":{"gitId":"WZWren"},"content":" * toString method of Task. \u003cbr\u003e","lastModifiedDate":"2023-08-21"},{"lineNumber":143,"author":{"gitId":"WZWren"},"content":" * A Task is formatted as \"[X] description of task\", where the X may or","lastModifiedDate":"2023-08-21"},{"lineNumber":144,"author":{"gitId":"WZWren"},"content":" * may not be present depending on the completion status of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":145,"author":{"gitId":"WZWren"},"content":" * @return The String representation of the Task.","lastModifiedDate":"2023-08-21"},{"lineNumber":146,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":147,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":148,"author":{"gitId":"WZWren"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":149,"author":{"gitId":"WZWren"},"content":" return getCheckbox() + \" \" + description;","lastModifiedDate":"2023-08-21"},{"lineNumber":150,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":151,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"WZWren":151}},{"path":"src/main/java/trackerbot/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.command.CommandType;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" * Collection of Tasks for use in TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" * Task Array.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" * The Task List array itself should be immutable, in case we override it","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" * during runtime.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" * Attempts to add a new Task into the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" * @param type The enumerated type of Command to add into the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * @param commandField The description of the Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the addition of the task encounters an error during parse.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.utils.Parser#parseAdd","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" public String addTask(CommandType type, String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" Task newTask \u003d Parser.parseAdd(type, commandField);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" return \"I am tracking this task now:\\n \" + newTask.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" * Attempts to toggle the item at index as complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" * @param index The index of the Task in the TaskList, starting from 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the Task specified does not exist, or is","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" * already completed.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" public String markTask(int index) throws TrackerBotException {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" Task task \u003d getTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" task.markTask();","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" return \"This task has been marked as completed.\\n \" + task;","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" * Attempts to toggle the item at index as incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" * @param index The index of the Task in the TaskList, starting from 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the Task specified does not exist, or is","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" * still incompleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" public String unmarkTask(int index) throws TrackerBotException {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" Task task \u003d getTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" task.unmarkTask();","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" return \"The task has been marked as incomplete.\\n \" + task;","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" * Attempts to delete the item at index.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" * @param index The index of the Task in the TaskList, starting from 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the Task specified does not exist.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" public String deleteTask(int index) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" Task task \u003d getTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" return \"I have removed this task off of my list.\\n \" + task + \"\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" + tasks.size() + \" task(s) remain on my list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" * Deletes all items in the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" public void clear() {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" tasks.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" * Finds all Tasks matching the query, along with the associated index in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" * @param searchStr The query to match at any point in the description of the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":" * @return A String representation of all the Tasks matching the query, in list form.","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" * If no Tasks match the query, returns a String indicating no matches.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" public String findAll(String searchStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" for (int i \u003d 1; i \u003c tasks.size() + 1; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":" if (tasks.get(i - 1).doesContain(searchStr)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":" result.append(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":" result.append(\". \");","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" result.append(tasks.get(i - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":" if (result.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":" return \"No results match your search.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"WZWren"},"content":" // delete the overflow \\n from the last append operation","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"WZWren"},"content":" if (result.charAt(result.length() - 1) \u003d\u003d \u0027\\n\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"WZWren"},"content":" result.deleteCharAt(result.length() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"WZWren"},"content":" return result.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"WZWren"},"content":" * Returns a UI-friendly String representation of the Task List.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"WZWren"},"content":" * @return A String representation of the Task List, to pass directly into Ui.","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"WZWren"},"content":" public String list() {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"WZWren"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"WZWren"},"content":" return \"No tasks have been added to the list yet.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"WZWren"},"content":" return \"I am tracking these tasks:\\n\" + getListOfTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"WZWren"},"content":" * Adds the Task directly into TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis is a method used by Storage.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"WZWren"},"content":" * @param task The Task to add into TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"WZWren"},"content":" public void importSave(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"WZWren"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"WZWren"},"content":" * Exports all items in the TaskList into a save-compatible String form.","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"WZWren"},"content":" * @return The String representation of all the Tasks in the TaskList, in","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"WZWren"},"content":" * a save-compatible form.","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"WZWren"},"content":" public String exportSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"WZWren"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"WZWren"},"content":" for (int i \u003d 1; i \u003c tasks.size() + 1; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"WZWren"},"content":" result.append(tasks.get(i - 1).toSaveString());","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"WZWren"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"WZWren"},"content":" return result.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"WZWren"},"content":" * Gets the Task at the provided index.","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"WZWren"},"content":" * @param index The index of the list to check.","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"WZWren"},"content":" * @return The Task object at the index, if it exists, and null otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"WZWren"},"content":" private Task getTask(int index) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":159,"author":{"gitId":"WZWren"},"content":" if (index \u003c\u003d 0 || index \u003e tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"The specified task does not exist.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":161,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"WZWren"},"content":" return tasks.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"WZWren"},"content":" * Gets the String representation of the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"WZWren"},"content":" * @return the String representation of the TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"WZWren"},"content":" private String getListOfTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"WZWren"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"WZWren"},"content":" for (int i \u003d 1; i \u003c tasks.size() + 1; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"WZWren"},"content":" result.append(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"WZWren"},"content":" result.append(\". \");","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"WZWren"},"content":" result.append(tasks.get(i - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"WZWren"},"content":" if (i !\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"WZWren"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"WZWren"},"content":" return result.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WZWren":183}},{"path":"src/main/java/trackerbot/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":" * The To-do class for TrackerBot, inheriting from the Task class. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":" * This represents the most basic variant of the Task, and can be constructed","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":" * with the basic parameters for Task.","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" * @version A-JavaDoc","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * Constructor for the class.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * @param desc The description of the To-do task.","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" public Todo(String desc) {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" super(desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" * Constructs a To-do using a String array, for use in save parsing.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eAs To-do serves as a basic abstraction of the Task, the constructor directly calls","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * super to generate the object.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" * @param args The arguments for constructing a To-do, containing isDone status in index","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" * 0 and description in index 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" protected Todo(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" super(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" return \"T|\" + getSaveInfo();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * toString method of To-do. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" * The String representation of To-do appends the [T] tag in front of the Task toString.","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * @return \"[T]\" appended to Task.toString().","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"WZWren":45}},{"path":"src/main/java/trackerbot/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.utils;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.command.CommandType;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * Contains static methods to parse user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" * Splits the user input into its keyword and commandField components.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eParser does not directly handle the Command logic of the input. After","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * splitting the user input, it passes it into Command.of method to identify","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" * the Command and return it.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" * @param input The unmodified console string that the user inputs.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" * @return An appropriate command corresponding to the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" public static Command parseCommand(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" Scanner scanner \u003d new Scanner(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" String rest;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" if (!scanner.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" keyword \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" keyword \u003d scanner.next();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" if (keyword.equals(\"\") || !scanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" rest \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" rest \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" return Command.of(keyword, rest);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" * Parses the user input arising from the add keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis method further parses the user input during the add command,","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * to differentiate between the Task types.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * @param type The enumerated type of Command to add into the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" * @param commandField The description of the Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" * @return A corresponding subclass of Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the user input is in an invalid format.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" public static Task parseAdd(CommandType type, String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" Task newTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" newTask \u003d createTodo(commandField);","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" newTask \u003d createDeadline(commandField);","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" case EVENT:","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" newTask \u003d createEvent(commandField);","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" throw new IllegalStateException(\"Uncaught CommandType: \" + type.getKeyword());","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" return newTask;","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" private static Task createTodo(String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" if (commandField.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Cannot track task without description.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" return new Todo(commandField.trim());","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" private static Task createDeadline(String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" final String flag \u003d \"/by\";","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" final String format \u003d \"^.+ /by .+\";","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" String[] segments;","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" if (!commandField.matches(format)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Improper format: deadline [description] /by [end-date]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" segments \u003d commandField.split(flag);","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" if (segments.length \u003e 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Too many flags: deadline [description] /by [end-date]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" if (segments[0].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Cannot track deadline without description.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":" if (segments[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Empty /by flag.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":" return new Deadline(segments[0].trim(), segments[1].trim());","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":" private static Task createEvent(String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"WZWren"},"content":" final String flag \u003d \"/from|/to\";","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"WZWren"},"content":" final String format \u003d \"^.+ /from .+ /to .+\";","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"WZWren"},"content":" String[] segments;","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"WZWren"},"content":" if (!commandField.matches(format)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"WZWren"},"content":" \"Improper format: event [description] /from [start-date] /to [end-date]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"WZWren"},"content":" segments \u003d commandField.split(flag);","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"WZWren"},"content":" if (segments.length \u003e 3) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"WZWren"},"content":" \"Too many flags: event [description] /from [start-date] /to [end-date]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"WZWren"},"content":" if (segments[0].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Cannot track task without description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"WZWren"},"content":" if (segments[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Empty /from flag.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"WZWren"},"content":" if (segments[2].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Empty /to flag.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"WZWren"},"content":" return new Event(segments[0].trim(), segments[1].trim(), segments[2].trim());","lastModifiedDate":"2023-09-14"},{"lineNumber":135,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WZWren":136}},{"path":"src/main/java/trackerbot/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.utils;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" * Contains static methods to read/write save data of TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eStorage will always save and load the files in the relative path:","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" * [.\\TrackerBot\\data.txt].\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" private static final String PARENT_FOLDER \u003d \"TrackerBot\";","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" private static final String DATA_FILE \u003d \"data.txt\";","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" /** Prevent the instantiation of Storage object. */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" private Storage() {};","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * Parses the save string in the input file.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe save string is generated by the Task.toSaveString","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" * method, and will be parsed based on its format.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * @param saveStr The input save string, in the aforementioned format.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" * @return The Task object from parsing the String.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * @see Task#toSaveString()","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" private static Task parseSaveLine(String saveStr) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" final String delimiter \u003d \"[|]\";","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" String[] args \u003d saveStr.split(delimiter);","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" return Task.ofSaveString(args[0], Arrays.copyOfRange(args, 1, args.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" * Attempts to read the save data into the TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe save string is generated by the Task.toSaveString","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" * method, and will be parsed based on its format.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis method will always attempt to load from the relative path:","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * [.\\TrackerBot\\data.txt].\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" * @param tasks The TaskList to read data into.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException If the save data fails to load, with specified reason.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" * @see Task#toSaveString()","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" public static void read(TaskList tasks) throws TrackerBotException {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" Path path \u003d Paths.get(PARENT_FOLDER, DATA_FILE);","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" if (Files.notExists(path)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" try (Scanner input \u003d new Scanner(new FileReader(path.toFile()))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" while (input.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" tasks.importSave(parseSaveLine(input.nextLine()));","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" tasks.clear();","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" throw e;","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Failed to load save file: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" * Attempts to save TrackerBot data into a save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis method will always attempt to save into the relative path:","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" * [.\\TrackerBot\\data.txt].\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" * @param tasks The TaskList to read data from.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException If the save data fails to generate, with specified reason.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" public static void save(TaskList tasks) throws TrackerBotException {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" Path path \u003d Paths.get(PARENT_FOLDER, DATA_FILE);","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" File file \u003d path.toFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" Files.createDirectories(path.getParent());","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" try (FileOutputStream output \u003d new FileOutputStream(file, false)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" output.write(tasks.exportSave().getBytes());","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" } // the try with resources statement auto-closes output.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"WZWren":99}},{"path":"src/main/java/trackerbot/utils/TaskDateHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.utils;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.time.ZoneOffset;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import java.time.temporal.ChronoField;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * Handles Date-related methods for Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" * @version A-Assertions","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"public class TaskDateHandler {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" private static final String DATE_INPUT_FORMAT \u003d \"d/M[/yyyy][ HHmm]\";","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" private static final String DATE_UI_FORMAT \u003d \"dd MMM yyyy, EEE @ hh:mma\";","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" /** Prevent the instantiation of TaskDateHandler object. **/","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" private TaskDateHandler() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" * Converts the Input String into a LocalDateTime object.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" * @param input The input String to parse into a Date object.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" * The String should be in the format: [d/M/yyyy HHmm]\u003cbr\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" * The year and time are optional. If not given, the year is assumed","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" * to be the current year, and the time is assumed to be 0000.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" * @return The LocalDateTime object from the parsed String","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the input does not match the format string","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" public static LocalDateTime convertInputToDate(String input)","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" DateTimeFormatter format \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" .append(DateTimeFormatter.ofPattern(DATE_INPUT_FORMAT))","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" .parseDefaulting(ChronoField.YEAR_OF_ERA, LocalDateTime.now().get(ChronoField.YEAR_OF_ERA))","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" .toFormatter();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" return LocalDateTime.parse(input, format);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Error in parsing input to date: \" + e.getMessage()","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" + \"\\nAdditional Date Fields should be in the format DD/MM(/YYYY)( HHmm)\");","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" * Converts the start date and end date inputs into a pair of LocalDateTime.","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe inputs should be in the format: [d/M/yyyy HHmm]\u003c/p\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe year and time are optional. If not given, the year is assumed","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * to be the current year, and the time is assumed to be 0000.\u003c/p\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" * @param fromStr The start date input String to parse into a Date object.","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" * @param toStr The end date input String to parse into a Date object.","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" * @return A LocalDateTime array of length 2, parsed from the input Strings","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the input does not match the format string, or","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" * if the start date is not earlier than the end date.","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" public static LocalDateTime[] convertInputToDate(String fromStr, String toStr)","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" LocalDateTime startDate \u003d convertInputToDate(fromStr);","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" LocalDateTime endDate \u003d convertInputToDate(toStr);","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" if (!(endDate.isAfter(startDate))) {","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Start date should be before end date.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" return new LocalDateTime[] {startDate, endDate};","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" * Converts the Save String into a LocalDateTime object.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" * @param input The input String to parse into a Date object.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" * The String should be in epoch timestamp format.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" * @return The LocalDateTime object from the parsed String","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the input is not in valid epoch format, or","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" * if the input is not parsable as a Long","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" public static LocalDateTime convertSaveToDate(String input) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" long epoch \u003d Long.parseLong(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" return LocalDateTime.ofEpochSecond(epoch, 0, ZoneOffset.UTC);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Cannot parse time field.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Time field is out of range.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":" * Converts the start date and end save date input into a pair of LocalDateTime.","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe String should be in epoch timestamp format.\u003c/p\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" * @param fromStr The start date input String to parse into a Date object.","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" * @param toStr The end date input String to parse into a Date object.","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" * @return A LocalDateTime array of length 2, parsed from the input Strings","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the input does not match the format string, or","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" * if the start date is not earlier than the end date.","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":" public static LocalDateTime[] convertSaveToDate(String fromStr, String toStr)","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":" throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" LocalDateTime startDate \u003d convertSaveToDate(fromStr);","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":" LocalDateTime endDate \u003d convertSaveToDate(toStr);","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":" if (!(endDate.isAfter(startDate))) {","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Save date violates time constraints.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"WZWren"},"content":" return new LocalDateTime[] {startDate, endDate};","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"WZWren"},"content":" * Converts the LocalDateTime object into a UI-friendly String format.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"WZWren"},"content":" * @param date The LocalDateTime to parse as a String.","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"WZWren"},"content":" * @return The parsed String, in [dd MMM yyyy, EEE @ hh:mma] format.","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"WZWren"},"content":" public static String convertDateToUi(LocalDateTime date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"WZWren"},"content":" DateTimeFormatter format \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"WZWren"},"content":" .append(DateTimeFormatter.ofPattern(DATE_UI_FORMAT))","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"WZWren"},"content":" .toFormatter();","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"WZWren"},"content":" return date.format(format);","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WZWren":123}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"\u003cfx:root alignment\u003d\"CENTER_RIGHT\" minHeight\u003d\"-Infinity\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" spacing\u003d\"5.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"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":12,"author":{"gitId":"WZWren"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"WZWren"},"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\"trackerbot.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"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":"WZWren"},"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":"WZWren"},"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":"WZWren"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":19}},{"path":"src/test/java/trackerbot/utils/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.utils;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.command.CommandType;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" public void parseAdd_todoCorrectInput_shouldParse() throws TrackerBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" assertEquals(\"[T][ ] Test Input\",","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.TODO, \"Test Input\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" public void parseAdd_todoEmptyInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.TODO, \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Cannot track task without description.\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" public void parseAdd_deadlineCorrectInput_shouldParse() throws TrackerBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" assertEquals(\"[D][ ] Test Input (by: 12 Dec 2000, Tue @ 12:00AM)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.DEADLINE, \"Test Input /by 12/12/2000\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" public void parseAdd_deadlineMissingFlag_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.DEADLINE, \"Empty by flag\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Improper format: deadline [description] /by [end-date]\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" public void parseAdd_deadlineEmptyInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.DEADLINE, \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Improper format: deadline [description] /by [end-date]\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" public void parseAdd_deadlineExtraFlag_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.DEADLINE, \"Test Input /by 12/12/2000 /by additional field\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Too many flags: deadline [description] /by [end-date]\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" public void parseAdd_eventCorrectInput_shouldParse() throws TrackerBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" assertEquals(\"[E][ ] Test Input (from: 01 Dec 2000, Fri @ 12:00AM | to: 09 Dec 2000, Sat @ 12:00AM)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.EVENT, \"Test Input /from 1/12/2000 /to 9/12/2000\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" public void parseAdd_eventMissingFlag_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.EVENT, \"Test Input /from 1/12/2000\");","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Improper format: event [description] /from [start-date] /to [end-date]\",","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" public void parseAdd_eventEmptyInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.EVENT, \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Improper format: event [description] /from [start-date] /to [end-date]\",","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" public void parseAdd_eventFlippedFlag_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.EVENT, \"Test Input /to 1/12/2000 /from 9/12/2000\");","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Improper format: event [description] /from [start-date] /to [end-date]\",","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":" e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":" public void parseAdd_illegalState_shouldThrow() throws TrackerBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.UNKNOWN, \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"WZWren"},"content":" } catch (IllegalStateException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"WZWren"},"content":" // There should be an Illegal State Exception - this is not caught by the program.","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WZWren":113}},{"path":"src/test/java/trackerbot/utils/TaskDateHandlerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.utils;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import java.time.temporal.ChronoField;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * Test file for TaskDateHandlerTest. \u003cbr\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" * This parses user input to Date. As the parse can be variable with optional","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" * fields, we test to see if the parser handles bad input properly.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"public class TaskDateHandlerTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_dayAndMonthInput_shouldParseProperly() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"1/12\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" String expected \u003d LocalDateTime.now().get(ChronoField.YEAR_OF_ERA) + \"-12-01T00:00\";","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" assertEquals(expected, date.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_dayMonthYearInput_shouldParseProperly() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"24/1/2012\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" String expected \u003d \"2012-01-24T00:00\";","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" assertEquals(expected, date.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_dayMonthTimeInput_shouldParseProperly() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"09/08 0654\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" String expected \u003d LocalDateTime.now().get(ChronoField.YEAR_OF_ERA) + \"-08-09T06:54\";","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" assertEquals(expected, date.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_fullInput_shouldParseProperly() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"20/9/1922 2059\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" String expected \u003d \"1922-09-20T20:59\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" assertEquals(expected, date.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_emptyInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Error in parsing input to date: \"","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" + \"Text \u0027\u0027 could not be parsed at index 0\"","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" + \"\\nAdditional Date Fields should be in the format DD/MM(/YYYY)( HHmm)\", e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_faultyInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"21//2 2359\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Error in parsing input to date: \"","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" + \"Text \u002721//2 2359\u0027 could not be parsed at index 3\"","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" + \"\\nAdditional Date Fields should be in the format DD/MM(/YYYY)( HHmm)\", e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_notFullYearInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"21/2/20 2359\");","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Error in parsing input to date: \"","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" + \"Text \u002721/2/20 2359\u0027 could not be parsed, unparsed text found at index 4\"","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" + \"\\nAdditional Date Fields should be in the format DD/MM(/YYYY)( HHmm)\", e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WZWren":82}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"nonsense command. next line is empty on purpose.","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"todo Test my App.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"event Some arbitrary event. /from ABC /to XYZ","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"deadline tP Project. /by End of the semester.","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"unmark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"unmark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"event No from parameter. /to XYZ","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"event No to parameter. /from ABC","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"event Flipped parameters. /to XYZ /from ABC","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"event Too many parameters. /from ABC /to XYZ /to 123","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"deadline No by parameter.","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"deadline Too many parameters. /by XYZ /by XYZ","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":"todo Placeholder item.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":"todo Placeholder item 2.","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":"mark 0","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":"unmark 0","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":"unmark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":"delete 0","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":"delete 4","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WZWren":33}},{"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":"WZWren"},"content":"java -classpath ..\\bin TrackerBot \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"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":"pause","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WZWren":2,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"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":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"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":"WZWren"},"content":" mainClass.set(\"trackerbot.Launcher\")","lastModifiedDate":"2023-09-07"},{"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":"WZWren"},"content":" archiveFileName \u003d \"trackerbot.jar\"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" archiveBaseName \u003d \"trackerbot\"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WZWren":20,"-":40}},{"path":"src/main/java/trackerbot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":" * Entry point for the app.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * @version Level-10","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":14}},{"path":"src/main/java/trackerbot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.MainWindow;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * A GUI for TrackerBot using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" * @version Level-10","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" private TrackerBot trackerBot \u003d TrackerBot.instantiate();","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" stage.titleProperty().set(\"TrackerBot\");","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setTrackerBot(trackerBot);","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * Attempts to save the data from TrackerBot in the exit sequence.","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" public void stop() {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" trackerBot.handleSave();","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":49}},{"path":"src/main/java/trackerbot/TrackerBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * Main Program for the application. \u003cbr\u003e","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" * As of Level-0, this has been renamed from Duke to TrackerBot","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * as part of the requirements for the iP.","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"public class TrackerBot {","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" /** Name of the app. **/","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" private static final String APP_NAME \u003d \"TrackerBot\";","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" /** Collection of tasks stored by TrackerBot */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" /** Displays user IO. */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" private UiHandler uiHandler;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" * Constructor for the TrackerBot instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * @param appName The name of the app to instantiate.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" private TrackerBot(String appName) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" uiHandler \u003d UiHandler.instantiate(appName);","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * Instantiates the TrackerBot object.","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" * @return The TrackerBot instance, with loaded data in the Task List, if any.","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" public static TrackerBot instantiate() {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" TrackerBot instance \u003d new TrackerBot(APP_NAME);","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" Storage.read(instance.tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" instance.uiHandler.setError(\"I failed to retrieve your save file. \"","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" + \"Here\u0027s the error I got: \\n\" + e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" return instance;","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" * Saves the tasks in TaskList, if any.","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the save fails.","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" public void handleSave() throws TrackerBotException {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" * Returns the message from the TrackerBot.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" * @return The message, stored in the UiHandler instance.","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" public String getLastMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" return uiHandler.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" * Parses a Command and executes it.","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" * @return The post-execution String in our UiHandler.","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" public String handleInput(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" command.execute(tasks, uiHandler);","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" return uiHandler.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"WZWren":82,"-":1}},{"path":"src/main/java/trackerbot/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"class AddCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" private final String commandField;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" private final CommandType type;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" AddCommand(CommandType type, String commandField) {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" this.commandField \u003d commandField;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.addTask(type, commandField));","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" uiHandler.setError(e.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" public void executeAsMassOp(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" String[] commandFields \u003d Parser.parseMassOpFields(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" StringBuilder successLog \u003d new StringBuilder(\"We have successfully added the following tasks:\");","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" StringBuilder errorLog \u003d new StringBuilder(\"We have failed to parse the following commands:\");","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" for (int i \u003d 0; i \u003c commandFields.length; i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" String successStr \u003d tasks.addTask(type, commandFields[i].trim());","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" successLog.append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" successLog.append(successStr);","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"Command \");","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" errorLog.append(i + 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" errorLog.append(\": \");","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" errorLog.append(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" successLog.append(\"\\n\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" successLog.append(errorLog);","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(successLog.toString());","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":50}},{"path":"src/main/java/trackerbot/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * Abstracts the Commands obtained from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003e Command nests its child classes inside its abstraction, as there is","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" * a small number of available commands that can be called through the UI. \u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eEvery nested Command should be assigned a corresponding CommandType enum.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" * Runs the command specified by the specific command.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" * @param tasks The Collection of Tasks stored by TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" * @param uiHandler The UI object of TrackerBot, to pass status messages into.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" public abstract void execute(TaskList tasks, UiHandler uiHandler);","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" * Runs the command specified by the specific command, as a mass operation.","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" * @param tasks The Collection of Tasks stored by TrackerBot.","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" * @param uiHandler The UI object of TrackerBot, to pass status messages into.","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the command cannot be executed as a mass operation.","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" public abstract void executeAsMassOp(TaskList tasks, UiHandler uiHandler) throws TrackerBotException;","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * Factory method for Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eDepending on the keyword passed in, the method will generate an","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" * appropriate instance of a subtype of Command. Currently, this method can generate","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * these subtypes:\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" * \u003cul\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eAddCommand, to add Tasks into the Tracker.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eDeleteCommand, to remove Tasks from the Tracker.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eToggleCommand, to mark/unmark Tasks.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eFindCommand, to find all Tasks matching a substring.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eListCommand, to display Tasks in the Tracker.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eExitCommand, to tell the Tracker to exit.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eUnknownCommand, which will throw an error on execute.\u003c/li\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" * \u003c/ul\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" * @param keyword The keyword passed in by the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" * @param commandField The description of the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" * @return Some subtype of Command related to keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" public static Command of(CommandType keyword, String commandField) {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" Command result;","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" switch (keyword) {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" case MASS:","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" result \u003d new MassCommand(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" // Fallthrough","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" // Fallthrough","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" result \u003d new AddCommand(keyword, commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" result \u003d new DeleteCommand(commandField);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" // Fallthrough","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" result \u003d new ToggleCommand(keyword, commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" case FIND:","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" result \u003d new FindCommand(commandField);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" result \u003d new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" result \u003d new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" result \u003d new UnknownCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"WZWren":86}},{"path":"src/main/java/trackerbot/command/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":" * Enumerates the possible Command types that exist in the Command class.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eCommandType should directly mirror the number of nested implementations of the","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":" * Command subclass, which can be instantiated with Command.of().\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * @version A-JavaDoc","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.command.Command#of","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" /** Command to declare a mass command. **/","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" MASS(\"mass\"),","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" /** Command to exit the program. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" /** Command to list all tasks in the task list. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" /** Command to add a new to-do task to the task list. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" TODO(\"todo\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /** Command to add a new deadline task to the task list. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" DEADLINE(\"deadline\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" /** Command to add a new event task to the task list. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" EVENT(\"event\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" /** Command to mark a task to be complete. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" /** Command to mark a task as incomplete. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" /** Command to delete a task. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" /** Command to search for a task. **/","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" FIND(\"find\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" /** Command to denote an unknown keyword call. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" UNKNOWN(\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" /** The String representation of the enum. Used to parse the command into enum. **/","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" private final String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * Constructor for the enum Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eEnum constructors are implicitly private, so the tag is not included.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" * @param keyword The keyword of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" CommandType(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" * Gets the keyword of the enum CommandType.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" * @return The associated String keyword with the Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" public String getKeyword() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" return keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" public static CommandType getCommandType(String keyword) {","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" CommandType result \u003d CommandType.UNKNOWN;","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" for (CommandType command: CommandType.values()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" if (keyword.equals(command.getKeyword())) {","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" result \u003d command;","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" return result;","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WZWren":65}},{"path":"src/main/java/trackerbot/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"class DeleteCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" private final String commandField;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" DeleteCommand(String commandField) {","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" this.commandField \u003d commandField;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" int index \u003d getIndexFromFields(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.deleteTask(index));","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" uiHandler.setError(e.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" public void executeAsMassOp(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" String[] commandFields \u003d Parser.parseMassOpFields(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" HashSet\u003cInteger\u003e uniqueIndexes \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" StringBuilder errorLog \u003d new StringBuilder(\"Failed to execute delete on the following: \");","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" for (int i \u003d 0; i \u003c commandFields.length; i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" int index \u003d getIndexWithErrLog(commandFields[i].trim(), errorLog);","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" addToSetIfUnique(index, uniqueIndexes, errorLog);","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" String successLog \u003d tasks.deleteTasks(uniqueIndexes, errorLog);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(successLog + errorLog);","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" private int getIndexWithErrLog(String commandField, StringBuilder errorLog) {","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" return getIndexFromFields(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" errorLog.append(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" errorLog.append(\" - \");","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" errorLog.append(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" return Integer.MIN_VALUE;","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" private void addToSetIfUnique(int index, HashSet\u003cInteger\u003e uniqueIndexes, StringBuilder errorLog) {","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" if (index \u003d\u003d Integer.MIN_VALUE) {","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" return;","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" if (uniqueIndexes.contains(index)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" errorLog.append(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" errorLog.append(\" - \");","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"Duplicate index!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" uniqueIndexes.add(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" private int getIndexFromFields(String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" Scanner scanner \u003d new Scanner(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" if (!scanner.hasNextInt()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Invalid format: delete [number in list range]\");","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" int index \u003d scanner.nextInt();","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" if (scanner.hasNext()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Too many fields: delete [number in list range]\");","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" return index;","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":86}},{"path":"src/main/java/trackerbot/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"class ExitCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" ExitCommand() {}","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" uiHandler.exitApp();","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" public void executeAsMassOp(TaskList tasks, UiHandler uiHandler) throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Exit command cannot be executed as a mass operation.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":19}},{"path":"src/main/java/trackerbot/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"class FindCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" private final String commandField;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" FindCommand(String commandFields) {","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" this.commandField \u003d commandFields;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.findAll(commandField.trim()));","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" public void executeAsMassOp(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" String[] commandFields \u003d Parser.parseMassOpFields(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" StringBuilder successLog \u003d new StringBuilder(\"Here are your query results: \");","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" for (String searchStr: commandFields) {","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" successLog.append(\"\\n\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" successLog.append(searchStr.trim());","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" successLog.append(\":\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" successLog.append(tasks.findAll(searchStr.trim()));","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(successLog.toString());","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":33}},{"path":"src/main/java/trackerbot/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"class ListCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" ListCommand() {}","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.list());","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" public void executeAsMassOp(TaskList tasks, UiHandler uiHandler) throws TrackerBotException {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"List command cannot be executed as a mass operation.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":19}},{"path":"src/main/java/trackerbot/command/MassCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"class MassCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" private final String commandFields;","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" MassCommand(String commandFields) {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" this.commandFields \u003d commandFields;","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" Command nestedCommand \u003d Parser.parseCommand(commandFields);","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" nestedCommand.executeAsMassOp(tasks, uiHandler);","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" uiHandler.setError(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" public void executeAsMassOp(TaskList tasks, UiHandler uiHandler) throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"I can\u0027t run nested mass operations!\");","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"WZWren":29}},{"path":"src/main/java/trackerbot/command/ToggleCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"class ToggleCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" private final String commandField;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" private final CommandType type;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" ToggleCommand(CommandType type, String commandField) {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" this.commandField \u003d commandField;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" int index \u003d getIndexFromFields(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" switch (type) {","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" case MARK:","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.markTask(index));","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" case UNMARK:","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(tasks.unmarkTask(index));","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" throw new IllegalStateException(\"Created ToggleCommand with invalid field.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" uiHandler.setError(e.getMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" public void executeAsMassOp(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" String[] commandFields \u003d Parser.parseMassOpFields(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" HashSet\u003cInteger\u003e uniqueIndexes \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" StringBuilder errorLog \u003d new StringBuilder(\"Failed to toggle the following tasks: \");","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" for (int i \u003d 0; i \u003c commandFields.length; i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" int index \u003d getIndexWithErrLog(commandFields[i].trim(), errorLog);","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" addToSetIfUnique(index, uniqueIndexes, errorLog);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" String successLog;","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" switch (type) {","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" case MARK:","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" successLog \u003d tasks.markTasks(uniqueIndexes, errorLog);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" case UNMARK:","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" successLog \u003d tasks.unmarkTasks(uniqueIndexes, errorLog);","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" throw new IllegalStateException(\"Created ToggleCommand with invalid field.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" uiHandler.setMessage(successLog + errorLog);","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" private int getIndexWithErrLog(String commandField, StringBuilder errorLog) {","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" return getIndexFromFields(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" errorLog.append(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" errorLog.append(\" - \");","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" errorLog.append(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" return Integer.MIN_VALUE;","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" private void addToSetIfUnique(int index, HashSet\u003cInteger\u003e uniqueIndexes, StringBuilder errorLog) {","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" if (index \u003d\u003d Integer.MIN_VALUE) {","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" return;","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" if (uniqueIndexes.contains(index)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" errorLog.append(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" errorLog.append(\" - \");","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"Duplicate index!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" uniqueIndexes.add(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":" private int getIndexFromFields(String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" Scanner scanner \u003d new Scanner(commandField);","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" if (!scanner.hasNextInt()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Invalid format: mark/unmark [number in list range]\");","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" int index \u003d scanner.nextInt();","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":" if (scanner.hasNext()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Too many fields: mark/unmark [number in list range]\");","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":" scanner.close();","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":" return index;","lastModifiedDate":"2023-09-14"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":108}},{"path":"src/main/java/trackerbot/command/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.command;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.gui.UiHandler;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"class UnknownCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" UnknownCommand() {}","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" public void execute(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" uiHandler.setError(\"Unrecognised Command Type. Try another?\");","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" public void executeAsMassOp(TaskList tasks, UiHandler uiHandler) {","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" uiHandler.setError(\"Unrecognised Command Type. Try another?\");","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"WZWren":18}},{"path":"src/main/java/trackerbot/exception/TrackerBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":" * Dedicated Exception class for the TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eTrackerBotException handles any expected, recoverable errors that","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":" * happen in TrackerBot. The expected way to handle this exception is to","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" * pass the error message into a Ui object for handling.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" * @version A-JavaDoc","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"public class TrackerBotException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" public TrackerBotException(String errMsg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" super(errMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"WZWren":15}},{"path":"src/main/java/trackerbot/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" * Represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eSkeleton code from the JavaFX tutorial provided.\u003c/p\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * @version Level-10","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" /** Label for the DialogBox. */","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" /** Avatar image for the DialogBox. */","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" * Constructs the DialogBox controller object.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" * @param text The description to display in the box.","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * @param img The image of the avatar.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" Circle circleClip \u003d new Circle(","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" displayPicture.getLayoutX() + displayPicture.getFitWidth() / 2,","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" displayPicture.getLayoutY() + displayPicture.getFitHeight() / 2,","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" displayPicture.getFitWidth() / 2","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" displayPicture.setClip(circleClip);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" setAlignment(Pos.CENTER_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" * Creates a user dialog box, to represent the user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" * @param text The description to display in the box.","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" * @param img The image of the avatar.","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" * @return The constructed DialogBox object.","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" * Creates a bot dialog box, to represent the TrackerBot reply.","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" * @param text The description to display in the box.","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" * @param img The image of the avatar.","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" * @return The constructed DialogBox object, flipped by the flip method.","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" public static DialogBox getBotDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":94}},{"path":"src/main/java/trackerbot/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import trackerbot.TrackerBot;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eSkeleton code from the JavaFX tutorial provided.\u003c/p\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eNote that @FXML exposes the private methods to FXML files.\u003c/p\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" * @version Level-10","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /** Container that expands to have a ScrollBar, to use in conjunction with dialogContainer. */","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" /** Container to hold all the DialogBox instances. */","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" /** Text Field for user input. */","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" /** Button to send user input to program. */","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" /** TrackerBot instance, serving as a backend. */","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" private TrackerBot trackerBot;","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" /** User image of TrackerBot, referenced by DialogBox. */","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" /** Bot image of TrackerBot, referenced by DialogBox. */","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" private Image botImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Bot.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * Sets the TrackerBot instance to the initialized instance in Main.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eAdapted skeleton code to also immediately display the welcome message","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" * on initialization.\u003c/p\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" * @param bot The instance to preserve in MainWindow.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" public void setTrackerBot(TrackerBot bot) {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" trackerBot \u003d bot;","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" DialogBox.getBotDialog(trackerBot.getLastMessage(), botImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"WZWren"},"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":66,"author":{"gitId":"WZWren"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" String response \u003d trackerBot.handleInput(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" DialogBox.getBotDialog(response, botImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":78}},{"path":"src/main/java/trackerbot/gui/UiHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * Generates UI elements for TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * @version Level-10","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"public class UiHandler {","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" /** Name of the app. **/","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" private final String appName;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" /** Stores the last known message from the app. */","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" private String uiMessage;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" * Constructor for the class.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis is private, as all instances of Ui should generate the bootup message","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * on creation.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" * @param appName The name of the instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" private UiHandler(String appName) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" this.appName \u003d appName;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * Factory method for UI.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" * This automatically sets the UiHandler message to be a greeting message.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * @param appName The name of the instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * @return A new Ui instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" public static UiHandler instantiate(String appName) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" UiHandler uiHandler \u003d new UiHandler(appName);","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" uiHandler.uiMessage \u003d \"Greetings from \" + uiHandler.appName + \"!\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" + \"How may I assist?\";","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" return uiHandler;","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" * Sets the error message in UiHandler.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" * @param message The error message to display.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" public void setError(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" uiMessage \u003d \"Oh dear.\\n\" + message;","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * Sets the message to be the exit message.","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" public void exitApp() {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" uiMessage \u003d \"Thank you for using \" + appName + \". Goodbye.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(0.5));","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" delay.setOnFinished(e -\u003e Platform.exit());","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" delay.play();","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" * Sets the message in UiHandler.","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" * @param message The status message to display.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" public void setMessage(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" uiMessage \u003d message;","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" * Gets the message in UiHandler.","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" * @return The String representation of the message in UiHandler.","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" return uiMessage;","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WZWren":79}},{"path":"src/main/java/trackerbot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.time.ZoneOffset;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.TaskDateHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" * The Deadline class for TrackerBot, inheriting from the Task class. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * This Task child contains a LocalDateTime object to complete the task by.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * @version A-JavaDoc","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" /** The Deadline of the task. **/","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" * Constructor for the class.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * @param desc The description of the Deadline task.","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" * @param by The String representation of the deadline to parse into a LocalDateTime object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the deadline cannot be parsed by TaskDateHandler.","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.utils.TaskDateHandler#convertInputToDate","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" public Deadline(String desc, String by) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" super(desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" this.by \u003d TaskDateHandler.convertInputToDate(by);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * Constructs a Deadline using a String array, for use in save parsing.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" * @param args The arguments for constructing Deadline, containing isDone status in index","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * 0, description in index 1 and an epoch Date string in index 2","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the deadline cannot be parsed by TaskDateHandler.","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * or if the epoch save string is corrupted.","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.utils.TaskDateHandler#convertSaveToDate","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" protected Deadline(String[] args) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" super(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" this.by \u003d TaskDateHandler.convertSaveToDate(args[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" return \"D|\" + getSaveInfo() + \"|\" + this.by.toEpochSecond(ZoneOffset.UTC);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * toString method of Deadline. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" * The String representation of To-do appends the [D] tag in front of the Task toString, and","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" * the deadline date to the end of the toString.","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" * @return \"[D]\" prefixed to task.toString(), and \"(by: [deadline])\" postfixed to task.toString().","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" return \"[D]\" + super.toString() + \" (by: \" + TaskDateHandler.convertDateToUi(this.by) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"WZWren":62}},{"path":"src/main/java/trackerbot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.time.ZoneOffset;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.TaskDateHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * The Event class for TrackerBot, inheriting from the Task class. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis Task child contains 2 LocalDateTime objects to denote the interval to","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * complete the Task by.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eAs of version A-JavaDoc, the interval does not explicitly check for validity of","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" * this time period.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" * @version A-JavaDoc","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" /** The start date of the event. **/","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" /** The end date of the event. **/","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" * Constructor for the class.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" * @param desc The description of the Event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * @param from The String representation of the start date to parse into a LocalDateTime object.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" * @param to The String representation of the end date to parse into a LocalDateTime object.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * @throws DateTimeParseException if the deadline cannot be parsed by TaskDateHandler.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.utils.TaskDateHandler#convertInputToDate(String, String)","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" public Event(String desc, String from, String to) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" super(desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" LocalDateTime[] fromToPair \u003d TaskDateHandler.convertInputToDate(from, to);","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" assert fromToPair.length \u003d\u003d 2 : \"input conversion to date failed without exception\";","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" this.from \u003d fromToPair[0];","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" this.to \u003d fromToPair[1];","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" assert this.to.isAfter(this.from) : \"start date should be earlier than end date\";","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" * Constructs a Event using a String array, for use in save parsing.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" * @param args The arguments for constructing Event, containing isDone status in index","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" * 0, description in index 1 and an epoch Date string in index 2 and 3.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the event dates cannot be parsed by TaskDateHandler,","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * or if the epoch save string is corrupted.","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.utils.TaskDateHandler#convertSaveToDate(String, String)","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" protected Event(String[] args) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" super(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" LocalDateTime[] fromToPair \u003d TaskDateHandler.convertSaveToDate(args[2], args[3]);","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" assert fromToPair.length \u003d\u003d 2 : \"input conversion to date failed without exception\";","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" this.from \u003d fromToPair[0];","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" this.to \u003d fromToPair[1];","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" assert this.to.isAfter(this.from) : \"start date should be earlier than end date\";","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" return \"E|\" + getSaveInfo() + \"|\"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" + this.from.toEpochSecond(ZoneOffset.UTC) + \"|\"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" + this.to.toEpochSecond(ZoneOffset.UTC);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" * toString method of Event. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" * The String representation of To-do appends the [E] tag in front of the Task toString, and","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" * the event period to the end of the toString.","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" * @return \"[D]\" prefixed to task.toString(), and \"(from: [start] / to: [end])\" postfixed to task.toString().","lastModifiedDate":"2023-08-22"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" + \" (from: \" + TaskDateHandler.convertDateToUi(this.from)","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" + \" | to: \" + TaskDateHandler.convertDateToUi(this.to) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"WZWren":84}},{"path":"src/main/java/trackerbot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":" * The Task class for TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe Task class abstracts each checklist item inside a Reminder-Type app.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eTask should not be instantiated as a basic task. To instantiate a basic Task","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" * with no DateTime fields, use the To-do subtype instead.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" /** The description of the task instance. **/","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" private String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" /** The status of the task instance. If true, the task is done. */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" * Constructor for the Task class, to be called with super.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * @param desc The description of the task to create.","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" protected Task(String desc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" this.description \u003d desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * Constructs a Task using a String array, for use in save parsing.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis should only be called by child classes in their array constructors.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * @param args The arguments for constructing a Task, containing isDone status in index","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * 0 and description in index 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" protected Task(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" this.description \u003d args[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" this.isDone \u003d args[0].equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" * Returns the save string for the child class. \u003cbr\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" * The save string should have the following format: \u003cbr\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" * {Task Flag} | {Mark Status} | {Description} | {Fields...}","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" * \u003cul\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eTask Flag represents the type of Task to create.\u003c/li\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eMark Status is a 0/1 representation of the Checkmark status.\u003c/li\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eDescription is the main body of the Task item to display.\u003c/li\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" * \u003cli\u003eFields are the additional fields required by the Task, delimited by \u0027|\u0027.\u003c/li\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" * \u003c/ul\u003e","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * @return The \u0027|\u0027 delimited String to store in save file.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" public abstract String toSaveString();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" * Factory method to generate Tasks from the save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eofSaveString expects the save string to be split before passing into Task.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" * @param type The String representation of the Task in the save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" * @param args The Arguments for each task in the save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" * @return A Task corresponding to the type and args of the save string.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the save file is corrupted, or if","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" * the DateTime field is invalid.","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" public static Task ofSaveString(String type, String... args)","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" if (args.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Todos should have exactly 2 arguments.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" return new Todo(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" if (args.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Deadline should have exactly 3 arguments.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" return new Deadline(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" if (args.length !\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Events should have exactly 4 arguments.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" return new Event(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" throw new IllegalStateException(\"Unknown Task type.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" * Helper method for toSaveString. \u003cbr\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" * Gets a formatted description and mark status of the Task, and","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":" * passes it to the child classes.","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" * @return {Mark Status} | {Description} String, to append to toSaveString","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" * implementation in child classes.","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" protected String getSaveInfo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" String checkStatus \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" return checkStatus + \"|\" + description;","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" * Helper function to determine the checkmark status of the Task.","lastModifiedDate":"2023-08-21"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":" * @return \"[X]\" if the task is done, \"[ ]\" otherwise.","lastModifiedDate":"2023-08-21"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":" private String getCheckbox() {","lastModifiedDate":"2023-08-21"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":" return isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-21"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":109,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":110,"author":{"gitId":"WZWren"},"content":" * Flags the task to be completed, if able.","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the Task is already done.","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"WZWren"},"content":" public void markTask() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"WZWren"},"content":" if (isDone) {","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"The specified task is already completed.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":116,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":117,"author":{"gitId":"WZWren"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":118,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":120,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"WZWren"},"content":" * Flags the task to be incomplete, if able.","lastModifiedDate":"2023-08-21"},{"lineNumber":122,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the Task is already still in progress.","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":124,"author":{"gitId":"WZWren"},"content":" public void unmarkTask() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"WZWren"},"content":" if (!isDone) {","lastModifiedDate":"2023-08-21"},{"lineNumber":126,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"This task is already in progress.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":128,"author":{"gitId":"WZWren"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":129,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":130,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":131,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"WZWren"},"content":" * Check if the description of the Task contains the query String.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"WZWren"},"content":" * @param searchStr The query to match any point in the description.","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"WZWren"},"content":" * @return true, if the description contains the searchStr, and false","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"WZWren"},"content":" * otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"WZWren"},"content":" public boolean doesContain(String searchStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"WZWren"},"content":" return description.contains(searchStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":142,"author":{"gitId":"WZWren"},"content":" * toString method of Task. \u003cbr\u003e","lastModifiedDate":"2023-08-21"},{"lineNumber":143,"author":{"gitId":"WZWren"},"content":" * A Task is formatted as \"[X] description of task\", where the X may or","lastModifiedDate":"2023-08-21"},{"lineNumber":144,"author":{"gitId":"WZWren"},"content":" * may not be present depending on the completion status of the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":145,"author":{"gitId":"WZWren"},"content":" * @return The String representation of the Task.","lastModifiedDate":"2023-08-21"},{"lineNumber":146,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":147,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":148,"author":{"gitId":"WZWren"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":149,"author":{"gitId":"WZWren"},"content":" return getCheckbox() + \" \" + description;","lastModifiedDate":"2023-08-21"},{"lineNumber":150,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":151,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"WZWren":151}},{"path":"src/main/java/trackerbot/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.command.CommandType;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.utils.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":" * Collection of Tasks for use in TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" * Task Array.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" * The Task List array itself should be immutable, in case we override it","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" * during runtime.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" * Attempts to add a new Task into the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * @param type The enumerated type of Command to add into the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" * @param commandField The description of the Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the addition of the task encounters an error during parse.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" * @see trackerbot.utils.Parser#parseAdd","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" public String addTask(CommandType type, String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" Task newTask \u003d Parser.parseAdd(type, commandField);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" return \"I am tracking this task now:\\n \" + newTask.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" * Attempts to toggle the item at index as complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" * @param index The index of the Task in the TaskList, starting from 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the Task specified does not exist, or is","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" * already completed.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" public String markTask(int index) throws TrackerBotException {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" Task task \u003d getTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" task.markTask();","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" return \"This task has been marked as completed.\\n \" + task;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" * Attempts to toggle a collection of tasks in the list as complete.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" * @param indexes The Set of all indexes to mark in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" public String markTasks(HashSet\u003cInteger\u003e indexes, StringBuilder errorLog) {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" ArrayList\u003cTask\u003e markedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" indexes.iterator().forEachRemaining((index) -\u003e {","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" Task task \u003d getTask(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" task.markTask();","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" markedTasks.add(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" errorLog.append(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" errorLog.append(\" - \");","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" errorLog.append(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" });","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" return \"These tasks have been marked as completed:\\n\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" + getListOfTasks(markedTasks) + \"\\n\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" * Attempts to toggle the item at index as incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" * @param index The index of the Task in the TaskList, starting from 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the Task specified does not exist, or is","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" * still incompleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" public String unmarkTask(int index) throws TrackerBotException {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" Task task \u003d getTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" task.unmarkTask();","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" return \"The task has been marked as incomplete.\\n \" + task;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" * Attempts to toggle a collection of tasks in the list as incomplete.","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" * @param indexes The Set of all indexes to unmark in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" public String unmarkTasks(HashSet\u003cInteger\u003e indexes, StringBuilder errorLog) {","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":" ArrayList\u003cTask\u003e unmarkedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":" indexes.iterator().forEachRemaining((index) -\u003e {","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" Task task \u003d getTask(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":" task.unmarkTask();","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":" unmarkedTasks.add(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":" errorLog.append(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":" errorLog.append(\" - \");","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"WZWren"},"content":" errorLog.append(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"WZWren"},"content":" });","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"WZWren"},"content":" return \"These tasks have been marked as incomplete:\\n\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"WZWren"},"content":" + getListOfTasks(unmarkedTasks) + \"\\n\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"WZWren"},"content":" * Attempts to delete the item at index.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"WZWren"},"content":" * @param index The index of the Task in the TaskList, starting from 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the Task specified does not exist.","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"WZWren"},"content":" public String deleteTask(int index) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"WZWren"},"content":" Task task \u003d getTask(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"WZWren"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"WZWren"},"content":" return \"I have removed this task off of my list.\\n \" + task + \"\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"WZWren"},"content":" + tasks.size() + \" task(s) remain on my list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"WZWren"},"content":" * Attempts to delete a collection of tasks from the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"WZWren"},"content":" * @param indexes The Set of all indexes to remove from the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"WZWren"},"content":" * @return The reply String to be passed into Ui.","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"WZWren"},"content":" public String deleteTasks(HashSet\u003cInteger\u003e indexes, StringBuilder errorLog) {","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"WZWren"},"content":" ArrayList\u003cTask\u003e tasksToDelete \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"WZWren"},"content":" indexes.iterator().forEachRemaining((index) -\u003e {","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"WZWren"},"content":" tasksToDelete.add(getTask(index));","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"WZWren"},"content":" errorLog.append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"WZWren"},"content":" errorLog.append(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"WZWren"},"content":" errorLog.append(\" - \");","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"WZWren"},"content":" errorLog.append(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"WZWren"},"content":" });","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"WZWren"},"content":" tasks.removeAll(tasksToDelete);","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"WZWren"},"content":" return \"I have removed these tasks off of my list:\\n\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"WZWren"},"content":" + getListOfTasks(tasksToDelete) + \"\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"WZWren"},"content":" + tasks.size() + \" task(s) remain on my list.\\n\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"WZWren"},"content":" * Deletes all items in the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"WZWren"},"content":" public void clear() {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"WZWren"},"content":" tasks.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"WZWren"},"content":" * Finds all Tasks matching the query, along with the associated index in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"WZWren"},"content":" * @param searchStr The query to match at any point in the description of the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"WZWren"},"content":" * @return A String representation of all the Tasks matching the query, in list form.","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"WZWren"},"content":" * If no Tasks match the query, returns a String indicating no matches.","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"WZWren"},"content":" public String findAll(String searchStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"WZWren"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"WZWren"},"content":" for (int i \u003d 1; i \u003c tasks.size() + 1; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"WZWren"},"content":" if (tasks.get(i - 1).doesContain(searchStr)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"WZWren"},"content":" result.append(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"WZWren"},"content":" result.append(\". \");","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"WZWren"},"content":" result.append(tasks.get(i - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"WZWren"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"WZWren"},"content":" if (result.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"WZWren"},"content":" return \"No results match your search.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"WZWren"},"content":" // delete the overflow \\n from the last append operation","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"WZWren"},"content":" if (result.charAt(result.length() - 1) \u003d\u003d \u0027\\n\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"WZWren"},"content":" result.deleteCharAt(result.length() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"WZWren"},"content":" return result.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"WZWren"},"content":" * Returns a UI-friendly String representation of the Task List.","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"WZWren"},"content":" * @return A String representation of the Task List, to pass directly into Ui.","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"WZWren"},"content":" public String list() {","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"WZWren"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"WZWren"},"content":" return \"No tasks have been added to the list yet.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"WZWren"},"content":" return \"I am tracking these tasks:\\n\" + getListOfTasks(tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":201,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"WZWren"},"content":" * Adds the Task directly into TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis is a method used by Storage.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"WZWren"},"content":" * @param task The Task to add into TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"WZWren"},"content":" public void importSave(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"WZWren"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"WZWren"},"content":" * Exports all items in the TaskList into a save-compatible String form.","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"WZWren"},"content":" * @return The String representation of all the Tasks in the TaskList, in","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"WZWren"},"content":" * a save-compatible form.","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"WZWren"},"content":" public String exportSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"WZWren"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"WZWren"},"content":" for (int i \u003d 1; i \u003c tasks.size() + 1; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"WZWren"},"content":" result.append(tasks.get(i - 1).toSaveString());","lastModifiedDate":"2023-09-02"},{"lineNumber":221,"author":{"gitId":"WZWren"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"WZWren"},"content":" return result.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"WZWren"},"content":" * Gets the Task at the provided index.","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"WZWren"},"content":" * @param index The index of the list to check.","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"WZWren"},"content":" * @return The Task object at the index, if it exists, and null otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"WZWren"},"content":" private Task getTask(int index) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":232,"author":{"gitId":"WZWren"},"content":" if (index \u003c\u003d 0 || index \u003e tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"The specified task does not exist.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":234,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"WZWren"},"content":" return tasks.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":236,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"WZWren"},"content":" * Gets the String representation of the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"WZWren"},"content":" * @return the String representation of the TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"WZWren"},"content":" private String getListOfTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-16"},{"lineNumber":243,"author":{"gitId":"WZWren"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"WZWren"},"content":" for (int i \u003d 1; i \u003c tasks.size() + 1; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"WZWren"},"content":" result.append(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"WZWren"},"content":" result.append(\". \");","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"WZWren"},"content":" result.append(tasks.get(i - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"WZWren"},"content":" if (i !\u003d tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":250,"author":{"gitId":"WZWren"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"WZWren"},"content":" return result.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WZWren":256}},{"path":"src/main/java/trackerbot/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":" * The To-do class for TrackerBot, inheriting from the Task class. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":" * This represents the most basic variant of the Task, and can be constructed","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":" * with the basic parameters for Task.","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" * @version A-JavaDoc","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * Constructor for the class.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * @param desc The description of the To-do task.","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" public Todo(String desc) {","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" super(desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" * Constructs a To-do using a String array, for use in save parsing.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eAs To-do serves as a basic abstraction of the Task, the constructor directly calls","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * super to generate the object.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" * @param args The arguments for constructing a To-do, containing isDone status in index","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" * 0 and description in index 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" protected Todo(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" super(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" public String toSaveString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" return \"T|\" + getSaveInfo();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * toString method of To-do. \u003cbr\u003e","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" * The String representation of To-do appends the [T] tag in front of the Task toString.","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * @return \"[T]\" appended to Task.toString().","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"WZWren":45}},{"path":"src/main/java/trackerbot/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.utils;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import trackerbot.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import trackerbot.command.CommandType;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * Contains static methods to parse user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" private static final String MASS_COMMAND_DELIMITER \u003d \";\";","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * Splits the user input into its keyword and commandField components.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eParser does not directly handle the Command logic of the input. After","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" * splitting the user input, it passes it into Command.of method to identify","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" * the Command and return it.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" * @param input The unmodified console string that the user inputs.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" * @return An appropriate command corresponding to the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" public static Command parseCommand(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" Scanner scanner \u003d new Scanner(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" String rest;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" if (!scanner.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" keyword \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" keyword \u003d scanner.next();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" if (keyword.equals(\"\") || !scanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" rest \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" rest \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" return Command.of(CommandType.getCommandType(keyword), rest);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * Splits the command field of mass operation commands into its nested fields.","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" * @param commandField The description of the Commands, separated by MASS_COMMAND_DELIMITER.","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" * @return An array of Strings corresponding to a command input.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" public static String[] parseMassOpFields(String commandField) {","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" return commandField.split(MASS_COMMAND_DELIMITER);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" * Parses the user input arising from the add keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis method further parses the user input during the add command,","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" * to differentiate between the Task types.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" * @param type The enumerated type of Command to add into the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" * @param commandField The description of the Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" * @return A corresponding subclass of Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the user input is in an invalid format.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" public static Task parseAdd(CommandType type, String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" Task newTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" newTask \u003d createTodo(commandField);","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" newTask \u003d createDeadline(commandField);","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" case EVENT:","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" newTask \u003d createEvent(commandField);","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" default:","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" throw new IllegalStateException(\"Uncaught CommandType: \" + type.getKeyword());","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" return newTask;","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" private static Task createTodo(String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" if (commandField.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Cannot track task without description.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" return new Todo(commandField.trim());","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" private static Task createDeadline(String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" final String flag \u003d \"/by\";","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" final String format \u003d \"^.+ /by .+\";","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":" String[] segments;","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":" if (!commandField.matches(format)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Improper format: deadline [description] /by [end-date]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":" segments \u003d commandField.split(flag);","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":" if (segments.length \u003e 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Too many flags: deadline [description] /by [end-date]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"WZWren"},"content":" if (segments[0].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Cannot track deadline without description.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"WZWren"},"content":" if (segments[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Empty /by flag.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"WZWren"},"content":" return new Deadline(segments[0].trim(), segments[1].trim());","lastModifiedDate":"2023-09-14"},{"lineNumber":118,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":119,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"WZWren"},"content":" private static Task createEvent(String commandField) throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"WZWren"},"content":" final String flag \u003d \"/from|/to\";","lastModifiedDate":"2023-09-15"},{"lineNumber":122,"author":{"gitId":"WZWren"},"content":" final String format \u003d \"^.+ /from .+ /to .+\";","lastModifiedDate":"2023-09-15"},{"lineNumber":123,"author":{"gitId":"WZWren"},"content":" String[] segments;","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"WZWren"},"content":" if (!commandField.matches(format)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"WZWren"},"content":" \"Improper format: event [description] /from [start-date] /to [end-date]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"WZWren"},"content":" segments \u003d commandField.split(flag);","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"WZWren"},"content":" if (segments.length \u003e 3) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"WZWren"},"content":" \"Too many flags: event [description] /from [start-date] /to [end-date]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"WZWren"},"content":" if (segments[0].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Cannot track task without description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"WZWren"},"content":" if (segments[1].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Empty /from flag.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"WZWren"},"content":" if (segments[2].trim().equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Empty /to flag.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"WZWren"},"content":" return new Event(segments[0].trim(), segments[1].trim(), segments[2].trim());","lastModifiedDate":"2023-09-14"},{"lineNumber":147,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WZWren":148}},{"path":"src/main/java/trackerbot/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.utils;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"import trackerbot.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" * Contains static methods to read/write save data of TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eStorage will always save and load the files in the relative path:","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" * [.\\TrackerBot\\data.txt].\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" * @version A-CodeQuality","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" private static final String PARENT_FOLDER \u003d \"TrackerBot\";","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" private static final String DATA_FILE \u003d \"data.txt\";","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" /** Prevent the instantiation of Storage object. */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" private Storage() {};","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" * Parses the save string in the input file.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe save string is generated by the Task.toSaveString","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" * method, and will be parsed based on its format.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" * @param saveStr The input save string, in the aforementioned format.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" * @return The Task object from parsing the String.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" * @see Task#toSaveString()","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" private static Task parseSaveLine(String saveStr) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" final String delimiter \u003d \"[|]\";","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" String[] args \u003d saveStr.split(delimiter);","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" return Task.ofSaveString(args[0], Arrays.copyOfRange(args, 1, args.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" * Attempts to read the save data into the TrackerBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe save string is generated by the Task.toSaveString","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" * method, and will be parsed based on its format.\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis method will always attempt to load from the relative path:","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * [.\\TrackerBot\\data.txt].\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" * @param tasks The TaskList to read data into.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException If the save data fails to load, with specified reason.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" * @see Task#toSaveString()","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" public static void read(TaskList tasks) throws TrackerBotException {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" Path path \u003d Paths.get(PARENT_FOLDER, DATA_FILE);","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" if (Files.notExists(path)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" try (Scanner input \u003d new Scanner(new FileReader(path.toFile()))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" while (input.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" tasks.importSave(parseSaveLine(input.nextLine()));","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" tasks.clear();","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" throw e;","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Failed to load save file: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" * Attempts to save TrackerBot data into a save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThis method will always attempt to save into the relative path:","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" * [.\\TrackerBot\\data.txt].\u003c/p\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" * @param tasks The TaskList to read data from.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException If the save data fails to generate, with specified reason.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" public static void save(TaskList tasks) throws TrackerBotException {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" Path path \u003d Paths.get(PARENT_FOLDER, DATA_FILE);","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" File file \u003d path.toFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" Files.createDirectories(path.getParent());","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" try (FileOutputStream output \u003d new FileOutputStream(file, false)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" output.write(tasks.exportSave().getBytes());","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" } // the try with resources statement auto-closes output.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"WZWren":99}},{"path":"src/main/java/trackerbot/utils/TaskDateHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.utils;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import java.time.ZoneOffset;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import java.time.temporal.ChronoField;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" * Handles Date-related methods for Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * @author WZWren","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" * @version A-Assertions","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"public class TaskDateHandler {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" private static final String DATE_INPUT_FORMAT \u003d \"d/M[/yyyy][ HHmm]\";","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" private static final String DATE_UI_FORMAT \u003d \"dd MMM yyyy, EEE @ hh:mma\";","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" /** Prevent the instantiation of TaskDateHandler object. **/","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" private TaskDateHandler() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" * Converts the Input String into a LocalDateTime object.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" * @param input The input String to parse into a Date object.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" * The String should be in the format: [d/M/yyyy HHmm]\u003cbr\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" * The year and time are optional. If not given, the year is assumed","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" * to be the current year, and the time is assumed to be 0000.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" * @return The LocalDateTime object from the parsed String","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the input does not match the format string","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" public static LocalDateTime convertInputToDate(String input)","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" DateTimeFormatter format \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" .append(DateTimeFormatter.ofPattern(DATE_INPUT_FORMAT))","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" .parseDefaulting(ChronoField.YEAR_OF_ERA, LocalDateTime.now().get(ChronoField.YEAR_OF_ERA))","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" .toFormatter();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" return LocalDateTime.parse(input, format);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Error in parsing input to date: \" + e.getMessage()","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" + \"\\nAdditional Date Fields should be in the format DD/MM(/YYYY)( HHmm)\");","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" * Converts the start date and end date inputs into a pair of LocalDateTime.","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe inputs should be in the format: [d/M/yyyy HHmm]\u003c/p\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe year and time are optional. If not given, the year is assumed","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" * to be the current year, and the time is assumed to be 0000.\u003c/p\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" * @param fromStr The start date input String to parse into a Date object.","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" * @param toStr The end date input String to parse into a Date object.","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" * @return A LocalDateTime array of length 2, parsed from the input Strings","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the input does not match the format string, or","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" * if the start date is not earlier than the end date.","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" public static LocalDateTime[] convertInputToDate(String fromStr, String toStr)","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" LocalDateTime startDate \u003d convertInputToDate(fromStr);","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" LocalDateTime endDate \u003d convertInputToDate(toStr);","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" if (!(endDate.isAfter(startDate))) {","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Start date should be before end date.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" return new LocalDateTime[] {startDate, endDate};","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" * Converts the Save String into a LocalDateTime object.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" * @param input The input String to parse into a Date object.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" * The String should be in epoch timestamp format.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" * @return The LocalDateTime object from the parsed String","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the input is not in valid epoch format, or","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" * if the input is not parsable as a Long","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" public static LocalDateTime convertSaveToDate(String input) throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" long epoch \u003d Long.parseLong(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" return LocalDateTime.ofEpochSecond(epoch, 0, ZoneOffset.UTC);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Cannot parse time field.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Time field is out of range.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":" * Converts the start date and end save date input into a pair of LocalDateTime.","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" * \u003cp\u003eThe String should be in epoch timestamp format.\u003c/p\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" * @param fromStr The start date input String to parse into a Date object.","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" * @param toStr The end date input String to parse into a Date object.","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" * @return A LocalDateTime array of length 2, parsed from the input Strings","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" * @throws TrackerBotException if the input does not match the format string, or","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" * if the start date is not earlier than the end date.","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":" public static LocalDateTime[] convertSaveToDate(String fromStr, String toStr)","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":" throws TrackerBotException {","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" LocalDateTime startDate \u003d convertSaveToDate(fromStr);","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":" LocalDateTime endDate \u003d convertSaveToDate(toStr);","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":" if (!(endDate.isAfter(startDate))) {","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":" throw new TrackerBotException(\"Save date violates time constraints.\");","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"WZWren"},"content":" return new LocalDateTime[] {startDate, endDate};","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"WZWren"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"WZWren"},"content":" * Converts the LocalDateTime object into a UI-friendly String format.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"WZWren"},"content":" * @param date The LocalDateTime to parse as a String.","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"WZWren"},"content":" * @return The parsed String, in [dd MMM yyyy, EEE @ hh:mma] format.","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"WZWren"},"content":" public static String convertDateToUi(LocalDateTime date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"WZWren"},"content":" DateTimeFormatter format \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"WZWren"},"content":" .append(DateTimeFormatter.ofPattern(DATE_UI_FORMAT))","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"WZWren"},"content":" .toFormatter();","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"WZWren"},"content":" return date.format(format);","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WZWren":123}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"\u003cfx:root alignment\u003d\"CENTER_RIGHT\" minHeight\u003d\"-Infinity\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" spacing\u003d\"5.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"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":12,"author":{"gitId":"WZWren"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"WZWren"},"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\"trackerbot.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"WZWren"},"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":"WZWren"},"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":"WZWren"},"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":"WZWren"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"WZWren":19}},{"path":"src/test/java/trackerbot/utils/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.utils;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"import trackerbot.command.CommandType;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":" public void parseAdd_todoCorrectInput_shouldParse() throws TrackerBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" assertEquals(\"[T][ ] Test Input\",","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.TODO, \"Test Input\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" public void parseAdd_todoEmptyInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.TODO, \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Cannot track task without description.\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" public void parseAdd_deadlineCorrectInput_shouldParse() throws TrackerBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" assertEquals(\"[D][ ] Test Input (by: 12 Dec 2000, Tue @ 12:00AM)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.DEADLINE, \"Test Input /by 12/12/2000\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" public void parseAdd_deadlineMissingFlag_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.DEADLINE, \"Empty by flag\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Improper format: deadline [description] /by [end-date]\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" public void parseAdd_deadlineEmptyInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.DEADLINE, \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Improper format: deadline [description] /by [end-date]\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" public void parseAdd_deadlineExtraFlag_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.DEADLINE, \"Test Input /by 12/12/2000 /by additional field\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Too many flags: deadline [description] /by [end-date]\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" public void parseAdd_eventCorrectInput_shouldParse() throws TrackerBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" assertEquals(\"[E][ ] Test Input (from: 01 Dec 2000, Fri @ 12:00AM | to: 09 Dec 2000, Sat @ 12:00AM)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.EVENT, \"Test Input /from 1/12/2000 /to 9/12/2000\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" public void parseAdd_eventMissingFlag_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.EVENT, \"Test Input /from 1/12/2000\");","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Improper format: event [description] /from [start-date] /to [end-date]\",","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":" public void parseAdd_eventEmptyInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.EVENT, \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Improper format: event [description] /from [start-date] /to [end-date]\",","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"WZWren"},"content":" e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WZWren"},"content":" public void parseAdd_eventFlippedFlag_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.EVENT, \"Test Input /to 1/12/2000 /from 9/12/2000\");","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Improper format: event [description] /from [start-date] /to [end-date]\",","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WZWren"},"content":" e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"WZWren"},"content":" public void parseAdd_illegalState_shouldThrow() throws TrackerBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"WZWren"},"content":" Parser.parseAdd(CommandType.UNKNOWN, \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"WZWren"},"content":" } catch (IllegalStateException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"WZWren"},"content":" // There should be an Illegal State Exception - this is not caught by the program.","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WZWren":113}},{"path":"src/test/java/trackerbot/utils/TaskDateHandlerTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"package trackerbot.utils;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"import java.time.temporal.ChronoField;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"import trackerbot.exception.TrackerBotException;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":" * Test file for TaskDateHandlerTest. \u003cbr\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":" * This parses user input to Date. As the parse can be variable with optional","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":" * fields, we test to see if the parser handles bad input properly.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"public class TaskDateHandlerTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_dayAndMonthInput_shouldParseProperly() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"1/12\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":" String expected \u003d LocalDateTime.now().get(ChronoField.YEAR_OF_ERA) + \"-12-01T00:00\";","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":" assertEquals(expected, date.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_dayMonthYearInput_shouldParseProperly() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"24/1/2012\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":" String expected \u003d \"2012-01-24T00:00\";","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":" assertEquals(expected, date.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_dayMonthTimeInput_shouldParseProperly() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"09/08 0654\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WZWren"},"content":" String expected \u003d LocalDateTime.now().get(ChronoField.YEAR_OF_ERA) + \"-08-09T06:54\";","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WZWren"},"content":" assertEquals(expected, date.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_fullInput_shouldParseProperly() throws TrackerBotException {","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"20/9/1922 2059\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WZWren"},"content":" String expected \u003d \"1922-09-20T20:59\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WZWren"},"content":" assertEquals(expected, date.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_emptyInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Error in parsing input to date: \"","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"WZWren"},"content":" + \"Text \u0027\u0027 could not be parsed at index 0\"","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"WZWren"},"content":" + \"\\nAdditional Date Fields should be in the format DD/MM(/YYYY)( HHmm)\", e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_faultyInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"21//2 2359\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Error in parsing input to date: \"","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"WZWren"},"content":" + \"Text \u002721//2 2359\u0027 could not be parsed at index 3\"","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"WZWren"},"content":" + \"\\nAdditional Date Fields should be in the format DD/MM(/YYYY)( HHmm)\", e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WZWren"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WZWren"},"content":" public void convertInputToDate_notFullYearInput_shouldThrow() {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WZWren"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WZWren"},"content":" LocalDateTime date \u003d TaskDateHandler.convertInputToDate(\"21/2/20 2359\");","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WZWren"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WZWren"},"content":" } catch (TrackerBotException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"WZWren"},"content":" assertEquals(\"Error in parsing input to date: \"","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"WZWren"},"content":" + \"Text \u002721/2/20 2359\u0027 could not be parsed, unparsed text found at index 4\"","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"WZWren"},"content":" + \"\\nAdditional Date Fields should be in the format DD/MM(/YYYY)( HHmm)\", e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WZWren"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WZWren"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WZWren":82}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WZWren"},"content":"nonsense command. next line is empty on purpose.","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"WZWren"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"WZWren"},"content":"todo Test my App.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"WZWren"},"content":"event Some arbitrary event. /from ABC /to XYZ","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WZWren"},"content":"deadline tP Project. /by End of the semester.","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"WZWren"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WZWren"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"WZWren"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"WZWren"},"content":"unmark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WZWren"},"content":"unmark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"WZWren"},"content":"event No from parameter. /to XYZ","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WZWren"},"content":"event No to parameter. /from ABC","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WZWren"},"content":"event Flipped parameters. /to XYZ /from ABC","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"WZWren"},"content":"event Too many parameters. /from ABC /to XYZ /to 123","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"WZWren"},"content":"deadline No by parameter.","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"WZWren"},"content":"deadline Too many parameters. /by XYZ /by XYZ","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"WZWren"},"content":"todo Placeholder item.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":"todo Placeholder item 2.","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"WZWren"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"WZWren"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"WZWren"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"WZWren"},"content":"mark 0","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"WZWren"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"WZWren"},"content":"unmark 0","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"WZWren"},"content":"unmark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"WZWren"},"content":"delete 0","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"WZWren"},"content":"delete 4","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"WZWren"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WZWren":33}},{"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":"WZWren"},"content":"java -classpath ..\\bin TrackerBot \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"},{"lineNumber":22,"author":{"gitId":"WZWren"},"content":"pause","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WZWren":2,"-":20}}] diff --git a/WZWren_ip_master/commits.json b/WZWren_ip_master/commits.json index cb818bbf..1946d159 100644 --- a/WZWren_ip_master/commits.json +++ b/WZWren_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"WZWren":[{"date":"2023-08-20","commitResults":[{"hash":"3d8e74cbd329184248b51d6cd4843abb95efff39","isMergeCommit":false,"messageTitle":"Renamed the Duke file to TrackerBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"1d96602e6ef588f5ac2ffc7e969e01b989d62b29","isMergeCommit":false,"messageTitle":"Added Greet to TrackerBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":8}}},{"hash":"42b2dac7ca3b8318f5629b41d81e54b24c07142a","isMergeCommit":false,"messageTitle":"Added Exit to TrackerBot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-21","commitResults":[{"hash":"c13b0cbda4cc33cb5f114191c8c370663cff7d6c","isMergeCommit":false,"messageTitle":"Added input handling to TrackerBot.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":2}}},{"hash":"edd459511c0f488acabf6b397c9718716f2ba5e2","isMergeCommit":false,"messageTitle":"Added variables to store tasks.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"68e91f84f03a57c12bddb5f1560c23a3dd7ebd99","isMergeCommit":false,"messageTitle":"Added List, Add methods to TrackerBot.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":2}}},{"hash":"e8deb4265ccf2977995def3d59c75ead2de6fd52","isMergeCommit":false,"messageTitle":"Updated version in Javadoc.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"36808ab2d4377f182674fe019020d5370a4e86ff","isMergeCommit":false,"messageTitle":"Added Task class to project.","messageBody":"The Task class encapsulates the name and mark of a reminder task - this allows us to more easily store our tasks in the future, and has the immediate benefit of storing the completion status of each individual item in the list.\n","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}},{"hash":"8ba80a5724fd807a7d110df76deda997084b544c","isMergeCommit":false,"messageTitle":"Converted Task List to use the Task class.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"532636dbe2eee984992272e8ecbbff087fe12eb7","isMergeCommit":false,"messageTitle":"Added code for marking/unmarking Tasks.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":0}}},{"hash":"fe6613871abfc0229bc0350117916f4e905773ab","isMergeCommit":false,"messageTitle":"Modified input handler to prepare for Scanner use.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"c96ddbde8b4d07fee661ad9e352ad297cc839938","isMergeCommit":false,"messageTitle":"Linked mark, unmark to main.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":2}}}]},{"date":"2023-08-22","commitResults":[{"hash":"dbdb6453e68aaefc9a4cac7e8c7cf7add621cd2a","isMergeCommit":false,"messageTitle":"Added Todo, Deadline and Event classes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":0}}},{"hash":"0304525c997c4fff4ef6dce894be60afd1049467","isMergeCommit":false,"messageTitle":"Added utility DS Pair to the project.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":0}}},{"hash":"123ffaa3ccb985a7aa29bf21506cc4a8054bba30","isMergeCommit":false,"messageTitle":"Added an enum for Commands.","messageBody":"This is done to reduce future boiler code and simplify logic in the TrackerBot class.\n","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"491e17374283a2f1a67abe04c5046cdb8964eb02","isMergeCommit":false,"messageTitle":"Implemented Enum into handler logic.","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":12}}},{"hash":"52d2f68ca0aa7a688371bc2d983bcef0212369fb","isMergeCommit":false,"messageTitle":"Adjusted Event toString output for formatting.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"52f70f20d9f996970a01d8597eb9932335a0337e","isMergeCommit":false,"messageTitle":"Changed add logic for Task for variants.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":9}}},{"hash":"4dba2a4fbd40c90b5cfc65c1c233cb8c447b0311","isMergeCommit":false,"messageTitle":"Changed Task to abstract class.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}},{"hash":"afc648be58f70173db52a037305ff7d1e4f392ee","isMergeCommit":false,"messageTitle":"Fixed toString of Event to properly tag the String","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"cf3ed237537279dad7f543edf1301c1fe12aa43d","isMergeCommit":false,"messageTitle":"Converted Task array to ArrayList, fixed getTask.","messageBody":"getTask had a minor OutOfBounds error that could occur - as this was caught during conversion and the ArrayList bug fix is minor, this fix was kept together with the conversion commit.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":13}}},{"hash":"72aa343d85c473d76b38bb43bbd76e35b4736773","isMergeCommit":false,"messageTitle":"Added Delete to TrackerBot","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}},{"hash":"130ae43cd5a4a4f2cce5c4ee661932f2b9848d39","isMergeCommit":false,"messageTitle":"Modified input, runtest.bat files to fit new name of project.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":33,"deletions":0},"bat":{"insertions":2,"deletions":1}}},{"hash":"002587a945f2bacfd0f2c1d95d3b7d61b30e851b","isMergeCommit":false,"messageTitle":"Fixed bug where error message displayed for event is incorrect.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"395998745f98e107a3ec3cb8035b0e18de1de230","isMergeCommit":false,"messageTitle":"Fix indent and switch cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":456,"deletions":453}}},{"hash":"a6705c2e7b0791561b8807b790475140abf12473","isMergeCommit":false,"messageTitle":"Add skeleton code for save string in Task","messageBody":"The method to parse the save string is currently unimplemented.\nWe will only implement it after creating the Factory method for Tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"065d6974f52a727544ca34a46aaf99c6d69d5b66","isMergeCommit":false,"messageTitle":"Add skeleton code for factory method of Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"70042c59e36c85ad21974a8fad2b529a5573bd51","isMergeCommit":false,"messageTitle":"Add basic save method with IO output","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"f401bc92a7c109ae6de7fb1b32cd1d0becd053ba","isMergeCommit":false,"messageTitle":"Add basic IO read from file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}},{"hash":"cc04966ed090babddae380306a470b789549aee0","isMergeCommit":false,"messageTitle":"Add abstract saveString generator for Task","messageBody":"We separate getSaveInfo from the child classes to maintain the\nabstraction barrier between Task and its child classes, while still\nmaking it compulsory to override toSaveString in the child class.\n","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":8}}},{"hash":"c5e359cf018c5db15430c5f348cbf33725cffea0","isMergeCommit":false,"messageTitle":"Add factory method logic in Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":9}}},{"hash":"b5570e6499f91afd9144f031f3712337a514fc3f","isMergeCommit":false,"messageTitle":"Add save/load logic for Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":21}}},{"hash":"5d9726a8634df93959ffe00ba9f9ce87a90d7dde","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a9fb2e8cf4a996db55fe58cf4a487074671d085f","isMergeCommit":false,"messageTitle":"Add String to Date conversion method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"2f86e7a9400bacb30adc56e407917b9c020cd677","isMergeCommit":false,"messageTitle":"Move conversion method to new class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":24}}},{"hash":"7fea7b0e133440a85cb3ee8cb7fe313a406518de","isMergeCommit":false,"messageTitle":"Change String fields to LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":80}}},{"hash":"65b40284c6c4b83225c1d4bc7ae75e0465b777c5","isMergeCommit":false,"messageTitle":"Change logic for save file date handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}},{"hash":"3095b299964853571c45b898ff3c6f0e2bfc344b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e4240434a922b425d9139a1ece62c5f41de437ea","isMergeCommit":false,"messageTitle":"Move CommandType enum out of main","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":75}}},{"hash":"8bb3012706ea78a8334f302b939d63038569aa5d","isMergeCommit":false,"messageTitle":"Group task methods from main into Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":0}}},{"hash":"4d169b82cb4941a71b7e81900042e6da801ff9f2","isMergeCommit":false,"messageTitle":"Add skeleton code for UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"ec6f7e928762ec536b8494aa344455e179184d98","isMergeCommit":false,"messageTitle":"Move user input ID to Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":36}}},{"hash":"9c90956abb67d84eedfe592f4a6b325f19e0778c","isMergeCommit":false,"messageTitle":"Move IO methods to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":2}}}]},{"date":"2023-09-01","commitResults":[{"hash":"be71b7424dcb8a613cc7c498ce011492f04ec46e","isMergeCommit":false,"messageTitle":"Add TrackerBotException class","messageBody":"TrackerBot used to manually set exceptional cases and print them\nout onto the console.\n\nThe change to a more OOP approach made it more difficult to perform\nthis approach while abiding by encapsulation approach.\n\nAdding the Exception class allows us to push the error handling to\na more appropriate class, simplifying code.\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"4a8e24854a2ef8f48d5bded16553f45c40b8c4e7","isMergeCommit":false,"messageTitle":"Move Task parse logic to Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":76}}},{"hash":"34027d0dee5b3e9bde9ee164ebf300232ca44f16","isMergeCommit":false,"messageTitle":"Change main error handling to use Exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":311}}},{"hash":"1d564b5712bdc5944d2c10188248115bf5230292","isMergeCommit":false,"messageTitle":"Rename Storage to TaskList","messageBody":"TaskList better represents what the class should be doing.\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"3247982529201dbf836e3e7810094e2f81a1f644","isMergeCommit":false,"messageTitle":"Add Command class","messageBody":"TrackerBot currently handles each individual Command case using\na switch case and an enum.\n\nAs we switch over to a more rigid OOP structure, it becomes unclear\nwhere this handling should be made.\n\nBy extracting the Command class, we can handle it all in the\nCommand class, and call command.execute().\n","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":0}}},{"hash":"2a626e2e768fcf388f575bdb51537dd56328afcc","isMergeCommit":false,"messageTitle":"Move UI elements to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"aa59f34565981727a6a611385f4eeecdbb97ca40","isMergeCommit":false,"messageTitle":"Adjust Parser, TaskList return types","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":45}}},{"hash":"82243199e4a945ac91edfd397d570d4d7837209f","isMergeCommit":false,"messageTitle":"Port command logic to Command","messageBody":"","tags":["Major"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":108}}},{"hash":"57f67f977598316ebf01478c13dd8fba318b06ac","isMergeCommit":false,"messageTitle":"Add Storage class, minor fixes to UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":55}}},{"hash":"4aeac1d2fdcbf85dfacc812242576f4eed2e84a4","isMergeCommit":false,"messageTitle":"Change main to be entry, not program","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":8}}},{"hash":"f3a9177c74c758916734a9fb1663e576d05235f1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"84315e41a054cf7f97c75dded8c1db9215c59802","isMergeCommit":false,"messageTitle":"Remove unused Pair class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":66}}},{"hash":"28c63f6ecdbe45e6a4714422df8e4dcd2a51ca06","isMergeCommit":false,"messageTitle":"Rename package ip to trackerbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"3a53cad721c1dde5a18121fa64d7516b854de1ab","isMergeCommit":false,"messageTitle":"Move all classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":2}}},{"hash":"569b2375df2fa26c43457e495050500a2e67ff5a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"cbe78871451bbfc4f0745d7a3f5e429c71b2c5be","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f39cc0cbff78595a6624b94e7e20491df1e2abec","isMergeCommit":false,"messageTitle":"Add gradle support for TrackerBot","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}},{"hash":"5f1c2acba3f82e19000564e7545b9433addff9a8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"658b25a7b9645617ad466d6c1117b25cd3d47791","isMergeCommit":false,"messageTitle":"Refactor package layout","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":9,"deletions":7}}},{"hash":"a1b3d05184aba8a774589b12dd6d36021b787076","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"67d477677387ce7a3735be4055346537dc38a054","isMergeCommit":false,"messageTitle":"Add test files for Parser, DateHandler","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":0}}},{"hash":"7a9c6860633700b158163f538d620cb2203386ae","isMergeCommit":false,"messageTitle":"Update build.gradle for JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"430d6bdbce1ceeaa9364e7cc828232d304891054","isMergeCommit":false,"messageTitle":"Add skeleton code for Find Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"dc013891255d60378ac932c7b00527212dc40ad9","isMergeCommit":false,"messageTitle":"Add Javadocs for Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"4542bde53c5418aed9723da04b1f2765364cad72","isMergeCommit":false,"messageTitle":"Fix coding standard in Command","messageBody":"The Javadoc comments were added in to fix the checkstyle issue.\nWhile they do not fulfil the minimum requirements for proper\ndocumentation, as we are doing 3 branches in parallel, one of which\nis for Javadoc, we will resolve this during the merge conflict step.\n","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":3}}},{"hash":"9870e8111adceb7cd7627eae7ea19762406edabf","isMergeCommit":false,"messageTitle":"Add logic for search in Task, TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"ec9a0fe14f904475b5a5ff5c59697f9b48dfe142","isMergeCommit":false,"messageTitle":"Add Javadocs for CommandType, exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}},{"hash":"1fdeea53f3eb109c5b522952e52edaf82322ef38","isMergeCommit":false,"messageTitle":"Fix styling for Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":14}}},{"hash":"b5315780863aed9052df4e62b14aac00f32e9d4c","isMergeCommit":false,"messageTitle":"Fix styling for exception package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"87a3e9953b03afd212ab04267b73440e853cb28f","isMergeCommit":false,"messageTitle":"Fix styling for task package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":62}}},{"hash":"2538e9c0647df316dfa35fd63c112640d8333746","isMergeCommit":false,"messageTitle":"Add Find logic to Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"d407b9de4ea6c02235d53ba771ee2309642c4cca","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"244f206f9293766836ec46732e115019a066ac91","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3e627eb537f99bd83708daf549fb485d13b03159","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"# Conflicts:\n#\tsrc/main/java/trackerbot/command/CommandType.java\n#\tsrc/main/java/trackerbot/task/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"f56df8a7e1ec150d7620fecd8a3067269794eac9","isMergeCommit":false,"messageTitle":"Update Javadoc for command, exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"244de052bacd949961139427f4b6b31349d980c3","isMergeCommit":false,"messageTitle":"Add Javadoc for task package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":25}}},{"hash":"0031906181189990facf1e5bec48840418723a82","isMergeCommit":false,"messageTitle":"Fix naming convention on find method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"4b74e163ecdadd15156faf33f3177dd4a5653dfc","isMergeCommit":false,"messageTitle":"Update coding style for rest of code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":24}}},{"hash":"5f8d8f8f747f1c8599206500e7bf992e97ef4357","isMergeCommit":false,"messageTitle":"Add Javadoc for rest of the app","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":29}}},{"hash":"067bee1106307184e768c28662a097bd060dd0f9","isMergeCommit":false,"messageTitle":"Update import ordering in test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"aacb79c5d207b903f87df14158e79c6ad02d2304","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9e366f3dd9f6047f7ffabe837fdfb24eeec4cec5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/trackerbot/command/Command.java\n#\tsrc/main/java/trackerbot/command/CommandType.java\n#\tsrc/main/java/trackerbot/exception/TrackerBotException.java\n#\tsrc/main/java/trackerbot/task/Task.java\n#\tsrc/main/java/trackerbot/task/TaskList.java\n#\tsrc/main/java/trackerbot/utils/Storage.java\n#\tsrc/main/java/trackerbot/utils/TaskDateHandler.java\n#\tsrc/main/java/trackerbot/utils/Ui.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a1ea1e9be24d8b21f5c96f3de5c8aa3e0300ecdd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ba5a78b2ff7ced6d9b857dbc5b5f4a4a7cd026d2","isMergeCommit":false,"messageTitle":"Move @see blocks in Javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":8}}},{"hash":"cf83e4d1684ffe1eb722ffaf63428c5df6ba6d92","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-Varargs","A-JavaDoc","A-Checkstyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"e07fbca01661bf94de32de6dfbfcbd075ffb97d2","isMergeCommit":false,"messageTitle":"Add dependencies to JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"30b1fd83b162e3fce6fd8a0d343109e69e6f4f58","isMergeCommit":false,"messageTitle":"Add skeleton code from JFX tutorial","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":117,"deletions":0}}},{"hash":"6dc9148224a724a254b5cf6536b3da52794ea050","isMergeCommit":false,"messageTitle":"Convert Ui to UiHandler","messageBody":"Ui is the direct handler class for the text-based UI.\n\nWith the addition of the GUI, there is no need for the Ui to handle\nactions anymore.\n\nUiHandler is an experimental class to see if the Ui abstraction can\nhold for a GUI setup.\n","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":34}}},{"hash":"9dc5ee29a796087edd2d3c0c6d9ae29c845e5734","isMergeCommit":false,"messageTitle":"Add entry point to JFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":51,"deletions":0}}},{"hash":"d2aa53b3e21ec44aa7fde0d53d42157f26090b8a","isMergeCommit":false,"messageTitle":"Fix to entry point in FXML","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}},{"hash":"24cf469986994928d8bf622c84e165ce704b3f11","isMergeCommit":false,"messageTitle":"Add WIP code for UiHandler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":50}}},{"hash":"2fde6fcf25be9577fdb160c29da43809cc10cd7d","isMergeCommit":false,"messageTitle":"Rename methods to match project","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"2d1354c76d8c4fcecdd795623a6ee2f2c8f9d708","isMergeCommit":false,"messageTitle":"Update gradle entry point","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"85e57f6d335c55c267a587a5b94f60f59555498d","isMergeCommit":false,"messageTitle":"Remove deprecated methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":49}}},{"hash":"fa05e4ddd70b6c02e2a2e3fc5aba0312a92cf6d7","isMergeCommit":false,"messageTitle":"Add delay before exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}}]},{"date":"2023-09-08","commitResults":[{"hash":"ab938c7922c10eda2861f94fbfa7d8fda5619f39","isMergeCommit":false,"messageTitle":"Add aesthetic changes to app","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":36,"deletions":3}}},{"hash":"48cd26e70fd98a30f858a8b9aabbd7aa1778b8f8","isMergeCommit":false,"messageTitle":"Update checkstyle compliance","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":5}}},{"hash":"67fe9ab2a3644440e92ead87e209da842a0c7be2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"94d21efe87a0afbaf3c403c79ad8109408649a53","isMergeCommit":false,"messageTitle":"Fix minor DialogBox bug","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-14","commitResults":[{"hash":"69e910fa4a3d5e039820268524a2cc77d2cb0314","isMergeCommit":false,"messageTitle":"Extract nested subclasses of Command","messageBody":"Currently, Command nests all the subtypes of command as part of itself.\nThis allows the abstract Command Class to conveniently return its\nsub-types using the factory method.\n\nHowever, this was done when the classes have not been properly packaged,\nwhere having all the classes be in 1 folder would have bloated the\nproject environment significantly. The tradeoff for this would be\ncausing the Command class itself to bloat unnecessarily.\n\nTherefore, we choose to extract the subclasses inside Command into the\ntrackerbot.command package.\n\nTo maintain the original design philosophy of having only Command be\nable to access these classes, we set the relevant access modifiers to\npackage-private.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":142}}},{"hash":"55b1215d057bd1fefa843b0336b708e6084e006d","isMergeCommit":false,"messageTitle":"Enable assertions in Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"091740885138b3170217216d6ff1a38fc3bebc7d","isMergeCommit":false,"messageTitle":"Add assertion for Event class","messageBody":"This assertion exposes a bug for event where from and to does not\nmaintain a proper relationship.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"f743e9b6d43b545bf7a312832be7a0a8c9446664","isMergeCommit":false,"messageTitle":"Change exception type from Java-native types","messageBody":"Exceptions are currently mainly handled by NumberFormatException,\nDateTimeParseException and TrackerBotException types, with the unchecked\nexception IllegalStateException handling irrecoverable states in the\nprogram.\n\nThe current method of handling makes it inconvenient to implement new\nmethods related to methods that throw the Java exception types, as\nit is unclear whether the method should throw the native exception or\nthe specific Java exceptions. Furthermore, it complicates exception\nhandling downstream, as these specific scenarios need to be handled in\na way that users will be able to understand and rectify.\n\nTherefore, we preemptively catch the Java exceptions and convert them\ninto a relevant TrackerBotException, that our methods downstream will be\nable to handle generically.\n\nThis will allow us to program methods more generically in the long run,\nand also let linters catch unhandled exceptions that we expect the user\nto be able to create during the runtime of the program. In context of\nthe current branch, it lets us fix the assertions bug with an abstracted\nmethod while also keeping specificity of the error to be thrown.\n","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":108}}},{"hash":"bba9be8c3c7b428763a954d6412bb964245ebc52","isMergeCommit":false,"messageTitle":"Update JavaDoc, coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}},{"hash":"ca939049a6cd33031d6b5d8fa28e5a3709c5cf36","isMergeCommit":false,"messageTitle":"TaskList: Extract method, Rename method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":45}}},{"hash":"9a3e4c641d9a37dd28d54f891fdd951f3f699610","isMergeCommit":false,"messageTitle":"Standardize SLAP in TrackerBot, Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":31}}},{"hash":"ff49fc59e0fea89a024d604aac18f93bf1664fc0","isMergeCommit":false,"messageTitle":"Parser: Extract method from parseAdd","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":46}}}]},{"date":"2023-09-15","commitResults":[{"hash":"68500292f24bf7a40d398885959ae1f549b11410","isMergeCommit":false,"messageTitle":"Fix bug exposed by Event assertion","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":7}}},{"hash":"32a17a6601d8ee38cb2cbafa86d8d14ae21b8ba2","isMergeCommit":false,"messageTitle":"Fix bug where saves do not purge on error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"4a0b31858834d6107c5fd13e65460b5b6c84f757","isMergeCommit":false,"messageTitle":"Fix JavaDoc header","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"f2b5a3578f7b885f5169f4a5a63624c29cc33563","isMergeCommit":false,"messageTitle":"Extract magic values for URI, format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}},{"hash":"d7ba5052c27eb738002b99291f96f03afe32c849","isMergeCommit":true,"messageTitle":"Merge pull request #2 from WZWren/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"8758db0726bc8a0c3143cce91018e3943413f512","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"# Conflicts:\n#\tsrc/main/java/trackerbot/utils/Parser.java\n#\tsrc/main/java/trackerbot/utils/TaskDateHandler.java\n","fileTypesAndContributionMap":{}},{"hash":"906ac1051dc619153e98bdd7966106e578723672","isMergeCommit":true,"messageTitle":"Merge pull request #1 from WZWren/branch-A-Assertions","messageBody":"Add assertions for Events","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"WZWren":{"java":1803,"md":0,"fxml":35,"sh":0,"bat":2,"gradle":20,"txt":33}},"authorContributionVariance":{"WZWren":138716.11},"authorDisplayNameMap":{"WZWren":"CS2103T-T14-3 WANG..WREN"}} +{"authorDailyContributionsMap":{"WZWren":[{"date":"2023-08-20","commitResults":[{"hash":"3d8e74cbd329184248b51d6cd4843abb95efff39","isMergeCommit":false,"messageTitle":"Renamed the Duke file to TrackerBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"1d96602e6ef588f5ac2ffc7e969e01b989d62b29","isMergeCommit":false,"messageTitle":"Added Greet to TrackerBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":8}}},{"hash":"42b2dac7ca3b8318f5629b41d81e54b24c07142a","isMergeCommit":false,"messageTitle":"Added Exit to TrackerBot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-21","commitResults":[{"hash":"c13b0cbda4cc33cb5f114191c8c370663cff7d6c","isMergeCommit":false,"messageTitle":"Added input handling to TrackerBot.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":2}}},{"hash":"edd459511c0f488acabf6b397c9718716f2ba5e2","isMergeCommit":false,"messageTitle":"Added variables to store tasks.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"68e91f84f03a57c12bddb5f1560c23a3dd7ebd99","isMergeCommit":false,"messageTitle":"Added List, Add methods to TrackerBot.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":2}}},{"hash":"e8deb4265ccf2977995def3d59c75ead2de6fd52","isMergeCommit":false,"messageTitle":"Updated version in Javadoc.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"36808ab2d4377f182674fe019020d5370a4e86ff","isMergeCommit":false,"messageTitle":"Added Task class to project.","messageBody":"The Task class encapsulates the name and mark of a reminder task - this allows us to more easily store our tasks in the future, and has the immediate benefit of storing the completion status of each individual item in the list.\n","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}},{"hash":"8ba80a5724fd807a7d110df76deda997084b544c","isMergeCommit":false,"messageTitle":"Converted Task List to use the Task class.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"532636dbe2eee984992272e8ecbbff087fe12eb7","isMergeCommit":false,"messageTitle":"Added code for marking/unmarking Tasks.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":0}}},{"hash":"fe6613871abfc0229bc0350117916f4e905773ab","isMergeCommit":false,"messageTitle":"Modified input handler to prepare for Scanner use.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"c96ddbde8b4d07fee661ad9e352ad297cc839938","isMergeCommit":false,"messageTitle":"Linked mark, unmark to main.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":2}}}]},{"date":"2023-08-22","commitResults":[{"hash":"dbdb6453e68aaefc9a4cac7e8c7cf7add621cd2a","isMergeCommit":false,"messageTitle":"Added Todo, Deadline and Event classes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":0}}},{"hash":"0304525c997c4fff4ef6dce894be60afd1049467","isMergeCommit":false,"messageTitle":"Added utility DS Pair to the project.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":0}}},{"hash":"123ffaa3ccb985a7aa29bf21506cc4a8054bba30","isMergeCommit":false,"messageTitle":"Added an enum for Commands.","messageBody":"This is done to reduce future boiler code and simplify logic in the TrackerBot class.\n","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"491e17374283a2f1a67abe04c5046cdb8964eb02","isMergeCommit":false,"messageTitle":"Implemented Enum into handler logic.","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":12}}},{"hash":"52d2f68ca0aa7a688371bc2d983bcef0212369fb","isMergeCommit":false,"messageTitle":"Adjusted Event toString output for formatting.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"52f70f20d9f996970a01d8597eb9932335a0337e","isMergeCommit":false,"messageTitle":"Changed add logic for Task for variants.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":9}}},{"hash":"4dba2a4fbd40c90b5cfc65c1c233cb8c447b0311","isMergeCommit":false,"messageTitle":"Changed Task to abstract class.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}},{"hash":"afc648be58f70173db52a037305ff7d1e4f392ee","isMergeCommit":false,"messageTitle":"Fixed toString of Event to properly tag the String","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"cf3ed237537279dad7f543edf1301c1fe12aa43d","isMergeCommit":false,"messageTitle":"Converted Task array to ArrayList, fixed getTask.","messageBody":"getTask had a minor OutOfBounds error that could occur - as this was caught during conversion and the ArrayList bug fix is minor, this fix was kept together with the conversion commit.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":13}}},{"hash":"72aa343d85c473d76b38bb43bbd76e35b4736773","isMergeCommit":false,"messageTitle":"Added Delete to TrackerBot","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}},{"hash":"130ae43cd5a4a4f2cce5c4ee661932f2b9848d39","isMergeCommit":false,"messageTitle":"Modified input, runtest.bat files to fit new name of project.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":33,"deletions":0},"bat":{"insertions":2,"deletions":1}}},{"hash":"002587a945f2bacfd0f2c1d95d3b7d61b30e851b","isMergeCommit":false,"messageTitle":"Fixed bug where error message displayed for event is incorrect.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"395998745f98e107a3ec3cb8035b0e18de1de230","isMergeCommit":false,"messageTitle":"Fix indent and switch cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":456,"deletions":453}}},{"hash":"a6705c2e7b0791561b8807b790475140abf12473","isMergeCommit":false,"messageTitle":"Add skeleton code for save string in Task","messageBody":"The method to parse the save string is currently unimplemented.\nWe will only implement it after creating the Factory method for Tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"065d6974f52a727544ca34a46aaf99c6d69d5b66","isMergeCommit":false,"messageTitle":"Add skeleton code for factory method of Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"70042c59e36c85ad21974a8fad2b529a5573bd51","isMergeCommit":false,"messageTitle":"Add basic save method with IO output","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"f401bc92a7c109ae6de7fb1b32cd1d0becd053ba","isMergeCommit":false,"messageTitle":"Add basic IO read from file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}},{"hash":"cc04966ed090babddae380306a470b789549aee0","isMergeCommit":false,"messageTitle":"Add abstract saveString generator for Task","messageBody":"We separate getSaveInfo from the child classes to maintain the\nabstraction barrier between Task and its child classes, while still\nmaking it compulsory to override toSaveString in the child class.\n","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":8}}},{"hash":"c5e359cf018c5db15430c5f348cbf33725cffea0","isMergeCommit":false,"messageTitle":"Add factory method logic in Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":9}}},{"hash":"b5570e6499f91afd9144f031f3712337a514fc3f","isMergeCommit":false,"messageTitle":"Add save/load logic for Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":21}}},{"hash":"5d9726a8634df93959ffe00ba9f9ce87a90d7dde","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a9fb2e8cf4a996db55fe58cf4a487074671d085f","isMergeCommit":false,"messageTitle":"Add String to Date conversion method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"2f86e7a9400bacb30adc56e407917b9c020cd677","isMergeCommit":false,"messageTitle":"Move conversion method to new class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":24}}},{"hash":"7fea7b0e133440a85cb3ee8cb7fe313a406518de","isMergeCommit":false,"messageTitle":"Change String fields to LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":80}}},{"hash":"65b40284c6c4b83225c1d4bc7ae75e0465b777c5","isMergeCommit":false,"messageTitle":"Change logic for save file date handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}},{"hash":"3095b299964853571c45b898ff3c6f0e2bfc344b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e4240434a922b425d9139a1ece62c5f41de437ea","isMergeCommit":false,"messageTitle":"Move CommandType enum out of main","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":75}}},{"hash":"8bb3012706ea78a8334f302b939d63038569aa5d","isMergeCommit":false,"messageTitle":"Group task methods from main into Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":0}}},{"hash":"4d169b82cb4941a71b7e81900042e6da801ff9f2","isMergeCommit":false,"messageTitle":"Add skeleton code for UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"ec6f7e928762ec536b8494aa344455e179184d98","isMergeCommit":false,"messageTitle":"Move user input ID to Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":36}}},{"hash":"9c90956abb67d84eedfe592f4a6b325f19e0778c","isMergeCommit":false,"messageTitle":"Move IO methods to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":2}}}]},{"date":"2023-09-01","commitResults":[{"hash":"be71b7424dcb8a613cc7c498ce011492f04ec46e","isMergeCommit":false,"messageTitle":"Add TrackerBotException class","messageBody":"TrackerBot used to manually set exceptional cases and print them\nout onto the console.\n\nThe change to a more OOP approach made it more difficult to perform\nthis approach while abiding by encapsulation approach.\n\nAdding the Exception class allows us to push the error handling to\na more appropriate class, simplifying code.\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"4a8e24854a2ef8f48d5bded16553f45c40b8c4e7","isMergeCommit":false,"messageTitle":"Move Task parse logic to Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":76}}},{"hash":"34027d0dee5b3e9bde9ee164ebf300232ca44f16","isMergeCommit":false,"messageTitle":"Change main error handling to use Exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":311}}},{"hash":"1d564b5712bdc5944d2c10188248115bf5230292","isMergeCommit":false,"messageTitle":"Rename Storage to TaskList","messageBody":"TaskList better represents what the class should be doing.\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"3247982529201dbf836e3e7810094e2f81a1f644","isMergeCommit":false,"messageTitle":"Add Command class","messageBody":"TrackerBot currently handles each individual Command case using\na switch case and an enum.\n\nAs we switch over to a more rigid OOP structure, it becomes unclear\nwhere this handling should be made.\n\nBy extracting the Command class, we can handle it all in the\nCommand class, and call command.execute().\n","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":0}}},{"hash":"2a626e2e768fcf388f575bdb51537dd56328afcc","isMergeCommit":false,"messageTitle":"Move UI elements to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"aa59f34565981727a6a611385f4eeecdbb97ca40","isMergeCommit":false,"messageTitle":"Adjust Parser, TaskList return types","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":45}}},{"hash":"82243199e4a945ac91edfd397d570d4d7837209f","isMergeCommit":false,"messageTitle":"Port command logic to Command","messageBody":"","tags":["Major"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":108}}},{"hash":"57f67f977598316ebf01478c13dd8fba318b06ac","isMergeCommit":false,"messageTitle":"Add Storage class, minor fixes to UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":55}}},{"hash":"4aeac1d2fdcbf85dfacc812242576f4eed2e84a4","isMergeCommit":false,"messageTitle":"Change main to be entry, not program","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":8}}},{"hash":"f3a9177c74c758916734a9fb1663e576d05235f1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"84315e41a054cf7f97c75dded8c1db9215c59802","isMergeCommit":false,"messageTitle":"Remove unused Pair class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":66}}},{"hash":"28c63f6ecdbe45e6a4714422df8e4dcd2a51ca06","isMergeCommit":false,"messageTitle":"Rename package ip to trackerbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"3a53cad721c1dde5a18121fa64d7516b854de1ab","isMergeCommit":false,"messageTitle":"Move all classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":2}}},{"hash":"569b2375df2fa26c43457e495050500a2e67ff5a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"cbe78871451bbfc4f0745d7a3f5e429c71b2c5be","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f39cc0cbff78595a6624b94e7e20491df1e2abec","isMergeCommit":false,"messageTitle":"Add gradle support for TrackerBot","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}},{"hash":"5f1c2acba3f82e19000564e7545b9433addff9a8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"658b25a7b9645617ad466d6c1117b25cd3d47791","isMergeCommit":false,"messageTitle":"Refactor package layout","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":9,"deletions":7}}},{"hash":"a1b3d05184aba8a774589b12dd6d36021b787076","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"67d477677387ce7a3735be4055346537dc38a054","isMergeCommit":false,"messageTitle":"Add test files for Parser, DateHandler","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":0}}},{"hash":"7a9c6860633700b158163f538d620cb2203386ae","isMergeCommit":false,"messageTitle":"Update build.gradle for JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"430d6bdbce1ceeaa9364e7cc828232d304891054","isMergeCommit":false,"messageTitle":"Add skeleton code for Find Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"dc013891255d60378ac932c7b00527212dc40ad9","isMergeCommit":false,"messageTitle":"Add Javadocs for Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}},{"hash":"4542bde53c5418aed9723da04b1f2765364cad72","isMergeCommit":false,"messageTitle":"Fix coding standard in Command","messageBody":"The Javadoc comments were added in to fix the checkstyle issue.\nWhile they do not fulfil the minimum requirements for proper\ndocumentation, as we are doing 3 branches in parallel, one of which\nis for Javadoc, we will resolve this during the merge conflict step.\n","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":3}}},{"hash":"9870e8111adceb7cd7627eae7ea19762406edabf","isMergeCommit":false,"messageTitle":"Add logic for search in Task, TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"ec9a0fe14f904475b5a5ff5c59697f9b48dfe142","isMergeCommit":false,"messageTitle":"Add Javadocs for CommandType, exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}},{"hash":"1fdeea53f3eb109c5b522952e52edaf82322ef38","isMergeCommit":false,"messageTitle":"Fix styling for Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":14}}},{"hash":"b5315780863aed9052df4e62b14aac00f32e9d4c","isMergeCommit":false,"messageTitle":"Fix styling for exception package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"87a3e9953b03afd212ab04267b73440e853cb28f","isMergeCommit":false,"messageTitle":"Fix styling for task package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":62}}},{"hash":"2538e9c0647df316dfa35fd63c112640d8333746","isMergeCommit":false,"messageTitle":"Add Find logic to Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"d407b9de4ea6c02235d53ba771ee2309642c4cca","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"244f206f9293766836ec46732e115019a066ac91","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3e627eb537f99bd83708daf549fb485d13b03159","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"# Conflicts:\n#\tsrc/main/java/trackerbot/command/CommandType.java\n#\tsrc/main/java/trackerbot/task/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"f56df8a7e1ec150d7620fecd8a3067269794eac9","isMergeCommit":false,"messageTitle":"Update Javadoc for command, exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"244de052bacd949961139427f4b6b31349d980c3","isMergeCommit":false,"messageTitle":"Add Javadoc for task package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":25}}},{"hash":"0031906181189990facf1e5bec48840418723a82","isMergeCommit":false,"messageTitle":"Fix naming convention on find method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"4b74e163ecdadd15156faf33f3177dd4a5653dfc","isMergeCommit":false,"messageTitle":"Update coding style for rest of code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":24}}},{"hash":"5f8d8f8f747f1c8599206500e7bf992e97ef4357","isMergeCommit":false,"messageTitle":"Add Javadoc for rest of the app","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":29}}},{"hash":"067bee1106307184e768c28662a097bd060dd0f9","isMergeCommit":false,"messageTitle":"Update import ordering in test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"aacb79c5d207b903f87df14158e79c6ad02d2304","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9e366f3dd9f6047f7ffabe837fdfb24eeec4cec5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/trackerbot/command/Command.java\n#\tsrc/main/java/trackerbot/command/CommandType.java\n#\tsrc/main/java/trackerbot/exception/TrackerBotException.java\n#\tsrc/main/java/trackerbot/task/Task.java\n#\tsrc/main/java/trackerbot/task/TaskList.java\n#\tsrc/main/java/trackerbot/utils/Storage.java\n#\tsrc/main/java/trackerbot/utils/TaskDateHandler.java\n#\tsrc/main/java/trackerbot/utils/Ui.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a1ea1e9be24d8b21f5c96f3de5c8aa3e0300ecdd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ba5a78b2ff7ced6d9b857dbc5b5f4a4a7cd026d2","isMergeCommit":false,"messageTitle":"Move @see blocks in Javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":8}}},{"hash":"cf83e4d1684ffe1eb722ffaf63428c5df6ba6d92","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-Varargs","A-JavaDoc","A-Checkstyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"e07fbca01661bf94de32de6dfbfcbd075ffb97d2","isMergeCommit":false,"messageTitle":"Add dependencies to JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"30b1fd83b162e3fce6fd8a0d343109e69e6f4f58","isMergeCommit":false,"messageTitle":"Add skeleton code from JFX tutorial","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":117,"deletions":0}}},{"hash":"6dc9148224a724a254b5cf6536b3da52794ea050","isMergeCommit":false,"messageTitle":"Convert Ui to UiHandler","messageBody":"Ui is the direct handler class for the text-based UI.\n\nWith the addition of the GUI, there is no need for the Ui to handle\nactions anymore.\n\nUiHandler is an experimental class to see if the Ui abstraction can\nhold for a GUI setup.\n","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":34}}},{"hash":"9dc5ee29a796087edd2d3c0c6d9ae29c845e5734","isMergeCommit":false,"messageTitle":"Add entry point to JFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":51,"deletions":0}}},{"hash":"d2aa53b3e21ec44aa7fde0d53d42157f26090b8a","isMergeCommit":false,"messageTitle":"Fix to entry point in FXML","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}},{"hash":"24cf469986994928d8bf622c84e165ce704b3f11","isMergeCommit":false,"messageTitle":"Add WIP code for UiHandler","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":50}}},{"hash":"2fde6fcf25be9577fdb160c29da43809cc10cd7d","isMergeCommit":false,"messageTitle":"Rename methods to match project","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"2d1354c76d8c4fcecdd795623a6ee2f2c8f9d708","isMergeCommit":false,"messageTitle":"Update gradle entry point","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"85e57f6d335c55c267a587a5b94f60f59555498d","isMergeCommit":false,"messageTitle":"Remove deprecated methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":49}}},{"hash":"fa05e4ddd70b6c02e2a2e3fc5aba0312a92cf6d7","isMergeCommit":false,"messageTitle":"Add delay before exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}}]},{"date":"2023-09-08","commitResults":[{"hash":"ab938c7922c10eda2861f94fbfa7d8fda5619f39","isMergeCommit":false,"messageTitle":"Add aesthetic changes to app","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":36,"deletions":3}}},{"hash":"48cd26e70fd98a30f858a8b9aabbd7aa1778b8f8","isMergeCommit":false,"messageTitle":"Update checkstyle compliance","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":5}}},{"hash":"67fe9ab2a3644440e92ead87e209da842a0c7be2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"94d21efe87a0afbaf3c403c79ad8109408649a53","isMergeCommit":false,"messageTitle":"Fix minor DialogBox bug","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-14","commitResults":[{"hash":"69e910fa4a3d5e039820268524a2cc77d2cb0314","isMergeCommit":false,"messageTitle":"Extract nested subclasses of Command","messageBody":"Currently, Command nests all the subtypes of command as part of itself.\nThis allows the abstract Command Class to conveniently return its\nsub-types using the factory method.\n\nHowever, this was done when the classes have not been properly packaged,\nwhere having all the classes be in 1 folder would have bloated the\nproject environment significantly. The tradeoff for this would be\ncausing the Command class itself to bloat unnecessarily.\n\nTherefore, we choose to extract the subclasses inside Command into the\ntrackerbot.command package.\n\nTo maintain the original design philosophy of having only Command be\nable to access these classes, we set the relevant access modifiers to\npackage-private.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":142}}},{"hash":"55b1215d057bd1fefa843b0336b708e6084e006d","isMergeCommit":false,"messageTitle":"Enable assertions in Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"091740885138b3170217216d6ff1a38fc3bebc7d","isMergeCommit":false,"messageTitle":"Add assertion for Event class","messageBody":"This assertion exposes a bug for event where from and to does not\nmaintain a proper relationship.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"f743e9b6d43b545bf7a312832be7a0a8c9446664","isMergeCommit":false,"messageTitle":"Change exception type from Java-native types","messageBody":"Exceptions are currently mainly handled by NumberFormatException,\nDateTimeParseException and TrackerBotException types, with the unchecked\nexception IllegalStateException handling irrecoverable states in the\nprogram.\n\nThe current method of handling makes it inconvenient to implement new\nmethods related to methods that throw the Java exception types, as\nit is unclear whether the method should throw the native exception or\nthe specific Java exceptions. Furthermore, it complicates exception\nhandling downstream, as these specific scenarios need to be handled in\na way that users will be able to understand and rectify.\n\nTherefore, we preemptively catch the Java exceptions and convert them\ninto a relevant TrackerBotException, that our methods downstream will be\nable to handle generically.\n\nThis will allow us to program methods more generically in the long run,\nand also let linters catch unhandled exceptions that we expect the user\nto be able to create during the runtime of the program. In context of\nthe current branch, it lets us fix the assertions bug with an abstracted\nmethod while also keeping specificity of the error to be thrown.\n","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":108}}},{"hash":"bba9be8c3c7b428763a954d6412bb964245ebc52","isMergeCommit":false,"messageTitle":"Update JavaDoc, coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}},{"hash":"ca939049a6cd33031d6b5d8fa28e5a3709c5cf36","isMergeCommit":false,"messageTitle":"TaskList: Extract method, Rename method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":45}}},{"hash":"9a3e4c641d9a37dd28d54f891fdd951f3f699610","isMergeCommit":false,"messageTitle":"Standardize SLAP in TrackerBot, Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":31}}},{"hash":"ff49fc59e0fea89a024d604aac18f93bf1664fc0","isMergeCommit":false,"messageTitle":"Parser: Extract method from parseAdd","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":46}}}]},{"date":"2023-09-15","commitResults":[{"hash":"68500292f24bf7a40d398885959ae1f549b11410","isMergeCommit":false,"messageTitle":"Fix bug exposed by Event assertion","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":7}}},{"hash":"32a17a6601d8ee38cb2cbafa86d8d14ae21b8ba2","isMergeCommit":false,"messageTitle":"Fix bug where saves do not purge on error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"4a0b31858834d6107c5fd13e65460b5b6c84f757","isMergeCommit":false,"messageTitle":"Fix JavaDoc header","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"f2b5a3578f7b885f5169f4a5a63624c29cc33563","isMergeCommit":false,"messageTitle":"Extract magic values for URI, format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}},{"hash":"d7ba5052c27eb738002b99291f96f03afe32c849","isMergeCommit":true,"messageTitle":"Merge pull request #2 from WZWren/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"8758db0726bc8a0c3143cce91018e3943413f512","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"# Conflicts:\n#\tsrc/main/java/trackerbot/utils/Parser.java\n#\tsrc/main/java/trackerbot/utils/TaskDateHandler.java\n","fileTypesAndContributionMap":{}},{"hash":"906ac1051dc619153e98bdd7966106e578723672","isMergeCommit":true,"messageTitle":"Merge pull request #1 from WZWren/branch-A-Assertions","messageBody":"Add assertions for Events","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"99e9160ad4419984450a1476d1839f95d6e3bc6d","isMergeCommit":false,"messageTitle":"Add skeleton code for mass ops","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":12}}},{"hash":"b2e03501737ea9346e6795446c192e6d443675d5","isMergeCommit":false,"messageTitle":"Create MassCommand subtype","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}}]},{"date":"2023-09-16","commitResults":[{"hash":"7b07b8dfcaae2dbaf6477a72444ed11c4f6ecde9","isMergeCommit":false,"messageTitle":"Add parser for mass operation strings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":12}}},{"hash":"af9db5335d42986c0dfac249406886cf17dcdf34","isMergeCommit":false,"messageTitle":"Fix parser logic, add command logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":15}}},{"hash":"e0d52ecdfb8b86a8a53860f99ce669b3e43bcb0f","isMergeCommit":false,"messageTitle":"Add logic for mass deletion","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":9}}},{"hash":"dc6f6888a84f4058de51e3e1552538e04bede2af","isMergeCommit":false,"messageTitle":"Add logic for mass toggle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":10}}},{"hash":"d6127186f8f2238ca0ca12b9e0780284a18dff60","isMergeCommit":false,"messageTitle":"Change mass delimiter to single character","messageBody":"The Mass command uses double colons \"::\" to delimit each subsequent\ncommand of the same subtype.\n\nFor a command designed to shorthand mass operations, this is very\ncumbersome to have to SHIFT+\";\" twice. Additionally, there is no\nreal reason to use double colons in the code, as colons and\nsemicolons do not have a special meaning in the parser.\n\nTherefore, we adjust the delimiter to use a single semicolon, which\nshould make the process less cumbersome.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"724121faa48b2ed96f524444faa065d54a69ae61","isMergeCommit":false,"messageTitle":"Add logic for mass search","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":4}}},{"hash":"87152f8ec996a45c9f384114994e88167c00c078","isMergeCommit":false,"messageTitle":"Add exceptional case for mass list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"2277c5164530ae2e800ea83aaad6901ffcb89a44","isMergeCommit":false,"messageTitle":"Fix accessor for MassCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"8491c4f09fc702318ba1392e3632d33b7f7ac0da","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-MassOps\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"WZWren":{"java":2087,"md":0,"fxml":35,"sh":0,"bat":2,"gradle":20,"txt":33}},"authorContributionVariance":{"WZWren":133868.28},"authorDisplayNameMap":{"WZWren":"CS2103T-T14-3 WANG..WREN"}} diff --git a/WangCheng0116_ip_master/commits.json b/WangCheng0116_ip_master/commits.json index 91687256..9499ed93 100644 --- a/WangCheng0116_ip_master/commits.json +++ b/WangCheng0116_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"WangCheng0116":[{"date":"2023-08-23","commitResults":[{"hash":"29929c8c2cd4fe5fce65e8c2226f83393e7f32ad","isMergeCommit":false,"messageTitle":"Rename bot and initialize skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d1a7c850417c337bc3fba601f4030b84311d8531","isMergeCommit":false,"messageTitle":"implement echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"d6d853ff42e6891e39abffc841436745b9ff8779","isMergeCommit":false,"messageTitle":"Implement add and list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"7cfd8c01187fee58b4b73ef5edc880f61d1314bd","isMergeCommit":false,"messageTitle":"Implement mark as done function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":14}}},{"hash":"7f390ddc4bf490af727162977d652451fe22c522","isMergeCommit":false,"messageTitle":"creating subclasses of task, consisting of todo, deadline and event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":38}}},{"hash":"1a2e8747c5e51b14d7046c32eb50d8ab2a670a47","isMergeCommit":false,"messageTitle":"creating TaskParser class and implement function of adding different kinds of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":2}}},{"hash":"06d913270d455c8cd9edfd836f52e484d150745e","isMergeCommit":false,"messageTitle":"finish A-TextUiTesting by creating input.txt and EXPECTED.txt","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"073091f1e11bd4b9f3485796c592a0a1d3d2fd1d","isMergeCommit":false,"messageTitle":"creating own InvalidTaskFormatException and hence handle invalid input cases","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":14}}},{"hash":"5a50ed3facc80cac06a685ee0d42b599d883f8c7","isMergeCommit":false,"messageTitle":"implement deleting action","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"58036d46bc81bcc96d8d0450bc5431b5e93bc311","isMergeCommit":false,"messageTitle":"expand test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f684418362d29facf2c5bd763feb0ab184eb8332","isMergeCommit":false,"messageTitle":"Implement TaskReader","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":3}}},{"hash":"64b93c13576a8b2c86fa1be2214fb8b86c6189bf","isMergeCommit":false,"messageTitle":"Implement TaskWriter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":10}}},{"hash":"5e0bbc29dc26f6b829e1a58a8d2e5df8e5e0df39","isMergeCommit":false,"messageTitle":"Handle non-existent file case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"3c52325ba7b4853b2c7d71e2716aca56a15c2eac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"5dede6d62ef8f2dcb9094bf44360a58178f2ce3c","isMergeCommit":false,"messageTitle":"Implement reading date feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":20}}},{"hash":"2fb68bd0bf27687720129a9430194c921a828ac7","isMergeCommit":false,"messageTitle":"Create corresponding packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":9},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3eb4a90416551f8837afbc99659a1bab98d089e7","isMergeCommit":false,"messageTitle":"Implement prototypes of different commands and parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":217,"deletions":18}}},{"hash":"17e9f9a402a34a1fe0b44e3aa97f31ccac912447","isMergeCommit":false,"messageTitle":"Implement DataParser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":128,"deletions":25}}},{"hash":"446b056f5804d39759e65ad69dc98ad12a9587b7","isMergeCommit":false,"messageTitle":"Implement Storage class and Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":10}}},{"hash":"291e9100c2bef54f5e6829184831b6fbe45ef772","isMergeCommit":false,"messageTitle":"Connect each component with main logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":168}}},{"hash":"9aa3fd49057abb9c53637ca4016a9a7965c280f4","isMergeCommit":false,"messageTitle":"Fix all Java coding standard issues","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":689,"deletions":713}}},{"hash":"fc0038a818cefab47c0688d01454a727bd6431b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/WangCheng0116/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7640bb30924d54bd177caa068e49282ba661da3d","isMergeCommit":false,"messageTitle":"Fix bugs found when deleting tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":12}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a3c8ab4c78693653e10bf22aea9d79ca38ce0278","isMergeCommit":false,"messageTitle":"Add two Junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":52,"deletions":2}}},{"hash":"ce86b18c34c0c6c791fa0a285d1bc36ff5bfcfde","isMergeCommit":false,"messageTitle":"Fix coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":213}}},{"hash":"f7f861c58dba5cc66379351cba99c934a0f54010","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027 into A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6bd64e948afc163757c4495b25b3b7ad6a280ab3","isMergeCommit":false,"messageTitle":"Provide JavaDoc for classes in package command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":26}}},{"hash":"028e7279a2d7f0fda27427139ca4980c4b5d5f79","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes in package core, parser and storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":19}}},{"hash":"0bed88959367506971c7554d4a676ce2163b8a08","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes within packages tasklist, tasks, ui and test","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":181,"deletions":6}}},{"hash":"87475136a7e29b6c8fb3382f65d001fc3d9140d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDoc\u0027 into Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7a055f36d67cfddf94e9ce00945bd050d25bcebe","isMergeCommit":false,"messageTitle":"Implement finding feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":15}}},{"hash":"6bab6f9775a98551e9836da3f34bf1b70b951f97","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8868b40ca34918ac2b58a4bc6885304996f38ba5","isMergeCommit":false,"messageTitle":"Fix indentation issues","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1018,"deletions":1010}}}]},{"date":"2023-09-02","commitResults":[{"hash":"70839c590aef762882a14f79d8ac47110408d1fd","isMergeCommit":false,"messageTitle":"Faking branch for auto-grader","messageBody":"","tags":["branch-level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1211640cbd8785a372a16598aded1470d5970ea9","isMergeCommit":false,"messageTitle":"Configure checkstyle file and fix checkstyle problems","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":81,"deletions":81}}},{"hash":"c50db4a11190d8038f8be3db07e51ad23fb7a950","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"39eb30a7bf5eca3313a40b9f3bbcac22c12491e7","isMergeCommit":true,"messageTitle":"Merge tag \u0027branch-level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6298e8d85a4857f3c099c425badeabd65ca478ae","isMergeCommit":false,"messageTitle":"Fix gradle issues","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":13,"deletions":3},"java":{"insertions":19,"deletions":57}}},{"hash":"d0a40f38b1d9e3b7a572b6d97ead2632578ff553","isMergeCommit":false,"messageTitle":"Configure JavaFX and implement a sample usage","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":0},"java":{"insertions":25,"deletions":0}}},{"hash":"f7f50945c3c85368c6576b2522ace0fd42b1c1b5","isMergeCommit":false,"messageTitle":"Implement UI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":17},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":238,"deletions":64}}},{"hash":"f8a149d5bf2b095458c0f0f05c49771c1722caf6","isMergeCommit":false,"messageTitle":"Fix bugs in UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":21}}},{"hash":"160b83e6f7017814be47dd76e56f19235c602757","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"c1e7cc6f3f2e0d7e4c84ec8c58b70077a46bca74","isMergeCommit":false,"messageTitle":"Improve comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"67bfc5d5b2d78ec825ee7365015ff43bf3194f4b","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"a8b964e65ec7cb967ca7adb4b3d3ef8185943a95","isMergeCommit":true,"messageTitle":"Merge pull request #1 from WangCheng0116/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"529492a732324c056ba01e3de63603cf97588998","isMergeCommit":true,"messageTitle":"Merge pull request #2 from WangCheng0116/branch-A-CodeQuality","messageBody":"Improve comments","fileTypesAndContributionMap":{}},{"hash":"48e858974db9cbdf2262f18897af3722d062ece8","isMergeCommit":true,"messageTitle":"Add help function","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5fc6791653e94f688056d426bf7284e1eaec2565","isMergeCommit":false,"messageTitle":"Add help command to the application","messageBody":"The application lacks a comprehensive help command, leaving users without clear guidance on how to use its features.\n\nTo improve user experience and make the application more user-friendly, it\u0027s essential to provide users with accessible help documentation.\n\nIntroduce a new \"help\" command that displays helpful information about the application\u0027s usage.\n\nThe \"help\" command is added to ensure users can easily access instructions and guidance within the application. It promotes better user understanding and utilization of the software.\n\nThis commit includes the implementation of the \"help\" command, including documentation updates and user instructions.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"WangCheng0116":{"java":1635,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":12,"txt":12}},"authorContributionVariance":{"WangCheng0116":602335.44},"authorDisplayNameMap":{"WangCheng0116":"CS2103T-T11-4 WANG..HENG"}} +{"authorDailyContributionsMap":{"WangCheng0116":[{"date":"2023-08-23","commitResults":[{"hash":"29929c8c2cd4fe5fce65e8c2226f83393e7f32ad","isMergeCommit":false,"messageTitle":"Rename bot and initialize skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d1a7c850417c337bc3fba601f4030b84311d8531","isMergeCommit":false,"messageTitle":"implement echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"d6d853ff42e6891e39abffc841436745b9ff8779","isMergeCommit":false,"messageTitle":"Implement add and list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"7cfd8c01187fee58b4b73ef5edc880f61d1314bd","isMergeCommit":false,"messageTitle":"Implement mark as done function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":14}}},{"hash":"7f390ddc4bf490af727162977d652451fe22c522","isMergeCommit":false,"messageTitle":"creating subclasses of task, consisting of todo, deadline and event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":38}}},{"hash":"1a2e8747c5e51b14d7046c32eb50d8ab2a670a47","isMergeCommit":false,"messageTitle":"creating TaskParser class and implement function of adding different kinds of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":2}}},{"hash":"06d913270d455c8cd9edfd836f52e484d150745e","isMergeCommit":false,"messageTitle":"finish A-TextUiTesting by creating input.txt and EXPECTED.txt","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"073091f1e11bd4b9f3485796c592a0a1d3d2fd1d","isMergeCommit":false,"messageTitle":"creating own InvalidTaskFormatException and hence handle invalid input cases","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":14}}},{"hash":"5a50ed3facc80cac06a685ee0d42b599d883f8c7","isMergeCommit":false,"messageTitle":"implement deleting action","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"58036d46bc81bcc96d8d0450bc5431b5e93bc311","isMergeCommit":false,"messageTitle":"expand test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f684418362d29facf2c5bd763feb0ab184eb8332","isMergeCommit":false,"messageTitle":"Implement TaskReader","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":3}}},{"hash":"64b93c13576a8b2c86fa1be2214fb8b86c6189bf","isMergeCommit":false,"messageTitle":"Implement TaskWriter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":10}}},{"hash":"5e0bbc29dc26f6b829e1a58a8d2e5df8e5e0df39","isMergeCommit":false,"messageTitle":"Handle non-existent file case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"3c52325ba7b4853b2c7d71e2716aca56a15c2eac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"5dede6d62ef8f2dcb9094bf44360a58178f2ce3c","isMergeCommit":false,"messageTitle":"Implement reading date feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":20}}},{"hash":"2fb68bd0bf27687720129a9430194c921a828ac7","isMergeCommit":false,"messageTitle":"Create corresponding packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":9},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3eb4a90416551f8837afbc99659a1bab98d089e7","isMergeCommit":false,"messageTitle":"Implement prototypes of different commands and parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":217,"deletions":18}}},{"hash":"17e9f9a402a34a1fe0b44e3aa97f31ccac912447","isMergeCommit":false,"messageTitle":"Implement DataParser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":128,"deletions":25}}},{"hash":"446b056f5804d39759e65ad69dc98ad12a9587b7","isMergeCommit":false,"messageTitle":"Implement Storage class and Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":10}}},{"hash":"291e9100c2bef54f5e6829184831b6fbe45ef772","isMergeCommit":false,"messageTitle":"Connect each component with main logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":168}}},{"hash":"9aa3fd49057abb9c53637ca4016a9a7965c280f4","isMergeCommit":false,"messageTitle":"Fix all Java coding standard issues","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":689,"deletions":713}}},{"hash":"fc0038a818cefab47c0688d01454a727bd6431b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/WangCheng0116/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7640bb30924d54bd177caa068e49282ba661da3d","isMergeCommit":false,"messageTitle":"Fix bugs found when deleting tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":12}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a3c8ab4c78693653e10bf22aea9d79ca38ce0278","isMergeCommit":false,"messageTitle":"Add two Junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":52,"deletions":2}}},{"hash":"ce86b18c34c0c6c791fa0a285d1bc36ff5bfcfde","isMergeCommit":false,"messageTitle":"Fix coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":213}}},{"hash":"f7f861c58dba5cc66379351cba99c934a0f54010","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027 into A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6bd64e948afc163757c4495b25b3b7ad6a280ab3","isMergeCommit":false,"messageTitle":"Provide JavaDoc for classes in package command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":26}}},{"hash":"028e7279a2d7f0fda27427139ca4980c4b5d5f79","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes in package core, parser and storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":19}}},{"hash":"0bed88959367506971c7554d4a676ce2163b8a08","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes within packages tasklist, tasks, ui and test","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":181,"deletions":6}}},{"hash":"87475136a7e29b6c8fb3382f65d001fc3d9140d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDoc\u0027 into Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7a055f36d67cfddf94e9ce00945bd050d25bcebe","isMergeCommit":false,"messageTitle":"Implement finding feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":15}}},{"hash":"6bab6f9775a98551e9836da3f34bf1b70b951f97","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8868b40ca34918ac2b58a4bc6885304996f38ba5","isMergeCommit":false,"messageTitle":"Fix indentation issues","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1018,"deletions":1010}}}]},{"date":"2023-09-02","commitResults":[{"hash":"70839c590aef762882a14f79d8ac47110408d1fd","isMergeCommit":false,"messageTitle":"Faking branch for auto-grader","messageBody":"","tags":["branch-level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1211640cbd8785a372a16598aded1470d5970ea9","isMergeCommit":false,"messageTitle":"Configure checkstyle file and fix checkstyle problems","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":81,"deletions":81}}},{"hash":"c50db4a11190d8038f8be3db07e51ad23fb7a950","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"39eb30a7bf5eca3313a40b9f3bbcac22c12491e7","isMergeCommit":true,"messageTitle":"Merge tag \u0027branch-level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6298e8d85a4857f3c099c425badeabd65ca478ae","isMergeCommit":false,"messageTitle":"Fix gradle issues","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":13,"deletions":3},"java":{"insertions":19,"deletions":57}}},{"hash":"d0a40f38b1d9e3b7a572b6d97ead2632578ff553","isMergeCommit":false,"messageTitle":"Configure JavaFX and implement a sample usage","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":0},"java":{"insertions":25,"deletions":0}}},{"hash":"f7f50945c3c85368c6576b2522ace0fd42b1c1b5","isMergeCommit":false,"messageTitle":"Implement UI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":17},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":238,"deletions":64}}},{"hash":"f8a149d5bf2b095458c0f0f05c49771c1722caf6","isMergeCommit":false,"messageTitle":"Fix bugs in UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":21}}},{"hash":"160b83e6f7017814be47dd76e56f19235c602757","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"c1e7cc6f3f2e0d7e4c84ec8c58b70077a46bca74","isMergeCommit":false,"messageTitle":"Improve comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"67bfc5d5b2d78ec825ee7365015ff43bf3194f4b","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"a8b964e65ec7cb967ca7adb4b3d3ef8185943a95","isMergeCommit":true,"messageTitle":"Merge pull request #1 from WangCheng0116/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"529492a732324c056ba01e3de63603cf97588998","isMergeCommit":true,"messageTitle":"Merge pull request #2 from WangCheng0116/branch-A-CodeQuality","messageBody":"Improve comments","fileTypesAndContributionMap":{}},{"hash":"48e858974db9cbdf2262f18897af3722d062ece8","isMergeCommit":true,"messageTitle":"Add help function","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5fc6791653e94f688056d426bf7284e1eaec2565","isMergeCommit":false,"messageTitle":"Add help command to the application","messageBody":"The application lacks a comprehensive help command, leaving users without clear guidance on how to use its features.\n\nTo improve user experience and make the application more user-friendly, it\u0027s essential to provide users with accessible help documentation.\n\nIntroduce a new \"help\" command that displays helpful information about the application\u0027s usage.\n\nThe \"help\" command is added to ensure users can easily access instructions and guidance within the application. It promotes better user understanding and utilization of the software.\n\nThis commit includes the implementation of the \"help\" command, including documentation updates and user instructions.\n","tags":["C-Help","A-FullCommitMessage","A-CodeQuality","A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"WangCheng0116":{"java":1635,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":12,"txt":12}},"authorContributionVariance":{"WangCheng0116":602335.44},"authorDisplayNameMap":{"WangCheng0116":"CS2103T-T11-4 WANG..HENG"}} diff --git a/YeoBohShin_ip_master/authorship.json b/YeoBohShin_ip_master/authorship.json index d7afb0be..80a663a4 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":" * Get the task at the specific index of the list.","lastModifiedDate":"2023-09-06"},{"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.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}}] diff --git a/YeoBohShin_ip_master/commits.json b/YeoBohShin_ip_master/commits.json index 89ea6cf7..f6c67860 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}}}]}]},"authorFileTypeContributionMap":{"YeoBohShin":{"java":1295,"md":0,"fxml":38,"sh":1,"bat":0,"gradle":21,"txt":8}},"authorContributionVariance":{"YeoBohShin":28768.107},"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}}}]}]},"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"}} diff --git a/andrechuakj_ip_master/authorship.json b/andrechuakj_ip_master/authorship.json index b168a01c..b41d3a47 100644 --- a/andrechuakj_ip_master/authorship.json +++ b/andrechuakj_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":"andrechuakj"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-07"},{"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":"andrechuakj"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":"javafx {","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":13,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" * The main class for the Duke application, a simple task management system.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" * Duke allows users to manage their tasks through a command-line interface.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" private Response response;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" * Constructs a new Duke instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue initializing Duke or loading tasks from the data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public Duke() {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" this.response \u003d new Response();","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" this.storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" this.tasks \u003d storage.loadIntoList(new TaskList());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" response.printException(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" assert response !\u003d null : \"Response should not be null\";","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" assert storage !\u003d null : \"Storage should not be null\";","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" assert tasks !\u003d null : \"Tasks should not be null\";","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" return c.execute(tasks, response, storage);","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" return response.printException(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"andrechuakj":44,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":" * Custom exception class for Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":" * DukeException is thrown when there are errors or exceptions specific to the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * Constructs a new DukeException with the specified error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * @param message The error message associated with this exception.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":18}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.gui.Main;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":13}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.command.*;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * The Parser class is responsible for parsing user input and converting data strings","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" * into task objects for the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * Parses the user input command and returns the corresponding Command object.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" * @param strCommand The user input command to be parsed.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If the input command is invalid or contains errors.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" public static Command parse(String strCommand) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" assert strCommand !\u003d null : \"Command should not be null\";","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" int firstSpaceIndex \u003d strCommand.indexOf(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" String commandType \u003d firstSpaceIndex !\u003d -1","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" ? strCommand.substring(0, firstSpaceIndex)","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" : strCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e commandDetailList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" case \"list\":","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(strCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" command \u003d new ListCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" case \"bye\":","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(strCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" command \u003d new ByeCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" case \"todo\":","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c 6) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" String todoDesc \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(todoDesc);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" command \u003d new AddCommand(commandDetailList, \"T\");","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" case \"event\":","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" int fromIndex \u003d strCommand.indexOf(\"/from\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" int toIndex \u003d strCommand.indexOf(\"/to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1 || toIndex \u003c fromIndex) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The format of the event command is invalid.\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" + \" event coding /from 2023-01-01 /to 2023-12-31\");","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" String eventDesc \u003d strCommand.substring(firstSpaceIndex + 1, fromIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" String from \u003d strCommand.substring(fromIndex + \"/from \".length(), toIndex - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" String to \u003d strCommand.substring(toIndex + \"/to \".length());","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" if (eventDesc.isBlank() || from.isBlank() || to.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The format of the event command is invalid.\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" + \" event coding /from 2023-01-01 /to 2023-12-31\");","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(eventDesc);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(from);","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(to);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" command \u003d new AddCommand(commandDetailList, \"E\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" int byIndex \u003d strCommand.indexOf(\"/by\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" if (byIndex \u003d\u003d -1 || firstSpaceIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The format of the deadline command is invalid.\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" + \" deadline coding /by 2023-09-04\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" String deadlineDesc \u003d strCommand.substring(firstSpaceIndex + 1, byIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" String by \u003d strCommand.substring(byIndex + \"/by \".length());","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" if (deadlineDesc.isBlank() || by.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The format of the deadline command is invalid.\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" + \" deadline coding /by 2023-09-04\");","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(deadlineDesc);","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(by);","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" command \u003d new AddCommand(commandDetailList, \"D\");","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":" case \"mark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c \"mark \".length()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to mark cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" String taskToMark \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" if (taskToMark.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to mark cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskToMark);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" command \u003d new MarkCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c \"unmark \".length()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"andrechuakj"},"content":" String taskToUnmark \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"andrechuakj"},"content":" if (taskToUnmark.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskToUnmark);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"andrechuakj"},"content":" command \u003d new UnmarkCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"andrechuakj"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c \"delete \".length()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to delete cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"andrechuakj"},"content":" String taskToDelete \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"andrechuakj"},"content":" if (taskToDelete.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to delete cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskToDelete);","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"andrechuakj"},"content":" command \u003d new DeleteCommand(commandDetailList);","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"andrechuakj"},"content":" case \"find\":","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c \"find \".length()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The find keyword cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"andrechuakj"},"content":" String keyword \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"andrechuakj"},"content":" if (keyword.isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The find keyword cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"andrechuakj"},"content":" command \u003d new FindCommand(commandDetailList);","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"andrechuakj"},"content":" case \"update\":","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"andrechuakj"},"content":" int secondSpaceIndex \u003d strCommand.indexOf(\" \", firstSpaceIndex + 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"andrechuakj"},"content":" int slashIndex \u003d strCommand.indexOf(\"/\", secondSpaceIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"andrechuakj"},"content":" int thirdSpaceIndex \u003d strCommand.indexOf(\" \", slashIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c \"update \".length()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The update details cannot be empty.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"andrechuakj"},"content":" } else if (slashIndex \u003d\u003d -1 || secondSpaceIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! Please use the format: update 1 /desc newName\");","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"andrechuakj"},"content":" String taskNumber \u003d strCommand.substring(firstSpaceIndex + 1, secondSpaceIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"andrechuakj"},"content":" String field \u003d strCommand.substring(slashIndex + 1, thirdSpaceIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"andrechuakj"},"content":" String details \u003d strCommand.substring(thirdSpaceIndex + 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskNumber);","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(field);","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"andrechuakj"},"content":" System.out.println(field);","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"andrechuakj"},"content":" command \u003d new UpdateCommand(commandDetailList);","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"andrechuakj"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! This command is invalid.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"andrechuakj"},"content":" return command;","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"andrechuakj"},"content":" * Converts a data string into a Task object.","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"andrechuakj"},"content":" * @param data The data string representing a Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"andrechuakj"},"content":" * @return A Task object created from the data string.","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there are errors in the data string, or it is in an invalid format.","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"andrechuakj"},"content":" public static Task dataToTask(String data) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"andrechuakj"},"content":" String taskType \u003d data.substring(0, 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"andrechuakj"},"content":" String taskData \u003d data.substring(4);","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"andrechuakj"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"andrechuakj"},"content":" int firstSplitIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"andrechuakj"},"content":" int secondSplitIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"andrechuakj"},"content":" int thirdSplitIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"andrechuakj"},"content":" String desc \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"andrechuakj"},"content":" boolean isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"andrechuakj"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"andrechuakj"},"content":" case \"T\":","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"andrechuakj"},"content":" firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"andrechuakj"},"content":" desc \u003d taskData.substring(firstSplitIndex + 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"andrechuakj"},"content":" task \u003d new Todo(desc);","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"andrechuakj"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"andrechuakj"},"content":" task.markDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"andrechuakj"},"content":" case \"D\":","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"andrechuakj"},"content":" firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"andrechuakj"},"content":" secondSplitIndex \u003d taskData.indexOf(\"|\", firstSplitIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"andrechuakj"},"content":" desc \u003d taskData.substring(firstSplitIndex + 2, secondSplitIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"andrechuakj"},"content":" String by \u003d taskData.substring(secondSplitIndex + 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"andrechuakj"},"content":" task \u003d new Deadline(desc, by);","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"andrechuakj"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"andrechuakj"},"content":" task.markDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"andrechuakj"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"andrechuakj"},"content":" firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"andrechuakj"},"content":" secondSplitIndex \u003d taskData.indexOf(\"|\", firstSplitIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"andrechuakj"},"content":" thirdSplitIndex \u003d taskData.indexOf(\"|\", secondSplitIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"andrechuakj"},"content":" desc \u003d taskData.substring(firstSplitIndex + 2, secondSplitIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"andrechuakj"},"content":" String from \u003d taskData.substring(secondSplitIndex + 2, thirdSplitIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":202,"author":{"gitId":"andrechuakj"},"content":" String to \u003d taskData.substring(thirdSplitIndex + 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"andrechuakj"},"content":" task \u003d new Event(desc, from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"andrechuakj"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"andrechuakj"},"content":" task.markDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":208,"author":{"gitId":"andrechuakj"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"Wrong task type.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":210,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"andrechuakj"},"content":" return task;","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":213}},{"path":"src/main/java/duke/Response.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" * The Ui class handles the user interface and interacts with the user in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"public class Response {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" private static final String LOGO \u003d \" _____ __ _____ _ _ _ _ ___\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" + \"| _\\\\ \\\\ / / / __ \\\\ | | | | | | ||_ |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" + \"| | \\\\ V /___ _ _ _ __ | / \\\\/ |__ __ _| |_| |__ ___ | |_ | |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" + \"| | \\\\ // _ \\\\| | | | \u0027__| | | | \u0027_ \\\\ / _` | __| \u0027_ \\\\ / _ \\\\| __|| |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" + \"| | | | (_) | |_| | | | \\\\__/\\\\ | | | (_| | |_| |_) | (_) | |_ | |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" + \"| |_ \\\\_/\\\\___/ \\\\__,_|_| \\\\____/_| |_|\\\\__,_|\\\\__|_.__/ \\\\___/ \\\\__|| |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" + \"|___| |___|\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" private static final String greetPhrase \u003d \"\\nHello! I\u0027m\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" + LOGO","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" private static final String sendOffPhrase \u003d \"\\nBye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" * Displays a greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" public String greet() {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" return greetPhrase;","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" * Displays a farewell message.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" public String sendOff() {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" return sendOffPhrase;","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" * @param taskList The TaskList to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" public String printList(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" response.append(\"There are no tasks on your list.\\n\")","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" .append(\"Use the \u0027todo\u0027, \u0027event\u0027, or \u0027deadline\u0027 command to add tasks to your list.\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" response.append(i + 1)","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" .append(\". \")","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" .append(taskList.get(i))","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" return response.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" * Displays a message confirming the addition of a task.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" * @param taskAdded The Task that was added.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" * @param listSize The size of the task list after the addition.","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" public String printTaskAdded(Task taskAdded, int listSize) {","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" return (\"\\nGot it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" + taskAdded","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" + \"\\nNow you have \" + listSize + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" * Displays a message confirming the marking of a task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" * @param task The Task that was marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" public String printTaskMarked(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" return (\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" * Displays a message confirming the marking of a task as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":" * @param task The Task that was marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":" public String printTaskUnmarked(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" return (\"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" * Displays a message confirming the deletion of a task.","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" * @param task The Task that was deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":" * @param listSize The size of the task list after the deletion.","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":" public String printTaskDeleted(Task task, int listSize) {","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"andrechuakj"},"content":" return (\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"andrechuakj"},"content":" + task","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"andrechuakj"},"content":" + \"\\nNow you have \" + listSize + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"andrechuakj"},"content":" * Displays an exception message.","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"andrechuakj"},"content":" * @param message The exception message to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"andrechuakj"},"content":" public String printException(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"andrechuakj"},"content":" return (message + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"andrechuakj"},"content":" * Reads a user command.","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"andrechuakj"},"content":" * @return The user command entered by the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"andrechuakj"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"andrechuakj"},"content":" Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"andrechuakj"},"content":" return input.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"andrechuakj"},"content":" * Displays the list of found tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"andrechuakj"},"content":" * @param taskList The TaskList to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"andrechuakj"},"content":" public String printFind(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"andrechuakj"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"andrechuakj"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"andrechuakj"},"content":" response.append(\"There are no matching tasks in your list.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":137,"author":{"gitId":"andrechuakj"},"content":" response.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"andrechuakj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"andrechuakj"},"content":" response.append(Integer.toString(i + 1))","lastModifiedDate":"2023-09-12"},{"lineNumber":140,"author":{"gitId":"andrechuakj"},"content":" .append(\". \")","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"andrechuakj"},"content":" .append(taskList.get(i))","lastModifiedDate":"2023-09-12"},{"lineNumber":142,"author":{"gitId":"andrechuakj"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"andrechuakj"},"content":" return response.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"andrechuakj"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"andrechuakj"},"content":" * @param task The task that was updated.","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"andrechuakj"},"content":" public String printUpdated(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"andrechuakj"},"content":" return (\"OK, I\u0027ve updated this task:\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"andrechuakj"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":157}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * The Storage class manages the reading and writing of task data to and from a file for the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" private String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" private File file;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" * @param filePath The file path where task data will be stored.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" public Storage(String filePath) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" makeDataDir();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" this.createFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" * Creates the data directory if it does not exist.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" private static void makeDataDir() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" File dataDirectory \u003d new File(\"./data/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" dataDirectory.mkdirs();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" * Creates the data file if it does not exist and returns whether it was successfully created.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" * @return True if the file was created successfully, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" private boolean createFile() throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" return file.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS! An error occured.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" * Loads task data from the file and populates the provided TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" * @param tasks The TaskList to populate with loaded task data.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" * @return The TaskList containing loaded tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue while loading task data.","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" public TaskList loadIntoList(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" tasks.add(Parser.dataToTask(line));","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"File not found. Your Chatbot will start from clean slate.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" return tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" * Writes the tasks from the TaskList to the data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" * @param tasks The TaskList to write to the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" public void writeListToFile(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" fw.write(tasks.get(i).toData());","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" fw.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"An error occurred while writing to the file.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" * Appends a single task to the data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":" * @param task The Task to append to the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" * @throws IOException If there is an issue while appending to the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" public void appendToFile(Task task) throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":" fw.write(task.toData());","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":" fw.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":104}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" * The AddCommand class represents a command to add a task.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" private String taskType;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" * Constructs an AddCommand object with the provided command details and task type.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details, which may include task information.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" * @param taskType The type of task to add (e.g., \"T\" for Todo, \"D\" for Deadline, \"E\" for Event).","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" public AddCommand(ArrayList\u003cString\u003e commandDetails, String taskType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" Task newTask \u003d createTask(); // Create a task based on the task type","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" storage.appendToFile(newTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" return response.printTaskAdded(newTask, tasks.size());","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! There is something wrong with the description.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" private Task createTask() throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" String description \u003d commandDetails.get(0);","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" assert this.taskType \u003d\u003d \"T\" || this.taskType \u003d\u003d \"D\" || this.taskType \u003d\u003d \"E\" : \"taskType should be T/E/D\";","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" switch (this.taskType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" case \"T\":","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" return new Todo(description);","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" case \"D\":","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" String deadline \u003d commandDetails.get(1);","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" return new Deadline(description, deadline);","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" String eventDate \u003d commandDetails.get(1);","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" String eventTime \u003d commandDetails.get(2);","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" return new Event(description, eventDate, eventTime);","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! Invalid task type.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" * Checks if this AddCommand is equal to another object. Two AddCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details and task type.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this AddCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof AddCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" AddCommand other \u003d (AddCommand) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails) \u0026\u0026 this.taskType.equals(other.taskType);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":84}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * The ByeCommand class represents a command to exit.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" * Constructs a ByeCommand object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details (not used in this command).","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public ByeCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" return response.sendOff();","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" * Indicates that this command is an exit command.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" * @return True, indicating that this command is an exit command.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" * Checks if this ByeCommand is equal to another object. Two ByeCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details (not used in this command).","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this ByeCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof ByeCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" ByeCommand other \u003d (ByeCommand) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":60}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" * The Command abstract class represents a generic command.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" protected ArrayList\u003cString\u003e commandDetails;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" * Constructs a Command object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details, if any, required for command execution.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" public Command(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" this.commandDetails \u003d commandDetails;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" * Executes the command with the given task list, user interface, and storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" * @param tasks The TaskList to manipulate, if needed, during command execution.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" * @param response The Response object to generate response.","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" * @param storage The Storage object to read from or write to data storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue during command execution.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" public abstract String execute(TaskList tasks, Response response, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" * @return True if the command is an exit command, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":43}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * The DeleteCommand class represents a command to delete a task.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * Constructs a DeleteCommand object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details, which includes the task number to delete.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public DeleteCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003e tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" Task deletedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" return response.printTaskDeleted(deletedTask, tasks.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" * Checks if this DeleteCommand is equal to another object. Two DeleteCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this DeleteCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof DeleteCommand) {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" DeleteCommand other \u003d (DeleteCommand) obj;","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":64}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * The FindCommand class represents a command to find tasks based on a keyword.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public FindCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" TaskList resultList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" String keyword \u003d commandDetails.get(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" if (task.getDescription().indexOf(keyword) !\u003d -1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" resultList.add(task);","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" return response.printFind(resultList);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"andrechuakj":34}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * The ListCommand class represents a command to list all tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" * Constructs a ListCommand object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details (not used in this command).","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public ListCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" return response.printList(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" * Checks if this ListCommand is equal to another object. Two ListCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details (not used in this command).","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this ListCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof ListCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" ListCommand other \u003d (ListCommand) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":50}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * The MarkCommand class represents a command to mark a task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * Constructs a MarkCommand object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details, which includes the task number to mark as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public MarkCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003c\u003d 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" Task markedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" markedTask.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" return response.printTaskMarked(markedTask);","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" * Checks if this MarkCommand is equal to another object. Two MarkCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this MarkCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof MarkCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" MarkCommand other \u003d (MarkCommand) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":65}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * The UnmarkCommand class represents a command to mark a task as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * Constructs an UnmarkCommand object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details, which includes the task number to mark as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public UnmarkCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003c\u003d 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" Task unmarkedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" unmarkedTask.markAsNotDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" return response.printTaskUnmarked(unmarkedTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" * Checks if this UnmarkCommand is equal to another object. Two UnmarkCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this UnmarkCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof UnmarkCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" UnmarkCommand other \u003d (UnmarkCommand) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":65}},{"path":"src/main/java/duke/command/UpdateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * The UpdateCommand class represents a command to update the details of a task.","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class UpdateCommand extends Command {","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" * Constructs an UpdateCommand object with the provided command details.","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details.","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" public UpdateCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003c\u003d 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" Task taskToUpdate \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" taskToUpdate.updateDetails(commandDetails.get(1), commandDetails.get(2));","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" return response.printUpdated(taskToUpdate);","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" * Checks if this UpdateCommand is equal to another object. Two UpdateCommands are considered equal","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details.","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this UpdateCommand.","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof MarkCommand) {","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" MarkCommand other \u003d (MarkCommand) obj;","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrechuakj":65}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"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":22,"author":{"gitId":"andrechuakj"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" displayPicture.setClip(new Circle(50, 50, 50));","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" this.setStyle(\"-fx-background-color: lightblue;\");","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" this.setPadding(new Insets(10));","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" HBox.setMargin(displayPicture, new Insets(0, 0, 0, 10));","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" HBox.setMargin(displayPicture, new Insets(0, 10, 0, 0));","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" this.setStyle(\"-fx-background-color: lightgreen;\");","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":70}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":32}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" private Duke duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"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":42,"author":{"gitId":"andrechuakj"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":54}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" * The Deadline class represents a task with a specific deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Task class.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" * Constructs a Deadline task with the specified description and deadline date.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * @param by The deadline date in string format (e.g., \"yyyy-MM-dd\").","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue while parsing the date.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" public Deadline(String description, String by) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" this.by \u003d parseDate(by);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" public void updateDetails(String field, String details) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" if (field.equals(\"desc\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" this.description \u003d details;","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" } else if (field.equals(\"by\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" LocalDate newDate \u003d parseDate(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" this.by \u003d newDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! Only /desc /by flags allowed.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" return \"D | \" + done + \" | \" + this.description + \" | \" + this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":50}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" * The Event class represents an event task with a specific start and end date.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Task class.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate from;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate to;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * Constructs an Event task with the specified description, start date, and end date.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" * @param from The start date of the event in string format (e.g., \"yyyy-MM-dd\").","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" * @param to The end date of the event in string format (e.g., \"yyyy-MM-dd\").","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue while parsing the dates or constructing the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" public Event(String description, String from, String to) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" this.from \u003d parseDate(from);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" this.to \u003d parseDate(to);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" public void updateDetails(String field, String details) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" if (field.equals(\"desc\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" this.description \u003d details;","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" } else if (field.equals(\"from\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" LocalDate newDate \u003d parseDate(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" this.from \u003d newDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" } else if (field.equals(\"to\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" LocalDate newDate \u003d parseDate(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" this.to \u003d newDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! Only /desc /from /to flags allowed.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" return \"E | \" + done + \" | \" + this.description + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":58}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" * The Task class represents a generic task. It is an abstract class","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * that serves as the base class for Todo, Deadline, and Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" * Constructs an instance of a Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" * @return \"X\" if the task is done, \" \" (space) if the task is not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" * Updates the details of the task.","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" * @param field The field to update.","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" * @param details The new details.","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" public abstract void updateDetails(String field, String details) throws DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" * Converts the task to a string format suitable for saving to a data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" * @return A string representation of the task for data storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" public abstract String toData();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" * Parses a date string into a LocalDate object.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" * @param date The date string to parse.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" * @return A LocalDate object representing the parsed date.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue while parsing the date.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate parseDate(String date) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" LocalDate localDate \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" localDate \u003d LocalDate.parse(date);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"Incorrect date format. Please enter date in yyyy-mm-dd format\");","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" return localDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" public void markDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":" return this.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" * @return A string representation of the task with its status icon and description.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":102}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":" * The TaskList class represents a list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" * It extends the ArrayList class to store and manage a collection of Task objects.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":11}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" * The Todo class represents a todo task.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Task class.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * Constructs a Todo task with the specified description.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public void updateDetails(String field, String details) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" if (field.equals(\"desc\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" this.description \u003d details;","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! Only /desc flag allowed.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" return \"T | \" + done + \" | \" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":40}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"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-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"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":12,"author":{"gitId":"andrechuakj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"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-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"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":"andrechuakj"},"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":"andrechuakj"},"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":"andrechuakj"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" // Success test cases","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" void parse_byeCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"bye\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new ByeCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"bye\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" void parse_listCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"list\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new ListCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"list\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" void parse_markCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"3\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new MarkCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"mark 3\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" void parse_unmarkCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"4\");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new UnmarkCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"unmark 4\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" void parse_deleteCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new DeleteCommand(resString);","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"delete 1\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" public void parse_validTodoCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"coding\");","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new AddCommand(resString, \"T\");","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"todo coding\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" public void parse_validDeadlineCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"typing\");","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"2023-05-09\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new AddCommand(resString, \"D\");","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"deadline typing /by 2023-05-09\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" public void parse_validEventCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"hacking\");","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"2023-05-09\");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"2023-05-10\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new AddCommand(resString, \"E\");","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"event hacking /from 2023-05-09 /to 2023-05-10\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" // Exception thrown test cases","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":" void parse_byeCommandSpellingError_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new ByeCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"byebye\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! This command is invalid.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":" void parse_listCommandSpellingError_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new ListCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"listall\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! This command is invalid.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"andrechuakj"},"content":" void parse_markCommandNoTaskNumber_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new MarkCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"mark\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! The task number to mark cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"andrechuakj"},"content":" void parse_unmarkCommandNoTaskNumber_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new UnmarkCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"unmark\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! The task number to unmark cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"andrechuakj"},"content":" void parse_deleteCommandNoTaskNumber_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new DeleteCommand(resString);","lastModifiedDate":"2023-09-12"},{"lineNumber":139,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"delete\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! The task number to delete cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"andrechuakj"},"content":" public void parse_todoCommandSpellingMistake_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e string \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"andrechuakj"},"content":" Command command \u003d new AddCommand(string, \"T\");","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"andrechuakj"},"content":" assertEquals(command, Parser.parse(\"todoj\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"andrechuakj"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! This command is invalid.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"andrechuakj"},"content":" public void parse_deadLineCommandNoDesc_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e string \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"andrechuakj"},"content":" Command command \u003d new AddCommand(string, \"D\");","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"andrechuakj"},"content":" assertEquals(command, Parser.parse(\"deadline\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"andrechuakj"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! The format of the deadline command is invalid.\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"andrechuakj"},"content":" + \" deadline coding /by 2023-09-04\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"andrechuakj"},"content":" public void parse_eventCommandWrongOrder_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e string \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"andrechuakj"},"content":" Command command \u003d new AddCommand(string, \"E\");","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"andrechuakj"},"content":" assertEquals(command, Parser.parse(\"event /to 2023-10-10 /from 2023-01-01\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"andrechuakj"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! The format of the event command is invalid.\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"andrechuakj"},"content":" + \" event coding /from 2023-01-01 /to 2023-12-31\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"andrechuakj":184}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" public void constructor_validDescAndDate_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" Deadline deadline \u003d new Deadline(\"Complete task\", \"2023-09-30\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"Complete task\", deadline.description);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" assertEquals(LocalDate.of(2023, 9, 30), deadline.by);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" assertEquals(false, deadline.isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" public void constructor_wrongDate_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" new Deadline(\"Complete task\", \"30-09-2023\");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"Incorrect date format. Please enter date in yyyy-mm-dd format\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" public void toStringTest() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" Deadline deadline \u003d new Deadline(\"Complete task\", \"2023-09-30\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" String expected \u003d \"[D][ ] Complete task (by: Sep 30 2023)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" public void toDataTest() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" Deadline deadline \u003d new Deadline(\"Complete task\", \"2023-09-30\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" String expected \u003d \"D | 0 | Complete task | 2023-09-30\";","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" assertEquals(expected, deadline.toData());","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"andrechuakj":44}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":9}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-07"},{"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":"andrechuakj"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":"javafx {","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":13,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"*Your Chatbot* 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). If you can type fast, *Your Chatbot* can manage your tasks faster than traditional GUI apps.","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"\u003e **NOTE:**","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"\u003e Words in `UPPER_CASE` are the parameters to be supplied by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"\u003e e.g. in `todo TASK_DESCRIPTION`, `TASK_DESCRIPTION` is a parameter which can be used as `todo Math assignment`","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"### Adding a todo : `todo`","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"Add a todo to your list of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"**Format:** `todo TASK_DESCRIPTION`","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"**Examples:**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"* `todo shopping for groceries`","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"* `todo sumbit IP`","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"### Adding a deadline : `deadline`","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":"Add a deadline to your list of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":"**Format:** `deadline DEADLINE_DESCRIPTION /by DATE`","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":"* `DATE` must be in **YYYY-MM-DD** format","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"**Examples:**","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":"* `deadline IP-branch-A-UserGuide /by 2023-09-16`","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":"* `deadline Math assignment /by 2023-12-31`","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":"### Adding an event : `event`","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"Add a deadline to your list of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":"**Format:** `event EVENT_DESCRIPTION /from START_DATE /to END_DATE`","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":"* `START_DATE` and `END_DATE` must be in **YYYY-MM-DD** format","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":"**Example:**","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":"* `event orbital showcase /from 2023-09-10 /to 2023-09-11`","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":"* `event career fair /from 2023-10-12 /to 2023-10-13`","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":"### Listing all tasks : `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":"Shows a list of all tasks added.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":"**Format:** `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":"### Finding a task : `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":"Finds a task whose description contains the keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":"**Format:** `find KEYWORD`","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":"**Examples:**","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":"* `find homework`","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":"* `find math project`","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":"### Deleting a task : `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":"Deletes a task from the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":"**Format:** `delete INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":"* Deletes the task at the specified `INDEX`. The `INDEX` refers to the index number shown in the displayed list.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":"* `INDEX` **must be a positive integer** 1, 2, 3...","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":"**Examples:**","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":"* `delete 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":"* `delete 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":"### Marking a task as complete : `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":"Marks a task from the list as complete.","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":"**Format:** `mark INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":"* Marks the task at the specified `INDEX`. The `INDEX` refers to the index number shown in the displayed list.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":"* `INDEX` **must be a positive integer** 1, 2, 3...","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":"**Examples:**","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":"* `mark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":"* `mark 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":"### Marking a task as incomplete : `unmark`","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":"Marks a task from the list as incomplete.","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":"**Format:** `unmark INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":"* Marks the task at the specified `INDEX`. The `INDEX` refers to the index number shown in the displayed list.","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":"* `INDEX` **must be a positive integer** 1, 2, 3...","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":"**Examples:**","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":"* `unmark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":"* `unmark 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":"### Updating an existing task : `update`","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":"Update the details of a task from the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":"**Format:** `update INDEX /FIELD DETAILS`","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":"* Updates the task at the specified `INDEX`. The `INDEX` refers to the index number shown in the displayed list.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":"* `INDEX` **must be a positive integer** 1, 2, 3...","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":"* `FIELD` is the relevant field to be updated of the task, only 1 field can be updated","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" at a time.","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":"* If the task is a `todo`, the appropriate `FIELD` is `/desc`.","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":"* If the task is a `deadline`, the appropriate `FIELD`s are `/desc` or `/by`.","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":"* If the task is an `event`, the appropriate `FIELD`s are `/desc`, `/from` or `/to`.","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":"* `DETAILS` is the new detail to be updated into the field indicated.","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":"**Examples:**","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":"* If task 1 is a deadline: `update 1 /by 2023-10-23`","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":"* If task 2 is an event: `update 2 /to 2023-11-11`","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":"* If task 3 is a todo: `update 3 /desc English homework`","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"andrechuakj":87,"-":15}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" * The main class for the Duke application, a simple task management system.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" * Duke allows users to manage their tasks through a command-line interface.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" private Response response;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" * Constructs a new Duke instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue initializing Duke or loading tasks from the data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public Duke() {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" this.response \u003d new Response();","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" this.storage \u003d new Storage(\"data/duke.txt\");","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" this.tasks \u003d storage.loadIntoList(new TaskList());","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" response.printException(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" assert response !\u003d null : \"Response should not be null\";","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" assert storage !\u003d null : \"Storage should not be null\";","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" assert tasks !\u003d null : \"Tasks should not be null\";","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" return c.execute(tasks, response, storage);","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" return response.printException(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"andrechuakj":44,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":" * Custom exception class for Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":" * DukeException is thrown when there are errors or exceptions specific to the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * Constructs a new DukeException with the specified error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * @param message The error message associated with this exception.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":18}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.gui.Main;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":13}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.command.*;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * The Parser class is responsible for parsing user input and converting data strings","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" * into task objects for the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * Parses the user input command and returns the corresponding Command object.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" * @param strCommand The user input command to be parsed.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If the input command is invalid or contains errors.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" public static Command parse(String strCommand) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" assert strCommand !\u003d null : \"Command should not be null\";","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" int firstSpaceIndex \u003d strCommand.indexOf(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" String commandType \u003d firstSpaceIndex !\u003d -1","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" ? strCommand.substring(0, firstSpaceIndex)","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" : strCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e commandDetailList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" case \"list\":","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(strCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" command \u003d new ListCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" case \"bye\":","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(strCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" command \u003d new ByeCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" case \"todo\":","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c 6) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" String todoDesc \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(todoDesc);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" command \u003d new AddCommand(commandDetailList, \"T\");","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" case \"event\":","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" int fromIndex \u003d strCommand.indexOf(\"/from\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" int toIndex \u003d strCommand.indexOf(\"/to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1 || toIndex \u003c fromIndex) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The format of the event command is invalid.\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" + \" event coding /from 2023-01-01 /to 2023-12-31\");","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" String eventDesc \u003d strCommand.substring(firstSpaceIndex + 1, fromIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" String from \u003d strCommand.substring(fromIndex + \"/from \".length(), toIndex - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" String to \u003d strCommand.substring(toIndex + \"/to \".length());","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" if (eventDesc.isBlank() || from.isBlank() || to.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The format of the event command is invalid.\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" + \" event coding /from 2023-01-01 /to 2023-12-31\");","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(eventDesc);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(from);","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(to);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" command \u003d new AddCommand(commandDetailList, \"E\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" int byIndex \u003d strCommand.indexOf(\"/by\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" if (byIndex \u003d\u003d -1 || firstSpaceIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The format of the deadline command is invalid.\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" + \" deadline coding /by 2023-09-04\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" String deadlineDesc \u003d strCommand.substring(firstSpaceIndex + 1, byIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" String by \u003d strCommand.substring(byIndex + \"/by \".length());","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" if (deadlineDesc.isBlank() || by.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The format of the deadline command is invalid.\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" + \" deadline coding /by 2023-09-04\");","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(deadlineDesc);","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(by);","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" command \u003d new AddCommand(commandDetailList, \"D\");","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":" case \"mark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c \"mark \".length()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to mark cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" String taskToMark \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" if (taskToMark.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to mark cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskToMark);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" command \u003d new MarkCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c \"unmark \".length()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"andrechuakj"},"content":" String taskToUnmark \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"andrechuakj"},"content":" if (taskToUnmark.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskToUnmark);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"andrechuakj"},"content":" command \u003d new UnmarkCommand(commandDetailList);","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"andrechuakj"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c \"delete \".length()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to delete cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"andrechuakj"},"content":" String taskToDelete \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"andrechuakj"},"content":" if (taskToDelete.isBlank()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number to delete cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskToDelete);","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"andrechuakj"},"content":" command \u003d new DeleteCommand(commandDetailList);","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"andrechuakj"},"content":" case \"find\":","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c \"find \".length()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The find keyword cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"andrechuakj"},"content":" String keyword \u003d strCommand.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"andrechuakj"},"content":" if (keyword.isBlank()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The find keyword cannot be empty.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"andrechuakj"},"content":" command \u003d new FindCommand(commandDetailList);","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"andrechuakj"},"content":" case \"update\":","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"andrechuakj"},"content":" int secondSpaceIndex \u003d strCommand.indexOf(\" \", firstSpaceIndex + 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"andrechuakj"},"content":" int slashIndex \u003d strCommand.indexOf(\"/\", secondSpaceIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"andrechuakj"},"content":" int thirdSpaceIndex \u003d strCommand.indexOf(\" \", slashIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"andrechuakj"},"content":" if (firstSpaceIndex \u003d\u003d -1 || strCommand.length() \u003c \"update \".length()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The update details cannot be empty.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"andrechuakj"},"content":" } else if (slashIndex \u003d\u003d -1 || secondSpaceIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! Please use the format: update 1 /desc newName\");","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"andrechuakj"},"content":" String taskNumber \u003d strCommand.substring(firstSpaceIndex + 1, secondSpaceIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"andrechuakj"},"content":" String field \u003d strCommand.substring(slashIndex + 1, thirdSpaceIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"andrechuakj"},"content":" String details \u003d strCommand.substring(thirdSpaceIndex + 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(taskNumber);","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(field);","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"andrechuakj"},"content":" commandDetailList.add(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"andrechuakj"},"content":" System.out.println(field);","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"andrechuakj"},"content":" command \u003d new UpdateCommand(commandDetailList);","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"andrechuakj"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! This command is invalid.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"andrechuakj"},"content":" return command;","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"andrechuakj"},"content":" * Converts a data string into a Task object.","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"andrechuakj"},"content":" * @param data The data string representing a Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"andrechuakj"},"content":" * @return A Task object created from the data string.","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there are errors in the data string, or it is in an invalid format.","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"andrechuakj"},"content":" public static Task dataToTask(String data) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"andrechuakj"},"content":" String taskType \u003d data.substring(0, 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"andrechuakj"},"content":" String taskData \u003d data.substring(4);","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"andrechuakj"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"andrechuakj"},"content":" int firstSplitIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"andrechuakj"},"content":" int secondSplitIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"andrechuakj"},"content":" int thirdSplitIndex \u003d -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"andrechuakj"},"content":" String desc \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"andrechuakj"},"content":" boolean isDone \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"andrechuakj"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"andrechuakj"},"content":" case \"T\":","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"andrechuakj"},"content":" firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"andrechuakj"},"content":" desc \u003d taskData.substring(firstSplitIndex + 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"andrechuakj"},"content":" task \u003d new Todo(desc);","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"andrechuakj"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"andrechuakj"},"content":" task.markDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"andrechuakj"},"content":" case \"D\":","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"andrechuakj"},"content":" firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"andrechuakj"},"content":" secondSplitIndex \u003d taskData.indexOf(\"|\", firstSplitIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"andrechuakj"},"content":" desc \u003d taskData.substring(firstSplitIndex + 2, secondSplitIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"andrechuakj"},"content":" String by \u003d taskData.substring(secondSplitIndex + 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"andrechuakj"},"content":" task \u003d new Deadline(desc, by);","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"andrechuakj"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"andrechuakj"},"content":" task.markDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"andrechuakj"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"andrechuakj"},"content":" firstSplitIndex \u003d taskData.indexOf(\"|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"andrechuakj"},"content":" secondSplitIndex \u003d taskData.indexOf(\"|\", firstSplitIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"andrechuakj"},"content":" thirdSplitIndex \u003d taskData.indexOf(\"|\", secondSplitIndex + 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d taskData.substring(0, firstSplitIndex - 1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"andrechuakj"},"content":" desc \u003d taskData.substring(firstSplitIndex + 2, secondSplitIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"andrechuakj"},"content":" String from \u003d taskData.substring(secondSplitIndex + 2, thirdSplitIndex - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":202,"author":{"gitId":"andrechuakj"},"content":" String to \u003d taskData.substring(thirdSplitIndex + 2);","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"andrechuakj"},"content":" task \u003d new Event(desc, from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"andrechuakj"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"andrechuakj"},"content":" task.markDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"andrechuakj"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":208,"author":{"gitId":"andrechuakj"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"Wrong task type.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":210,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"andrechuakj"},"content":" return task;","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":213}},{"path":"src/main/java/duke/Response.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" * The Ui class handles the user interface and interacts with the user in the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"public class Response {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" private static final String LOGO \u003d \" _____ __ _____ _ _ _ _ ___\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" + \"| _\\\\ \\\\ / / / __ \\\\ | | | | | | ||_ |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" + \"| | \\\\ V /___ _ _ _ __ | / \\\\/ |__ __ _| |_| |__ ___ | |_ | |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" + \"| | \\\\ // _ \\\\| | | | \u0027__| | | | \u0027_ \\\\ / _` | __| \u0027_ \\\\ / _ \\\\| __|| |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" + \"| | | | (_) | |_| | | | \\\\__/\\\\ | | | (_| | |_| |_) | (_) | |_ | |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" + \"| |_ \\\\_/\\\\___/ \\\\__,_|_| \\\\____/_| |_|\\\\__,_|\\\\__|_.__/ \\\\___/ \\\\__|| |\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" + \"|___| |___|\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" private static final String greetPhrase \u003d \"\\nHello! I\u0027m\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" + LOGO","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" private static final String sendOffPhrase \u003d \"\\nBye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" * Displays a greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" public String greet() {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" return greetPhrase;","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" * Displays a farewell message.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" public String sendOff() {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" return sendOffPhrase;","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" * @param taskList The TaskList to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" public String printList(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" response.append(\"There are no tasks on your list.\\n\")","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" .append(\"Use the \u0027todo\u0027, \u0027event\u0027, or \u0027deadline\u0027 command to add tasks to your list.\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" response.append(i + 1)","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" .append(\". \")","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" .append(taskList.get(i))","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" return response.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" * Displays a message confirming the addition of a task.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" * @param taskAdded The Task that was added.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" * @param listSize The size of the task list after the addition.","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" public String printTaskAdded(Task taskAdded, int listSize) {","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" return (\"\\nGot it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" + taskAdded","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" + \"\\nNow you have \" + listSize + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" * Displays a message confirming the marking of a task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" * @param task The Task that was marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" public String printTaskMarked(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" return (\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" * Displays a message confirming the marking of a task as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":" * @param task The Task that was marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":" public String printTaskUnmarked(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" return (\"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" * Displays a message confirming the deletion of a task.","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" * @param task The Task that was deleted.","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":" * @param listSize The size of the task list after the deletion.","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":" public String printTaskDeleted(Task task, int listSize) {","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"andrechuakj"},"content":" return (\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"andrechuakj"},"content":" + task","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"andrechuakj"},"content":" + \"\\nNow you have \" + listSize + \" tasks in the list.\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"andrechuakj"},"content":" * Displays an exception message.","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"andrechuakj"},"content":" * @param message The exception message to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"andrechuakj"},"content":" public String printException(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"andrechuakj"},"content":" return (message + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"andrechuakj"},"content":" * Reads a user command.","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"andrechuakj"},"content":" * @return The user command entered by the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"andrechuakj"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"andrechuakj"},"content":" Scanner input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"andrechuakj"},"content":" return input.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"andrechuakj"},"content":" * Displays the list of found tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"andrechuakj"},"content":" * @param taskList The TaskList to be displayed.","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"andrechuakj"},"content":" public String printFind(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"andrechuakj"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"andrechuakj"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"andrechuakj"},"content":" response.append(\"There are no matching tasks in your list.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":137,"author":{"gitId":"andrechuakj"},"content":" response.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"andrechuakj"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":139,"author":{"gitId":"andrechuakj"},"content":" response.append(Integer.toString(i + 1))","lastModifiedDate":"2023-09-12"},{"lineNumber":140,"author":{"gitId":"andrechuakj"},"content":" .append(\". \")","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"andrechuakj"},"content":" .append(taskList.get(i))","lastModifiedDate":"2023-09-12"},{"lineNumber":142,"author":{"gitId":"andrechuakj"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"andrechuakj"},"content":" return response.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"andrechuakj"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"andrechuakj"},"content":" * @param task The task that was updated.","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"andrechuakj"},"content":" public String printUpdated(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"andrechuakj"},"content":" return (\"OK, I\u0027ve updated this task:\\n\"","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"andrechuakj"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":157}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * The Storage class manages the reading and writing of task data to and from a file for the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" private String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" private File file;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" * @param filePath The file path where task data will be stored.","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" public Storage(String filePath) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" makeDataDir();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" this.createFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" * Creates the data directory if it does not exist.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" private static void makeDataDir() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" File dataDirectory \u003d new File(\"./data/\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" dataDirectory.mkdirs();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" * Creates the data file if it does not exist and returns whether it was successfully created.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" * @return True if the file was created successfully, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" private boolean createFile() throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" return file.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS! An error occured.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" * Loads task data from the file and populates the provided TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" * @param tasks The TaskList to populate with loaded task data.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" * @return The TaskList containing loaded tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue while loading task data.","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" public TaskList loadIntoList(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" tasks.add(Parser.dataToTask(line));","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"File not found. Your Chatbot will start from clean slate.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" return tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" * Writes the tasks from the TaskList to the data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" * @param tasks The TaskList to write to the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" public void writeListToFile(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" fw.write(tasks.get(i).toData());","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" fw.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"An error occurred while writing to the file.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" * Appends a single task to the data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":" * @param task The Task to append to the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" * @throws IOException If there is an issue while appending to the file.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" public void appendToFile(Task task) throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":" fw.write(task.toData());","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":" fw.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":104}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" * The AddCommand class represents a command to add a task.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" private String taskType;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" * Constructs an AddCommand object with the provided command details and task type.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details, which may include task information.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" * @param taskType The type of task to add (e.g., \"T\" for Todo, \"D\" for Deadline, \"E\" for Event).","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" public AddCommand(ArrayList\u003cString\u003e commandDetails, String taskType) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" Task newTask \u003d createTask(); // Create a task based on the task type","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" storage.appendToFile(newTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" return response.printTaskAdded(newTask, tasks.size());","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! There is something wrong with the description.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" private Task createTask() throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" String description \u003d commandDetails.get(0);","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" assert this.taskType \u003d\u003d \"T\" || this.taskType \u003d\u003d \"D\" || this.taskType \u003d\u003d \"E\" : \"taskType should be T/E/D\";","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" switch (this.taskType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" case \"T\":","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" return new Todo(description);","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" case \"D\":","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" String deadline \u003d commandDetails.get(1);","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" return new Deadline(description, deadline);","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" String eventDate \u003d commandDetails.get(1);","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" String eventTime \u003d commandDetails.get(2);","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" return new Event(description, eventDate, eventTime);","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! Invalid task type.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" * Checks if this AddCommand is equal to another object. Two AddCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details and task type.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this AddCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof AddCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" AddCommand other \u003d (AddCommand) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails) \u0026\u0026 this.taskType.equals(other.taskType);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":84}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * The ByeCommand class represents a command to exit.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" * Constructs a ByeCommand object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details (not used in this command).","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public ByeCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" return response.sendOff();","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" * Indicates that this command is an exit command.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" * @return True, indicating that this command is an exit command.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" * Checks if this ByeCommand is equal to another object. Two ByeCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details (not used in this command).","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this ByeCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof ByeCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" ByeCommand other \u003d (ByeCommand) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":60}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" * The Command abstract class represents a generic command.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" protected ArrayList\u003cString\u003e commandDetails;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" * Constructs a Command object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details, if any, required for command execution.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" public Command(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" this.commandDetails \u003d commandDetails;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" * Executes the command with the given task list, user interface, and storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" * @param tasks The TaskList to manipulate, if needed, during command execution.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" * @param response The Response object to generate response.","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" * @param storage The Storage object to read from or write to data storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue during command execution.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" public abstract String execute(TaskList tasks, Response response, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" * @return True if the command is an exit command, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":43}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * The DeleteCommand class represents a command to delete a task.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * Constructs a DeleteCommand object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details, which includes the task number to delete.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public DeleteCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003e tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" Task deletedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" return response.printTaskDeleted(deletedTask, tasks.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" * Checks if this DeleteCommand is equal to another object. Two DeleteCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this DeleteCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof DeleteCommand) {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" DeleteCommand other \u003d (DeleteCommand) obj;","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":64}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * The FindCommand class represents a command to find tasks based on a keyword.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public FindCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" TaskList resultList \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" String keyword \u003d commandDetails.get(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" if (task.getDescription().indexOf(keyword) !\u003d -1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" resultList.add(task);","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" return response.printFind(resultList);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"andrechuakj":34}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * The ListCommand class represents a command to list all tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" * Constructs a ListCommand object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details (not used in this command).","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public ListCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" return response.printList(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" * Checks if this ListCommand is equal to another object. Two ListCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details (not used in this command).","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this ListCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof ListCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" ListCommand other \u003d (ListCommand) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":50}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * The MarkCommand class represents a command to mark a task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * Constructs a MarkCommand object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details, which includes the task number to mark as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public MarkCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003c\u003d 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" Task markedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" markedTask.markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" return response.printTaskMarked(markedTask);","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" * Checks if this MarkCommand is equal to another object. Two MarkCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this MarkCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof MarkCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" MarkCommand other \u003d (MarkCommand) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":65}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * The UnmarkCommand class represents a command to mark a task as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * Constructs an UnmarkCommand object with the provided command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details, which includes the task number to mark as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public UnmarkCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003c\u003d 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" Task unmarkedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" unmarkedTask.markAsNotDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" return response.printTaskUnmarked(unmarkedTask);","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" * Checks if this UnmarkCommand is equal to another object. Two UnmarkCommands are considered equal","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this UnmarkCommand.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof UnmarkCommand) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" UnmarkCommand other \u003d (UnmarkCommand) obj;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":65}},{"path":"src/main/java/duke/command/UpdateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.command;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.Response;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" * The UpdateCommand class represents a command to update the details of a task.","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Command class.","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class UpdateCommand extends Command {","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" * Constructs an UpdateCommand object with the provided command details.","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * @param commandDetails The list of command details.","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" public UpdateCommand(ArrayList\u003cString\u003e commandDetails) {","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" super(commandDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" public String execute(TaskList tasks, Response response, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" int taskNumber \u003d Integer.parseInt(commandDetails.get(0));","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" if (taskNumber \u003c\u003d 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number is out of range.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" Task taskToUpdate \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" taskToUpdate.updateDetails(commandDetails.get(1), commandDetails.get(2));","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" storage.writeListToFile(tasks);","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" return response.printUpdated(taskToUpdate);","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! The task number cannot be parsed.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" * Checks if this UpdateCommand is equal to another object. Two UpdateCommands are considered equal","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" * if they have the same command details.","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" * @param obj The object to compare to this UpdateCommand.","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" if (obj \u003d\u003d this) {","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" return true;","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" if (obj instanceof MarkCommand) {","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" MarkCommand other \u003d (MarkCommand) obj;","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" if (this.commandDetails \u003d\u003d null || other.commandDetails \u003d\u003d null) {","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" return this.commandDetails.equals(other.commandDetails);","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrechuakj":65}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"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":22,"author":{"gitId":"andrechuakj"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" displayPicture.setClip(new Circle(50, 50, 50));","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" this.setStyle(\"-fx-background-color: lightblue;\");","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" this.setPadding(new Insets(10));","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" HBox.setMargin(displayPicture, new Insets(0, 0, 0, 10));","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" HBox.setMargin(displayPicture, new Insets(0, 10, 0, 0));","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" this.setStyle(\"-fx-background-color: lightgreen;\");","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":70}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":32}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" private Duke duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"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":42,"author":{"gitId":"andrechuakj"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":54}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" * The Deadline class represents a task with a specific deadline.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Task class.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" * Constructs a Deadline task with the specified description and deadline date.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * @param by The deadline date in string format (e.g., \"yyyy-MM-dd\").","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue while parsing the date.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" public Deadline(String description, String by) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" this.by \u003d parseDate(by);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" public void updateDetails(String field, String details) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" if (field.equals(\"desc\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" this.description \u003d details;","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" } else if (field.equals(\"by\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" LocalDate newDate \u003d parseDate(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" this.by \u003d newDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! Only /desc /by flags allowed.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" return \"D | \" + done + \" | \" + this.description + \" | \" + this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":50}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" * The Event class represents an event task with a specific start and end date.","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Task class.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate from;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate to;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" * Constructs an Event task with the specified description, start date, and end date.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" * @param from The start date of the event in string format (e.g., \"yyyy-MM-dd\").","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" * @param to The end date of the event in string format (e.g., \"yyyy-MM-dd\").","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue while parsing the dates or constructing the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" public Event(String description, String from, String to) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" this.from \u003d parseDate(from);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" this.to \u003d parseDate(to);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" public void updateDetails(String field, String details) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" if (field.equals(\"desc\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" this.description \u003d details;","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" } else if (field.equals(\"from\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" LocalDate newDate \u003d parseDate(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" this.from \u003d newDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" } else if (field.equals(\"to\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" LocalDate newDate \u003d parseDate(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" this.to \u003d newDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! Only /desc /from /to flags allowed.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" return \"E | \" + done + \" | \" + this.description + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":58}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" * The Task class represents a generic task. It is an abstract class","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" * that serves as the base class for Todo, Deadline, and Event.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" * Constructs an instance of a Task.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" * @return \"X\" if the task is done, \" \" (space) if the task is not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":" * Updates the details of the task.","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" * @param field The field to update.","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" * @param details The new details.","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" public abstract void updateDetails(String field, String details) throws DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":" * Converts the task to a string format suitable for saving to a data file.","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" * @return A string representation of the task for data storage.","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" public abstract String toData();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" * Parses a date string into a LocalDate object.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" * @param date The date string to parse.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" * @return A LocalDate object representing the parsed date.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" * @throws DukeException If there is an issue while parsing the date.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" protected LocalDate parseDate(String date) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" LocalDate localDate \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" localDate \u003d LocalDate.parse(date);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"Incorrect date format. Please enter date in yyyy-mm-dd format\");","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" return localDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" public void markDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":" return this.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" * @return A string representation of the task with its status icon and description.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":102}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":" * The TaskList class represents a list of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" * It extends the ArrayList class to store and manage a collection of Task objects.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrechuakj":11}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":" * The Todo class represents a todo task.","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":" * It is a subclass of the Task class.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" * Constructs a Todo task with the specified description.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" public void updateDetails(String field, String details) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" if (field.equals(\"desc\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" this.description \u003d details;","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" throw new DukeException(\"OOPS!!! Only /desc flag allowed.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" public String toData() {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" String done \u003d String.valueOf(this.isDone ? 1 : 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" return \"T | \" + done + \" | \" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":40}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"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-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"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":12,"author":{"gitId":"andrechuakj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"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-07"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"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":"andrechuakj"},"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":"andrechuakj"},"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":"andrechuakj"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"andrechuakj":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" // Success test cases","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" void parse_byeCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"bye\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new ByeCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"bye\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":" void parse_listCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"list\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new ListCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"list\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" void parse_markCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"3\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new MarkCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"mark 3\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"andrechuakj"},"content":" void parse_unmarkCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"4\");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new UnmarkCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"unmark 4\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"andrechuakj"},"content":" void parse_deleteCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new DeleteCommand(resString);","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"delete 1\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"andrechuakj"},"content":" public void parse_validTodoCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"coding\");","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new AddCommand(resString, \"T\");","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"todo coding\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"andrechuakj"},"content":" public void parse_validDeadlineCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"typing\");","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"2023-05-09\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new AddCommand(resString, \"D\");","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"deadline typing /by 2023-05-09\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"andrechuakj"},"content":" public void parse_validEventCommand_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"hacking\");","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"2023-05-09\");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"andrechuakj"},"content":" resString.add(\"2023-05-10\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new AddCommand(resString, \"E\");","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"event hacking /from 2023-05-09 /to 2023-05-10\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"andrechuakj"},"content":" // Exception thrown test cases","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"andrechuakj"},"content":" void parse_byeCommandSpellingError_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new ByeCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"byebye\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! This command is invalid.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"andrechuakj"},"content":" void parse_listCommandSpellingError_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new ListCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"listall\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! This command is invalid.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"andrechuakj"},"content":" void parse_markCommandNoTaskNumber_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new MarkCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"mark\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! The task number to mark cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"andrechuakj"},"content":" void parse_unmarkCommandNoTaskNumber_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":125,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":127,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new UnmarkCommand(resString);","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"unmark\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":129,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":130,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! The task number to unmark cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":131,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"andrechuakj"},"content":" void parse_deleteCommandNoTaskNumber_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e resString \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"andrechuakj"},"content":" Command resCommand \u003d new DeleteCommand(resString);","lastModifiedDate":"2023-09-12"},{"lineNumber":139,"author":{"gitId":"andrechuakj"},"content":" assertEquals(resCommand, Parser.parse(\"delete\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":140,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! The task number to delete cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"andrechuakj"},"content":" public void parse_todoCommandSpellingMistake_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e string \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"andrechuakj"},"content":" Command command \u003d new AddCommand(string, \"T\");","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"andrechuakj"},"content":" assertEquals(command, Parser.parse(\"todoj\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"andrechuakj"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! This command is invalid.\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"andrechuakj"},"content":" public void parse_deadLineCommandNoDesc_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e string \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"andrechuakj"},"content":" Command command \u003d new AddCommand(string, \"D\");","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"andrechuakj"},"content":" assertEquals(command, Parser.parse(\"deadline\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":163,"author":{"gitId":"andrechuakj"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-05"},{"lineNumber":164,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! The format of the deadline command is invalid.\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"andrechuakj"},"content":" + \" deadline coding /by 2023-09-04\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":170,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":171,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":172,"author":{"gitId":"andrechuakj"},"content":" public void parse_eventCommandWrongOrder_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":173,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":174,"author":{"gitId":"andrechuakj"},"content":" ArrayList\u003cString\u003e string \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":175,"author":{"gitId":"andrechuakj"},"content":" Command command \u003d new AddCommand(string, \"E\");","lastModifiedDate":"2023-09-05"},{"lineNumber":176,"author":{"gitId":"andrechuakj"},"content":" assertEquals(command, Parser.parse(\"event /to 2023-10-10 /from 2023-01-01\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"andrechuakj"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-05"},{"lineNumber":178,"author":{"gitId":"andrechuakj"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":179,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"☹ OOPS!!! The format of the event command is invalid.\\n\"","lastModifiedDate":"2023-09-05"},{"lineNumber":180,"author":{"gitId":"andrechuakj"},"content":" + \"Here is an example of a valid format:\"","lastModifiedDate":"2023-09-05"},{"lineNumber":181,"author":{"gitId":"andrechuakj"},"content":" + \" event coding /from 2023-01-01 /to 2023-12-31\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":182,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":183,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":184,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"andrechuakj":184}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"package duke.task;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"andrechuakj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"andrechuakj"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"andrechuakj"},"content":" public void constructor_validDescAndDate_success() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"andrechuakj"},"content":" Deadline deadline \u003d new Deadline(\"Complete task\", \"2023-09-30\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"Complete task\", deadline.description);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"andrechuakj"},"content":" assertEquals(LocalDate.of(2023, 9, 30), deadline.by);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"andrechuakj"},"content":" assertEquals(false, deadline.isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"andrechuakj"},"content":" public void constructor_wrongDate_exceptionThrown() {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"andrechuakj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"andrechuakj"},"content":" new Deadline(\"Complete task\", \"30-09-2023\");","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"andrechuakj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"andrechuakj"},"content":" assertEquals(\"Incorrect date format. Please enter date in yyyy-mm-dd format\", e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"andrechuakj"},"content":" public void toStringTest() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"andrechuakj"},"content":" Deadline deadline \u003d new Deadline(\"Complete task\", \"2023-09-30\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"andrechuakj"},"content":" String expected \u003d \"[D][ ] Complete task (by: Sep 30 2023)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"andrechuakj"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"andrechuakj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"andrechuakj"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"andrechuakj"},"content":" public void toDataTest() throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"andrechuakj"},"content":" Deadline deadline \u003d new Deadline(\"Complete task\", \"2023-09-30\");","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"andrechuakj"},"content":" String expected \u003d \"D | 0 | Complete task | 2023-09-30\";","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"andrechuakj"},"content":" assertEquals(expected, deadline.toData());","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"andrechuakj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"andrechuakj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"andrechuakj":44}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrechuakj"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"andrechuakj"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"andrechuakj"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrechuakj"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrechuakj"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrechuakj"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrechuakj"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrechuakj"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrechuakj"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrechuakj":9}}] diff --git a/andrechuakj_ip_master/commits.json b/andrechuakj_ip_master/commits.json index 1ed01db2..0695b1db 100644 --- a/andrechuakj_ip_master/commits.json +++ b/andrechuakj_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"andrechuakj":[{"date":"2023-08-23","commitResults":[{"hash":"5e2603efc4d9cbe29b57ae4dc0d4104bb0c9f21e","isMergeCommit":false,"messageTitle":"Renamed bot, added greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":7}}},{"hash":"859bb2ee5b847d6b4d1542c98338fb24ab85b77d","isMergeCommit":false,"messageTitle":"Added echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"2729fa45bdbb1bb463075b1ba99893ebe5d53d39","isMergeCommit":false,"messageTitle":"Added add and list feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2e4a6b4c25be1c9065113949467ecfc0ac0d4b44","isMergeCommit":false,"messageTitle":"Added mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":3}}},{"hash":"1491e56be50498fdff0aab05574cfecf8fa65598","isMergeCommit":false,"messageTitle":"Added Todos, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":36}}},{"hash":"ecaf469181259993aaf820b7095b15734bc6c146","isMergeCommit":false,"messageTitle":"Added testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":13,"deletions":11}}},{"hash":"af7954331be122b23db041d48c90022d1369c508","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":77}}},{"hash":"ad0cb68bb086492e8d23fca5887a4059c4419a01","isMergeCommit":false,"messageTitle":"Added delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"20f382b0cdbf8e1f2dd62b85561c1abf52a7a456","isMergeCommit":false,"messageTitle":"Add save function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":9}}},{"hash":"b2dcab36f78d41ca09216d465a37309319c30f6b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"412c119e64bdc2badcaf4a84115572818f4c913e","isMergeCommit":false,"messageTitle":"Add dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":37}}},{"hash":"b469d1dd32a7e9806c8cc16eab1dbeb5be4fcda7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"256601863f05ad491c58032607a6f6b36051e7b6","isMergeCommit":false,"messageTitle":"Refactor code with Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":150}}},{"hash":"7300f7a84240dfd8510f03ffbcad31a4733e6ac6","isMergeCommit":false,"messageTitle":"Refactor code with Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":125}}},{"hash":"cfbe9c2bad55ae312865643114a09e11506ecadf","isMergeCommit":false,"messageTitle":"Refactor code with Parser and Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":252,"deletions":125}}},{"hash":"a53e7d24f8906d4f40c4dd6e23945665e92d03a7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"8eb7ef591a42f9ebe030121a658de413f98d486c","isMergeCommit":false,"messageTitle":"Organize into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":8}}},{"hash":"6fcad79be4a53d8b69b408afaba728608575c9a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"e28c786f04e9484020f235d8a494a9b25428d155","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1ff12d16dc086908548797dabcd9ea3f5eef379a","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"bdd2830f17a0e8f6b905a08b6285fd958fac8535","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and Deadline classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":318,"deletions":0}}},{"hash":"845ead3924e2ae14f9a8a8605a3e02830a28ef68","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"390a0444460e6fb2a46c96c511a4e7e1dbcaedf6","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":324,"deletions":15}}},{"hash":"531d975be3a9199939ce691ffb1016f617536596","isMergeCommit":false,"messageTitle":"Correct coding standard","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":50,"deletions":59}}},{"hash":"233e47f4b50b70458af062edf8124242b17b35b2","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":0}}},{"hash":"00bab81dcbc0e0fadb882ee74e1130671412337b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"10de60e7b6f45041ceda33a252be1b7b41156e92","isMergeCommit":true,"messageTitle":"Merge and resolve conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bacf6185400071b8df3e835efb5ac4d1f0c5d221","isMergeCommit":true,"messageTitle":"Merge and resolve conflict with branch-Level-9","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"c4694746aff6a321ba7984129fbfecd25ebac711","isMergeCommit":false,"messageTitle":"Correct with checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"e6d8ab24b4bee3fa34aad384eddd84ed1bd3e47b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"317834843184caa1211872aa5f9c2944c0f21656","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":266,"deletions":138}}},{"hash":"5ead7aa566d907e8bad034028a1e6bb253afa0f5","isMergeCommit":false,"messageTitle":"Change Ui class to Reponse","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":31}}},{"hash":"4c418eeaf5b224c150550a908064e00874f04702","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"b4ebd47a4d5999bbce5b591f1394016510b46c90","isMergeCommit":false,"messageTitle":"Change javafx from version 20 to 17.0.7","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"b949457fbc820a49faf3b354f4afa62dd90a450c","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Absence of assertions in our code makes it difficult to detect bugs\nand unexpected conditions.\n\nAssertions enhance the reliability and robustness of our Java files.\nIntroducing assertions at critical points will help us catch potential\nissues early in the development process and make our software more\nresilient.\n\nLet\u0027s,\n* add assertions in [Duke.java, Parser.java, AddCommand.java]\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":9,"deletions":5}}},{"hash":"1760dafbe5baf9c440e4c30db91438d1f3260232","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"There are several blocks of code that can improve on readability.\n\nImproving readability of code allows for easier debugging and\nmaintenance of code.\n\nLet\u0027s,\n* Rename DeleteComand to DeleteCommand\n* Response class: Add a newline between the command and the description\n in the printFind mtehod response message\n* FindCommand class: Improve the readability of the for loop by\n utilizing the enhanced for loop\n* MarkCommand class: Improve the readability of the happy path by\n removing the unnecessary assignment of \u0027taskNumber\u0027 to 0\n before parsing\n* AddCommand class: Extract the creation of task into a separate\n method\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":103}}}]},{"date":"2023-09-13","commitResults":[{"hash":"09a13b262aad867d79054c2cc6088efa86795ec3","isMergeCommit":true,"messageTitle":"Merge pull request #1 from andrechuakj/branch-A-Assertions","messageBody":"Add assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"dc4034503e166ece641263994ab0c79c8296c3c8","isMergeCommit":true,"messageTitle":"Resolve merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f7e1c167ba7e15eaf99db972917cd0b9ebd2e94e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from andrechuakj/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"a425c7853b3a695f9f77d45298de5bdfbc864012","isMergeCommit":false,"messageTitle":"Add update command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":144,"deletions":11}}},{"hash":"69c7c16dd0528562005b97074c046e221ba84658","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Update\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"andrechuakj":{"java":1724,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":13,"txt":9}},"authorContributionVariance":{"andrechuakj":80373.984},"authorDisplayNameMap":{"andrechuakj":"CS2103T-F11-1 ANDR.. JUN"}} +{"authorDailyContributionsMap":{"andrechuakj":[{"date":"2023-08-23","commitResults":[{"hash":"5e2603efc4d9cbe29b57ae4dc0d4104bb0c9f21e","isMergeCommit":false,"messageTitle":"Renamed bot, added greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":7}}},{"hash":"859bb2ee5b847d6b4d1542c98338fb24ab85b77d","isMergeCommit":false,"messageTitle":"Added echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"2729fa45bdbb1bb463075b1ba99893ebe5d53d39","isMergeCommit":false,"messageTitle":"Added add and list feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2e4a6b4c25be1c9065113949467ecfc0ac0d4b44","isMergeCommit":false,"messageTitle":"Added mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":3}}},{"hash":"1491e56be50498fdff0aab05574cfecf8fa65598","isMergeCommit":false,"messageTitle":"Added Todos, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":36}}},{"hash":"ecaf469181259993aaf820b7095b15734bc6c146","isMergeCommit":false,"messageTitle":"Added testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":13,"deletions":11}}},{"hash":"af7954331be122b23db041d48c90022d1369c508","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":77}}},{"hash":"ad0cb68bb086492e8d23fca5887a4059c4419a01","isMergeCommit":false,"messageTitle":"Added delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"20f382b0cdbf8e1f2dd62b85561c1abf52a7a456","isMergeCommit":false,"messageTitle":"Add save function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":9}}},{"hash":"b2dcab36f78d41ca09216d465a37309319c30f6b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"412c119e64bdc2badcaf4a84115572818f4c913e","isMergeCommit":false,"messageTitle":"Add dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":37}}},{"hash":"b469d1dd32a7e9806c8cc16eab1dbeb5be4fcda7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"256601863f05ad491c58032607a6f6b36051e7b6","isMergeCommit":false,"messageTitle":"Refactor code with Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":150}}},{"hash":"7300f7a84240dfd8510f03ffbcad31a4733e6ac6","isMergeCommit":false,"messageTitle":"Refactor code with Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":125}}},{"hash":"cfbe9c2bad55ae312865643114a09e11506ecadf","isMergeCommit":false,"messageTitle":"Refactor code with Parser and Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":252,"deletions":125}}},{"hash":"a53e7d24f8906d4f40c4dd6e23945665e92d03a7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"8eb7ef591a42f9ebe030121a658de413f98d486c","isMergeCommit":false,"messageTitle":"Organize into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":8}}},{"hash":"6fcad79be4a53d8b69b408afaba728608575c9a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"e28c786f04e9484020f235d8a494a9b25428d155","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1ff12d16dc086908548797dabcd9ea3f5eef379a","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"bdd2830f17a0e8f6b905a08b6285fd958fac8535","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and Deadline classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":318,"deletions":0}}},{"hash":"845ead3924e2ae14f9a8a8605a3e02830a28ef68","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"390a0444460e6fb2a46c96c511a4e7e1dbcaedf6","isMergeCommit":false,"messageTitle":"Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":324,"deletions":15}}},{"hash":"531d975be3a9199939ce691ffb1016f617536596","isMergeCommit":false,"messageTitle":"Correct coding standard","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":50,"deletions":59}}},{"hash":"233e47f4b50b70458af062edf8124242b17b35b2","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":0}}},{"hash":"00bab81dcbc0e0fadb882ee74e1130671412337b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"10de60e7b6f45041ceda33a252be1b7b41156e92","isMergeCommit":true,"messageTitle":"Merge and resolve conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bacf6185400071b8df3e835efb5ac4d1f0c5d221","isMergeCommit":true,"messageTitle":"Merge and resolve conflict with branch-Level-9","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"c4694746aff6a321ba7984129fbfecd25ebac711","isMergeCommit":false,"messageTitle":"Correct with checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"e6d8ab24b4bee3fa34aad384eddd84ed1bd3e47b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"317834843184caa1211872aa5f9c2944c0f21656","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":266,"deletions":138}}},{"hash":"5ead7aa566d907e8bad034028a1e6bb253afa0f5","isMergeCommit":false,"messageTitle":"Change Ui class to Reponse","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":31}}},{"hash":"4c418eeaf5b224c150550a908064e00874f04702","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"b4ebd47a4d5999bbce5b591f1394016510b46c90","isMergeCommit":false,"messageTitle":"Change javafx from version 20 to 17.0.7","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"b949457fbc820a49faf3b354f4afa62dd90a450c","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Absence of assertions in our code makes it difficult to detect bugs\nand unexpected conditions.\n\nAssertions enhance the reliability and robustness of our Java files.\nIntroducing assertions at critical points will help us catch potential\nissues early in the development process and make our software more\nresilient.\n\nLet\u0027s,\n* add assertions in [Duke.java, Parser.java, AddCommand.java]\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":9,"deletions":5}}},{"hash":"1760dafbe5baf9c440e4c30db91438d1f3260232","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"There are several blocks of code that can improve on readability.\n\nImproving readability of code allows for easier debugging and\nmaintenance of code.\n\nLet\u0027s,\n* Rename DeleteComand to DeleteCommand\n* Response class: Add a newline between the command and the description\n in the printFind mtehod response message\n* FindCommand class: Improve the readability of the for loop by\n utilizing the enhanced for loop\n* MarkCommand class: Improve the readability of the happy path by\n removing the unnecessary assignment of \u0027taskNumber\u0027 to 0\n before parsing\n* AddCommand class: Extract the creation of task into a separate\n method\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":103}}}]},{"date":"2023-09-13","commitResults":[{"hash":"09a13b262aad867d79054c2cc6088efa86795ec3","isMergeCommit":true,"messageTitle":"Merge pull request #1 from andrechuakj/branch-A-Assertions","messageBody":"Add assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"dc4034503e166ece641263994ab0c79c8296c3c8","isMergeCommit":true,"messageTitle":"Resolve merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f7e1c167ba7e15eaf99db972917cd0b9ebd2e94e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from andrechuakj/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"a425c7853b3a695f9f77d45298de5bdfbc864012","isMergeCommit":false,"messageTitle":"Add update command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":144,"deletions":11}}},{"hash":"69c7c16dd0528562005b97074c046e221ba84658","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Update\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"82b54c2d301f3f6da5a5c949bbef22b3d6316e13","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":88,"deletions":15}}},{"hash":"21bb17f2917a751abbb8421f59186c6933e44429","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"andrechuakj":{"java":1724,"md":87,"fxml":35,"sh":0,"bat":0,"gradle":13,"txt":9}},"authorContributionVariance":{"andrechuakj":73518.234},"authorDisplayNameMap":{"andrechuakj":"CS2103T-F11-1 ANDR.. JUN"}} diff --git a/andrefoo_ip_master/authorship.json b/andrefoo_ip_master/authorship.json index 7b56799b..d69c1811 100644 --- a/andrefoo_ip_master/authorship.json +++ b/andrefoo_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":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" mainClass.set(\"dre.Main\")","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" mainClassName \u003d \u0027dre.Main\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" mainClassName \u003d \u0027dre.Main\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" archiveBaseName \u003d \"dre\"","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" archiveFileName \u003d \"dre.jar\"","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andrefoo":21,"-":40}},{"path":"data/dre.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"T| |something","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"D|X|something|2023-12-31","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"E| |something else|1000-01-01|1000-10-10","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"T|X|hola como estas","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"D| |blub|2001-09-11","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"E| |something else|2001-09-11|2001-09-11","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":6}},{"path":"src/main/java/dre/Dre.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.gui.DialogBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import dre.parser.Parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import dre.command.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * Represents the main application class, serving as the primary entry point","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * to initiate and run the Dre task management system.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":"public class Dre extends Application {","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" private Scene scene;","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.jpg\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDre.jpg\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" private final String DEFAULT_FILE_PATH \u003d \"data/dre.txt\";","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" * Constructs a new instance of Dre, initializing storage, tasks, and user interface components.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" public Dre() {","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" storage \u003d new Storage(DEFAULT_FILE_PATH);","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" ui.generateLoadingErrorString(); //do i need this anymore?","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" * Runs the main loop of the application, repeatedly reading user commands,","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" * parsing them, and executing the corresponding actions until the user exits.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-13"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"andrefoo"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"andrefoo"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"andrefoo"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"andrefoo"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"andrefoo"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"andrefoo"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"andrefoo"},"content":" stage.show();","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"andrefoo"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"andrefoo"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"andrefoo"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"andrefoo"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"andrefoo"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"andrefoo"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"andrefoo"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"andrefoo"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"andrefoo"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"andrefoo"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"andrefoo"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":112,"author":{"gitId":"andrefoo"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":113,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"andrefoo"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":116,"author":{"gitId":"andrefoo"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":117,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":118,"author":{"gitId":"andrefoo"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"andrefoo"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"andrefoo"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"andrefoo"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"andrefoo"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"andrefoo"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"andrefoo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"andrefoo"},"content":" });","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"andrefoo"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"andrefoo"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"andrefoo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":132,"author":{"gitId":"andrefoo"},"content":" });","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"andrefoo"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes.","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"andrefoo"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"andrefoo"},"content":" //Part 3. Add functionality to handle user input.","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"andrefoo"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"andrefoo"},"content":" handleUserInput();","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"andrefoo"},"content":" });","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"andrefoo"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"andrefoo"},"content":" handleUserInput();","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"andrefoo"},"content":" });","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"andrefoo"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"andrefoo"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"andrefoo"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"andrefoo"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"andrefoo"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"andrefoo"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"andrefoo"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"andrefoo"},"content":" return textToAdd;","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"andrefoo"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-13"},{"lineNumber":162,"author":{"gitId":"andrefoo"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"andrefoo"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"andrefoo"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":166,"author":{"gitId":"andrefoo"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-13"},{"lineNumber":167,"author":{"gitId":"andrefoo"},"content":" String dukeText \u003d getResponse(userText);","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"andrefoo"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"andrefoo"},"content":" DialogBox.getUserDialog(userText, user),","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"andrefoo"},"content":" DialogBox.getDukeDialog(dukeText, duke)","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"andrefoo"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"andrefoo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"andrefoo"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"andrefoo"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-13"},{"lineNumber":178,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"andrefoo"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":181,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"andrefoo"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":183,"author":{"gitId":"andrefoo"},"content":" String response \u003d c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-13"},{"lineNumber":184,"author":{"gitId":"andrefoo"},"content":" return response;","lastModifiedDate":"2023-09-13"},{"lineNumber":185,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":186,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":187,"author":{"gitId":"andrefoo"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-13"},{"lineNumber":188,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":190,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":191,"author":{"gitId":"andrefoo"},"content":" //change this method to print the different responses.","lastModifiedDate":"2023-09-13"},{"lineNumber":192,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":194,"author":{"gitId":"andrefoo"},"content":" * The main method serves as the application\u0027s entry point.","lastModifiedDate":"2023-09-09"},{"lineNumber":195,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":196,"author":{"gitId":"andrefoo"},"content":" * @param args The command-line arguments.","lastModifiedDate":"2023-09-09"},{"lineNumber":197,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":198,"author":{"gitId":"andrefoo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"andrefoo"},"content":" new Dre().run();","lastModifiedDate":"2023-09-13"},{"lineNumber":200,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":201}},{"path":"src/main/java/dre/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" private Dre duke \u003d new Dre();","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" stage.show();","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":31}},{"path":"src/main/java/dre/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.gui.DialogBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" private Dre dre;","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.jpg\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDre.jpg\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" public void initialize() {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" public void setDuke(Dre d) {","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" dre \u003d d;","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" String response \u003d dre.getResponse(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":54}},{"path":"src/main/java/dre/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to add a new task.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" private final Task task;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * Creates an AddCommand for the specified task.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" * Executes the add command, adding a new task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to update stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" return ui.generateAddedTaskString(task, tasks.size());","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":35}},{"path":"src/main/java/dre/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents an abstract command that can be executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" * All specific commands should inherit from this class.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * Executes the specific command\u0027s operation.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to update stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If there\u0027s an error executing the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws DreException;","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" * Indicates whether this command causes the application to exit.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @return false by default; should be overridden by commands that cause exit.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":32}},{"path":"src/main/java/dre/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to delete a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" private final int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * Creates a DeleteCommand with the specified task index within the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" * Executes the delete command, removing a task from the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to update stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" tasks.deleteTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" return ui.generateDeletedTaskString(tasks.getTask(index));","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" return ui.generateErrorString(e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":40}},{"path":"src/main/java/dre/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" * Executes the exit command, showing goodbye message and saving tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to save tasks before exiting.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" * Indicates that this command causes the application to exit.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @return true as this command exits the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":33}},{"path":"src/main/java/dre/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to find and list all tasks that contain a given keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" * This command is intended to help users search for specific tasks within their list.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" private final String keyword;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * Creates a new FindCommand with the specified keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" * @param keyword The keyword used to search for tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" * Executes the find task command.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * This method searches for tasks containing the keyword and displays them to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param tasks The list of tasks to search within.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object used for user interactions.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object, though not directly used in this command.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If there are issues during the command execution.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DreException {","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" TaskList foundTasks \u003d tasks.findTasksByKeyword(keyword);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" return ui.generateFoundTasksString(foundTasks);","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":38}},{"path":"src/main/java/dre/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" * Executes the list command, displaying all tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object (unused for this command).","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" return ui.generateTasksString(tasks);","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" return ui.generateErrorString(e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":27}},{"path":"src/main/java/dre/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" private final int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * Creates a MarkCommand with the specified task index.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" * Executes the mark command, marking a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to update stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If there\u0027s an error marking the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DreException {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" tasks.mark(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" return ui.generateMarkedTaskString(tasks.getTask(index));","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" return ui.generateErrorString(\"Invalid task index.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":40}},{"path":"src/main/java/dre/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to unmark a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" private final int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * Creates an UnmarkCommand with the specified task index.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" * Executes the unmark command, unmarking a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to update stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" return ui.generateUnmarkedTaskString(tasks.getTask(index));","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" return ui.generateErrorString(e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":39}},{"path":"src/main/java/dre/exception/DreException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.exception;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" * Represents an exception specific to the Dre chatbot application.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"public class DreException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Constructs a new DreException with the specified detail message.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" * @param message The detail message (which is saved for later retrieval by the {@link #getMessage()} method).","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" public DreException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":16}},{"path":"src/main/java/dre/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.gui;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.MainWindow;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" private Label dialog;","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" private void flip() {","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" db.flip();","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" return db;","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":62}},{"path":"src/main/java/dre/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.gui;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.Main;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"public class Launcher {","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":13}},{"path":"src/main/java/dre/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import dre.task.ToDo;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import dre.task.Event;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import dre.task.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"import dre.command.AddCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"import dre.command.DeleteCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"import dre.command.ExitCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"import dre.command.MarkCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"import dre.command.UnmarkCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"import dre.command.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"import dre.command.ListCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"import dre.command.FindCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" * Represents a parser that makes sense of user input commands.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * Parses a given line and returns a Task object.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param line The string representation of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" * @return The corresponding Task object, or null if invalid line.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" public static Task parseTask(String line) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" String type \u003d line.substring(0, 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" boolean isDone \u003d line.charAt(2) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" switch (type) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" case \"T\":","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" String[] todoInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" task \u003d new ToDo(todoInfo[2]);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" case \"D\":","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" String[] deadlineInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" description \u003d deadlineInfo[2].trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" LocalDate byDate \u003d parseDate(deadlineInfo[3].trim());","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" task \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" String[] eventInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" description \u003d eventInfo[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" LocalDate fromDate \u003d parseDate(eventInfo[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" LocalDate toDate \u003d parseDate(eventInfo[4]);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" task \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" task.done();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" return task; //instead of adding to list, just return the dre.task.","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" * Parses a date string into a LocalDate object.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" * @param dateString The date in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" * @return The LocalDate representation of the dateString.","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" private static LocalDate parseDate(String dateString) {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" return LocalDate.parse(dateString, inputFormatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" * Parses the user input to determine which command to execute.","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" * @param input The raw user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" * @return The corresponding Command object.","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If the input command is unknown or invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" public static Command parse(String input) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":" String[] words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" String commandWord \u003d words[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrefoo"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrefoo"},"content":" case \"bye\":","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"andrefoo"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrefoo"},"content":" case \"list\":","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"andrefoo"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrefoo"},"content":" case \"mark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the task index to mark.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"andrefoo"},"content":" return new MarkCommand(Integer.parseInt(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"andrefoo"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the task index to unmark.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"andrefoo"},"content":" return new UnmarkCommand(Integer.parseInt(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"andrefoo"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the task index to delete.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"andrefoo"},"content":" return new DeleteCommand(Integer.parseInt(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"andrefoo"},"content":" case \"todo\":","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2 || words[1].trim().isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"andrefoo"},"content":" return new AddCommand(new ToDo(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"andrefoo"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2 || words[1].trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"andrefoo"},"content":" String[] deadlineParts \u003d words[1].split(\"/by\", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"andrefoo"},"content":" if (deadlineParts.length \u003c 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the date using /by.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"andrefoo"},"content":" LocalDate byDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"andrefoo"},"content":" byDate \u003d LocalDate.parse(deadlineParts[1].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"andrefoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please use the correct date format: YYYY-MM-DD.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"andrefoo"},"content":" return new AddCommand(new Deadline(deadlineParts[0].trim(), byDate));","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"andrefoo"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2 || words[1].trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"andrefoo"},"content":" String[] eventParts \u003d words[1].split(\"/from | /to \", 3);","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"andrefoo"},"content":" if (eventParts.length \u003c 3) {","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the date range using /from and /to.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"andrefoo"},"content":" LocalDate fromDate, toDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"andrefoo"},"content":" fromDate \u003d LocalDate.parse(eventParts[1].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"andrefoo"},"content":" toDate \u003d LocalDate.parse(eventParts[2].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"andrefoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please use the correct date format: YYYY-MM-DD.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"andrefoo"},"content":" return new AddCommand(new Event(eventParts[0].trim(), fromDate, toDate));","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"andrefoo"},"content":" case \"find\":","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2 || words[1].isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"The search keyword cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"andrefoo"},"content":" return new FindCommand(words[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"andrefoo"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":150}},{"path":"src/main/java/dre/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.io.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import dre.parser.Parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" * Manages loading and saving of tasks to a file.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" private final String dataFilePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" * Creates a new storage manager.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" * @param filePath The path to the file for saving/loading tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" this.dataFilePath \u003d filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * Loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" * @return A list of tasks loaded from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" File file \u003d new File(dataFilePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(dataFilePath))) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" String line;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" Task task \u003d Parser.parseTask(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" if (task !\u003d null) list.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"No saved tasks found.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" } catch (IOException | SecurityException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Error saving tasks to the file.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" throw new RuntimeException(","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" \"This should never happen, I know this file exists\", e);","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" return list;","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" * Saves the given list of tasks to the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" * @param taskList The list of tasks to save.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" public void save(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(dataFilePath))) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" // since getTask uses an index starting from 1","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" Task task \u003d taskList.getTask(i + 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" writer.write(task.fileSaveFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" writer.newLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" } catch (IOException | DreException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Error saving tasks to the file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" throw new RuntimeException(","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" \"This should never happen, I know this file exists\", e);","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":74}},{"path":"src/main/java/dre/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" * Creates a new deadline task.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * @param task The description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public Deadline(String task, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" * Provides a formatted string for saving this deadline task to a file.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" return \"D|\" + super.fileSaveFormat() + \"|\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" * Converts the task to a string format for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string representing this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDate(by) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" * Formats the date for display purposes.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" * @param date The date to be formatted.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" * @return A string representing the formatted date in MMM dd yyyy format.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" private String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" return date.format(formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":54}},{"path":"src/main/java/dre/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" * Represents an event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" public Event(String task, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" * Provides a formatted string for saving this event task to a file.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" return \"E|\" + super.fileSaveFormat() + \"|\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" from.format(formatter) + \"|\" + to.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" * Converts the event task to a string format for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string representing this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" return \"[E]\" + super.toString() +","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" \" (from: \" + formatDate(from) + \" to: \" + formatDate(to) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" * Formats the date for display purposes.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" * @param date The date to be formatted.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" * @return A string representing the formatted date.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" private String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" return date.format(formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":52}},{"path":"src/main/java/dre/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" * Represents a generic task.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" private String description;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" private boolean done;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" * Creates a default generic task.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" public Task() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" description \u003d \"default\";","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" * Creates a new generic task.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" * @param newTask The description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" public Task(String newTask){","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" description \u003d newTask;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" * Checks if the task is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" * @return true if the task is done, false otherwise.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" return done;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" * Marks the task as done, no matter the current status of task.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" public void done() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" * Unmarks the task as not done, no matter the current status of task.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" public void undo() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" * For display and saving purposes, shows whether the task is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" * @return The status icon.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" return (done ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" * Provides a formatted string for saving this task to a file.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" return getStatusIcon() + \"|\" + description;","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" * Converts the task to a string format for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string representing this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":" return description;","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":84}},{"path":"src/main/java/dre/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a list of tasks, providing functionalities to manage and manipulate tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * Creates a new empty task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public TaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" * Creates a new task list with the given initial tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" * @param tasks A list of tasks to initialize the TaskList with.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" * Marks a task as done using its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If the provided index is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" public void mark(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" Task task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" task.done();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid dre.task index.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" * Unmarks a task as done using its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If the provided index is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" public void unmark(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" Task task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" task.undo();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid dre.task index.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" * Retrieves a task from the list using its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If the provided index is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" public Task getTask(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" return tasks.get(index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid dre.task index.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" * Deletes a task from the list using its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If the provided index is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":" public void deleteTask(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid dre.task index.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"andrefoo"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"andrefoo"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"andrefoo"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"andrefoo"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"andrefoo"},"content":" * Finds task in the tasklist that contain the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"andrefoo"},"content":" * @param keyword The String used for search","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"andrefoo"},"content":" * @return TaskList of tasks that match the search","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"andrefoo"},"content":" public TaskList findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"andrefoo"},"content":" List\u003cTask\u003e foundTasks \u003d this.tasks.stream()","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"andrefoo"},"content":" .filter(task -\u003e task.getDescription().contains(keyword))","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"andrefoo"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"andrefoo"},"content":" return new TaskList(foundTasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"andrefoo"},"content":" * Retrieves the size (number of tasks) of the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"andrefoo"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"andrefoo"},"content":" public int size() {","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"andrefoo"},"content":" return tasks.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":120}},{"path":"src/main/java/dre/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" * Represents a simple to-do task.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Creates a new to-do task.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" * @param task The description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" public ToDo(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" * Provides a formatted string for saving this to-do task to a file.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" return \"T|\" + super.fileSaveFormat();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * Converts the task to a string format for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string representing this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":36}},{"path":"src/main/java/dre/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents the User Interface responsible for interactions between the user and the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" * Displays an error message indicating issues with loading tasks from storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" public String generateLoadingErrorString() {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" return \"Error reading tasks from file.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" * Displays a specified error message to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" public String generateErrorString(String message) {","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" * Displays the welcome message to the user upon starting the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" return \"Hello! I\u0027m Dre\\n\" +","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" \"What can I do for you?\";","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" * Displays the goodbye message to the user upon exiting the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":"// showLine();","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":"// System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":"// showLine();","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" * Generates a representation of the tasks present in the user\u0027s task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" * @param tasks The task list to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If there is an error while processing the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" public String generateTasksString(TaskList tasks) throws DreException {","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" StringBuilder sb \u003d new StringBuilder(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" sb.append(i).append(\". \").append(tasks.getTask(i)).append(\"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" return sb.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" * Generates a message indicating a task has been unmarked.","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" * @param task The task that was unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the unmarked task message.","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" public String generateUnmarkedTaskString(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" return \"Ok! I\u0027ve marked this task as undone:\\n\" + task;","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" * Generates a message indicating a task has been deleted.","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the deleted task message.","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" public String generateDeletedTaskString(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":" return \"Task deleted:\\n\" + task;","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":" * Generates a message indicating a task has been added.","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"andrefoo"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"andrefoo"},"content":" * @param totalTasks The total number of tasks in the task list after addition.","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the added task message.","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"andrefoo"},"content":" public String generateAddedTaskString(Task task, int totalTasks) {","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"andrefoo"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\nNow you have \" + totalTasks + \" tasks in the list.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"andrefoo"},"content":" * Generates a message indicating a task has been marked as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"andrefoo"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the marked task message.","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"andrefoo"},"content":" public String generateMarkedTaskString(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"andrefoo"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task;","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"andrefoo"},"content":" * Generates a message indicating the tasks that match the search.","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"andrefoo"},"content":" * @param tasks The tasks that match the search description.","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the tasks that match the search.","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If there is an error while processing the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"andrefoo"},"content":" public String generateFoundTasksString(TaskList tasks) throws DreException {","lastModifiedDate":"2023-09-13"},{"lineNumber":112,"author":{"gitId":"andrefoo"},"content":" if (tasks.size() \u003c 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"andrefoo"},"content":" return \"Sorry, no tasks match that description.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"andrefoo"},"content":" StringBuilder sb \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":116,"author":{"gitId":"andrefoo"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"andrefoo"},"content":" sb.append(i).append(\". \").append(tasks.getTask(i)).append(\"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":118,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"andrefoo"},"content":" return sb.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"andrefoo"},"content":" * Reads the user\u0027s command input.","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"andrefoo"},"content":" * @return The user\u0027s input as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"andrefoo"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"andrefoo"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"andrefoo"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":131}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"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-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"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\"dre.MainWindow\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"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-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"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-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"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-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":19}},{"path":"src/test/java/dre/DreTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class DreTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class CommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/ExitCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class ExitCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/ListCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class ListCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class UnmarkCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/exception/DreExceptionTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.exception;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class DreExceptionTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat1() {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" Deadline testDeadline \u003d new Deadline(\"learn to fly plane\", LocalDate.parse(\"2001-09-11\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"D| |learn to fly plane|2001-09-11\");","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat2() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" Deadline testDeadline \u003d new Deadline(\" extra spaces\", LocalDate.parse(\"2001-09-11\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"D| | extra spaces|2001-09-11\");","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat3() {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" Deadline testDeadline \u003d new Deadline(\"learn to fly plane\", LocalDate.parse(\"2001-01-31\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"D| |learn to fly plane|2001-01-31\");","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" public void testToString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" Deadline testDeadline \u003d new Deadline(\"learn to fly plane\", LocalDate.parse(\"2001-09-11\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.toString(), \"[D][ ] learn to fly plane (by: Sep 11 2001)\");","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":34}},{"path":"src/test/java/dre/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"public class EventTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat1() {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" Event testEvent \u003d new Event(\"get blueprint\", LocalDate.parse(\"2001-09-11\"),","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" LocalDate.parse(\"2001-09-11\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" assertEquals(testEvent.fileSaveFormat(), \"E| |get blueprint|2001-09-11|2001-09-11\");","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat2() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" //test space trim","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" Event testEvent \u003d new Event(\" extra spaces\", LocalDate.parse(\"2001-09-11\"),","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" LocalDate.parse(\"2001-09-11\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" assertEquals(testEvent.fileSaveFormat(), \"E| | extra spaces|2001-09-11|2001-09-11\");","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat3() {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" //test different date format entry","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" Event testEvent \u003d new Event(\"learn to fly plane\", LocalDate.parse(\"2001-01-31\"),","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" LocalDate.parse(\"2001-01-31\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" assertEquals(testEvent.fileSaveFormat(), \"E| |learn to fly plane|2001-01-31|2001-01-31\");","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" public void testToString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" Event testEvent \u003d new Event(\"learn to fly plane\", LocalDate.parse(\"2001-09-01\"),","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" LocalDate.parse(\"2001-09-07\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" assertEquals(testEvent.toString(), \"[E][ ] learn to fly plane (from: Sep 01 2001 to: Sep 07 2001)\");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":39}},{"path":"src/test/java/dre/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" public void testInitialTaskStatus() {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" Task task \u003d new Task(\"Sample\");","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" assertFalse(task.isDone(), \"New task should not be marked as done.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" public void testMarkTaskAsDone() {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" Task task \u003d new Task(\"Sample\");","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" task.done();","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" assertTrue(task.isDone(), \"Task should be marked as done after calling markAsDone().\");","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat() {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" Task task \u003d new Task(\"something something\");","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" assertEquals(task.fileSaveFormat(), \" |something something\");","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":28}},{"path":"src/test/java/dre/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat1() {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" ToDo testDeadline \u003d new ToDo(\"find a boeing\");","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"T| |find a boeing\");","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat2() {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" //test space trim","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" ToDo testDeadline \u003d new ToDo(\" extra spaces\");","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"T| | extra spaces\");","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat3() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" //test different date format entry","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" ToDo testDeadline \u003d new ToDo(\"learn to fly plane\");","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"T| |learn to fly plane\");","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" public void testToString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" ToDo testDeadline \u003d new ToDo(\"learn to fly plane\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.toString(), \"[T][ ] learn to fly plane\");","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":32}},{"path":"src/test/java/dre/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class UiTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"todo one","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"deadline two /by time","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"event three /from now /to later","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"andrefoo":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":"-"},"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":"andrefoo"},"content":"java -classpath ..\\bin Dre \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andrefoo":1,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" mainClass.set(\"dre.Launcher\")","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" archiveBaseName \u003d \"dre\"","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":"-"},"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":{"andrefoo":18,"-":40}},{"path":"data/dre.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"T| |something","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"D|X|something|2023-12-31","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"E| |something else|1000-01-01|1000-10-10","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"T|X|hola como estas","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"D| |blub|2001-09-11","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"E| |something else|2001-09-11|2001-09-11","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":6}},{"path":"src/main/java/dre/Dre.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.gui.DialogBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import dre.parser.Parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import dre.command.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * Represents the main application class, serving as the primary entry point","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * to initiate and run the Dre task management system.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":"public class Dre extends Application {","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" private Scene scene;","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.jpg\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" private Image dre \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDre.jpg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" private final String DEFAULT_FILE_PATH \u003d \"data/dre.txt\";","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" * Constructs a new instance of Dre, initializing storage, tasks, and user interface components.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" public Dre() {","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" storage \u003d new Storage(DEFAULT_FILE_PATH);","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" assert storage !\u003d null : \"Failed to initialize storage\";","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" assert tasks !\u003d null : \"Failed to initialize tasks\";","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" ui.generateLoadingErrorString();","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" * Runs the main loop of the application, repeatedly reading user commands,","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" * parsing them, and executing the corresponding actions until the user exits.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" * Runs the main loop of the application, repeatedly reading user commands,","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":" * parsing them, and executing the corresponding actions until the user exits.","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"andrefoo"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"andrefoo"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"andrefoo"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"andrefoo"},"content":" * primary stages.","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"andrefoo"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"andrefoo"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"andrefoo"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"andrefoo"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"andrefoo"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"andrefoo"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"andrefoo"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"andrefoo"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"andrefoo"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"andrefoo"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"andrefoo"},"content":" stage.show();","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"andrefoo"},"content":" stage.setTitle(\"Dre\");","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"andrefoo"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"andrefoo"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"andrefoo"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":112,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":113,"author":{"gitId":"andrefoo"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"andrefoo"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-13"},{"lineNumber":116,"author":{"gitId":"andrefoo"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-13"},{"lineNumber":117,"author":{"gitId":"andrefoo"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-13"},{"lineNumber":118,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"andrefoo"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"andrefoo"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"andrefoo"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"andrefoo"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"andrefoo"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"andrefoo"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"andrefoo"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"andrefoo"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":132,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"andrefoo"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"andrefoo"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"andrefoo"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"andrefoo"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"andrefoo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"andrefoo"},"content":" });","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"andrefoo"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"andrefoo"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"andrefoo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"andrefoo"},"content":" });","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"andrefoo"},"content":" //Scroll down to the end every time dialogContainer\u0027s height changes.","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"andrefoo"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"andrefoo"},"content":" //Part 3. Add functionality to handle user input.","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"andrefoo"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"andrefoo"},"content":" handleUserInput();","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"andrefoo"},"content":" });","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"andrefoo"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"andrefoo"},"content":" handleUserInput();","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"andrefoo"},"content":" });","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"andrefoo"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"andrefoo"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-13"},{"lineNumber":162,"author":{"gitId":"andrefoo"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"andrefoo"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"andrefoo"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-13"},{"lineNumber":166,"author":{"gitId":"andrefoo"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-13"},{"lineNumber":167,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"andrefoo"},"content":" return textToAdd;","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"andrefoo"},"content":" * Processes user input, creates two dialog boxes (one for user input and one for Dre\u0027s response),","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"andrefoo"},"content":" * and appends them to the dialog container. Clears the user input field after processing.","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"andrefoo"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"andrefoo"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"andrefoo"},"content":" String dreText \u003d getResponse(userText);","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"andrefoo"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"andrefoo"},"content":" DialogBox.getUserDialog(userText, user),","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"andrefoo"},"content":" DialogBox.getDreDialog(dreText, dre)","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"andrefoo"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"andrefoo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":183,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":184,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":185,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":186,"author":{"gitId":"andrefoo"},"content":" * Generates a response based on the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"andrefoo"},"content":" * @param input the user\u0027s input.","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"andrefoo"},"content":" * @return a string response from Dre.","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":191,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":192,"author":{"gitId":"andrefoo"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":193,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":194,"author":{"gitId":"andrefoo"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":195,"author":{"gitId":"andrefoo"},"content":" String response \u003d c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-13"},{"lineNumber":196,"author":{"gitId":"andrefoo"},"content":" return response;","lastModifiedDate":"2023-09-13"},{"lineNumber":197,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":198,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":199,"author":{"gitId":"andrefoo"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-13"},{"lineNumber":200,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":202,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":203,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":204,"author":{"gitId":"andrefoo"},"content":" * The main method serves as the application\u0027s entry point.","lastModifiedDate":"2023-09-09"},{"lineNumber":205,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":206,"author":{"gitId":"andrefoo"},"content":" * @param args The command-line arguments.","lastModifiedDate":"2023-09-09"},{"lineNumber":207,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":208,"author":{"gitId":"andrefoo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":209,"author":{"gitId":"andrefoo"},"content":" new Dre().run();","lastModifiedDate":"2023-09-13"},{"lineNumber":210,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":211}},{"path":"src/main/java/dre/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" * Launcher class to initialize the Dre application.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" * Works around classpath issues.","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"public class Launcher {","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" * The main entry point for the Dre application.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" * @param args The command-line arguments.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" public static void main(String... args) {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":18}},{"path":"src/main/java/dre/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" * GUI for Dre using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" private Dre dre \u003d new Dre();","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" * Starts and displays the Dre application GUI.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" * @param stage The primary stage for the application.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDre(dre);","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" stage.show();","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":36}},{"path":"src/main/java/dre/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.gui.DialogBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" private Dre dre;","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.jpg\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" private Image dreImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDre.jpg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" * Initializes the MainWindow with the appropriate configurations.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" public void initialize() {","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" * Sets the instance of Dre to be used by this window.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" * @param d The instance of Dre to be set.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" public void setDre(Dre d) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" dre \u003d d;","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" * Handles user input by creating two dialog boxes: one to echo the user input and the other","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" * to show Dre\u0027s reply. These are appended to the dialog container.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" * The user input is cleared after processing.","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" String response \u003d dre.getResponse(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" DialogBox.getDreDialog(response, dreImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" closeWindow();","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" * Closes the application window after a short delay.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" private void closeWindow() {","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(1));","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" delay.setOnFinished(event -\u003e javafx.application.Platform.exit());","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" delay.play();","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":80}},{"path":"src/main/java/dre/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to add a new task.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" private final Task NEW_TASK;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * Creates an AddCommand for the specified task.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" this.NEW_TASK \u003d task;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" * Executes the add command, adding a new task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to update stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks,","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" tasks.addTask(NEW_TASK);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" return ui.generateAddedTaskString(NEW_TASK, tasks.size());","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":36}},{"path":"src/main/java/dre/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents an abstract command that can be executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" * All specific commands should inherit from this class.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * Executes the specific command\u0027s operation.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to update stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If there\u0027s an error executing the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws DreException;","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" * Indicates whether this command causes the application to exit.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @return false by default; should be overridden by commands that cause exit.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":32}},{"path":"src/main/java/dre/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to delete a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" private final int INDEX;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * Creates a DeleteCommand with the specified task index within the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" this.INDEX \u003d index;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" * Executes the delete command, removing a task from the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to update stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks,","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" tasks.deleteTask(INDEX);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" return ui.generateDeletedTaskString(tasks.getTask(INDEX));","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" return ui.generateErrorString(e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":41}},{"path":"src/main/java/dre/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" * Executes the exit command, showing goodbye message and saving tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to save tasks before exiting.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks,","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * Indicates that this command causes the application to exit.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @return true as this command exits the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":34}},{"path":"src/main/java/dre/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to find and list all tasks that contain a given keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" * This command is intended to help users search for specific tasks within their list.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" private final String KEYWORD;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * Creates a new FindCommand with the specified keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" * @param keyword The keyword used to search for tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" this.KEYWORD \u003d keyword;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" * Executes the find task command.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * This method searches for tasks containing the keyword and displays them to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param tasks The list of tasks to search within.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object used for user interactions.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object, though not directly used in this command.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If there are issues during the command execution.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks,","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" Ui ui, Storage storage) throws DreException {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" TaskList foundTasks \u003d tasks.findTasksByKeyword(KEYWORD);","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" return ui.generateFoundTasksString(foundTasks);","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":39}},{"path":"src/main/java/dre/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" * Executes the list command, displaying all tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object (unused for this command).","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks,","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" return ui.generateTasksString(tasks);","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" return ui.generateErrorString(e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":28}},{"path":"src/main/java/dre/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" private final int TASK_INDEX;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * Creates a MarkCommand with the specified task index.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" this.TASK_INDEX \u003d index;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" * Executes the mark command, marking a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to update stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If there\u0027s an error marking the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DreException {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" tasks.mark(TASK_INDEX);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" return ui.generateMarkedTaskString(tasks.getTask(TASK_INDEX));","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" return ui.generateErrorString(\"Invalid task index.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":40}},{"path":"src/main/java/dre/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import dre.storage.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a command to unmark a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" private final int TASK_INDEX;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * Creates an UnmarkCommand with the specified task index.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" this.TASK_INDEX \u003d index;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" * Executes the unmark command, unmarking a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * @param tasks The current list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" * @param ui The UI object to show response.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param storage The storage object to update stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" tasks.unmark(TASK_INDEX);","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" return ui.generateUnmarkedTaskString(tasks.getTask(TASK_INDEX));","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" return ui.generateErrorString(e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":39}},{"path":"src/main/java/dre/exception/DreException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.exception;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" * Represents an exception specific to the Dre chatbot application.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"public class DreException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Constructs a new DreException with the specified detail message.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" * @param message The detail message (which is saved for later retrieval by the {@link #getMessage()} method).","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" public DreException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":16}},{"path":"src/main/java/dre/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.gui;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.MainWindow;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" * A custom control using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" private Label dialog;","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" * Creates a new instance of the DialogBox with specified text and image.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" * @param text The content for the dialog.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" * @param img The image to be used as a display picture.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" * Adjusts the layout of the dialog box by swapping the positions of the ImageView and text.","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" * Places the ImageView to the left and the text to the right.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" private void flip() {","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" * Creates a DialogBox for user\u0027s dialog.","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" * @param text The content of the user\u0027s dialog.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" * @param img The image to represent the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" * @return A DialogBox tailored for the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" * Creates a DialogBox for Dre\u0027s dialog.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" * The produced DialogBox will have its layout adjusted such that Dre\u0027s image is on the left.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" * @param text The content of Dre\u0027s dialog.","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" * @param img The image to represent Dre.","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" * @return A DialogBox tailored for Dre.","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" public static DialogBox getDreDialog(String text, Image img) {","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" db.flip();","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":" return db;","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":84}},{"path":"src/main/java/dre/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import dre.task.ToDo;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import dre.task.Event;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import dre.task.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"import dre.command.AddCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"import dre.command.DeleteCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"import dre.command.ExitCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"import dre.command.MarkCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"import dre.command.UnmarkCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"import dre.command.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"import dre.command.ListCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"import dre.command.FindCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" * Represents a parser that makes sense of user input commands.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * Parses a given line and returns a Task object.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * @param line The string representation of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" * @return The corresponding Task object, or null if invalid line.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" public static Task parseTask(String line) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" assert line !\u003d null \u0026\u0026 !line.trim().isEmpty() : \"Input line for task parsing is empty or null\";","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" String type \u003d line.substring(0, 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" boolean isDone \u003d line.charAt(2) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" switch (type) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" case \"T\":","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" String[] todoInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" task \u003d new ToDo(todoInfo[2]);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" case \"D\":","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" String[] deadlineInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" description \u003d deadlineInfo[2].trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" LocalDate byDate \u003d parseDate(deadlineInfo[3].trim());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" task \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" String[] eventInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" description \u003d eventInfo[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" LocalDate fromDate \u003d parseDate(eventInfo[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" LocalDate toDate \u003d parseDate(eventInfo[4]);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" task \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" task.done();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" assert task !\u003d null : \"Failed to parse task from line\";","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" return task; //instead of adding to list, just return the dre.task.","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" * Parses a date string into a LocalDate object.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" * @param dateString The date in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" * @return The LocalDate representation of the dateString.","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" private static LocalDate parseDate(String dateString) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" assert dateString !\u003d null \u0026\u0026 !dateString.trim().isEmpty() : \"Input date string is empty or null\";","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" LocalDate parsedDate \u003d LocalDate.parse(dateString, inputFormatter);","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" return parsedDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" * Parses the user input to determine which command to execute.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" * @param input The raw user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":" * @return The corresponding Command object.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If the input command is unknown or invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"andrefoo"},"content":" public static Command parse(String input) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"andrefoo"},"content":" String[] words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"andrefoo"},"content":" String commandWord \u003d words[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"andrefoo"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"andrefoo"},"content":" case \"bye\":","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"andrefoo"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"andrefoo"},"content":" case \"list\":","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"andrefoo"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"andrefoo"},"content":" case \"mark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the task index to mark.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"andrefoo"},"content":" return new MarkCommand(Integer.parseInt(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"andrefoo"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the task index to unmark.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"andrefoo"},"content":" return new UnmarkCommand(Integer.parseInt(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"andrefoo"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the task index to delete.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"andrefoo"},"content":" return new DeleteCommand(Integer.parseInt(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"andrefoo"},"content":" case \"todo\":","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2 || words[1].trim().isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"andrefoo"},"content":" return new AddCommand(new ToDo(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"andrefoo"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2 || words[1].trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"andrefoo"},"content":" String[] deadlineParts \u003d words[1].split(\"/by\", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"andrefoo"},"content":" if (deadlineParts.length \u003c 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the date using /by.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"andrefoo"},"content":" LocalDate byDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"andrefoo"},"content":" byDate \u003d LocalDate.parse(deadlineParts[1].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"andrefoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please use the correct date format: YYYY-MM-DD.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"andrefoo"},"content":" return new AddCommand(new Deadline(deadlineParts[0].trim(), byDate));","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"andrefoo"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2 || words[1].trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"andrefoo"},"content":" String[] eventParts \u003d words[1].split(\"/from | /to \", 3);","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"andrefoo"},"content":" if (eventParts.length \u003c 3) {","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the date range using /from and /to.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"andrefoo"},"content":" LocalDate fromDate, toDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"andrefoo"},"content":" fromDate \u003d LocalDate.parse(eventParts[1].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"andrefoo"},"content":" toDate \u003d LocalDate.parse(eventParts[2].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"andrefoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please use the correct date format: YYYY-MM-DD.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"andrefoo"},"content":" return new AddCommand(new Event(eventParts[0].trim(), fromDate, toDate));","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"andrefoo"},"content":" case \"find\":","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2 || words[1].isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"The search keyword cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"andrefoo"},"content":" return new FindCommand(words[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"andrefoo"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":154}},{"path":"src/main/java/dre/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.io.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import dre.parser.Parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" * Manages loading and saving of tasks to a file.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" private final String DATA_FILE_PATH;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" * Creates a new storage manager.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" * @param filePath The path to the file for saving/loading tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" this.DATA_FILE_PATH \u003d filePath;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * Loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" * @return A list of tasks loaded from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" File file \u003d new File(DATA_FILE_PATH);","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(DATA_FILE_PATH))) {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" String line;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" Task task \u003d Parser.parseTask(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" if (task !\u003d null) list.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"No saved tasks found.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" } catch (IOException | SecurityException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Error saving tasks to the file.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" throw new RuntimeException(","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" \"This should never happen, I know this file exists\", e);","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" return list;","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" * Saves the given list of tasks to the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" * @param taskList The list of tasks to save.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" public void save(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(DATA_FILE_PATH))) {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" //TaskList indexing starts from 1.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" writer.write(task.fileSaveFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" writer.newLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" } catch (IOException | DreException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Error saving tasks to the file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" throw new RuntimeException(","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" \"This should never happen, I know this file exists\", e);","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":74}},{"path":"src/main/java/dre/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" * Creates a new deadline task.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" * @param task The description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public Deadline(String task, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" * Provides a formatted string for saving this deadline task to a file.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" return \"D|\" + super.fileSaveFormat() + \"|\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" * Converts the task to a string format for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string representing this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDate(by) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" * Formats the date for display purposes.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" * @param date The date to be formatted.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" * @return A string representing the formatted date in MMM dd yyyy format.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" private String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" return date.format(formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":54}},{"path":"src/main/java/dre/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" * Represents an event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" public Event(String task, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" * Provides a formatted string for saving this event task to a file.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" return \"E|\" + super.fileSaveFormat() + \"|\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" from.format(formatter) + \"|\" + to.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" * Converts the event task to a string format for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string representing this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" return \"[E]\" + super.toString() +","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" \" (from: \" + formatDate(from) + \" to: \" + formatDate(to) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" * Formats the date for display purposes.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" * @param date The date to be formatted.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" * @return A string representing the formatted date.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" private String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" return date.format(formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":52}},{"path":"src/main/java/dre/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" * Represents a generic task.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" private String description;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" * Creates a default generic task.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" public Task() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" description \u003d \"default\";","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" * Creates a new generic task.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" * @param newTask The description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" public Task(String newTask){","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" description \u003d newTask;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" * Checks if the task is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" * @return true if the task is done, false otherwise.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" return isDone;","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" * Marks the task as done, no matter the current status of task.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" public void done() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" * Unmarks the task as not done, no matter the current status of task.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" public void undo() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" * Generates the status icon that indicates whether the task is done.","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" * @return The status icon.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" * Provides a formatted string for saving this task to a file.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" return getStatusIcon() + \"|\" + description;","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" * Converts the task to a string format for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string representing this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":" return description;","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":84}},{"path":"src/main/java/dre/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents a list of tasks, providing functionalities to manage and manipulate tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * Creates a new empty task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public TaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" * Creates a new task list with the given initial tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" * @param tasks A list of tasks to initialize the TaskList with.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" * Changes the index starting from 1 in the wrapper class to start from 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" * @param index the index to be adjusted","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" * @return adjusted index","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" private int adjustIndex(int index) {","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" return index - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" * Marks a task as done using its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If the provided index is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" public void mark(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" Task task \u003d tasks.get(adjustIndex(index));","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" task.done();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid dre.task index.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" * Marks a task as undone using its index.","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If the provided index is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" public void unmark(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" Task task \u003d tasks.get(adjustIndex(index));","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" task.undo();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid dre.task index.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" * Retrieves a task from the list using its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If the provided index is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" public Task getTask(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" return tasks.get(adjustIndex(index));","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid dre.task index.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"andrefoo"},"content":" * Deletes a task from the list using its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"andrefoo"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If the provided index is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"andrefoo"},"content":" public void deleteTask(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"andrefoo"},"content":" tasks.remove(adjustIndex(index));","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid dre.task index.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"andrefoo"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"andrefoo"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"andrefoo"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"andrefoo"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"andrefoo"},"content":" * Finds task in the tasklist that contain the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"andrefoo"},"content":" * @param keyword The String used for search","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"andrefoo"},"content":" * @return TaskList of tasks that match the search","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"andrefoo"},"content":" public TaskList findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"andrefoo"},"content":" List\u003cTask\u003e foundTasks \u003d this.tasks.stream()","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"andrefoo"},"content":" .filter(task -\u003e task.getDescription().contains(keyword))","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"andrefoo"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"andrefoo"},"content":" return new TaskList(foundTasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"andrefoo"},"content":" * Retrieves the size (number of tasks) of the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"andrefoo"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"andrefoo"},"content":" public int size() {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"andrefoo"},"content":" return tasks.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":129}},{"path":"src/main/java/dre/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" * Represents a simple to-do task.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Creates a new to-do task.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" * @param task The description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" public ToDo(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" * Provides a formatted string for saving this to-do task to a file.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" return \"T|\" + super.fileSaveFormat();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" * Converts the task to a string format for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" * @return A formatted string representing this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":36}},{"path":"src/main/java/dre/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import dre.task.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import dre.exception.DreException;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import dre.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" * Represents the User Interface responsible for interactions between the user and the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" * Displays an error message indicating issues with loading tasks from storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" * @return loading error message","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public String generateLoadingErrorString() {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" return \"Error reading tasks from file.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" * Displays a specified error message to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" public String generateErrorString(String message) {","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" return message;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" * Displays the welcome message to the user upon starting the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" * @return welcome message","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" return \"Hello! I\u0027m Dre\\n\" +","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" \"What can I do for you?\";","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" * Displays the goodbye message to the user upon exiting the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" * Generates a representation of the tasks present in the user\u0027s task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" * @param tasks The task list to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If there is an error while processing the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" public String generateTasksString(TaskList tasks) throws DreException {","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" StringBuilder sb \u003d new StringBuilder(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" sb.append(i).append(\". \").append(tasks.getTask(i)).append(\"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" return sb.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" * Generates a message indicating a task has been unmarked.","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" * @param task The task that was unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the unmarked task message.","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" public String generateUnmarkedTaskString(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" return \"Ok! I\u0027ve marked this task as undone:\\n\" + task;","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" * Generates a message indicating a task has been deleted.","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the deleted task message.","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" public String generateDeletedTaskString(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":" return \"Task deleted:\\n\" + task;","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":" * Generates a message indicating a task has been added.","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"andrefoo"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"andrefoo"},"content":" * @param totalTasks The total number of tasks in the task list after addition.","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the added task message.","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"andrefoo"},"content":" public String generateAddedTaskString(Task task, int totalTasks) {","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"andrefoo"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + task + \"\\nNow you have \" + totalTasks + \" tasks in the list.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"andrefoo"},"content":" * Generates a message indicating a task has been marked as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"andrefoo"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the marked task message.","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"andrefoo"},"content":" public String generateMarkedTaskString(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"andrefoo"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task;","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"andrefoo"},"content":" * Generates a message indicating the tasks that match the search.","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"andrefoo"},"content":" * @param tasks The tasks that match the search description.","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"andrefoo"},"content":" * @return String representation of the tasks that match the search.","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"andrefoo"},"content":" * @throws DreException If there is an error while processing the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"andrefoo"},"content":" public String generateFoundTasksString(TaskList tasks) throws DreException {","lastModifiedDate":"2023-09-13"},{"lineNumber":112,"author":{"gitId":"andrefoo"},"content":" if (tasks.size() \u003c 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"andrefoo"},"content":" return \"Sorry, no tasks match that description.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"andrefoo"},"content":" StringBuilder sb \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":116,"author":{"gitId":"andrefoo"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"andrefoo"},"content":" sb.append(i).append(\". \").append(tasks.getTask(i)).append(\"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":118,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"andrefoo"},"content":" return sb.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"andrefoo"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"andrefoo"},"content":" * Reads the user\u0027s command input.","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"andrefoo"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"andrefoo"},"content":" * @return The user\u0027s input as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"andrefoo"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"andrefoo"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"andrefoo"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"andrefoo"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":131}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"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-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"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\"dre.MainWindow\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"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-13"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"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-13"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"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-13"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"andrefoo":19}},{"path":"src/test/java/dre/DreTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class DreTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class CommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/ExitCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class ExitCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/ListCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class ListCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/command/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class UnmarkCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/exception/DreExceptionTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.exception;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class DreExceptionTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat1() {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" Deadline testDeadline \u003d new Deadline(\"learn to fly plane\", LocalDate.parse(\"2001-09-11\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"D| |learn to fly plane|2001-09-11\");","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat2() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" Deadline testDeadline \u003d new Deadline(\" extra spaces\", LocalDate.parse(\"2001-09-11\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"D| | extra spaces|2001-09-11\");","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat3() {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" Deadline testDeadline \u003d new Deadline(\"learn to fly plane\", LocalDate.parse(\"2001-01-31\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"D| |learn to fly plane|2001-01-31\");","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" public void testToString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" Deadline testDeadline \u003d new Deadline(\"learn to fly plane\", LocalDate.parse(\"2001-09-11\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.toString(), \"[D][ ] learn to fly plane (by: Sep 11 2001)\");","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":34}},{"path":"src/test/java/dre/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"public class EventTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat1() {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" Event testEvent \u003d new Event(\"get blueprint\", LocalDate.parse(\"2001-09-11\"),","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" LocalDate.parse(\"2001-09-11\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" assertEquals(testEvent.fileSaveFormat(), \"E| |get blueprint|2001-09-11|2001-09-11\");","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat2() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" //test space trim","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" Event testEvent \u003d new Event(\" extra spaces\", LocalDate.parse(\"2001-09-11\"),","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" LocalDate.parse(\"2001-09-11\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" assertEquals(testEvent.fileSaveFormat(), \"E| | extra spaces|2001-09-11|2001-09-11\");","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat3() {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" //test different date format entry","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" Event testEvent \u003d new Event(\"learn to fly plane\", LocalDate.parse(\"2001-01-31\"),","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" LocalDate.parse(\"2001-01-31\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" assertEquals(testEvent.fileSaveFormat(), \"E| |learn to fly plane|2001-01-31|2001-01-31\");","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" public void testToString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" Event testEvent \u003d new Event(\"learn to fly plane\", LocalDate.parse(\"2001-09-01\"),","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" LocalDate.parse(\"2001-09-07\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" assertEquals(testEvent.toString(), \"[E][ ] learn to fly plane (from: Sep 01 2001 to: Sep 07 2001)\");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":39}},{"path":"src/test/java/dre/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"src/test/java/dre/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" public void testInitialTaskStatus() {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" Task task \u003d new Task(\"Sample\");","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" assertFalse(task.isDone(), \"New task should not be marked as done.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" public void testMarkTaskAsDone() {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" Task task \u003d new Task(\"Sample\");","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" task.done();","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" assertTrue(task.isDone(), \"Task should be marked as done after calling markAsDone().\");","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat() {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" Task task \u003d new Task(\"something something\");","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" assertEquals(task.fileSaveFormat(), \" |something something\");","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":28}},{"path":"src/test/java/dre/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat1() {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" ToDo testDeadline \u003d new ToDo(\"find a boeing\");","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"T| |find a boeing\");","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat2() {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" //test space trim","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" ToDo testDeadline \u003d new ToDo(\" extra spaces\");","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"T| | extra spaces\");","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" public void testFileSaveFormat3() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" //test different date format entry","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" ToDo testDeadline \u003d new ToDo(\"learn to fly plane\");","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.fileSaveFormat(), \"T| |learn to fly plane\");","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" public void testToString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" ToDo testDeadline \u003d new ToDo(\"learn to fly plane\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" assertEquals(testDeadline.toString(), \"[T][ ] learn to fly plane\");","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":32}},{"path":"src/test/java/dre/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"package dre.ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class UiTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"andrefoo":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"todo one","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"deadline two /by time","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"event three /from now /to later","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"andrefoo":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":"-"},"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":"andrefoo"},"content":"java -classpath ..\\bin Dre \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andrefoo":1,"-":20}}] diff --git a/andrefoo_ip_master/commits.json b/andrefoo_ip_master/commits.json index 32aaf422..2823ff99 100644 --- a/andrefoo_ip_master/commits.json +++ b/andrefoo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"andrefoo":[{"date":"2023-08-24","commitResults":[{"hash":"ac8880ee77d6b73175774bc210526b3bbd85ce69","isMergeCommit":false,"messageTitle":"Level-0 Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":10}}},{"hash":"65f876dfc5284e4cb9fa5ba347ec43964cbecd00","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"6f191606b51b7d02c265310712191fa488b243c9","isMergeCommit":false,"messageTitle":"Level-2 Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"b9e0b92108a3167edab97d903855a0ca5a69a5b1","isMergeCommit":false,"messageTitle":"Level-3 and 4 Mark as Done ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":16}}}]},{"date":"2023-08-26","commitResults":[{"hash":"06691695f0cda637b12705f2d0a9889cf982b490","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text Ui Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"3f8e2fdbcdedda84bf34c7d609c891dd1acbdc3f","isMergeCommit":false,"messageTitle":"Level 5: Error Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":21}}},{"hash":"413cd754292bf363fa65cb5fc5eb4c6c5b6bd106","isMergeCommit":false,"messageTitle":"Level 6: Support Delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a21646be2ab0d7f258980bfda7a686bcb5f7a7d7","isMergeCommit":false,"messageTitle":"Update Dre.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":10}}},{"hash":"6b4cf749f39efb1daad92d2bce805868c0f0f90d","isMergeCommit":false,"messageTitle":"Level 7: Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":1}}},{"hash":"7e770d3d41da27060aaf07cf4e71b97fc0a8e429","isMergeCommit":false,"messageTitle":"Level 7: Save","messageBody":"","tags":["Level-7-samplesave"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"4608cc34dc037908e79292253502d581fde07987","isMergeCommit":false,"messageTitle":"Add date feature","messageBody":"Deadline and Event date stored in LocalDate format\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":111,"deletions":48}}},{"hash":"e38faf5b8c04221b6b73ab2c305fc55e0815fe26","isMergeCommit":false,"messageTitle":"Delete comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":14}}}]},{"date":"2023-09-04","commitResults":[{"hash":"4a2dbabc1ea83406ac798c019c157d06be8619c2","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"Improved OOP in a more user oriented fashion.\nAdd Command classes\nAdd Ui class\nAdd Storage class\nAdd Parser class\nAdd TaskList class\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":393,"deletions":0}}}]},{"date":"2023-09-07","commitResults":[{"hash":"a7fd42a5b5744e22acd3a4e4397572b76df78fec","isMergeCommit":false,"messageTitle":"Organize classes into dedicated packages","messageBody":"Refactored the codebase to introduce a modular package structure.\n\n- Created \u0027dre\u0027 for Dre main interface and subpackages.\n- Created `dre.task` for task-related classes.\n- Created `dre.command` for command-related classes.\n- Created \u0027dre.parser\u0027 for the parsing classes.\n- Created \u0027dre.exception\u0027 for chatbot specific exceptions.\n- Created \u0027dre.ui\u0027 for ui related classes.\n\nThis structure will help in better organizing the project as it scales and provides clearer segregation of responsibilities.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":112,"deletions":264}}}]},{"date":"2023-09-08","commitResults":[{"hash":"42c2d76896ffaa5118f17c9ea5f60cf6224a4a39","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["Add-Gradle-Support","A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"9b151f6e2113b383a5111673789fbc91b3ceac06","isMergeCommit":false,"messageTitle":"Amend build.gradle file access name","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-09","commitResults":[{"hash":"c1989e22180312d610782bfbda2b56d8610a28c3","isMergeCommit":false,"messageTitle":"Add unit tests for Task package classes","messageBody":"This commit introduces unit tests for the classes within the Task package:\n\n- `TaskTest`: Tests basic task functionalities like marking as done.\n- `DeadlineTest`: Tests specific deadline functionalities, e.g., date retrieval.\n- `EventTest`: Tests specific event functionalities, like event date checking.\n- `ToDoTest`: Tests todo-specific behaviors, like description retrieval.\n\nThese tests aim to ensure that the basic methods and behaviors of task-related classes function as expected and help in identifying potential regressions in future refactoring or feature additions.\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":199,"deletions":11}}},{"hash":"f1fbdbab7e76b064aad51182571e91e91309961b","isMergeCommit":false,"messageTitle":"Amend tests for dre.test package","messageBody":"testToString bug: changed printed date format\ntestFileSaveFormat bug: LocalDate.parse input date format changed to yyyy-MM-dd\n","tags":["bug-fixing","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0},"java":{"insertions":8,"deletions":13}}},{"hash":"7e6d97ad43eb933dcecff8898ff1a82105815521","isMergeCommit":false,"messageTitle":"Delete unused imports","messageBody":"Parser: java.util.Arrays not utilised.\nDeadlineTest: junit BeforeAll not utilised.\nToDoTest: java.time.LocalDate not utilised.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":5}}},{"hash":"2852c6a963cf67299a97b82c13338b15b36a3e32","isMergeCommit":false,"messageTitle":"Include final keyword on variables","messageBody":"Added final keyword for some unchanging variables in Dre, Deadline, Event.\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"6cf528d983e9cb7581581b7d05a400041f549e6f","isMergeCommit":false,"messageTitle":"Add JavaDoc comments for all classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":374,"deletions":9}}},{"hash":"013e3ef2618d6b41852a54a1499f44cb6d0ace8d","isMergeCommit":false,"messageTitle":"Implement Java Coding Standard","messageBody":"Shortened lines that were near 120 characters\nRemoved wildcard imports\n","tags":["A-Codingstandard"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":9}}},{"hash":"9ae5731d0feab3d10a6a76bb697437fe30bce7c5","isMergeCommit":false,"messageTitle":"Add find function in chatbot","messageBody":"Add FindCommand\nEdit Parser.parse to include find command\nAdd a few methods in Task and TaskList to accommodate word finding\nAdd showFoundTasks method in Ui\n\nThis helps the user easily find tasks in a longer list.\n","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":87,"deletions":1}}},{"hash":"894a1e97b075d86c6179214c0bc4a340a6dca2bd","isMergeCommit":true,"messageTitle":"Resolve merge conflict between A-CodingStandard and Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ac5f287572e40c99569979c0318244d7f5105420","isMergeCommit":true,"messageTitle":"Resolve merge conflict between master and A-JavaDocs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f2061a366c6292240c7978a4597e59f0aded5746","isMergeCommit":false,"messageTitle":"Add import in Parser","messageBody":"Parser: cannot resolve symbol \u0027FindCommand\u0027\n\nCannot compile. Add import for FindCommand to resolve error.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"c0dd5d59ee3017efe6e4c0862a00f45d8bacdef6","isMergeCommit":false,"messageTitle":"Update JavaDocs for Level-9 functions","messageBody":"Add Javadocs comments for FindCommand.\n","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":5}}}]},{"date":"2023-09-13","commitResults":[{"hash":"fb51216a81a5cb5ddaee599288fc52b1dbc6b897","isMergeCommit":false,"messageTitle":"Implement JavaFX for new GUI","messageBody":"Adds JavaFX compatibility\n","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":3},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":368,"deletions":78}}}]}]},"authorFileTypeContributionMap":{"andrefoo":{"java":1547,"md":0,"fxml":35,"sh":0,"bat":1,"gradle":21,"txt":12}},"authorContributionVariance":{"andrefoo":37292.945},"authorDisplayNameMap":{"andrefoo":"CS2103T-W12-4 ANDR.. JIE"}} +{"authorDailyContributionsMap":{"andrefoo":[{"date":"2023-08-24","commitResults":[{"hash":"ac8880ee77d6b73175774bc210526b3bbd85ce69","isMergeCommit":false,"messageTitle":"Level-0 Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":10}}},{"hash":"65f876dfc5284e4cb9fa5ba347ec43964cbecd00","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"6f191606b51b7d02c265310712191fa488b243c9","isMergeCommit":false,"messageTitle":"Level-2 Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"b9e0b92108a3167edab97d903855a0ca5a69a5b1","isMergeCommit":false,"messageTitle":"Level-3 and 4 Mark as Done ToDos, Events, Deadlines","messageBody":"","tags":["Level-4","Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":16}}}]},{"date":"2023-08-26","commitResults":[{"hash":"06691695f0cda637b12705f2d0a9889cf982b490","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text Ui Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"3f8e2fdbcdedda84bf34c7d609c891dd1acbdc3f","isMergeCommit":false,"messageTitle":"Level 5: Error Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":21}}},{"hash":"413cd754292bf363fa65cb5fc5eb4c6c5b6bd106","isMergeCommit":false,"messageTitle":"Level 6: Support Delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a21646be2ab0d7f258980bfda7a686bcb5f7a7d7","isMergeCommit":false,"messageTitle":"Update Dre.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":10}}},{"hash":"6b4cf749f39efb1daad92d2bce805868c0f0f90d","isMergeCommit":false,"messageTitle":"Level 7: Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":1}}},{"hash":"7e770d3d41da27060aaf07cf4e71b97fc0a8e429","isMergeCommit":false,"messageTitle":"Level 7: Save","messageBody":"","tags":["Level-7-samplesave"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"4608cc34dc037908e79292253502d581fde07987","isMergeCommit":false,"messageTitle":"Add date feature","messageBody":"Deadline and Event date stored in LocalDate format\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":111,"deletions":48}}},{"hash":"e38faf5b8c04221b6b73ab2c305fc55e0815fe26","isMergeCommit":false,"messageTitle":"Delete comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":14}}}]},{"date":"2023-09-04","commitResults":[{"hash":"4a2dbabc1ea83406ac798c019c157d06be8619c2","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"Improved OOP in a more user oriented fashion.\nAdd Command classes\nAdd Ui class\nAdd Storage class\nAdd Parser class\nAdd TaskList class\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":393,"deletions":0}}}]},{"date":"2023-09-07","commitResults":[{"hash":"a7fd42a5b5744e22acd3a4e4397572b76df78fec","isMergeCommit":false,"messageTitle":"Organize classes into dedicated packages","messageBody":"Refactored the codebase to introduce a modular package structure.\n\n- Created \u0027dre\u0027 for Dre main interface and subpackages.\n- Created `dre.task` for task-related classes.\n- Created `dre.command` for command-related classes.\n- Created \u0027dre.parser\u0027 for the parsing classes.\n- Created \u0027dre.exception\u0027 for chatbot specific exceptions.\n- Created \u0027dre.ui\u0027 for ui related classes.\n\nThis structure will help in better organizing the project as it scales and provides clearer segregation of responsibilities.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":112,"deletions":264}}}]},{"date":"2023-09-08","commitResults":[{"hash":"42c2d76896ffaa5118f17c9ea5f60cf6224a4a39","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["Add-Gradle-Support","A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"9b151f6e2113b383a5111673789fbc91b3ceac06","isMergeCommit":false,"messageTitle":"Amend build.gradle file access name","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-09","commitResults":[{"hash":"c1989e22180312d610782bfbda2b56d8610a28c3","isMergeCommit":false,"messageTitle":"Add unit tests for Task package classes","messageBody":"This commit introduces unit tests for the classes within the Task package:\n\n- `TaskTest`: Tests basic task functionalities like marking as done.\n- `DeadlineTest`: Tests specific deadline functionalities, e.g., date retrieval.\n- `EventTest`: Tests specific event functionalities, like event date checking.\n- `ToDoTest`: Tests todo-specific behaviors, like description retrieval.\n\nThese tests aim to ensure that the basic methods and behaviors of task-related classes function as expected and help in identifying potential regressions in future refactoring or feature additions.\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":199,"deletions":11}}},{"hash":"f1fbdbab7e76b064aad51182571e91e91309961b","isMergeCommit":false,"messageTitle":"Amend tests for dre.test package","messageBody":"testToString bug: changed printed date format\ntestFileSaveFormat bug: LocalDate.parse input date format changed to yyyy-MM-dd\n","tags":["bug-fixing","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0},"java":{"insertions":8,"deletions":13}}},{"hash":"7e6d97ad43eb933dcecff8898ff1a82105815521","isMergeCommit":false,"messageTitle":"Delete unused imports","messageBody":"Parser: java.util.Arrays not utilised.\nDeadlineTest: junit BeforeAll not utilised.\nToDoTest: java.time.LocalDate not utilised.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":5}}},{"hash":"2852c6a963cf67299a97b82c13338b15b36a3e32","isMergeCommit":false,"messageTitle":"Include final keyword on variables","messageBody":"Added final keyword for some unchanging variables in Dre, Deadline, Event.\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"6cf528d983e9cb7581581b7d05a400041f549e6f","isMergeCommit":false,"messageTitle":"Add JavaDoc comments for all classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":374,"deletions":9}}},{"hash":"013e3ef2618d6b41852a54a1499f44cb6d0ace8d","isMergeCommit":false,"messageTitle":"Implement Java Coding Standard","messageBody":"Shortened lines that were near 120 characters\nRemoved wildcard imports\n","tags":["A-Codingstandard","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":9}}},{"hash":"9ae5731d0feab3d10a6a76bb697437fe30bce7c5","isMergeCommit":false,"messageTitle":"Add find function in chatbot","messageBody":"Add FindCommand\nEdit Parser.parse to include find command\nAdd a few methods in Task and TaskList to accommodate word finding\nAdd showFoundTasks method in Ui\n\nThis helps the user easily find tasks in a longer list.\n","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":87,"deletions":1}}},{"hash":"894a1e97b075d86c6179214c0bc4a340a6dca2bd","isMergeCommit":true,"messageTitle":"Resolve merge conflict between A-CodingStandard and Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ac5f287572e40c99569979c0318244d7f5105420","isMergeCommit":true,"messageTitle":"Resolve merge conflict between master and A-JavaDocs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f2061a366c6292240c7978a4597e59f0aded5746","isMergeCommit":false,"messageTitle":"Add import in Parser","messageBody":"Parser: cannot resolve symbol \u0027FindCommand\u0027\n\nCannot compile. Add import for FindCommand to resolve error.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"c0dd5d59ee3017efe6e4c0862a00f45d8bacdef6","isMergeCommit":false,"messageTitle":"Update JavaDocs for Level-9 functions","messageBody":"Add Javadocs comments for FindCommand.\n","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":5}}}]},{"date":"2023-09-13","commitResults":[{"hash":"fb51216a81a5cb5ddaee599288fc52b1dbc6b897","isMergeCommit":false,"messageTitle":"Implement JavaFX for new GUI","messageBody":"Adds JavaFX compatibility\n","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":3},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":368,"deletions":78}}}]},{"date":"2023-09-16","commitResults":[{"hash":"af55446d8bea9aa2f5aaf74899dd73e803660897","isMergeCommit":false,"messageTitle":"Incorporate Java assertions","messageBody":"Certain application invariants in the Dre and Parser classes are not validated.\n\nUnchecked assumptions can lead to subtle bugs.\n\nLet\u0027s add Java assertions to:\n- Validate the initialization of storage, tasks, and image resources in `Dre.java`.\n- Ensure input strings in `Parser.java` are valid and parsed objects are non-null.\n\nAssertions provide early feedback during development, ensuring application invariants hold true, making the system more robust.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":4},"java":{"insertions":18,"deletions":3}}},{"hash":"109c55f1903769d3e435f42a335ed379a17780ae","isMergeCommit":false,"messageTitle":"Refactor multiple classes for clarity and maintainability","messageBody":"Several classes in the project contained magic numbers, long lines, and lacked encapsulation.\n\nLet\u0027s:\n Replace magic numbers with named constants for better clarity.\n Break up long lines to enhance code readability.\n Encapsulate specific functionalities into private methods.\n\nDoing so enhances code readability, reduces potential errors, and makes the codebase easier to maintain.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":37}}},{"hash":"4d0a5204ef2d5e3b9586c776483943644eefb8ab","isMergeCommit":true,"messageTitle":"Merge pull request #3 from andrefoo/branch-A-CodeQuality","messageBody":"Merge branch-A-CodeQuality","fileTypesAndContributionMap":{}},{"hash":"d4be28ceffb8acb9fdb7ae587dadd8558e1b9499","isMergeCommit":true,"messageTitle":"Merge pull request #2 from andrefoo/branch-A-Assertions","messageBody":"Merge branch-A-Assertions","fileTypesAndContributionMap":{}},{"hash":"93b861c5da42fa00497c5755ee3d03e7201c8133","isMergeCommit":false,"messageTitle":"Update code quality","messageBody":"Some classes lack comprehensive\ndocumentation and do not follow naming\nconventions.\n\nTo improve code readability and support\ndevelopers:\n- Let\u0027s add Javadoc comments to these classes,\nproviding clear explanations and details on\ntheir functionalities.\n- refactor variable names such as \u0027done\u0027 to\n\u0027isDone\u0027 to explain themselves\n","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":42}}},{"hash":"9083a27a9e82bb352cde30066150bc67273e1aaa","isMergeCommit":true,"messageTitle":"Merge pull request #4 from andrefoo/iP-code-quality-feedback","messageBody":"Update code quality","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"andrefoo":{"java":1633,"md":0,"fxml":35,"sh":0,"bat":1,"gradle":18,"txt":12}},"authorContributionVariance":{"andrefoo":35026.664},"authorDisplayNameMap":{"andrefoo":"CS2103T-W12-4 ANDR.. JIE"}} diff --git a/angkyakdifp_ip_master/authorship.json b/angkyakdifp_ip_master/authorship.json index 77815aec..0d39efa3 100644 --- a/angkyakdifp_ip_master/authorship.json +++ b/angkyakdifp_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":"angkyakdifp"},"content":"repositories {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" mavenCentral()","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"dependencies {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-10"},{"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":"-"},"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":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"angkyakdifp":20,"-":42}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" * An interactive chatBot that helps it user to maintain their tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * Constructs an instance of Duke chatBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" this.tasks \u003d this.storage.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException var2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" * Runs the duke chatBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" this.ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" String fullCommand \u003d this.ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" this.ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" this.storage.writeFile(this.tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException var7) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" this.ui.showError(var7.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" } finally {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" this.ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" * Returns the response of our input.","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" * @param input the inputted text in the gui.","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" * @return the response of our input.","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" this.ui.showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":" this.storage.writeFile(this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException var7) {","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" return this.ui.showError(var7.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" * Returns the welcome message of our bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":" * @return the welcoming message of our bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" public String getIntroduction() {","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" return this.ui.showWelcome();","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" * Starts the duke chatBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"angkyakdifp"},"content":" String logo \u003d \" ____ _ \\n| _ \\\\ _ _| | _____ \\n| | | | | | | |/ / _ \\\\\\n| |_| | |_| | \"","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"angkyakdifp"},"content":" + \"\u003c __/\\n|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"angkyakdifp"},"content":" duke.run();","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":92,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"angkyakdifp":88,"-":4}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.gui.Main;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"angkyakdifp":13}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.InvalidInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command Add that add a task to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" private String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * Constructs an AddCommand with a specified description of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" * @param description A string describing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" * Executes the AddCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If there are an invalid Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" int index \u003d description.indexOf(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" String taskDescription \u003d description.substring(index + 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" if (index \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" if (taskDescription.equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" } else if (taskDescription.equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" } else if (taskDescription.equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" String type \u003d description.substring(0, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" if (type.equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" tasks.add(new Todo(taskDescription));","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" } else if (type.equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" int byIndex \u003d taskDescription.indexOf(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"Deadline must contain /by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" tasks.add(new Deadline(taskDescription));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" } else if (type.equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" int fromIndex \u003d taskDescription.indexOf(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"Event must contain /from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":" int toIndex \u003d taskDescription.substring(fromIndex).indexOf(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":" if (toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"Event must contain /to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" tasks.add(new Event(taskDescription));","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" return ui.showAdd(tasks.getTask(tasks.length() - 1), tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":87}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command for the Duke application","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" * Executes the Command and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If there are an invalid Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.TaskNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command Delete that delete a task from the list","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" private final Integer taskIndex;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a DeleteCommand with a specified description of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" * @param taskIndex the task index that will be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" public DeleteCommand(Integer taskIndex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" * Executes the DeleteCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If there are an invalid Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.length()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" throw new TaskNotFoundException(\"Task Not Found :\u0027(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" Task taskTemp \u003d tasks.getTask(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" tasks.delete(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" return ui.showDelete(taskTemp, tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":54}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command Exit that will shut the program when being executed.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" * Executes the ExitCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" return ui.showExit();","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":35}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command Find that find a task from the list","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" private String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" * Constructs an FindCommand to find a specific task.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * @param keyword A string describing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" * Executes the FindCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" for (int i \u003d 0; i \u003c tasks.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" if (tasks.getTask(i).contains(keyword)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" taskList.add(tasks.getTask(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" return ui.showFind(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"angkyakdifp":51}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command List that display all the task on the list","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" * Executes the ListCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" return ui.showList(tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":35}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.TaskNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command Mark that will mark/unmark the task","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" private final Integer taskIndex;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" private final boolean isMarked;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a MarkCommand.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * @param isMarked A boolean that represents if it is a mark or unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" * @param taskIndex the task index that will be mark or unmark.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" public MarkCommand(boolean isMarked, Integer taskIndex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" * Executes the MarkCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If there are an invalid Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.length()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" throw new TaskNotFoundException(\"Task Not Found :\u0027(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" if (isMarked) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" tasks.mark(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" return ui.showMark(tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" tasks.unmark(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" return ui.showUnmark(tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":60}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":" * Represents the exceptions for Duke application.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a DukeException with a specified message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @param message A message describing the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":17}},{"path":"src/main/java/duke/exception/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":" * Represents the exceptions for an Invalid Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"public class InvalidInputException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a InvalidInputException with a specified message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @param message A message describing the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" public InvalidInputException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":17}},{"path":"src/main/java/duke/exception/InvalidTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":" * Represents the exceptions for an Invalid Input of Date.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"public class InvalidTimeException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a InvalidTimeException with a specified message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @param message A message describing the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" public InvalidTimeException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":17}},{"path":"src/main/java/duke/exception/TaskNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":" * Represents the exceptions for the unfounded .","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"public class TaskNotFoundException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a TaskNotFoundException with a specified message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @param message A message describing the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" public TaskNotFoundException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":17}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.gui;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" private Label text;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" text \u003d l;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" displayPicture.setFitWidth(70.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" displayPicture.setFitHeight(70.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"angkyakdifp":47}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.gui;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" private Image bot \u003d new Image(this.getClass().getResourceAsStream(\"/images/Footycouch.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" private Scene scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" stage.setMinWidth(450.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" mainLayout.setPrefSize(450.0, 600.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setPrefSize(435, 535);","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" handleUserInput();","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"angkyakdifp"},"content":" handleUserInput();","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"angkyakdifp"},"content":" DialogBox.getDukeDialog(new Label(duke.getIntroduction()), new ImageView(bot))","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"angkyakdifp"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"angkyakdifp"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"angkyakdifp"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"angkyakdifp"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"angkyakdifp"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"angkyakdifp"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"angkyakdifp"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"angkyakdifp"},"content":" return textToAdd;","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"angkyakdifp"},"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":106,"author":{"gitId":"angkyakdifp"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"angkyakdifp"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"angkyakdifp"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"angkyakdifp"},"content":" Label dukeText \u003d new Label(duke.getResponse(userInput.getText()));","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"angkyakdifp"},"content":" DialogBox.getUserDialog(userText, new ImageView(user)),","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"angkyakdifp"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(bot))","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"angkyakdifp"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"angkyakdifp"},"content":" if (userInput.getText() \u003d\u003d \"bye\") {","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"angkyakdifp"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"angkyakdifp"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"angkyakdifp":121}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * Parses inputs from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" * Parses the input into a command.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * @param input the input that will be parsed.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" * @return A command representing the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" String[] splittedCommand \u003d input.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" } else if (splittedCommand[0].equalsIgnoreCase(\"mark\") \u0026\u0026 splittedCommand.length \u003d\u003d 2","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" \u0026\u0026 isInteger((splittedCommand[1]))) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" return new MarkCommand(true, Integer.parseInt(splittedCommand[1]) - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" } else if (splittedCommand[0].equalsIgnoreCase(\"unmark\") \u0026\u0026 splittedCommand.length \u003d\u003d 2","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" \u0026\u0026 isInteger((splittedCommand[1]))) {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" return new MarkCommand(false, Integer.parseInt(splittedCommand[1]) - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" } else if (splittedCommand[0].equalsIgnoreCase(\"delete\") \u0026\u0026 splittedCommand.length \u003d\u003d 2","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" \u0026\u0026 isInteger((splittedCommand[1]))) {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" return new DeleteCommand(Integer.parseInt(splittedCommand[1]) - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" } else if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" } else if (splittedCommand[0].equalsIgnoreCase(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" return new FindCommand(input.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" return new AddCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" private static boolean isInteger(String str) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" Integer check \u003d Integer.parseInt(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":54}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" * Stores the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" private final File FILE;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" * Construct a storage and make a new file if no file exists yet.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If the file cannot be made.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" public Storage() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" File directory \u003d new File(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" this.FILE \u003d new File(\"./data/duke\");","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" if (!FILE.exists()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" this.FILE.createNewFile();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" throw new DukeException(\"Cannot Make File :\u0027(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" * Reads and loads the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" * @return an Array","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If the file cannot be read.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" public TaskList load() throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" Scanner sc \u003d new Scanner(FILE);","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" String type \u003d input.substring(0, 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" String done \u003d input.substring(4, 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" String description \u003d input.substring(8);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" if (type.equalsIgnoreCase(\"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" taskList.add(new Todo(description));","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" } else if (type.equalsIgnoreCase(\"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" taskList.add(new Deadline(description.replaceFirst(\"\\\\|\", \"/by\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" } else if (type.equalsIgnoreCase(\"E\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" taskList.add(new Event(description.replaceFirst(\"\\\\|\", \"/from\").replaceFirst(\"\\\\|\", \"/to\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" if (done.equalsIgnoreCase(\"X\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" taskList.getTask(taskList.length() - 1).mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" throw new DukeException(\"Cannot Read File :\u0027(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" * Rewrite the file after a tasks being added or edited.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks the TaskList that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If the file cannot be written.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" public void writeFile(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" FileWriter fileWriter \u003d new FileWriter(this.FILE);","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" for (int i \u003d 0; i \u003c tasks.length(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" fileWriter.write(tasks.getTaskInput(i) + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"angkyakdifp"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"angkyakdifp"},"content":" throw new DukeException(\"Cannot Write File :\u0027(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"angkyakdifp":91}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.InvalidTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Deadline of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" protected LocalDate deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a deadline with a specified description and date.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" * @param description A string describing the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If the deadline date is not a valid date.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" public Deadline(String description) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" super(description.substring(0, description.indexOf(\"/by\") - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" int byIndex \u003d description.indexOf(\"/by\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" this.deadline \u003d LocalDate.parse(description.substring(byIndex + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidTimeException(\"Invalid input of Date\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" * Returns a String representing the Deadline that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" * @return the string representing the Deadline that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" public String getInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" return \"D | \" + this.getStatusIcon() + \" | \" + this.description + \" | \" + this.deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" * Returns the String representation of a Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" * @return the String representation of a Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" return \"[D] [\" + this.getStatusIcon() + \"] \" + this.description + \" (by: \"","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.InvalidTimeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Event of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" protected LocalDate starting;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" protected LocalDate ending;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * Constructs an Event with a specified description and date.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" * @param description A string describing the Event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If the deadline date is not a valid date.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" public Event(String description) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" super(description.substring(0, description.indexOf(\"/from\") - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" int fromIndex \u003d description.indexOf(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" String tempStarting \u003d description.substring(fromIndex + 6, fromIndex + 16);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" int toIndex \u003d fromIndex + 21;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" this.starting \u003d LocalDate.parse(tempStarting);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" this.ending \u003d LocalDate.parse(description.substring(toIndex));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" if (this.starting.isAfter(this.ending)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidTimeException(\"The starting time could not pass the ending time\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidTimeException(\"Invalid input of Date\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" * Returns a String representing the Event that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" * @return the string representing the Event that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" public String getInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" return \"E | \" + this.getStatusIcon() + \" | \" + this.description + \" | \" + this.starting + \" | \" + this.ending;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" * Returns the String representation of an Event.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" * @return the String representation of an Event.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" return \"[E] [\" + this.getStatusIcon() + \"] \" + this.description","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" + \" (from: \" + this.starting.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" + \" to: \" + this.ending.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":61}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a Task with a specified description.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" * @param description A string describing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" * Returns a status icon of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" * @return a String representing a status icon of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" * Marks the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" * Unmarks the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" * Checks whether the description contains a specific keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" * @param keyword a keyword that will be checked","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean representing whether the description contain the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" * Returns a String representing the Task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" * @return the string representing the Task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" public abstract String getInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":63}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" * Represents the list of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" * Marks the specific task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" * @param index an integer representing the index of a task that will be marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" public void mark(Integer index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" tasks.get(index).mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" * Unmarks the specific task.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" * @param index an integer representing the index of a task that will be unmarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" public void unmark(Integer index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" tasks.get(index).unmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" * Return the specific task","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" * @param index an integer representing the index of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" public Task getTask(Integer index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" * Returns a String representing the specific task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" * @param index an integer representing the index of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" * @return the String representing the specific task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" public String getTaskInput(Integer index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" return tasks.get(index).getInput();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" * Returns the size of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" * @return the size of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" public int length() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":" return tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" * Add a task to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":" * @param task the task that will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":" * Delete the specified task.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" * @param index an integer representing the index of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" public void delete(Integer index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":" * Returns the String representation of a TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"angkyakdifp"},"content":" * @return the String representation of a TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"angkyakdifp"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"angkyakdifp"},"content":" String taskList \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"angkyakdifp"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"angkyakdifp"},"content":" taskList +\u003d (i + 1) + \".\" + tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"angkyakdifp"},"content":" return taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":99}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a Todo task with a specified description.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" * @param description A string describing the Todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * Returns a String representing the Todo task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" * @return the string representing the Todo task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" public String getInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" return \"T | \" + this.getStatusIcon() + \" | \" + this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" * Returns the String representation of a Todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" * @return the String representation of a Todo Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" return \"[T] [\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":39}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" * User interface for the Duke application.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" * Constructs the User Interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the welcome message.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" String introduction \u003d \" Hello! I\u0027m FootyCouch\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" + \" What can I do for you?\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(introduction);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" return introduction;","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" * Prints the dash line.","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" public void showLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the error message.","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" public String showError(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(\" ☹ OOPS!!! \" + message);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" return \" OOPS!!! \" + message;","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the successful add message.","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" * @param task the specific task that will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" public String showAdd(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d \" Got it. I\u0027ve added this task:\\n\" + \" \" + task + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" + \" Now you have \" + tasks.length() + \" tasks in the list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the successful delete message.","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" * @param task the specific task that will be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" public String showDelete(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d \"Noted. I\u0027ve removed this task:\\n\" + \" \" + task + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" + \"Now you have \" + tasks.length() + \" tasks in the list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the exit message.","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" public String showExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":" return \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the successful mark message.","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"angkyakdifp"},"content":" * @param task the specific task that will be marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"angkyakdifp"},"content":" public String showMark(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d \" Nice! I\u0027ve marked this task as done:\\n\" + \" \" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the successful unmark message.","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"angkyakdifp"},"content":" * @param task the specific task that will be unmarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"angkyakdifp"},"content":" public String showUnmark(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d \" OK, I\u0027ve marked this task as not done yet:\" + \" \" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the successful find message.","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks the list of filtered tasks that will be printed.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"angkyakdifp"},"content":" public String showFind(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d \"Here are the matching tasks in your list:\\n\" + tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the list message.","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks the list of all tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"angkyakdifp"},"content":" public String showList(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"angkyakdifp"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"angkyakdifp"},"content":" * Read the next Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"angkyakdifp"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"angkyakdifp"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":138}},{"path":"src/test/java/duke/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" public void unknownCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" Command command \u003d new AddCommand(\"testing\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" command.execute(new TaskList(), new Ui(), new Storage());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" assertEquals(\"I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" public void invalidDeadline_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" Command command \u003d new AddCommand(\"deadline playing mobile games\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" command.execute(new TaskList(), new Ui(), new Storage());","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" assertEquals(\"Deadline must contain /by\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"angkyakdifp":34}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"public class EventTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" public void invalidTime_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" Task task \u003d new Event(\"event Final Exam /from sunday /to friday\");","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" assertEquals(\"Invalid input of Date\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" public void invalidStartingTime_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" Task task \u003d new Event(\"event Final Exam /from 2023-08-11 /to 2023-08-10\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" assertEquals(\"The starting time could not pass the ending time\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" public void toString_validDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" Task task \u003d new Event(\"event Final Exam /from 2023-08-11 /to 2023-08-13\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" assertEquals(\"[E] [ ] event Final Exam (from: Aug 11 2023 to: Aug 13 2023)\", task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"angkyakdifp":36}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"mark 10","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"event doing homework","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"deadline doing housework","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"event doing homework /from 3pm","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"delete 10","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":19}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"repositories {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" mavenCentral()","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"dependencies {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-10"},{"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":"-"},"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":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"angkyakdifp":20,"-":42}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" * An interactive chatBot that helps it user to maintain their tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * Constructs an instance of Duke chatBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" this.tasks \u003d this.storage.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException var2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" * Runs the duke chatBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" this.ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" String fullCommand \u003d this.ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" this.ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" this.storage.writeFile(this.tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException var7) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" this.ui.showError(var7.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" } finally {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" this.ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" * Returns the response of our input.","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" * @param input the inputted text in the gui.","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" * @return the response of our input.","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" this.ui.showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d c.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":" this.storage.writeFile(this.tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException var7) {","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" return this.ui.showError(var7.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" * Returns the welcome message of our bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":" * @return the welcoming message of our bot.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" public String getIntroduction() {","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" return this.ui.showWelcome();","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" * Starts the duke chatBot.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"angkyakdifp"},"content":" String logo \u003d \" ____ _ \\n| _ \\\\ _ _| | _____ \\n| | | | | | | |/ / _ \\\\\\n| |_| | |_| | \"","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"angkyakdifp"},"content":" + \"\u003c __/\\n|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"angkyakdifp"},"content":" duke.run();","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":92,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"angkyakdifp":88,"-":4}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.gui.Main;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"angkyakdifp":13}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.InvalidInputException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command Add that add a task to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" private String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * Constructs an AddCommand with a specified description of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" * @param description A string describing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" * Executes the AddCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If there are an invalid Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" int index \u003d description.indexOf(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" String taskDescription \u003d description.substring(index + 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" if (index \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" if (taskDescription.equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" } else if (taskDescription.equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" } else if (taskDescription.equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" String type \u003d description.substring(0, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" if (type.equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" tasks.add(new Todo(taskDescription));","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" } else if (type.equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" int byIndex \u003d taskDescription.indexOf(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"Deadline must contain /by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" tasks.add(new Deadline(taskDescription));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" } else if (type.equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" int fromIndex \u003d taskDescription.indexOf(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"Event must contain /from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":" int toIndex \u003d taskDescription.substring(fromIndex).indexOf(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":" if (toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"Event must contain /to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" tasks.add(new Event(taskDescription));","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidInputException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" return ui.showAdd(tasks.getTask(tasks.length() - 1), tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":87}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command for the Duke application","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" * Executes the Command and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If there are an invalid Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.TaskNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command Delete that delete a task from the list","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" private final Integer taskIndex;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a DeleteCommand with a specified description of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" * @param taskIndex the task index that will be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" public DeleteCommand(Integer taskIndex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" * Executes the DeleteCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If there are an invalid Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.length()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" throw new TaskNotFoundException(\"Task Not Found :\u0027(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" Task taskTemp \u003d tasks.getTask(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" tasks.delete(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" return ui.showDelete(taskTemp, tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":54}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command Exit that will shut the program when being executed.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" * Executes the ExitCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" return ui.showExit();","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":35}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command Find that find a task from the list","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" private String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" * Constructs an FindCommand to find a specific task.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * @param keyword A string describing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" * Executes the FindCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" for (int i \u003d 0; i \u003c tasks.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" if (tasks.getTask(i).contains(keyword)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" taskList.add(tasks.getTask(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" return ui.showFind(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"angkyakdifp":51}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command List that display all the task on the list","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" * Executes the ListCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" return ui.showList(tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":35}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.TaskNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Command Mark that will mark/unmark the task","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" private final Integer taskIndex;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" private final boolean isMarked;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a MarkCommand.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * @param isMarked A boolean that represents if it is a mark or unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" * @param taskIndex the task index that will be mark or unmark.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" public MarkCommand(boolean isMarked, Integer taskIndex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" * Executes the MarkCommand and returns the message.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" * @param ui The Ui that used as user interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" * @param storage The Storage that used to store, read and write data.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If there are an invalid Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.length()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" throw new TaskNotFoundException(\"Task Not Found :\u0027(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" if (isMarked) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" tasks.mark(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" return ui.showMark(tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" tasks.unmark(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" return ui.showUnmark(tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" * Check if it is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean that represent whether this is an ExitCommand or not.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":60}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":" * Represents the exceptions for Duke application.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a DukeException with a specified message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @param message A message describing the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":17}},{"path":"src/main/java/duke/exception/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":" * Represents the exceptions for an Invalid Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"public class InvalidInputException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a InvalidInputException with a specified message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @param message A message describing the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" public InvalidInputException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":17}},{"path":"src/main/java/duke/exception/InvalidTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":" * Represents the exceptions for an Invalid Input of Date.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"public class InvalidTimeException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a InvalidTimeException with a specified message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @param message A message describing the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" public InvalidTimeException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":17}},{"path":"src/main/java/duke/exception/TaskNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":" * Represents the exceptions for the unfounded .","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"public class TaskNotFoundException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a TaskNotFoundException with a specified message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @param message A message describing the error.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" public TaskNotFoundException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":17}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.gui;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" private Label text;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" text \u003d l;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" displayPicture.setFitWidth(70.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" displayPicture.setFitHeight(70.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"angkyakdifp":47}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.gui;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" private Image bot \u003d new Image(this.getClass().getResourceAsStream(\"/images/Footycouch.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" private Scene scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" private void createStage(Stage stage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" stage.setMinWidth(450.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" private void createScrollPane() {","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setPrefSize(435, 535);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" private void createAnchorPane() {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" private void createDialog() {","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":" handleUserInput();","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":" handleUserInput();","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" DialogBox.getDukeDialog(new Label(duke.getIntroduction()), new ImageView(bot))","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"angkyakdifp"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"angkyakdifp"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"angkyakdifp"},"content":" createStage(stage);","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"angkyakdifp"},"content":" mainLayout.setPrefSize(450.0, 600.0);","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"angkyakdifp"},"content":" createScrollPane();","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"angkyakdifp"},"content":" userInput.setPrefWidth(375.0);","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"angkyakdifp"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"angkyakdifp"},"content":" createAnchorPane();","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"angkyakdifp"},"content":" createDialog();","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"angkyakdifp"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"angkyakdifp"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"angkyakdifp"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"angkyakdifp"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"angkyakdifp"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"angkyakdifp"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"angkyakdifp"},"content":" return textToAdd;","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"angkyakdifp"},"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":115,"author":{"gitId":"angkyakdifp"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"angkyakdifp"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"angkyakdifp"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"angkyakdifp"},"content":" Label dukeText \u003d new Label(duke.getResponse(userInput.getText()));","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"angkyakdifp"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"angkyakdifp"},"content":" DialogBox.getUserDialog(userText, new ImageView(user)),","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"angkyakdifp"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(bot))","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"angkyakdifp"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"angkyakdifp"},"content":" if (userInput.getText() \u003d\u003d \"bye\") {","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"angkyakdifp"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"angkyakdifp"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"angkyakdifp":130}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * Parses inputs from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" * Parses the input into a command.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * @param input the input that will be parsed.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" * @return A command representing the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" String[] splittedCommand \u003d input.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" } else if (splittedCommand[0].equalsIgnoreCase(\"mark\") \u0026\u0026 splittedCommand.length \u003d\u003d 2","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" \u0026\u0026 isInteger((splittedCommand[1]))) {","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" return new MarkCommand(true, Integer.parseInt(splittedCommand[1]) - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" } else if (splittedCommand[0].equalsIgnoreCase(\"unmark\") \u0026\u0026 splittedCommand.length \u003d\u003d 2","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" \u0026\u0026 isInteger((splittedCommand[1]))) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" return new MarkCommand(false, Integer.parseInt(splittedCommand[1]) - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" } else if (splittedCommand[0].equalsIgnoreCase(\"delete\") \u0026\u0026 splittedCommand.length \u003d\u003d 2","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" \u0026\u0026 isInteger((splittedCommand[1]))) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" return new DeleteCommand(Integer.parseInt(splittedCommand[1]) - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" } else if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" } else if (splittedCommand[0].equalsIgnoreCase(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" return new FindCommand(input.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" return new AddCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" private static boolean isInteger(String str) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" Integer check \u003d Integer.parseInt(str);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":55}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" * Stores the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" private final File FILE;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" * Construct a storage and make a new file if no file exists yet.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If the file cannot be made.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" public Storage() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" File directory \u003d new File(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" this.FILE \u003d new File(\"./data/duke\");","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" if (!FILE.exists()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" this.FILE.createNewFile();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" throw new DukeException(\"Cannot Make File :\u0027(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" * Reads and loads the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" * @return an Array","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If the file cannot be read.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" public TaskList load() throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" Scanner sc \u003d new Scanner(FILE);","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" String type \u003d input.substring(0, 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" String done \u003d input.substring(4, 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" String description \u003d input.substring(8);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" if (type.equalsIgnoreCase(\"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" taskList.add(new Todo(description));","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" } else if (type.equalsIgnoreCase(\"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" taskList.add(new Deadline(description.replaceFirst(\"\\\\|\", \"/by\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" } else if (type.equalsIgnoreCase(\"E\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" taskList.add(new Event(description.replaceFirst(\"\\\\|\", \"/from\").replaceFirst(\"\\\\|\", \"/to\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" if (done.equalsIgnoreCase(\"X\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" taskList.getTask(taskList.length() - 1).mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" throw new DukeException(\"Cannot Read File :\u0027(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" * Rewrite the file after a tasks being added or edited.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks the TaskList that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If the file cannot be written.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" public void writeFile(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" FileWriter fileWriter \u003d new FileWriter(this.FILE);","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" for (int i \u003d 0; i \u003c tasks.length(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" fileWriter.write(tasks.getTaskInput(i) + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"angkyakdifp"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"angkyakdifp"},"content":" throw new DukeException(\"Cannot Write File :\u0027(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"angkyakdifp":91}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.InvalidTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Deadline of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" protected LocalDate deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a deadline with a specified description and date.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" * @param description A string describing the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If the deadline date is not a valid date.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" public Deadline(String description) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" super(description.substring(0, description.indexOf(\"/by\") - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" int byIndex \u003d description.indexOf(\"/by\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" this.deadline \u003d LocalDate.parse(description.substring(byIndex + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidTimeException(\"Invalid input of Date\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" * Returns a String representing the Deadline that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" * @return the string representing the Deadline that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" public String getInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" return \"D | \" + this.getStatusIcon() + \" | \" + this.description + \" | \" + this.deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" * Returns the String representation of a Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" * @return the String representation of a Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" return \"[D] [\" + this.getStatusIcon() + \"] \" + this.description + \" (by: \"","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" + this.deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.InvalidTimeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Event of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" protected LocalDate starting;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" protected LocalDate ending;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" * Constructs an Event with a specified description and date.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" * @param description A string describing the Event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * @throws DukeException If the deadline date is not a valid date.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" public Event(String description) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" super(description.substring(0, description.indexOf(\"/from\") - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" int fromIndex \u003d description.indexOf(\"/from\");","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" String tempStarting \u003d description.substring(fromIndex + 6, fromIndex + 16);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" int toIndex \u003d fromIndex + 21;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" this.starting \u003d LocalDate.parse(tempStarting);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" this.ending \u003d LocalDate.parse(description.substring(toIndex));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" if (this.starting.isAfter(this.ending)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidTimeException(\"The starting time could not pass the ending time\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" throw new InvalidTimeException(\"Invalid input of Date\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" * Returns a String representing the Event that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" * @return the string representing the Event that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" public String getInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" return \"E | \" + this.getStatusIcon() + \" | \" + this.description + \" | \" + this.starting + \" | \" + this.ending;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" * Returns the String representation of an Event.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" * @return the String representation of an Event.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" return \"[E] [\" + this.getStatusIcon() + \"] \" + this.description","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" + \" (from: \" + this.starting.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" + \" to: \" + this.ending.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":61}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a Task with a specified description.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" * @param description A string describing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" * Returns a status icon of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" * @return a String representing a status icon of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" * Marks the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" * Unmarks the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" * Checks whether the description contains a specific keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" * @param keyword a keyword that will be checked","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" * @return a boolean representing whether the description contain the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" * Returns a String representing the Task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" * @return the string representing the Task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" public abstract String getInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":63}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" * Represents the list of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" * Marks the specific task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" * @param index an integer representing the index of a task that will be marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" public void mark(Integer index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" tasks.get(index).mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" * Unmarks the specific task.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" * @param index an integer representing the index of a task that will be unmarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" public void unmark(Integer index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" tasks.get(index).unmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" * Return the specific task","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":" * @param index an integer representing the index of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" public Task getTask(Integer index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" * Returns a String representing the specific task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":" * @param index an integer representing the index of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" * @return the String representing the specific task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" public String getTaskInput(Integer index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" return tasks.get(index).getInput();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" * Returns the size of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" * @return the size of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" public int length() {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":" return tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" * Add a task to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":" * @param task the task that will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":" * Delete the specified task.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" * @param index an integer representing the index of a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" public void delete(Integer index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":" * Returns the String representation of a TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"angkyakdifp"},"content":" * @return the String representation of a TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"angkyakdifp"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"angkyakdifp"},"content":" String taskList \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"angkyakdifp"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"angkyakdifp"},"content":" taskList +\u003d (i + 1) + \".\" + tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"angkyakdifp"},"content":" return taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":99}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":" * Represents the Todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" * Constructs a Todo task with a specified description.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" * @param description A string describing the Todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" * Returns a String representing the Todo task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" * @return the string representing the Todo task that will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" public String getInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" return \"T | \" + this.getStatusIcon() + \" | \" + this.description;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" * Returns the String representation of a Todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" * @return the String representation of a Todo Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" return \"[T] [\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":39}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":" * User interface for the Duke application.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" * @author Angky Akdi Frandy Putrakelana","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" * Constructs the User Interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the welcome message.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" String introduction \u003d \" Hello! I\u0027m FootyCouch\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" + \" What can I do for you?\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(introduction);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" return introduction;","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"angkyakdifp"},"content":" * Prints the dash line.","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"angkyakdifp"},"content":" public void showLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the error message.","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"angkyakdifp"},"content":" public String showError(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(\" ☹ OOPS!!! \" + message);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"angkyakdifp"},"content":" return \" OOPS!!! \" + message;","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the successful add message.","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"angkyakdifp"},"content":" * @param task the specific task that will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"angkyakdifp"},"content":" public String showAdd(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d \" Got it. I\u0027ve added this task:\\n\" + \" \" + task + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"angkyakdifp"},"content":" + \" Now you have \" + tasks.length() + \" tasks in the list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the successful delete message.","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"angkyakdifp"},"content":" * @param task the specific task that will be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"angkyakdifp"},"content":" public String showDelete(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d \"Noted. I\u0027ve removed this task:\\n\" + \" \" + task + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"angkyakdifp"},"content":" + \"Now you have \" + tasks.length() + \" tasks in the list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the exit message.","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"angkyakdifp"},"content":" public String showExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"angkyakdifp"},"content":" return \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the successful mark message.","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"angkyakdifp"},"content":" * @param task the specific task that will be marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"angkyakdifp"},"content":" public String showMark(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d \" Nice! I\u0027ve marked this task as done:\\n\" + \" \" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the successful unmark message.","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"angkyakdifp"},"content":" * @param task the specific task that will be unmarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"angkyakdifp"},"content":" public String showUnmark(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d \" OK, I\u0027ve marked this task as not done yet:\" + \" \" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the successful find message.","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks the list of filtered tasks that will be printed.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"angkyakdifp"},"content":" public String showFind(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"angkyakdifp"},"content":" String message \u003d \"Here are the matching tasks in your list:\\n\" + tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"angkyakdifp"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"angkyakdifp"},"content":" * Prints and returns the list message.","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"angkyakdifp"},"content":" * @param tasks the list of all tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"angkyakdifp"},"content":" public String showList(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"angkyakdifp"},"content":" System.out.println(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"angkyakdifp"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"angkyakdifp"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"angkyakdifp"},"content":" * Read the next Input.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"angkyakdifp"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"angkyakdifp"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"angkyakdifp"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"angkyakdifp"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"angkyakdifp":138}},{"path":"src/test/java/duke/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" public void unknownCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" Command command \u003d new AddCommand(\"testing\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":" command.execute(new TaskList(), new Ui(), new Storage());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" assertEquals(\"I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" public void invalidDeadline_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" Command command \u003d new AddCommand(\"deadline playing mobile games\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" command.execute(new TaskList(), new Ui(), new Storage());","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" assertEquals(\"Deadline must contain /by\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"angkyakdifp":34}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"public class EventTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":" public void invalidTime_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":" Task task \u003d new Event(\"event Final Exam /from sunday /to friday\");","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":" assertEquals(\"Invalid input of Date\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":" public void invalidStartingTime_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"angkyakdifp"},"content":" Task task \u003d new Event(\"event Final Exam /from 2023-08-11 /to 2023-08-10\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"angkyakdifp"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"angkyakdifp"},"content":" assertEquals(\"The starting time could not pass the ending time\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"angkyakdifp"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"angkyakdifp"},"content":" public void toString_validDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"angkyakdifp"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"angkyakdifp"},"content":" Task task \u003d new Event(\"event Final Exam /from 2023-08-11 /to 2023-08-13\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"angkyakdifp"},"content":" assertEquals(\"[E] [ ] event Final Exam (from: Aug 11 2023 to: Aug 13 2023)\", task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"angkyakdifp"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"angkyakdifp"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"angkyakdifp"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"angkyakdifp"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"angkyakdifp":36}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"angkyakdifp"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"angkyakdifp"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"angkyakdifp"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"angkyakdifp"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"angkyakdifp"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"angkyakdifp"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"angkyakdifp"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"angkyakdifp"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"angkyakdifp"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"angkyakdifp"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"angkyakdifp"},"content":"mark 10","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"angkyakdifp"},"content":"event doing homework","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"angkyakdifp"},"content":"deadline doing housework","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"angkyakdifp"},"content":"event doing homework /from 3pm","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"angkyakdifp"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"angkyakdifp"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"angkyakdifp"},"content":"delete 10","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"angkyakdifp"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"angkyakdifp"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"angkyakdifp":19}}] diff --git a/angkyakdifp_ip_master/commits.json b/angkyakdifp_ip_master/commits.json index 5cae596d..c42f0f43 100644 --- a/angkyakdifp_ip_master/commits.json +++ b/angkyakdifp_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"angkyakdifp":[{"date":"2023-08-24","commitResults":[{"hash":"678bee455ef90fe42d44eb82243afe4683a5f018","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"a7b18aff1734013410d1f9cbb8ea51ac7e398d68","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"d027b361b248c382db76a720f52df5cd1fef72b6","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":6}}},{"hash":"1fb5f0a3ae3f01a96dfc7c31a092e7986ca1b722","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":5}}},{"hash":"0cde5ec44f34504b3a7ecc9cde3a4d43a255aa32","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"c733e34204a5b43624a8e4cac4636cfc1babece6","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":10}}},{"hash":"d6e958b0355dd668ea33c9b8b558c8651d84c7bf","isMergeCommit":false,"messageTitle":"TextUiTesting","messageBody":"","tags":["TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"f17accee5e901a6794f2f9d8d85a93f54a70d8d7","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":1},"java":{"insertions":74,"deletions":38}}},{"hash":"e260df1a914e88b423b1290c86f190eb67049a39","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-7","Level-6","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":45,"deletions":18}}}]},{"date":"2023-08-29","commitResults":[{"hash":"826214bb4a33ce0705808a55e3410229abd89572","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":32}}},{"hash":"156f2e840ab55fa50f413f2f40bc14244c2e8277","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"a16e1eb693a6da1ecdb46a045cd6dfbf78ea8000","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","tags":["Level-8","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":308,"deletions":155}}},{"hash":"0575302ca9871e2f11f59d91b0c533c003d0665e","isMergeCommit":false,"messageTitle":"A-Package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":19}}}]},{"date":"2023-09-02","commitResults":[{"hash":"1fb32f7a06e31269e7500493933f975a5690477f","isMergeCommit":true,"messageTitle":"Resolving Conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f9ab7e633f7732e12e2382b142d1fe88f3916479","isMergeCommit":true,"messageTitle":"Merge pull request #1 from angkyakdifp/branch-Level-7","messageBody":"Level-7","fileTypesAndContributionMap":{}},{"hash":"717493b99074058c702799c577750b3389c06761","isMergeCommit":true,"messageTitle":"Merge pull request #2 from angkyakdifp/add-gradle-support","messageBody":"Add gradle support","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"ee15082da3991f8c47dc383e2e933780f34e425f","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"559763d277a9ffdb44d3f2673bb52bfb94ae5d3b","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JavaDoc","A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":18}}},{"hash":"b212eb6085296e6e0704f0745be0c7ba5a633916","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":425,"deletions":36}}},{"hash":"5eee31ff8d69ad7acb85b042378785cf93ad9ffb","isMergeCommit":true,"messageTitle":"Merge pull request #3 from angkyakdifp/branch-A-JavaDoc","messageBody":"A-JavaDoc","fileTypesAndContributionMap":{}},{"hash":"3213441df34760ace86d9292144eff8f6fcfea58","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":11}}},{"hash":"ddd565606e5303b09c0ccd1435b57405c30d9b27","isMergeCommit":true,"messageTitle":"Merge pull request #4 from angkyakdifp/branch-A-CodingStandard","messageBody":"A-CodingStandard","fileTypesAndContributionMap":{}},{"hash":"db800abb40b4a8faa7facf0838e644faa231c3e3","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":3}}},{"hash":"6b5627fb8e0dc60fec69ff06b348beac1896a7ce","isMergeCommit":true,"messageTitle":"Merge pull request #5 from angkyakdifp/branch-A-CodingStandard","messageBody":"Level-9","fileTypesAndContributionMap":{}},{"hash":"17321e77d2e6eba2636ec94a07d23ca8073d02d1","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"1b63973f6287a26da6fd9e0d5ce39894dbeb6054","isMergeCommit":true,"messageTitle":"Merge pull request #6 from angkyakdifp/branch-Level-9","messageBody":"Level-9","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"f44fbe08d1b042a16fab54c85172f2cf43cdaa0d","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":45,"deletions":49}}},{"hash":"cb53fb593c2390737665e9b6f9464714ba431f64","isMergeCommit":true,"messageTitle":"Merge pull request #7 from angkyakdifp/branch-A-CheckStyle","messageBody":"A-CheckStyle","fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"a218da38368f420b784faf8d65acd0a59beab59e","isMergeCommit":false,"messageTitle":"A-Level-10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":19,"deletions":4},"java":{"insertions":275,"deletions":55}}},{"hash":"4140ca1177edf4e6ebde32ba3e94b0bc92c7102d","isMergeCommit":true,"messageTitle":"Merge pull request #8 from angkyakdifp/A-Level-10","messageBody":"A-Level-10","fileTypesAndContributionMap":{}},{"hash":"246a65af3e2adbc2cbbdc19b71825b63a08f52c6","isMergeCommit":true,"messageTitle":"Fixing javadoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3f106cbf7b568d1f44c3ea3e51ba11aca852e86c","isMergeCommit":false,"messageTitle":"Fixing Method description","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"79f30b477663489494b287f83cdd77f10d06d1df","isMergeCommit":true,"messageTitle":"Merge pull request #9 from angkyakdifp/branch-Level-10","messageBody":"Branch level 10","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"angkyakdifp":{"java":1358,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":20,"txt":19}},"authorContributionVariance":{"angkyakdifp":40740.254},"authorDisplayNameMap":{"angkyakdifp":"CS2103T-W13-1 ANGK..LANA"}} +{"authorDailyContributionsMap":{"angkyakdifp":[{"date":"2023-08-24","commitResults":[{"hash":"678bee455ef90fe42d44eb82243afe4683a5f018","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"a7b18aff1734013410d1f9cbb8ea51ac7e398d68","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"d027b361b248c382db76a720f52df5cd1fef72b6","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":6}}},{"hash":"1fb5f0a3ae3f01a96dfc7c31a092e7986ca1b722","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":5}}},{"hash":"0cde5ec44f34504b3a7ecc9cde3a4d43a255aa32","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"c733e34204a5b43624a8e4cac4636cfc1babece6","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":10}}},{"hash":"d6e958b0355dd668ea33c9b8b558c8651d84c7bf","isMergeCommit":false,"messageTitle":"TextUiTesting","messageBody":"","tags":["TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"f17accee5e901a6794f2f9d8d85a93f54a70d8d7","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":1},"java":{"insertions":74,"deletions":38}}},{"hash":"e260df1a914e88b423b1290c86f190eb67049a39","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-7","Level-6","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":45,"deletions":18}}}]},{"date":"2023-08-29","commitResults":[{"hash":"826214bb4a33ce0705808a55e3410229abd89572","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":32}}},{"hash":"156f2e840ab55fa50f413f2f40bc14244c2e8277","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"a16e1eb693a6da1ecdb46a045cd6dfbf78ea8000","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","tags":["Level-8","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":308,"deletions":155}}},{"hash":"0575302ca9871e2f11f59d91b0c533c003d0665e","isMergeCommit":false,"messageTitle":"A-Package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":19}}}]},{"date":"2023-09-02","commitResults":[{"hash":"1fb32f7a06e31269e7500493933f975a5690477f","isMergeCommit":true,"messageTitle":"Resolving Conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f9ab7e633f7732e12e2382b142d1fe88f3916479","isMergeCommit":true,"messageTitle":"Merge pull request #1 from angkyakdifp/branch-Level-7","messageBody":"Level-7","fileTypesAndContributionMap":{}},{"hash":"717493b99074058c702799c577750b3389c06761","isMergeCommit":true,"messageTitle":"Merge pull request #2 from angkyakdifp/add-gradle-support","messageBody":"Add gradle support","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"ee15082da3991f8c47dc383e2e933780f34e425f","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"559763d277a9ffdb44d3f2673bb52bfb94ae5d3b","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JavaDoc","A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":18}}},{"hash":"b212eb6085296e6e0704f0745be0c7ba5a633916","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":425,"deletions":36}}},{"hash":"5eee31ff8d69ad7acb85b042378785cf93ad9ffb","isMergeCommit":true,"messageTitle":"Merge pull request #3 from angkyakdifp/branch-A-JavaDoc","messageBody":"A-JavaDoc","fileTypesAndContributionMap":{}},{"hash":"3213441df34760ace86d9292144eff8f6fcfea58","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":11}}},{"hash":"ddd565606e5303b09c0ccd1435b57405c30d9b27","isMergeCommit":true,"messageTitle":"Merge pull request #4 from angkyakdifp/branch-A-CodingStandard","messageBody":"A-CodingStandard","fileTypesAndContributionMap":{}},{"hash":"db800abb40b4a8faa7facf0838e644faa231c3e3","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":3}}},{"hash":"6b5627fb8e0dc60fec69ff06b348beac1896a7ce","isMergeCommit":true,"messageTitle":"Merge pull request #5 from angkyakdifp/branch-A-CodingStandard","messageBody":"Level-9","fileTypesAndContributionMap":{}},{"hash":"17321e77d2e6eba2636ec94a07d23ca8073d02d1","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"1b63973f6287a26da6fd9e0d5ce39894dbeb6054","isMergeCommit":true,"messageTitle":"Merge pull request #6 from angkyakdifp/branch-Level-9","messageBody":"Level-9","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"f44fbe08d1b042a16fab54c85172f2cf43cdaa0d","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":45,"deletions":49}}},{"hash":"cb53fb593c2390737665e9b6f9464714ba431f64","isMergeCommit":true,"messageTitle":"Merge pull request #7 from angkyakdifp/branch-A-CheckStyle","messageBody":"A-CheckStyle","fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"a218da38368f420b784faf8d65acd0a59beab59e","isMergeCommit":false,"messageTitle":"A-Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":19,"deletions":4},"java":{"insertions":275,"deletions":55}}},{"hash":"4140ca1177edf4e6ebde32ba3e94b0bc92c7102d","isMergeCommit":true,"messageTitle":"Merge pull request #8 from angkyakdifp/A-Level-10","messageBody":"A-Level-10","fileTypesAndContributionMap":{}},{"hash":"246a65af3e2adbc2cbbdc19b71825b63a08f52c6","isMergeCommit":true,"messageTitle":"Fixing javadoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3f106cbf7b568d1f44c3ea3e51ba11aca852e86c","isMergeCommit":false,"messageTitle":"Fixing Method description","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"79f30b477663489494b287f83cdd77f10d06d1df","isMergeCommit":true,"messageTitle":"Merge pull request #9 from angkyakdifp/branch-Level-10","messageBody":"Branch level 10","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"67bfff25129a1ce365470dee183549a0d6d47d63","isMergeCommit":false,"messageTitle":"\u001b[200~Enhance code to adhere to SLAP (Single Level of Abstraction Principle)","messageBody":"","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":20}}},{"hash":"71c1fb829c06f5c6aa52e453b638b0bb5b54fdae","isMergeCommit":false,"messageTitle":"Enhance code to adhere to SLAP (Single Level of Abstraction Principle).\\n\\nIn this commit, I have refactored the Main class of the Duke GUI application to improve code readability and maintainability by adhering to the Single Level of Abstraction Principle (SLAP). The code structure has been improved by separating concerns and making each method adhere to a single level of abstraction.\\n\\nKey Changes:- Separated the code into methods with clear responsibilities, making the code more modular and comprehensible.\\n- Created methods for setting up the stage, scroll pane, anchor pane, and dialog.\\n- Improved code comments and documentation for better clarity.\\n- Ensured that each method follows SLAP by having a single level of abstraction.\\n\\nThese changes result in a more organized and maintainable codebase, making it easier to work with and understand.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":20}}},{"hash":"fb7a3a26afb9368cd4f76d126448ad907a5ea1d9","isMergeCommit":false,"messageTitle":"Enhance code to adhere to SLAP (Single Level of Abstraction Principle).","messageBody":"In this commit, I have refactored the Main class of the Duke GUI application to improve code readability and maintainability by adhering to the Single Level of Abstraction Principle (SLAP). The code structure has been improved by separating concerns and making each method adhere to a single level of abstraction.\n\nKey Changes:- Separated the code into methods with clear responsibilities, making the code more modular and comprehensible.\n\n- Created methods for setting up the stage, scroll pane, anchor pane, and dialog.\n\n- Improved code comments and documentation for better clarity.\n\n- Ensured that each method follows SLAP by having a single level of abstraction.\n\nThese changes result in a more organized and maintainable codebase, making it easier to work with and understand.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"27efbf69a06c408b6e105b40a371adfa673d82a1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/angkyakdifp/ip","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"angkyakdifp":{"java":1368,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":20,"txt":19}},"authorContributionVariance":{"angkyakdifp":33898.066},"authorDisplayNameMap":{"angkyakdifp":"CS2103T-W13-1 ANGK..LANA"}} diff --git a/antonTan96_ip_master/authorship.json b/antonTan96_ip_master/authorship.json index 17dc83ad..cd0cfaf7 100644 --- a/antonTan96_ip_master/authorship.json +++ b/antonTan96_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"# crackerpackage.Cracker project template","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"3. After that, locate the `src/main/java/crackerpackage.Cracker.java` file, right-click it, and choose `Run crackerpackage.Cracker.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"antonTan96":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":"antonTan96"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":"dependencies {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" mainClass.set(\"crackerpackage.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":61,"author":{"gitId":"-"},"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"antonTan96":23,"-":42}},{"path":"src/main/java/crackerpackage/Cracker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import javafx.fxml.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.control.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.layout.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"import exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"import exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":"import uicomponents.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":"import uicomponents.Reply;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" * A chatbot that manages tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":"public class Cracker {","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" private TodoList list \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" private Reply reply \u003d new Reply();","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" private Storage storage \u003d new Storage(\"./data/list.txt\");;","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/chuck2.jpg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/chuck1.jpg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" * The types of operations supported by the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" public enum Type {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" MARK,","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" UNMARK,","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" TASK,","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" DELETE,","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" UNKNOWN,","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" LIST,","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" QUIT,","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" FIND","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" Type command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" list.markDone(Parser.parseIndex(input));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" return reply.modifyTaskReply(list.getTask(Parser.parseIndex(input)));","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" list.markUndone(Parser.parseIndex(input));","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" return reply.modifyTaskReply(list.getTask(Parser.parseIndex(input)));","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" String cachedReply \u003d reply.deleteTaskReply(list.getTask(Parser.parseIndex(input)), list.size() - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" list.deleteTask(Parser.parseIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" return cachedReply;","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" case TASK:","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" Task newTask \u003d Parser.parseTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" list.store(newTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" return reply.storeTaskReply(newTask, list.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" case UNKNOWN:","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" } catch (UnknownCommandException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" return e.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" return reply.iterate(list);","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" case FIND:","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" return reply.findTaskReply(list.filter(Parser.parseKeyword(input)));","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" case QUIT:","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" return \"Bye! Your tasks have been saved!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" return \"Something wrong happened when saving your tasks\";","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" return \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" return e.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":" return \"The index you provided does not exist\";","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" } catch (IllegalFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" return e.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" * Starts up the bot.","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" public void startService() {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" list \u003d storage.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":" Cracker bot \u003d new Cracker();","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"antonTan96"},"content":" bot.startService();","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":115,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":116,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"antonTan96":116}},{"path":"src/main/java/crackerpackage/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(uicomponents.MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"antonTan96":61}},{"path":"src/main/java/crackerpackage/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"antonTan96":12}},{"path":"src/main/java/crackerpackage/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"import uicomponents.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" private Cracker duke \u003d new Cracker();","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" duke.startService();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"antonTan96":33}},{"path":"src/main/java/crackerpackage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import java.nio.file.FileSystems;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" * A Storage that stores tasks for the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" private File file;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" * Creates a Storage object.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" * @param fileString The path to the file","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" public Storage(String fileString) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" this.file \u003d new File(fileString);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" * Saves the content in the list to a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" * @param list List of tasks to store","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" * @throws IOException","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" public void save(TodoList list) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" FileWriter writer \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" if (!this.file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" Path path \u003d FileSystems.getDefault().getPath(\"data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" Files.createDirectory(path);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" this.file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" writer \u003d new FileWriter(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" StringBuilder taskString \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" Task task \u003d list.getTask(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" taskString.append(list.getTaskString(i).charAt(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" taskString.append(task.getStatus());","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" taskString.append(task.getDesc());","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" taskString.append(LocalDate.parse(((Event) task).getStart(), formatter));","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" taskString.append(LocalDate.parse(((Event) task).getEnd(), formatter));","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" taskString.append(LocalDate.parse(((Deadline) task).getDeadline(), formatter));","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" writer.write(taskString + System.lineSeparator());","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" * Returns a TodoList based on the contents of the file stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" * @return a TodoList based on the contents of the file stored","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" public TodoList load() {","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" TodoList list \u003d new TodoList();","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" Scanner sc \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" sc \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" return list;","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" String taskString \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" String[] arr \u003d taskString.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" switch (taskString.charAt(0)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" task \u003d new Todo(arr[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":" task \u003d new Event(arr[2], arr[3], arr[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":" task \u003d new Deadline(arr[2], arr[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"Corrupt file detected\");","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"antonTan96"},"content":" if (Boolean.parseBoolean(arr[1])) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"antonTan96"},"content":" task.markDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"antonTan96"},"content":" list.store(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"antonTan96"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"something bad when loading\");","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"antonTan96"},"content":" return list;","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"antonTan96":126}},{"path":"src/main/java/crackerpackage/TodoList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" * A list that temporary stores tasks for the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"public class TodoList {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" * Creates a TodoList.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" TodoList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" this.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" * Temporary stores the task into the TodoList.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" * @param s the task to be stored","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" public void store(Task s) {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" list.add(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" * @param index the index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" public void markDone(int index) {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" list.get(index).markDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" * @param index the index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" public void markUndone(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" list.get(index).markUndone();","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" * Removes the task from the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" * @param index the index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" list.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" * @param index the index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" public String getTaskString(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" return list.get(index).toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" * Returns the amount of elements in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" * @return the amount of elements in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" return list.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" * Returns a task object","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" * @param i the index of the task to be recieved.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" * @return a task in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" return list.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" * Filters all the tasks that contain a keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" * @param keyword the word that must be in the task description","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" * @return a TodoList that contains all the tasks that contain the keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":" public TodoList filter(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" TodoList filteredList \u003d new TodoList();","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" Task task \u003d list.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":" if (task.getDesc().contains(keyword)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" filteredList.store(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" return filteredList;","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"antonTan96":108}},{"path":"src/main/java/crackerpackage/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" * A task that has a date as a deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" * Creates a Deadline object with input from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" * @param s A string containing the description and date of a Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" * @throws IllegalFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" public Deadline(String s) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" super(s.split(\"/by\", 0)[0].trim());","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" if (!s.contains(\"/by\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing \\\"/by\\\" after task description\");","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" this.deadline \u003d LocalDate.parse(s.split(\"/by\", 0)[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"please enter date in yyyy-mm-dd format\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" * Creates a Deadline object with input from a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" * @param desc The description of a Deadline Task","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" * @param deadline The date to complete before the Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" public Deadline(String desc, String deadline) throws EmptyDescriptionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" super(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" this.deadline \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" return \"[D]\" + super.toString() + \" (by: \" + getDeadline() + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the date of the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the date of the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" public String getDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" return deadline.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":68}},{"path":"src/main/java/crackerpackage/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" * A task that has a starting date and an ending date.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" * Creates a Event object with input from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" * @param s A string containing the description and starting/ending dates of a Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" * @throws IllegalFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" public Event(String s) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" super(s.split(\"/from\")[0]);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" //Checking if format is correct","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" if (!s.contains(\"/from\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing \\\"/from\\\" after CrackerPackage.tasks.Event Description\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" } else if (!s.contains(\"/to\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing \\\"/to\\\" after CrackerPackage.tasks.Event Description\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" } else if (s.indexOf(\"/from\") \u003e s.indexOf(\"/to\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Format of Adding CrackerPackage.tasks.Event is: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" + \"event eventDescription /from start /to end \");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" } else if (s.split(\"/to\").length \u003c\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"end time is empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" //initialize variables","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" this.from \u003d LocalDate.parse(s.split(\"/from\")[1].split(\"/to\")[0].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" this.to \u003d LocalDate.parse(s.split(\"/to\")[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" if (from.isAfter(to)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"end time is earlier than start time\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" } catch (IllegalFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" throw e;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"please enter date in yyyy-mm-dd format\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" //check if they are empty strings","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" if (this.from.equals(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing start time\");","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" * Constructs a Deadline object with input from a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" * @param desc Description of the Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" * @param from Starting date of the Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" * @param to Ending date of the Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" public Event(String desc, String from, String to) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" super(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" * Returns the starting date of the object.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the starting date of the object","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" public String getStart() {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" return from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" * Returns the ending date of the object.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the ending date of the object","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" public String getEnd() {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" return to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" return \"[E]\" + super.toString() + \" (from: \" + getStart() + \" to: \" + getEnd() + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":104}},{"path":"src/main/java/crackerpackage/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" * An abstract class that implements the basic functions of a Task","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" * Creates a Task object, called by subclasses.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" * @param s description of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" Task(String s) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" if (s.isBlank()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" this.description \u003d s;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" * Returns the description of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" * @return A string representing the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" public String getDesc() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" * Returns the status of the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" * @return whether the task is done or not","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" public boolean getStatus() {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":70}},{"path":"src/main/java/crackerpackage/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" * A normal task.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" * Creates a Todo object","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" * @param s description of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" public Todo(String s) throws EmptyDescriptionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" super(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" * Returns the String representation of the Todo object.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the Todo object.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":32}},{"path":"src/main/java/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":" * An Exception to be thrown when the task description is not provided.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the Exception","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * @return a String represnting the Exception","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" return \"Description cannot be empty\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":17}},{"path":"src/main/java/exceptions/IllegalFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":" * An Exception to be thrown when the command received by the chatbot has an illegal format","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"public class IllegalFormatException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" private String msg;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" * Creates an IllegalFormatException object","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * @param s The message that contains the error","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" public IllegalFormatException(String s) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" msg \u003d s;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" * Returns the message contained by the Exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" * @return a string containing the message","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" return msg;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":25}},{"path":"src/main/java/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":" * An Exception to be thrown when the command is unrecognizable by the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * Returns an error message.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" * @return a basic error message","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" return \"I have no idea what that means\";","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":18}},{"path":"src/main/java/uicomponents/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package uicomponents;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.*;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.layout.*;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"import java.util.concurrent.*;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" private Cracker duke;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/chuck2.jpg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/chuck1.jpg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" public void initialize() {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" String response \u003d \"Hello there! How can I help you?\";","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" public void setDuke(Cracker d) {","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" if (input.trim().isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" return;","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" DialogBox user \u003d DialogBox.getUserDialog(input, userImage);","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" DialogBox duke \u003d DialogBox.getDukeDialog(response, dukeImage);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" user.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" duke.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" user,","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" duke","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" if(response.startsWith(\"Bye!\")){","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" userInput.setDisable(true);","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" sendButton.setDisable(true);","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" userInput.clear();","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"antonTan96":72}},{"path":"src/main/java/uicomponents/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package uicomponents;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.Cracker;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Deadline;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Todo;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * A parser that extracts keywords from input text.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"public class Parser {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" * parses the command header involved in the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" * @param input the command to be parsed","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" * @return type of header of the command","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" public static Cracker.Type parseCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" switch(input.split(\" \")[0]) {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" case \"mark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.MARK;","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" case \"event\":","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.TASK;","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" case \"delete\":","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.DELETE;","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" case \"list\":","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.LIST;","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" case \"bye\":","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.QUIT;","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.UNKNOWN;","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" * Returns a task based on the header of the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" * @param input the command to be parsed","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" * @return a task extracted from the command","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" * @throws IllegalFormatException","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" public static Task parseTask(String input) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" String command \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" switch (command.toLowerCase()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" return new Todo(input.replaceFirst(command, \"\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" case \"event\":","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" return new Event(input.replaceFirst(command, \"\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" return new Deadline(input.replaceFirst(command, \"\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"should not be triggered\");","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" return null;","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" * Returns the number involved in the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" * @param input the command to be parsed","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" * @return the index requested by the user","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" public static int parseIndex(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" return Integer.parseInt(input.replace(input.split(\" \")[0], \"\").trim()) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" * Returns the keyword from a find operation","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" * @param input","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" public static String parseKeyword(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" String command \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" return input.replaceFirst(command, \"\").trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"antonTan96":89}},{"path":"src/main/java/uicomponents/Reply.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package uicomponents;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.TodoList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" * The UI component of the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"public class Reply {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" private ArrayList\u003cString\u003e lines;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" * Creates a Reply for the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" public Reply() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" this.lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" * Prints out all the stored strings in sequential order, sandwiched by 2 lines.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" private String echo() {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" StringBuilder reply \u003d new StringBuilder();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c lines.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" reply.append(lines.get(i) + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" lines.removeAll(lines);","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" return reply.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" private void add(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" lines.add(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" * Lists out all the tasks in the Todolist","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" * @param list a Todolist that stores tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" public String iterate(TodoList list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" this.add(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" this.add((i + 1) + \". \" + list.getTaskString(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" return echo();","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a store task operation","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" * @param t The task to be stored","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" * @param size The size of the list","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" public String storeTaskReply(Task t, int size) {","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" this.add(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" this.add(\"Now you have \" + size + \" task(s) in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" return echo();","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a delete task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" * @param t The deleted task","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" * @param size The size of the list","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" public String deleteTaskReply(Task t, int size) {","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" this.add(\"Got it. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" this.add(\"Now you have \" + size + \" task(s) in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" return echo();","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a mark/unmark task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" * @param t The task that is modified","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" public String modifyTaskReply(Task t) {","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" this.add(\"Operation done. This is the current state of your task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" return echo();","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a find task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" * @param list The list of filtered tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":" public String findTaskReply(TodoList list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":" this.add(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":" this.add((i + 1) + \". \" + list.getTaskString(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"antonTan96"},"content":" return echo();","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":113}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"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-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"antonTan96":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"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\"uicomponents.MainWindow\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"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-09"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"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-09"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"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-09"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"antonTan96":20}},{"path":"src/test/java/crackerpackage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import java.nio.file.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" public void testLoadNonExistentFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" Storage s \u003d new Storage(\"./data/badPath.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" TodoList td \u003d s.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" assertEquals(0, td.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" public void testStore(){","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" Storage s \u003d new Storage(\"./data/badPath.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" TodoList td \u003d s.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" td.store(new Todo(\"asdasd\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" assertEquals(1,1);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" public void testSaveFile(){","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" Storage s \u003d new Storage(\"./data/list.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" TodoList td \u003d s.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" td.store(new Todo(\"asdasd\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" s.save(td);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" } catch(Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" assertEquals(1,1);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":52}},{"path":"src/test/java/crackerpackage/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" public void testToString(){","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" Todo s \u003d new Todo(\"aaaaa\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" assertEquals(\"[T][ ] aaaaa\",s.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" } catch(Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" public void testMarking(){","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" Todo s \u003d new Todo(\"aaaaa\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" s.markDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" assertEquals(\"[T][X] aaaaa\",s.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" } catch(Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"event asd /from 123 /to 321","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":3}},{"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":"antonTan96"},"content":"java -classpath ..\\bin crackerpackage.Cracker \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"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":{"antonTan96":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"# crackerpackage.Cracker project template","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"3. After that, locate the `src/main/java/crackerpackage.Cracker.java` file, right-click it, and choose `Run crackerpackage.Cracker.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"antonTan96":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":"antonTan96"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"dependencies {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" mainClass.set(\"crackerpackage.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"antonTan96":23,"-":44}},{"path":"src/main/java/crackerpackage/Cracker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"import uicomponents.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"import uicomponents.Reply;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" * A chatbot that manages tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"public class Cracker {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" private TodoList list \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" private Reply reply \u003d new Reply();","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" private Storage storage \u003d new Storage(\"./data/list.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/chuck2.jpg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/chuck1.jpg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" * The types of operations supported by the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" public enum Type {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" MARK,","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" UNMARK,","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" TASK,","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" DELETE,","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" UNKNOWN,","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" LIST,","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" QUIT,","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" FIND,","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" CLEAR","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" Type command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" assert command !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" list.markDone(Parser.parseIndex(input));","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" return reply.modifyTaskReply(list.getTask(Parser.parseIndex(input)));","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" list.markUndone(Parser.parseIndex(input));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" return reply.modifyTaskReply(list.getTask(Parser.parseIndex(input)));","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" String cachedReply \u003d reply.deleteTaskReply(list.getTask(Parser.parseIndex(input)), list.size() - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" storage.archive(list.getTask(Parser.parseIndex(input)).toString());","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" list.deleteTask(Parser.parseIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" return cachedReply;","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" case TASK:","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" Task newTask \u003d Parser.parseTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" list.store(newTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" return reply.storeTaskReply(newTask, list.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" case UNKNOWN:","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" } catch (UnknownCommandException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" return e.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" return reply.iterate(list);","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" case FIND:","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" return reply.findTaskReply(list.filter(Parser.parseKeyword(input)));","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" case QUIT:","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" return \"Bye! Your tasks have been saved!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" return \"Something wrong happened when saving your tasks\";","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" case CLEAR:","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" while(true){","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" storage.archive(list.getTask(0).toString());","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" list.deleteTask(0);","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" return \"All tasks have been cleared!\";","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" return \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":" return e.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" return \"The index you provided does not exist\";","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":" } catch (IllegalFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" return e.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" * Starts up the bot.","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":" public void startService() {","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":" list \u003d storage.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"antonTan96"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":110,"author":{"gitId":"antonTan96"},"content":" Cracker bot \u003d new Cracker();","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"antonTan96"},"content":" bot.startService();","lastModifiedDate":"2023-08-23"},{"lineNumber":114,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":117,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":118,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"antonTan96":118}},{"path":"src/main/java/crackerpackage/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(uicomponents.MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"antonTan96":61}},{"path":"src/main/java/crackerpackage/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"antonTan96":12}},{"path":"src/main/java/crackerpackage/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"import uicomponents.MainWindow;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" private Cracker duke \u003d new Cracker();","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" * Sets up the stage for the application","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" * primary stages.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" duke.startService();","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"antonTan96":41}},{"path":"src/main/java/crackerpackage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.io.*;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.nio.file.*;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"import uicomponents.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" * A Storage that stores tasks for the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" final private File ARCHIVE \u003d new File(\"./data/archive.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" final private File DATA_DIRECTORY \u003d new File(\"./data\");","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" private File file;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" * Creates a Storage object.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" * @param fileString The path to the file","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" public Storage(String fileString) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" this.file \u003d new File(fileString);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" * Saves the content in the list to a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" * @param list List of tasks to store","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" * @throws IOException","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" public void save(TodoList list) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" FileWriter writer \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" if (!this.file.exists() \u0026\u0026 !DATA_DIRECTORY.exists()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" Path path \u003d FileSystems.getDefault().getPath(\"data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" Files.createDirectory(path);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" this.file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" } else if (!this.file.exists()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" this.file.createNewFile();","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" writer \u003d new FileWriter(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" StringBuilder taskString \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" Task task \u003d list.getTask(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" assert task !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" taskString.append(list.getTaskString(i).charAt(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" taskString.append(task.getStatus());","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" taskString.append(task.getDesc());","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" taskString.append(LocalDate.parse(((Event) task).getStart(), formatter));","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" taskString.append(LocalDate.parse(((Event) task).getEnd(), formatter));","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" taskString.append(LocalDate.parse(((Deadline) task).getDeadline(), formatter));","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" writer.write(taskString + System.lineSeparator());","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" * Returns a TodoList based on the contents of the file stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" * @return a TodoList based on the contents of the file stored","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" public TodoList load() {","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" TodoList list \u003d new TodoList();","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" Scanner sc \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" sc \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" return list;","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" String taskString \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" String[] arr \u003d taskString.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":" Task task \u003d Parser.parseTask(arr);","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" if (Boolean.parseBoolean(arr[1])) {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" task.markDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" list.store(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"something bad when loading\");","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"antonTan96"},"content":" return list;","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"antonTan96"},"content":" * Puts the task in an archive","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"antonTan96"},"content":" * @param task the task to be put in archive","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"antonTan96"},"content":" public void archive(String task) {","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"antonTan96"},"content":" if (!this.ARCHIVE.exists() \u0026\u0026 !DATA_DIRECTORY.exists()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"antonTan96"},"content":" Path path \u003d FileSystems.getDefault().getPath(\"data\");","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"antonTan96"},"content":" Files.createDirectory(path);","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"antonTan96"},"content":" this.ARCHIVE.createNewFile();","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"antonTan96"},"content":" } catch(IOException e){","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"antonTan96"},"content":" //should not happen","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"antonTan96"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"Error creating archive\");","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"antonTan96"},"content":" } else if (!this.ARCHIVE.exists()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"antonTan96"},"content":" this.ARCHIVE.createNewFile();","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"antonTan96"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"antonTan96"},"content":" //should not happen","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"antonTan96"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"Error creating archive\");","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"antonTan96"},"content":" FileWriter fr \u003d new FileWriter(ARCHIVE, true);","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"antonTan96"},"content":" BufferedWriter br \u003d new BufferedWriter(fr);","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"antonTan96"},"content":" br.write(task + \"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"antonTan96"},"content":" br.close();","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"antonTan96"},"content":" fr.close();","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"antonTan96"},"content":" } catch (IOException e){","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"antonTan96"},"content":" //should not happen","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"Error creating archive\");","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"antonTan96":149}},{"path":"src/main/java/crackerpackage/TodoList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" * A list that temporary stores tasks for the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"public class TodoList {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" * Creates a TodoList.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" TodoList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" this.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" * Temporary stores the task into the TodoList.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" * @param s the task to be stored","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" public void store(Task s) {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" list.add(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" * @param index the index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" public void markDone(int index) {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" list.get(index).markDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" * @param index the index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" public void markUndone(int index) {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" list.get(index).markUndone();","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" * Removes the task from the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" * @param index the index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" list.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" * @param index the index of the task in the list","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" public String getTaskString(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" return list.get(index).toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" * Returns the amount of elements in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" * @return the amount of elements in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" return list.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" * Returns a task object","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" * @param i the index of the task to be recieved.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" * @return a task in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" return list.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" * Filters all the tasks that contain a keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" * @param keyword the word that must be in the task description","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" * @return a TodoList that contains all the tasks that contain the keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":" public TodoList filter(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" TodoList filteredList \u003d new TodoList();","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" Task task \u003d list.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":" if (task.getDesc().contains(keyword)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" filteredList.store(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" return filteredList;","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"antonTan96":108}},{"path":"src/main/java/crackerpackage/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" * A task that has a date as a deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" * Creates a Deadline object with input from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" * @param s A string containing the description and date of a Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" * @throws IllegalFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" public Deadline(String s) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" super(s.split(\"/by\", 0)[0].trim());","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" if (!s.contains(\"/by\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing \\\"/by\\\" after task description\");","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" this.deadline \u003d LocalDate.parse(s.split(\"/by\", 0)[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"please enter date in yyyy-mm-dd format\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" * Creates a Deadline object with input from a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" * @param desc The description of a Deadline Task","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" * @param deadline The date to complete before the Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" public Deadline(String desc, String deadline) throws EmptyDescriptionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" super(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" this.deadline \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" return \"[D]\" + super.toString() + \" (by: \" + getDeadline() + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the date of the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the date of the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" public String getDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" return deadline.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":68}},{"path":"src/main/java/crackerpackage/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" * A task that has a starting date and an ending date.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" * Creates a Event object with input from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" * @param s A string containing the description and starting/ending dates of a Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" * @throws IllegalFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" public Event(String s) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" super(s.split(\"/from\")[0]);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" //Checking if format is correct","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" if (!s.contains(\"/from\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing \\\"/from\\\" after CrackerPackage.tasks.Event Description\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" } else if (!s.contains(\"/to\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing \\\"/to\\\" after CrackerPackage.tasks.Event Description\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" } else if (s.indexOf(\"/from\") \u003e s.indexOf(\"/to\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Format of Adding CrackerPackage.tasks.Event is: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" + \"event eventDescription /from start /to end \");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" } else if (s.split(\"/to\").length \u003c\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"end time is empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" //initialize variables","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" this.from \u003d LocalDate.parse(s.split(\"/from\")[1].split(\"/to\")[0].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" this.to \u003d LocalDate.parse(s.split(\"/to\")[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" if (from.isAfter(to)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"end time is earlier than start time\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" } catch (IllegalFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" throw e;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"please enter date in yyyy-mm-dd format\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" //check if they are empty strings","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" if (this.from.equals(\"\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing start time\");","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" * Constructs a Deadline object with input from a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" * @param desc Description of the Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" * @param from Starting date of the Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" * @param to Ending date of the Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" public Event(String desc, String from, String to) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" super(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" * Returns the starting date of the object.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the starting date of the object","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" public String getStart() {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" return from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" * Returns the ending date of the object.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the ending date of the object","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" public String getEnd() {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" return to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" return \"[E]\" + super.toString() + \" (from: \" + getStart() + \" to: \" + getEnd() + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":104}},{"path":"src/main/java/crackerpackage/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" * An abstract class that implements the basic functions of a Task","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" * Creates a Task object, called by subclasses.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" * @param s description of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" Task(String s) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" if (s.isBlank()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" this.description \u003d s;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" * Returns the description of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" * @return A string representing the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" public String getDesc() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" * Returns the status of the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" * @return whether the task is done or not","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" public boolean getStatus() {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":70}},{"path":"src/main/java/crackerpackage/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" * A normal task.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" * Creates a Todo object","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" * @param s description of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" public Todo(String s) throws EmptyDescriptionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" super(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" * Returns the String representation of the Todo object.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" * @return a string representing the Todo object.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":32}},{"path":"src/main/java/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":" * An Exception to be thrown when the task description is not provided.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" * Returns the string representation of the Exception","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * @return a String represnting the Exception","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" return \"Description cannot be empty\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":17}},{"path":"src/main/java/exceptions/IllegalFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":" * An Exception to be thrown when the command received by the chatbot has an illegal format","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"public class IllegalFormatException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" private String msg;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" * Creates an IllegalFormatException object","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * @param s The message that contains the error","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" public IllegalFormatException(String s) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" msg \u003d s;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" * Returns the message contained by the Exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" * @return a string containing the message","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" return msg;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":25}},{"path":"src/main/java/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":" * An Exception to be thrown when the command is unrecognizable by the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * Returns an error message.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" * @return a basic error message","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" return \"I have no idea what that means\";","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":18}},{"path":"src/main/java/uicomponents/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package uicomponents;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.Cracker;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.DialogBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" private Cracker duke;","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/chuck2.jpg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/chuck1.jpg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" * Initializes the UI.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" public void initialize() {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" String response \u003d \"Hello there! How can I help you?\";","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" public void setDuke(Cracker d) {","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" if (input.trim().isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" return;","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" DialogBox user \u003d DialogBox.getUserDialog(input, userImage);","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" DialogBox duke \u003d DialogBox.getDukeDialog(response, dukeImage);","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" user.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" duke.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" user,","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" duke","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" if (response.startsWith(\"Bye!\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" userInput.setDisable(true);","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" sendButton.setDisable(true);","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" userInput.clear();","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"antonTan96":77}},{"path":"src/main/java/uicomponents/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package uicomponents;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.Cracker;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Deadline;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Todo;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * A parser that extracts keywords from input text.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"public class Parser {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" * parses the command header involved in the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" * @param input the command to be parsed","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" * @return type of header of the command","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" public static Cracker.Type parseCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" switch(input.split(\" \")[0]) {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" case \"mark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.MARK;","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" case \"event\":","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.TASK;","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" case \"delete\":","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.DELETE;","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" case \"list\":","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.LIST;","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" case \"bye\":","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.QUIT;","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" case \"clear\":","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.CLEAR;","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.UNKNOWN;","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" * Returns a task based on the header of the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" * @param input the command to be parsed","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" * @return a task extracted from the command","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" * @throws IllegalFormatException","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" public static Task parseTask(String input) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" String command \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" switch (command.toLowerCase()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" return new Todo(input.replaceFirst(command, \"\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" case \"event\":","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" return new Event(input.replaceFirst(command, \"\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" return new Deadline(input.replaceFirst(command, \"\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"should not be triggered\");","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" return null;","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" * Returns a task based on the content saved in the storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" * @param arr","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" * @return a task saved in the storage","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" * @throws IllegalFormatException","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" public static Task parseTask(String[] arr) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" switch (arr[0].charAt(0)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" return new Todo(arr[2]);","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" return new Event(arr[2], arr[3], arr[4]);","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" return new Deadline(arr[2], arr[3]);","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"Corrupt file detected\");","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" return null;","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" * Returns the number involved in the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":" * @param input the command to be parsed","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" * @return the index requested by the user","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" public static int parseIndex(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" return Integer.parseInt(input.replace(input.split(\" \")[0], \"\").trim()) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":" * Returns the keyword from a find operation","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":" * @param input","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":" public static String parseKeyword(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"antonTan96"},"content":" String command \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"antonTan96"},"content":" return input.replaceFirst(command, \"\").trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"antonTan96":112}},{"path":"src/main/java/uicomponents/Reply.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package uicomponents;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.TodoList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" * The UI component of the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"public class Reply {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" private ArrayList\u003cString\u003e lines;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" * Creates a Reply for the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" public Reply() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" this.lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" * Prints out all the stored strings in sequential order, sandwiched by 2 lines.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" private String echo() {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" StringBuilder reply \u003d new StringBuilder();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c lines.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" reply.append(lines.get(i) + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" lines.removeAll(lines);","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" return reply.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" private void add(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" lines.add(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" * Lists out all the tasks in the Todolist","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" * @param list a Todolist that stores tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" public String iterate(TodoList list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" this.add(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" this.add((i + 1) + \". \" + list.getTaskString(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" return echo();","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a store task operation","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" * @param t The task to be stored","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" * @param size The size of the list","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" public String storeTaskReply(Task t, int size) {","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" this.add(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" this.add(\"Now you have \" + size + \" task(s) in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" return echo();","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a delete task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" * @param t The deleted task","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" * @param size The size of the list","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" public String deleteTaskReply(Task t, int size) {","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" this.add(\"Got it. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" this.add(\"Now you have \" + size + \" task(s) in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" return echo();","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a mark/unmark task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" * @param t The task that is modified","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" public String modifyTaskReply(Task t) {","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" this.add(\"Operation done. This is the current state of your task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" return echo();","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a find task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" * @param list The list of filtered tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":" public String findTaskReply(TodoList list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":" this.add(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":" this.add((i + 1) + \". \" + list.getTaskString(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"antonTan96"},"content":" return echo();","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":113}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"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-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"antonTan96":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"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\"uicomponents.MainWindow\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"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-09"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"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-09"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"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-09"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"antonTan96":20}},{"path":"src/test/java/crackerpackage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import java.nio.file.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" public void testLoadNonExistentFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" Storage s \u003d new Storage(\"./data/badPath.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" TodoList td \u003d s.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" assertEquals(0, td.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" public void testStore(){","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" Storage s \u003d new Storage(\"./data/badPath.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" TodoList td \u003d s.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" td.store(new Todo(\"asdasd\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" assertEquals(1,1);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" public void testSaveFile(){","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" Storage s \u003d new Storage(\"./data/list.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" TodoList td \u003d s.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" td.store(new Todo(\"asdasd\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" s.save(td);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" } catch(Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" assertEquals(1,1);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":52}},{"path":"src/test/java/crackerpackage/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package crackerpackage.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" public void testToString(){","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" Todo s \u003d new Todo(\"aaaaa\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" assertEquals(\"[T][ ] aaaaa\",s.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" } catch(Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" public void testMarking(){","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" Todo s \u003d new Todo(\"aaaaa\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" s.markDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" assertEquals(\"[T][X] aaaaa\",s.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" } catch(Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" fail();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"event asd /from 123 /to 321","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":3}},{"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":"antonTan96"},"content":"java -classpath ..\\bin crackerpackage.Cracker \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"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":{"antonTan96":1,"-":20}}] diff --git a/antonTan96_ip_master/commits.json b/antonTan96_ip_master/commits.json index 0853e86b..6c1acb03 100644 --- a/antonTan96_ip_master/commits.json +++ b/antonTan96_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"antonTan96":[{"date":"2023-08-22","commitResults":[{"hash":"cfb8cd8df6aa93eadebe6d02a1221664ed321c73","isMergeCommit":false,"messageTitle":"Experimental push","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"56cd741c78363bff01fc846fbb999054ad2fc369","isMergeCommit":false,"messageTitle":"Level-0 Implemeted skeletal version of Cracker(formally Duke)","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":25},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-23","commitResults":[{"hash":"8146ea017cef2333e5418c0ccddcbef56eacdd02","isMergeCommit":false,"messageTitle":"Level-1 added echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":13}}},{"hash":"3cb2fbb84ecb7416fbf09d89aea09e98b98aa434","isMergeCommit":false,"messageTitle":"Level-2 Added ability to store task and list task","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":23}}},{"hash":"930a383d3c4fe6053d9fdf25635efadefb86b402","isMergeCommit":false,"messageTitle":"Level-3 Added ability to mark tasks as done and undone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":24}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b1b383f62e1ea944e4ff5448dd1ee1623516b472","isMergeCommit":false,"messageTitle":"Level-4 Added types of Tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":102,"deletions":31}}},{"hash":"f79aab15cbf203fb1a60e77f9b7a331c6e3597cb","isMergeCommit":false,"messageTitle":"A-TextUiTesting Fixed bug for automated testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8d3fae62ad955cbe81d0b60beb8f608bd62a6f48","isMergeCommit":false,"messageTitle":"Level-5 Added error Handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":48}}},{"hash":"8f3583dc4efa3bb542df10f4f3cc4f66224bec52","isMergeCommit":false,"messageTitle":"A-Enums Added enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":17}}},{"hash":"80d79025554d745b90d0810e0ac67cea8777310d","isMergeCommit":false,"messageTitle":"Level-5 Added Exceptions handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":2}}},{"hash":"9ea9973859995ac62a0dc95560e7d384e142b324","isMergeCommit":false,"messageTitle":"Level-6 Added ability to delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":5}}}]},{"date":"2023-08-30","commitResults":[{"hash":"054381982316803f7e8cae00ed6cf5d14f866170","isMergeCommit":false,"messageTitle":"Add Save Feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":4}}},{"hash":"c307269d9b6f80bd77a77e47d08b3c11e7778763","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"935676826cbf47379f4e49fd20f2fa05f4478e1c","isMergeCommit":false,"messageTitle":"Add Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":21}}},{"hash":"ada898b198b1245be8b1ac02317f8d9b4be494ae","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c83e2b32f4a70302f1695219417d7d187cf8c2cc","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":98}}},{"hash":"d3c1ae1af07a543fe8a7cc46d8d8fd7fc7d5982b","isMergeCommit":false,"messageTitle":"Add Parser and Refactor code","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":77}}},{"hash":"c8eec1e7256923a712644dba2478f1a1f9ad1023","isMergeCommit":false,"messageTitle":"Revert \"Refactor code\"","messageBody":"This reverts commit c83e2b32f4a70302f1695219417d7d187cf8c2cc.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":19},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"f8b8fd776819da94741a9b7209729aa35b1f7ee4","isMergeCommit":true,"messageTitle":"Merge pull request #1 from antonTan96/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"1334d7c1b2e48a914a3f12dcfd8085fc96e1ff36","isMergeCommit":false,"messageTitle":"Add dependancies","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1}}},{"hash":"a265b610dbf604b55729f15ca5cf0780a614b082","isMergeCommit":false,"messageTitle":"Add JUnit Test","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":9},"java":{"insertions":15,"deletions":0}}},{"hash":"5261c707c14032cc4127c39e65d677e40d7cdd84","isMergeCommit":false,"messageTitle":"Add test cases","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":0},"java":{"insertions":16,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"fe9967e1554c7603e139f5fbdc6b9dca3f55e927","isMergeCommit":false,"messageTitle":"Add Testing","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":115,"deletions":52},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"90fad8f8075dd26e138aadd18848a278049914c1","isMergeCommit":false,"messageTitle":"Stash changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":13}}},{"hash":"6273fcc9c1a43172ec635ab481694f73064fb63f","isMergeCommit":false,"messageTitle":"Fixed errors","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"b0edea874a1f9fe8949cb43d40d502d9faa03726","isMergeCommit":true,"messageTitle":"Resolve merge conflict and Add Javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"5dab49db40ac60ebaab5843be837f5b26dc037be","isMergeCommit":false,"messageTitle":"Apply Coding Standard","messageBody":"","tags":["A-CodingStandard","A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":251,"deletions":238}}},{"hash":"957c2aa764e3afc78344a5be9fba56d9872d85fd","isMergeCommit":false,"messageTitle":"Add Find function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":2}}},{"hash":"699bc87038c8abc8fe8d00ffbb6e7d0896a751a0","isMergeCommit":true,"messageTitle":"Merge tag \u0027Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"215c1afc8c69459901415a91d73fd17ea824e8fe","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"efdc33250b62cb3ff1773953f5122d4cbf212c19","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-Javadoc\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"c5afea323702757056c22f1c2775e8bbe078c2c1","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":1},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":228,"deletions":77}}},{"hash":"b2a02abb78546bfac6e3c736ab1efe2985fc2ad2","isMergeCommit":false,"messageTitle":"Add Greeting dialog","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"2d32d25ded3eb483a7892b2d77caeab625aec733","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"d3cfcaa6d43de32c3d0c4c71925295433b13b811","isMergeCommit":false,"messageTitle":"Delete src/main/java/UIComponents directory","messageBody":"UIComponents is a package name, which causes errors when testing with gradle due to the capital letters contained.\r\n\r\nRefactoring the directory will solve the problem\r\n\r\nLet\u0027s relocate the files deleted to uicomponents","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":161}}},{"hash":"ce276121210c9fe5ae1a23fb9e820a272c61ff45","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"The files added were in the UIComponents package directory which was deleted\r\n\r\nHaving capital letters in packages cause problems with gradle testing.\r\n\r\nThe files in the deleted directory will be relocated to this directory.\r\n\r\nLet\u0027s upload the files that were originally in UIComponents here.","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":161,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"antonTan96":{"java":1146,"md":2,"fxml":36,"sh":0,"bat":1,"gradle":23,"txt":3}},"authorContributionVariance":{"antonTan96":42380.734},"authorDisplayNameMap":{"antonTan96":"CS2103T-T08-3 ANTO.. ZHI"}} +{"authorDailyContributionsMap":{"antonTan96":[{"date":"2023-08-22","commitResults":[{"hash":"cfb8cd8df6aa93eadebe6d02a1221664ed321c73","isMergeCommit":false,"messageTitle":"Experimental push","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"56cd741c78363bff01fc846fbb999054ad2fc369","isMergeCommit":false,"messageTitle":"Level-0 Implemeted skeletal version of Cracker(formally Duke)","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":25},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-23","commitResults":[{"hash":"8146ea017cef2333e5418c0ccddcbef56eacdd02","isMergeCommit":false,"messageTitle":"Level-1 added echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":13}}},{"hash":"3cb2fbb84ecb7416fbf09d89aea09e98b98aa434","isMergeCommit":false,"messageTitle":"Level-2 Added ability to store task and list task","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":23}}},{"hash":"930a383d3c4fe6053d9fdf25635efadefb86b402","isMergeCommit":false,"messageTitle":"Level-3 Added ability to mark tasks as done and undone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":24}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b1b383f62e1ea944e4ff5448dd1ee1623516b472","isMergeCommit":false,"messageTitle":"Level-4 Added types of Tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":102,"deletions":31}}},{"hash":"f79aab15cbf203fb1a60e77f9b7a331c6e3597cb","isMergeCommit":false,"messageTitle":"A-TextUiTesting Fixed bug for automated testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8d3fae62ad955cbe81d0b60beb8f608bd62a6f48","isMergeCommit":false,"messageTitle":"Level-5 Added error Handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":48}}},{"hash":"8f3583dc4efa3bb542df10f4f3cc4f66224bec52","isMergeCommit":false,"messageTitle":"A-Enums Added enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":17}}},{"hash":"80d79025554d745b90d0810e0ac67cea8777310d","isMergeCommit":false,"messageTitle":"Level-5 Added Exceptions handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":2}}},{"hash":"9ea9973859995ac62a0dc95560e7d384e142b324","isMergeCommit":false,"messageTitle":"Level-6 Added ability to delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":5}}}]},{"date":"2023-08-30","commitResults":[{"hash":"054381982316803f7e8cae00ed6cf5d14f866170","isMergeCommit":false,"messageTitle":"Add Save Feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":4}}},{"hash":"c307269d9b6f80bd77a77e47d08b3c11e7778763","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"935676826cbf47379f4e49fd20f2fa05f4478e1c","isMergeCommit":false,"messageTitle":"Add Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":21}}},{"hash":"ada898b198b1245be8b1ac02317f8d9b4be494ae","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c83e2b32f4a70302f1695219417d7d187cf8c2cc","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":98}}},{"hash":"d3c1ae1af07a543fe8a7cc46d8d8fd7fc7d5982b","isMergeCommit":false,"messageTitle":"Add Parser and Refactor code","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":77}}},{"hash":"c8eec1e7256923a712644dba2478f1a1f9ad1023","isMergeCommit":false,"messageTitle":"Revert \"Refactor code\"","messageBody":"This reverts commit c83e2b32f4a70302f1695219417d7d187cf8c2cc.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":19},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"f8b8fd776819da94741a9b7209729aa35b1f7ee4","isMergeCommit":true,"messageTitle":"Merge pull request #1 from antonTan96/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"1334d7c1b2e48a914a3f12dcfd8085fc96e1ff36","isMergeCommit":false,"messageTitle":"Add dependancies","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1}}},{"hash":"a265b610dbf604b55729f15ca5cf0780a614b082","isMergeCommit":false,"messageTitle":"Add JUnit Test","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":9},"java":{"insertions":15,"deletions":0}}},{"hash":"5261c707c14032cc4127c39e65d677e40d7cdd84","isMergeCommit":false,"messageTitle":"Add test cases","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":0},"java":{"insertions":16,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"fe9967e1554c7603e139f5fbdc6b9dca3f55e927","isMergeCommit":false,"messageTitle":"Add Testing","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":115,"deletions":52},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"90fad8f8075dd26e138aadd18848a278049914c1","isMergeCommit":false,"messageTitle":"Stash changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":13}}},{"hash":"6273fcc9c1a43172ec635ab481694f73064fb63f","isMergeCommit":false,"messageTitle":"Fixed errors","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"b0edea874a1f9fe8949cb43d40d502d9faa03726","isMergeCommit":true,"messageTitle":"Resolve merge conflict and Add Javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"5dab49db40ac60ebaab5843be837f5b26dc037be","isMergeCommit":false,"messageTitle":"Apply Coding Standard","messageBody":"","tags":["A-CodingStandard","A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":251,"deletions":238}}},{"hash":"957c2aa764e3afc78344a5be9fba56d9872d85fd","isMergeCommit":false,"messageTitle":"Add Find function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":2}}},{"hash":"699bc87038c8abc8fe8d00ffbb6e7d0896a751a0","isMergeCommit":true,"messageTitle":"Merge tag \u0027Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"215c1afc8c69459901415a91d73fd17ea824e8fe","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"efdc33250b62cb3ff1773953f5122d4cbf212c19","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-Javadoc\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"c5afea323702757056c22f1c2775e8bbe078c2c1","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":1},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":228,"deletions":77}}},{"hash":"b2a02abb78546bfac6e3c736ab1efe2985fc2ad2","isMergeCommit":false,"messageTitle":"Add Greeting dialog","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"2d32d25ded3eb483a7892b2d77caeab625aec733","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"d3cfcaa6d43de32c3d0c4c71925295433b13b811","isMergeCommit":false,"messageTitle":"Delete src/main/java/UIComponents directory","messageBody":"UIComponents is a package name, which causes errors when testing with gradle due to the capital letters contained.\r\n\r\nRefactoring the directory will solve the problem\r\n\r\nLet\u0027s relocate the files deleted to uicomponents","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":161}}},{"hash":"ce276121210c9fe5ae1a23fb9e820a272c61ff45","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"The files added were in the UIComponents package directory which was deleted\r\n\r\nHaving capital letters in packages cause problems with gradle testing.\r\n\r\nThe files in the deleted directory will be relocated to this directory.\r\n\r\nLet\u0027s upload the files that were originally in UIComponents here.","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":161,"deletions":0}}},{"hash":"5c3227f9eeba393d619b45a94bccc22af65d89b7","isMergeCommit":false,"messageTitle":"Use java assertion feature","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":5},"java":{"insertions":3,"deletions":1}}},{"hash":"8b0a944081129d61eb7714ba0ca4223845d9f4f5","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"Storage currently handles the load function, loading new tasks given a\nstring.\n\nFeeding the string to the parser would be more fitting of OOP\nprinciples.\n\nLet\u0027s refactor the code to have the parser handle task regeneration.\n","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":14}}},{"hash":"1b93144d4c51c434162f60e794a38b4c04e7dc9b","isMergeCommit":false,"messageTitle":"Fix coding standard","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":63}}},{"hash":"417d4a3cf04cdfdc5504573968e5a735875e3288","isMergeCommit":true,"messageTitle":"Merge pull request #3 from antonTan96/branch-A-Assertions","messageBody":"Use java assertion feature","fileTypesAndContributionMap":{}},{"hash":"d46209ef8e6725af0d9aa098378e75d99b66db87","isMergeCommit":false,"messageTitle":"Revert \"Use java assertion feature\"","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":7},"java":{"insertions":1,"deletions":3}}},{"hash":"e9988107bc46c13a0aff55609fa3aca8e320fe41","isMergeCommit":true,"messageTitle":"Merge pull request #4 from antonTan96/revert-3-branch-A-Assertions","messageBody":"Revert \"Use java assertion feature\"","fileTypesAndContributionMap":{}},{"hash":"e855f5901934f7b8e6c2570e8df434255243861d","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Use java assertion feature\"\"","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":5},"java":{"insertions":3,"deletions":1}}},{"hash":"8033d812f7c39a0f24302e34214b4b90a599ffee","isMergeCommit":true,"messageTitle":"Merge pull request #5 from antonTan96/revert-4-revert-3-branch-A-Assertions","messageBody":"Revert \"Revert \"Use java assertion feature\"\"","fileTypesAndContributionMap":{}},{"hash":"a8bd5383e906435fd6c2445aee822977d396c124","isMergeCommit":true,"messageTitle":"Merge pull request #2 from antonTan96/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"7ba323426b49f8eb870ed8c01cf7fc01e04d9f7c","isMergeCommit":false,"messageTitle":"Add Archive and clear task function","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":9}}}]}]},"authorFileTypeContributionMap":{"antonTan96":{"java":1207,"md":2,"fxml":36,"sh":0,"bat":1,"gradle":23,"txt":3}},"authorContributionVariance":{"antonTan96":49039.863},"authorDisplayNameMap":{"antonTan96":"CS2103T-T08-3 ANTO.. ZHI"}} diff --git a/applepiofmyeye_ip_master/authorship.json b/applepiofmyeye_ip_master/authorship.json index 8778a557..e4b01125 100644 --- a/applepiofmyeye_ip_master/authorship.json +++ b/applepiofmyeye_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"# Barbie project template","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"This is an individual CS2103T greenfield Java project. It is forked from the project template Duke, which is named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"3. After that, locate the `src/main/java/Barbie.java` file, right-click it, and choose `Run Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" ______________________________","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" Hi Barbie! Hi Ken!","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" I\u0027m","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ____ _","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" | _ \\ | | ","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" | |_| |_____,_ ,_| |,___ _ ___","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" | _ /| _ | ` _| __\\ \\| |/ _ \\","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" | |_| | |_| | | | |__/ /| | ___/ ","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" |____/ \\__,_|_| |_|\\__/ |_|\\___/","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" What can I do for you today?","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" ______________________________","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" [you]:","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"applepiofmyeye":17,"-":16}},{"path":"barbie.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"T,0,do, work,","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"applepiofmyeye":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":"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" mainClass.set(\"seedu.Barbie\")","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" archiveBaseName \u003d \"barbie\"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":"ext {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" mainClassName \u003d \u0027seedu.Barbie\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":"shadowJar {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" archiveFileName \u003d \u0027barbie.jar\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"applepiofmyeye":15,"-":40}},{"path":"src/main/java/Barbie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.BarbieNoDeadlineException;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.BarbieNoDescException;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.BarbieNoKeywordException;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.BarbieNoSuchCommandException;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.BarbieNoTimingException;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"import exceptions.BarbieTaskNumberException;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"import types.Deadlines;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"import types.Party;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"import types.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" * Implements the main Barbie chatbot logic.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"public class Barbie {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" private enum Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" MARK,","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" UNMARK,","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" DEL,","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" TODO,","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" DEADLINE,","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" PARTY,","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" LIST,","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" BYE,","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" FIND","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" * Main wrapper method for the command logic of Barbie chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" * @param args to leave empty","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" // CONSTANTS","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e list \u003d Storage.getLastList();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" int indexNumber \u003d list.size(); // Starting from 1 reduces the need to subtract and add 1 for usability.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" // Intro","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" Ui.intro(Utils.getDateList(LocalDate.now(), list));","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" loop:","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" while (true) {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" Command command \u003d Command.valueOf(parts[0].toUpperCase());","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" Ui.barbie();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" switch (command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" case DEL:","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" String desc \u003d parts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" int taskNumber;","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" taskNumber \u003d Integer.parseInt(desc) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieTaskNumberException();","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" switch (command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" case MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" list.get(taskNumber).mark();","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":" Storage.changeLineStatus(path, \"1\", taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" Ui.mark(list.get(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" case UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":" list.get(taskNumber).unmark();","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":" Storage.changeLineStatus(path, \"2\", taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" Ui.unmark(list.get(taskNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" case DEL:","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" // Editing variables","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" list.remove(taskNumber);","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" indexNumber -\u003d 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" Storage.deleteLine(path, taskNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" // Output","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" Ui.del();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" case TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" case PARTY:","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoDescException();","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":" String[] parts2 \u003d parts[1].split(\"/\");","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":" switch (command) {","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":" if (parts2.length \u003c 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoDeadlineException();","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts2[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate by \u003d LocalDate.parse(parts2[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"applepiofmyeye"},"content":" list.add(indexNumber, new Deadlines(desc, by));","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, desc, by);","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":129,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":131,"author":{"gitId":"applepiofmyeye"},"content":" case PARTY:","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"applepiofmyeye"},"content":" if (parts2.length \u003c 3) {","lastModifiedDate":"2023-08-25"},{"lineNumber":133,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoTimingException();","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"applepiofmyeye"},"content":" desc \u003d parts2[0];","lastModifiedDate":"2023-09-07"},{"lineNumber":136,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate from \u003d LocalDate.parse(parts2[1]);","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"applepiofmyeye"},"content":" LocalDate to \u003d LocalDate.parse(parts2[2]);","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"applepiofmyeye"},"content":" list.add(indexNumber, new Party(desc, from, to));","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, desc, from, to);","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"applepiofmyeye"},"content":" list.add(indexNumber, new Todo(desc));","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"applepiofmyeye"},"content":" Storage.addToList(path, desc);","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"applepiofmyeye"},"content":" Ui.taskAdded(list.get(indexNumber));","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"applepiofmyeye"},"content":" indexNumber++;","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":152,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"applepiofmyeye"},"content":" case FIND:","lastModifiedDate":"2023-09-05"},{"lineNumber":154,"author":{"gitId":"applepiofmyeye"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoKeywordException();","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":157,"author":{"gitId":"applepiofmyeye"},"content":" String keyword \u003d parts[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":159,"author":{"gitId":"applepiofmyeye"},"content":" Ui.findTasks(list, indexNumber, keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":160,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":161,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":162,"author":{"gitId":"applepiofmyeye"},"content":" case LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"applepiofmyeye"},"content":" // No variables to edit, only output (refer to listTasks func)","lastModifiedDate":"2023-08-25"},{"lineNumber":164,"author":{"gitId":"applepiofmyeye"},"content":" Ui.listTasks(list, indexNumber);","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"applepiofmyeye"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"applepiofmyeye"},"content":" case BYE:","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"applepiofmyeye"},"content":" break loop; // break out of the while loop, not switch statement","lastModifiedDate":"2023-08-25"},{"lineNumber":169,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":170,"author":{"gitId":"applepiofmyeye"},"content":" default:","lastModifiedDate":"2023-08-25"},{"lineNumber":171,"author":{"gitId":"applepiofmyeye"},"content":" throw new BarbieNoSuchCommandException();","lastModifiedDate":"2023-09-07"},{"lineNumber":172,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":174,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":175,"author":{"gitId":"applepiofmyeye"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Hey Barbie,, make sure to give dates in the format YYYY-MM-DD alright! \");","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception ex) {","lastModifiedDate":"2023-08-25"},{"lineNumber":180,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(ex.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":182,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":183,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[you]:\");","lastModifiedDate":"2023-08-23"},{"lineNumber":184,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":186,"author":{"gitId":"applepiofmyeye"},"content":" Ui.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"applepiofmyeye":191}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import java.nio.file.StandardOpenOption;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"import types.Deadlines;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"import types.Party;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"import types.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" * This class deals with all file reading and writing.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" * The type is also always Todo, as it takes in the \"desc\" parameter only.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" * @param path the path of file to write to","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" protected static void addToList(Path path, String desc) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"T\" + \",\" + 0 + \",\" + desc + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"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":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"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":50,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" * @param path the path of the file to write to","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" * @param deadline the deadline the task has to be completed by","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" protected static void addToList(Path path, String desc, LocalDate deadline) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"D\" + \",\" + 0 + \",\" + desc + \",\" + deadline + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" * Writes to the file given, in the format of [type][status] [desc].","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" * Eg. [T][ ] read book","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" * The status is always 0 when creating a new Task, so this method assumes","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" * that the task is marked as undone in this method.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"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":71,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" * @param path the path of the file to write to","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":" * @param desc the description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" * @param from the start time of the event","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" * @param to the end time of the event","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" public static void addToList(Path path, String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"P\" + \",\" + 0 + \",\" + desc + \",\" + from + \",\" + to + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, line.getBytes(), StandardOpenOption.APPEND);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":" * Returns the latest list from the storage file upon starting up.","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" * @return the last list loaded from the storage file","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":" protected static ArrayList\u003cTask\u003e getLastList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e finalList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" Path path \u003d Paths.get(\"barbie.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" Files.createFile(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[A new list created for current user]\");","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"-------------------------------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[A current list is being used for current user]\");","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" Files.readAllLines(path).forEach(x -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":" String[] taskParts \u003d x.split(\",\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" String taskType \u003d taskParts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" String taskStatus \u003d taskParts[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":" String desc \u003d taskParts[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":" if (Objects.equals(taskType, \"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Todo(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" } else if (Objects.equals(taskType, \"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Deadlines(desc, LocalDate.parse(taskParts[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" } else if (Objects.equals(taskType, \"P\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Party(desc, LocalDate.parse(taskParts[3]), LocalDate.parse(taskParts[4]));","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":" task \u003d new Task(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":" if (Integer.parseInt(taskStatus) \u003d\u003d 1) {","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":" task.mark();","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"applepiofmyeye"},"content":" finalList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(finalList);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"applepiofmyeye"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"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":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"applepiofmyeye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"applepiofmyeye"},"content":" return finalList;","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":"","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"applepiofmyeye"},"content":" * Changes the status of a Task in the storage file.","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"applepiofmyeye"},"content":" * @param path path of the storage file (to allow for saving to a specified list. See Level-7.1)","lastModifiedDate":"2023-09-04"},{"lineNumber":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":" protected static void changeLineStatus(Path path, String status, int lineToChange) {","lastModifiedDate":"2023-09-04"},{"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 path path of the storage file","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"applepiofmyeye"},"content":" * @param lineToDelete the Task number to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"applepiofmyeye"},"content":" protected static void deleteLine(Path path, int lineToDelete) {","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"applepiofmyeye"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"applepiofmyeye"},"content":" if (lineToDelete \u003e\u003d 0 \u0026\u0026 lineToDelete \u003c lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"applepiofmyeye"},"content":" lines.remove(lineToDelete);","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"applepiofmyeye"},"content":" Files.write(path, lines);","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"applepiofmyeye"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"applepiofmyeye"},"content":" throw new IllegalArgumentException(\"Invalid line number to delete.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"applepiofmyeye":184}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":" * Takes care of any of the UI related messages that will be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" private static final String line \u003d \"______________________________\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" * Introduces the chatbot to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * @param list list of Tasks that should be done today","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" protected static void intro(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" String logo \u003d \" ____ _\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ \\\\ | |\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| |_____,_ ,_| |,___ _ ___\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ /| _ | ` _| __\\\\ \\\\ |/ _ \\\\\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| | |_| | | | |__/ /| | ___/\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" + \"|____/ \\\\__,_|_| |_|\\\\__/ |_|\\\\___/\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(line","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" + \"Hi Barbie! Hi Ken!\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\nI\u0027m\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" + logo","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\n\\nThis is the list of things you have today!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" list.forEach(System.out::println);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\nWhat can I do for you?\\n\" + line);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"[you]:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" * Greets the user before ending the chat.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" protected static void exit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Bye Barbie! Bye Ken!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully added.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was added to the list","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" protected static void taskAdded(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\tGot you barbie! I\u0027ve added this task to your Barbie list:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t \" + task);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was marked as done","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"applepiofmyeye"},"content":" protected static void mark(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t \" + task + \"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t\" + line);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully marked as undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"applepiofmyeye"},"content":" * @param task Task that was marked as undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"applepiofmyeye"},"content":" protected static void unmark(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Alright! I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t \" + task + \"\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t\" + line);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"applepiofmyeye"},"content":" * Prints that the Task has been successfully deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"applepiofmyeye"},"content":" protected static void del() {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t Deletion success! I\u0027ve deleted this task off your list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"applepiofmyeye"},"content":" * Prints a \"[barbie]:\" to signal that the chatbot is the one talking.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"applepiofmyeye"},"content":" protected static void barbie() {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t\" + line","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\t [barbie]:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"applepiofmyeye"},"content":" * Prints the Task in numerical order, or that there is no Task in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"applepiofmyeye"},"content":" * @param list list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"applepiofmyeye"},"content":" * @param indexNumber size of list (for optimised performance)","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"applepiofmyeye"},"content":" protected static void listTasks(ArrayList\u003cTask\u003e list, int indexNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"applepiofmyeye"},"content":" if (indexNumber \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \"","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"applepiofmyeye"},"content":" + \"\u0027deadline\u0027 or \u0027party\u0027 commands!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"applepiofmyeye"},"content":" // \"list\" command","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"applepiofmyeye"},"content":" for (int i \u003d 0; i \u003c indexNumber; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"applepiofmyeye"},"content":" int itemNumber \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t\" + itemNumber + \". \" + list.get(i));","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"applepiofmyeye"},"content":" protected static void findTasks(ArrayList\u003cTask\u003e list, int indexNumber, String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"applepiofmyeye"},"content":" if (indexNumber \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"Hmm.. your list looks empty. To add items, use the \u0027todo\u0027, \"","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"applepiofmyeye"},"content":" + \"\u0027deadline\u0027 or \u0027party\u0027 commands!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\tThese are your tasks with the keyword: \" + keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"applepiofmyeye"},"content":" int itemNumber \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"applepiofmyeye"},"content":" for (int i \u003d 0; i \u003c indexNumber; i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"applepiofmyeye"},"content":" String taskDesc \u003d list.get(i).toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"applepiofmyeye"},"content":" int index \u003d taskDesc.indexOf(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"applepiofmyeye"},"content":" if (index \u003e\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\t\" + itemNumber + \". \" + list.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"applepiofmyeye"},"content":" itemNumber++;","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"applepiofmyeye"},"content":" if (itemNumber \u003d\u003d 1) {","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(\"\\tHmm.. There doesn\u0027t seem to be any matching tasks!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"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"}],"authorContributionMap":{"applepiofmyeye":131}},{"path":"src/main/java/Utils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import types.Deadlines;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"import types.Party;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" * Abstracts any helper functions that will be used in the main function.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"public class Utils {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * Retrieves the list of Tasks that should be done today.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" * @param date date of the Tasks to retrieve","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" * @param lastList latest list of Tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" * @return the list of Tasks that should be done today","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" protected static ArrayList\u003cTask\u003e getDateList(LocalDate date, ArrayList\u003cTask\u003e lastList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e thisDatesList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" lastList.forEach(x -\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" if (x instanceof Deadlines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" Deadlines y \u003d (Deadlines) x;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" if (y.isToday(date)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" thisDatesList.add(y);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" } else if (x instanceof Party) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" Party y \u003d (Party) x;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" if (y.isToday(date)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" thisDatesList.add(y);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" });","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" return thisDatesList;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"applepiofmyeye":46}},{"path":"src/main/java/exceptions/BarbieException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Parent class for all Barbie-related Exceptions.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for a BarbieException for child classes to implement.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" * @param message to print","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" super(\"\\tBarbie Error!!\\n\\t\" + message);","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":15}},{"path":"src/main/java/exceptions/BarbieNoDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Throws an exception for a Deadline initiated with no deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoDeadlineException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for BarbieNoDeadlineException.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoDeadlineException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Barbie your deadline has no deadline!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"Remember to add a deadline after the description denoted by a \u0027/\u0027 luv\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":15}},{"path":"src/main/java/exceptions/BarbieNoDescException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Throws an exception for any Task initiated with no description.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoDescException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for BarbieNoDescException.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoDescException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Barbie your item has no description!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"Remember to add a description after the command \u0027todo/deadline/party\u0027.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":16}},{"path":"src/main/java/exceptions/BarbieNoKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","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 \u003ckeywaord\u003e\u0027!\");","lastModifiedDate":"2023-09-07"},{"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/exceptions/BarbieNoSuchCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","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/exceptions/BarbieNoTimingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Throws an exception when no timing is given when initiating a Deadline or a Party.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieNoTimingException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for BarbieNoTimingException.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieNoTimingException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Barbie your party has the incorrect number of timings!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"Remember to add a \u0027start\u0027 time and an \u0027end\u0027 time\"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" + \" after the description! denote it by a \u0027/\u0027 luv\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":16}},{"path":"src/main/java/exceptions/BarbieTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Throws an exception when changing the status or deleting a Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class BarbieTaskNumberException extends BarbieException {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" * Constructor for BarbieTaskNumberException.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" public BarbieTaskNumberException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" super(\"Task to mark or unmark or del is not provided as a digit!\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\n\" + \"use the list command to see the digit of your task and make sure to give \\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" + \"the digit of the task you want to mark/unmark/del. (e.g. mark 2)\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"applepiofmyeye":16}},{"path":"src/main/java/types/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" * Represents the subset of Tasks that have to be done by a certain deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" * Initialises an instance of a Deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" * @param description description of the Task to be completed","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" * @param by the deadline to complete the Task by in the format YYYY-MM-DD","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" public Deadlines(String description, LocalDate by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" * Checks if the Deadline is due on the specified date.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" * @param date the date to compare the Deadline\u0027s deadline to in the format YYYY-MM-DD","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" * @return whether the Task is due on the given date or not","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" public boolean isToday(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" return (Objects.equals(this.by, date));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" * Overrides the toString() method to return a customised String for each Deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" * @return String with \"D\" type and with a \"[BY: xxx]\" tag","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" return \"[D]\" + super.toString() + \"[BY: \" + this.by + \"]\";","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":44}},{"path":"src/main/java/types/Party.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" * Represents the subset of Tasks that are events and have a start and end.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"public class Party extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" * Initialises an instance of a Party.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" * @param description description of the Party","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" * @param from the start date of the Party","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" * @param to the end date of the Party","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" public Party(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" * Checks if the Party is due on the specified date.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" * @param date the date to compare the Party\u0027s deadline to in the format YYYY-MM-DD","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" * @return whether the Party is held on the given date or not","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" public boolean isToday(LocalDate date) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" return (Objects.equals(this.from, date));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" * Overrides the toString() method to return a customised String for each Todo.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" * @return String with \"P\" type and with the \"~from:xx, to:xx~\" tag.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" return \"{P}\" + super.toString() + \"~from: \" + this.from + \", to: \" + this.to + \"~\";","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":45}},{"path":"src/main/java/types/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Represents all Tasks that can be added into the list of Tasks saved by Barbie.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" protected boolean isCompleted;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" protected String description;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" * Initialises a Task, that has not yet been completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" * @param description description of the Task to be completed","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" * Retrieves the status of the Task: done or undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" * @return a String of [X] or [ ], [X] for done and [ ] for undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" return (isCompleted ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" * Unmarks a Task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" * Meaning that the Task is marked as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" public void unmark() {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" * Marks the Task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" public void mark() {","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":" isCompleted \u003d true;","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":" * Overrides the toString() method to return a customised String with the status of the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" * @return customised String including the status and description of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" return this.getStatus() + \" \" + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":54}},{"path":"src/main/java/types/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"applepiofmyeye"},"content":"package types;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"applepiofmyeye"},"content":" * Represents the subset of Tasks that only have a description.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"applepiofmyeye"},"content":"public class Todo extends types.Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":" * Initialises an instance of a Todo.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":" * @param description description of the Task to be completed","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" * Overrides the toString() method to return a customised String for each Todo.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" * @return String with \"T\" type","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"applepiofmyeye":25}},{"path":"src/test/java/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 types.Task;","lastModifiedDate":"2023-09-07"},{"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 org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-07"},{"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":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" * Tests the Ui class.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"public class TestUi {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"applepiofmyeye"},"content":" @BeforeEach","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"applepiofmyeye"},"content":" public void setUp() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"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":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 testIntroEmptyList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":" String line \u003d \"______________________________\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"applepiofmyeye"},"content":" String logo \u003d \" ____ _\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ \\\\ | |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| |_____,_ ,_| |,___ _ ___\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"applepiofmyeye"},"content":" + \"| _ /| _ | ` _| __\\\\ \\\\ |/ _ \\\\\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"applepiofmyeye"},"content":" + \"| |_| | |_| | | | |__/ /| | ___/\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"applepiofmyeye"},"content":" + \"|____/ \\\\__,_|_| |_|\\\\__/ |_|\\\\___/\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"applepiofmyeye"},"content":" String greeting \u003d (line","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"applepiofmyeye"},"content":" + \"Hi Barbie! Hi Ken!\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\nI\u0027m\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"applepiofmyeye"},"content":" + logo","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"applepiofmyeye"},"content":" + \"\\n\\nThis is the list of things you have today!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"applepiofmyeye"},"content":" String question \u003d (\"\\nWhat can I do for you?\\n\" + line + \"\\n[you]:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"applepiofmyeye"},"content":" String expected \u003d greeting + \"\\n\" + question;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"applepiofmyeye"},"content":" Ui.intro(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(expected, outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"applepiofmyeye"},"content":" * Tests if an empty file list will print the prompt to add Tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"applepiofmyeye"},"content":" public void testEmptyFileList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"applepiofmyeye"},"content":" Ui.listTasks(new ArrayList\u003c\u003e(), 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"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":53,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(expected, outputStreamCaptor.toString().trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":56}},{"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 org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"applepiofmyeye"},"content":"import types.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"applepiofmyeye"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"applepiofmyeye"},"content":" * Tests the Utils class.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"applepiofmyeye"},"content":"public class TestUtils {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"applepiofmyeye"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"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":17,"author":{"gitId":"applepiofmyeye"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"applepiofmyeye"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"applepiofmyeye"},"content":" public void testEmptyList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"applepiofmyeye"},"content":" ArrayList\u003cTask\u003e list \u003d Utils","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"applepiofmyeye"},"content":" .getDateList(LocalDate.parse(\"2023-08-20\"), new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"applepiofmyeye"},"content":" assertEquals(list.size(), 0);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"applepiofmyeye"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"applepiofmyeye"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"applepiofmyeye"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"applepiofmyeye":26}},{"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":"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}}] diff --git a/applepiofmyeye_ip_master/commits.json b/applepiofmyeye_ip_master/commits.json index e81abbb5..3f865519 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}}}]}]},"authorFileTypeContributionMap":{"applepiofmyeye":{"java":966,"md":17,"fxml":0,"sh":1,"bat":1,"gradle":15,"txt":25}},"authorContributionVariance":{"applepiofmyeye":34601.992},"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":{}}]}]},"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"}} diff --git a/archive.zip b/archive.zip index 7f814f54..65bf3d8d 100644 Binary files a/archive.zip and b/archive.zip differ diff --git a/asdfghjkxd_ip_master/authorship.json b/asdfghjkxd_ip_master/authorship.json index c18442b9..346da191 100644 --- a/asdfghjkxd_ip_master/authorship.json +++ b/asdfghjkxd_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":"asdfghjkxd"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-26"},{"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":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-27"},{"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":"asdfghjkxd"},"content":" mainClass.set(\"juke.Juke\")","lastModifiedDate":"2023-08-26"},{"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":"asdfghjkxd"},"content":" archiveBaseName \u003d \"juke\"","lastModifiedDate":"2023-08-26"},{"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":"asdfghjkxd"},"content":"checkstyle {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"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":{"asdfghjkxd":22,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"E|T|splashdown|2022-04-24T00:00|2022-04-25T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"D|T|finish cs career|9999-12-31T00:00","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"T|F|finish cs2100 lecture","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"E|F|very big event oh no|2023-12-25T00:00|2023-12-26T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"T|F|oh no is this a bug","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"T|F|thing","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"T|F|event","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"T|F|bye","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":8}},{"path":"src/main/java/juke/Juke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commands.JukeExceptionCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.ui.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Juke Virtual Assistant","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"public class Juke {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" /** Represents the longest string that can be printed. */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" public static final int MAX_STRING_LENGTH \u003d 35;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" * Runs when this Java file is compiled and executed. This method is used to start {@code Juke}","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * and begin the request-response cycle.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * @param args CLI Arguments","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" Juke jukeAssistant \u003d new Juke();","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" jukeAssistant.start();","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" } catch (JukeInitialisationException | JukeStorageException","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" | JukeParseException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" // program should not continue if it cannot initialise properly","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" // or if there are issues with retrieving data from the datafile","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" new JukeExceptionCommand(ex).execute(Response.of());","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" * Starts the UI for Juke.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" private void start() {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" Application.launch(Ui.class);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":42}},{"path":"src/main/java/juke/commands/JukeAddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * Action that adds a Task to the {@code TaskList}.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeAddTaskCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} to manage all tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code JukeTask} to add. */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" private final JukeTask task;","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeAddTaskAction}","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * @param task {@code JukeTask} to add","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" public JukeAddTaskCommand(TaskList taskList, JukeTask task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" * Carries out an action when the command is executed.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there are any errors encountered when reading the data file","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList.addTask(this.task);","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(\"Task added: \" + this.task, Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":44}},{"path":"src/main/java/juke/commands/JukeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalCommandArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"import juke.parsers.DateTimeParser;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"import juke.parsers.Parser;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeDeadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeEvent;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTodo;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Abstract class used to dispatch commands to the respective commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class JukeCommand extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /** Regex to detect \"|\" in the topic, which is a reserved character for the datafile. */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" private static final String ILLEGAL_TOPIC_REGEX \u003d \".*\\\\|.*\";","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" * Creates the specified {@code JukeCommand} of interest.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" * @param command Raw command from the user input","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * @return Corresponding {@code JukeCommand} object","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" public static JukeCommand of(String command, TaskList taskList) throws JukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.dispatchCommand(Parser.parseBySpace(command), taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" * Dispatches the commands to the necessary subclasses of {@code JukeCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" * @return Corresponding {@code JukeCommand} object","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if the argument provided is not understood","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeCommand dispatchCommand(String[] args, TaskList taskList) throws JukeIllegalArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeException(\"Oh no! No commands are present!\");","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" String mainCommand \u003d args[0];","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" switch (mainCommand) {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" case \"list\":","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" return new JukePrintCommand(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" case \"bye\":","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" case \"mark\":","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.mark(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.unmark(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.delete(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.todo(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.deadline(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.event(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" case \"find\":","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.find(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" case \"sort\":","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.sort(args, taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" // exits the switch and throws an exception in the proceeding line","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I do not understand that command!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeMarkTaskDoneCommand} object.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeMarkTaskDoneCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeMarkTaskDoneCommand mark(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your mark command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" \"mark [task number]\");","lastModifiedDate":"2023-08-21"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" int i \u003d Integer.parseInt(args[1]);","lastModifiedDate":"2023-08-20"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeMarkTaskDoneCommand(taskList, i - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" } catch (NumberFormatException ex) {","lastModifiedDate":"2023-08-20"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! You must input a valid task number \"","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" + \"for the command \\\"mark\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeMarkTaskUndoneCommand} object.","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeMarkTaskUndoneCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeMarkTaskUndoneCommand unmark(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your unmark command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" \"unmark [task number]\");","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" int i \u003d Integer.parseInt(args[1]);","lastModifiedDate":"2023-08-20"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeMarkTaskUndoneCommand(taskList, i - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":" } catch (NumberFormatException ex) {","lastModifiedDate":"2023-08-20"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! You must input a valid task number \"","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" + \"for the command \\\"unmark\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeDeleteTaskCommand} object.","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeDeleteTaskCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeDeleteTaskCommand delete(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your delete command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":" \"delete [task number]\");","lastModifiedDate":"2023-08-21"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" int i \u003d Integer.parseInt(args[1]);","lastModifiedDate":"2023-08-21"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeDeleteTaskCommand(taskList, i - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" } catch (NumberFormatException ex) {","lastModifiedDate":"2023-08-21"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! You must input a valid task number \"","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" + \"for the command \\\"unmark\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeAddTaskCommand} object.","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeAddTaskCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeAddTaskCommand todo(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" // contains only the command text","lastModifiedDate":"2023-08-21"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your todo command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":" \"todo [description]\");","lastModifiedDate":"2023-08-21"},{"lineNumber":160,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":161,"author":{"gitId":"asdfghjkxd"},"content":" // concatenate back the string","lastModifiedDate":"2023-08-21"},{"lineNumber":162,"author":{"gitId":"asdfghjkxd"},"content":" String newArgs \u003d String.join(\" \", Arrays.copyOfRange(args, 1, args.length));","lastModifiedDate":"2023-08-21"},{"lineNumber":163,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"asdfghjkxd"},"content":" if (Pattern.matches(JukeCommand.ILLEGAL_TOPIC_REGEX, newArgs)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! The topic cannot contain the character \\\"|\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"asdfghjkxd"},"content":" JukeTask jt \u003d new JukeTodo(newArgs);","lastModifiedDate":"2023-08-21"},{"lineNumber":169,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeAddTaskCommand(taskList, jt);","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":171,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeAddTaskCommand} object.","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeAddTaskCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeAddTaskCommand deadline(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"asdfghjkxd"},"content":" // concatenate back the string","lastModifiedDate":"2023-08-21"},{"lineNumber":182,"author":{"gitId":"asdfghjkxd"},"content":" String newDeadlineArgs \u003d String.join(\" \", Arrays.copyOfRange(args, 1, args.length));","lastModifiedDate":"2023-08-21"},{"lineNumber":183,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":184,"author":{"gitId":"asdfghjkxd"},"content":" // check if fulfills regex","lastModifiedDate":"2023-08-21"},{"lineNumber":185,"author":{"gitId":"asdfghjkxd"},"content":" if (!Parser.isMatchByString(newDeadlineArgs)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":186,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your deadline command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":187,"author":{"gitId":"asdfghjkxd"},"content":" \"deadline [description] /by [DD(-/)MM(-/)YYYY HH(-:)MM \"","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"asdfghjkxd"},"content":" + \"or DD(-/)MM(-/)YYYY]\\n(..) -\u003e any of\");","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":190,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsedArguments \u003d Parser.parseByByString(newDeadlineArgs);","lastModifiedDate":"2023-08-26"},{"lineNumber":191,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"asdfghjkxd"},"content":" if (Pattern.matches(JukeCommand.ILLEGAL_TOPIC_REGEX, parsedArguments[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! The topic cannot contain the character \\\"|\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"asdfghjkxd"},"content":" JukeTask jt \u003d new JukeDeadline(parsedArguments[0], DateTimeParser.parse(parsedArguments[1]));","lastModifiedDate":"2023-08-26"},{"lineNumber":197,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeAddTaskCommand(taskList, jt);","lastModifiedDate":"2023-08-26"},{"lineNumber":198,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":199,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeAddTaskCommand} object.","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeAddTaskCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeAddTaskCommand event(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"asdfghjkxd"},"content":" // concatenate back the string","lastModifiedDate":"2023-08-21"},{"lineNumber":210,"author":{"gitId":"asdfghjkxd"},"content":" String newEventArgs \u003d String.join(\" \", Arrays.copyOfRange(args, 1, args.length));","lastModifiedDate":"2023-08-21"},{"lineNumber":211,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":212,"author":{"gitId":"asdfghjkxd"},"content":" // check if fulfills regex","lastModifiedDate":"2023-08-21"},{"lineNumber":213,"author":{"gitId":"asdfghjkxd"},"content":" if (!Parser.isMatchFromToString(newEventArgs)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":214,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your event command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":215,"author":{"gitId":"asdfghjkxd"},"content":" \"event [description] /from [DD(-/)MM(-/)YYYY HH(-:)MM \"","lastModifiedDate":"2023-08-27"},{"lineNumber":216,"author":{"gitId":"asdfghjkxd"},"content":" + \"or DD(-/)MM(-/)YYYY]\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":217,"author":{"gitId":"asdfghjkxd"},"content":" + \"/to [DD(-/)MM(-/)YYYY HH(-:)MM or DD(-/)\"","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"asdfghjkxd"},"content":" + \"MM(-/)YYYY]\\n(..) -\u003e any of\");","lastModifiedDate":"2023-08-27"},{"lineNumber":219,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":220,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsedArguments \u003d Parser.parseByFromToString(newEventArgs);","lastModifiedDate":"2023-08-26"},{"lineNumber":221,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":222,"author":{"gitId":"asdfghjkxd"},"content":" if (Pattern.matches(JukeCommand.ILLEGAL_TOPIC_REGEX, parsedArguments[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":223,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! The topic cannot contain the character \\\"|\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":224,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":225,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":226,"author":{"gitId":"asdfghjkxd"},"content":" LocalDateTime startTime \u003d DateTimeParser.parse(parsedArguments[1]);","lastModifiedDate":"2023-09-08"},{"lineNumber":227,"author":{"gitId":"asdfghjkxd"},"content":" LocalDateTime endTime \u003d DateTimeParser.parse(parsedArguments[2]);","lastModifiedDate":"2023-09-08"},{"lineNumber":228,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":229,"author":{"gitId":"asdfghjkxd"},"content":" if (endTime.isBefore(startTime)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":230,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! The \\\"to\\\" date cannot be before the \"","lastModifiedDate":"2023-08-26"},{"lineNumber":231,"author":{"gitId":"asdfghjkxd"},"content":" + \"\\\"from\\\" date!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":232,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":233,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":234,"author":{"gitId":"asdfghjkxd"},"content":" JukeTask jt \u003d new JukeEvent(parsedArguments[0], startTime, endTime);","lastModifiedDate":"2023-09-08"},{"lineNumber":235,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeAddTaskCommand(taskList, jt);","lastModifiedDate":"2023-08-26"},{"lineNumber":236,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":237,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeFindTaskCommand} object.","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":244,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeFindTaskCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeFindTaskCommand find(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":247,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":248,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your find command!\",","lastModifiedDate":"2023-08-27"},{"lineNumber":249,"author":{"gitId":"asdfghjkxd"},"content":" \"find [word]\");","lastModifiedDate":"2023-08-27"},{"lineNumber":250,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":251,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":252,"author":{"gitId":"asdfghjkxd"},"content":" String newFindArgs \u003d String.join(\" \", Arrays.copyOfRange(args, 1, args.length));","lastModifiedDate":"2023-08-27"},{"lineNumber":253,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeFindTaskCommand(taskList, newFindArgs);","lastModifiedDate":"2023-08-27"},{"lineNumber":254,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":255,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":256,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeSortListCommand sort(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-11"},{"lineNumber":257,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-11"},{"lineNumber":258,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your sort command!\",","lastModifiedDate":"2023-09-11"},{"lineNumber":259,"author":{"gitId":"asdfghjkxd"},"content":" \"sort [a/asc/ascending | \"","lastModifiedDate":"2023-09-11"},{"lineNumber":260,"author":{"gitId":"asdfghjkxd"},"content":" + \"d/desc/descending] \"","lastModifiedDate":"2023-09-11"},{"lineNumber":261,"author":{"gitId":"asdfghjkxd"},"content":" + \"[d/desc/description | \"","lastModifiedDate":"2023-09-11"},{"lineNumber":262,"author":{"gitId":"asdfghjkxd"},"content":" + \"dl/deadline | \"","lastModifiedDate":"2023-09-11"},{"lineNumber":263,"author":{"gitId":"asdfghjkxd"},"content":" + \"s/startstart date | \"","lastModifiedDate":"2023-09-11"},{"lineNumber":264,"author":{"gitId":"asdfghjkxd"},"content":" + \"e/end/end date]\");","lastModifiedDate":"2023-09-11"},{"lineNumber":265,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":266,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":267,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":268,"author":{"gitId":"asdfghjkxd"},"content":" String newSortArgs \u003d String.join(\" \", Arrays.copyOfRange(args, 2, args.length));","lastModifiedDate":"2023-09-11"},{"lineNumber":269,"author":{"gitId":"asdfghjkxd"},"content":" SortOrderEnum sortOrder \u003d SortOrderEnum.ofOrder(args[1].toLowerCase());","lastModifiedDate":"2023-09-11"},{"lineNumber":270,"author":{"gitId":"asdfghjkxd"},"content":" SortTypeEnum sortType \u003d SortTypeEnum.ofType(newSortArgs.toLowerCase());","lastModifiedDate":"2023-09-11"},{"lineNumber":271,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeSortListCommand(sortOrder, sortType, taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":272,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IllegalArgumentException ex) {","lastModifiedDate":"2023-09-11"},{"lineNumber":273,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your sort command!\",","lastModifiedDate":"2023-09-11"},{"lineNumber":274,"author":{"gitId":"asdfghjkxd"},"content":" \"sort [a/asc/ascending | \"","lastModifiedDate":"2023-09-11"},{"lineNumber":275,"author":{"gitId":"asdfghjkxd"},"content":" + \"d/desc/descending] \"","lastModifiedDate":"2023-09-11"},{"lineNumber":276,"author":{"gitId":"asdfghjkxd"},"content":" + \"[d/desc/description | \"","lastModifiedDate":"2023-09-11"},{"lineNumber":277,"author":{"gitId":"asdfghjkxd"},"content":" + \"dl/deadline | \"","lastModifiedDate":"2023-09-11"},{"lineNumber":278,"author":{"gitId":"asdfghjkxd"},"content":" + \"s/startstart date | \"","lastModifiedDate":"2023-09-11"},{"lineNumber":279,"author":{"gitId":"asdfghjkxd"},"content":" + \"e/end/end date]\");","lastModifiedDate":"2023-09-11"},{"lineNumber":280,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":281,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":282,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":283,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":284,"author":{"gitId":"asdfghjkxd"},"content":" * Carries out an action when the command is executed.","lastModifiedDate":"2023-08-27"},{"lineNumber":285,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":286,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":287,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":288,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeException or any of its subclasses if there are any issues encountered","lastModifiedDate":"2023-09-08"},{"lineNumber":289,"author":{"gitId":"asdfghjkxd"},"content":" * during the execution of code","lastModifiedDate":"2023-09-08"},{"lineNumber":290,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":291,"author":{"gitId":"asdfghjkxd"},"content":" public abstract Response execute(Response response) throws JukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":292,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":292}},{"path":"src/main/java/juke/commands/JukeDeleteTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * Action that deletes a Task from the {@code TaskList}.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDeleteTaskCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} to manage all tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" /** JukeTask to remove. */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" private final int task;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeDeleteTaskCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} instance","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Index of task to delete","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDeleteTaskCommand(TaskList taskList, int task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" * Carries out an action when the command is executed.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there are any errors encountered when reading the data file","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" JukeTask jt \u003d this.taskList.deleteTask(this.task);","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(\"Task deleted: \" + jt, Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":44}},{"path":"src/main/java/juke/commands/JukeExceptionCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" * Action class that corresponds to an error action.","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeExceptionCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" /** Error description. */","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" private final Exception exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeExceptionCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * @param exception Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" public JukeExceptionCommand(JukeException exception) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" this.exception \u003d exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * Carries out an action when the command is executed.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(exception.toString(), Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":35}},{"path":"src/main/java/juke/commands/JukeExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Action that is invoked when the user wishes to quit the assistant.","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeExitCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" /** The farewell statement used by the assistant when the user decides to quit the assistant. */","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" private static final String EXIT_STRING \u003d \"Goodbye!\";","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeExitCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" public JukeExitCommand() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * Carries out an action when the command is executed.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(JukeExitCommand.EXIT_STRING, Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":30}},{"path":"src/main/java/juke/commands/JukeFindTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Action that finds a Task in the {@code TaskList} according to the","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * task description.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeFindTaskCommand extends JukeCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} to manage all tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /** Word of interest to search. */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" private final String word;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeFindTaskCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} instance","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @param word Word of interest to search","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" public JukeFindTaskCommand(TaskList taskList, String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" this.word \u003d word;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * Carries out an action when the command is executed.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" List\u003cJukeTask\u003e foundTasks \u003d this.taskList.findTask(this.word);","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" if (foundTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" stringBuilder.append(\"Sorry! I could not find any task with the word \\\"\")","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" .append(this.word)","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" .append(\"\\\" in the task list!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" stringBuilder.append(\"Found them! Here are some of the tasks in your task list that contain the \"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" + \"word \\\"\")","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" .append(this.word)","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" .append(\"\\\":\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" for (JukeTask t : foundTasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" stringBuilder.append(t)","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(stringBuilder.toString(), Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":63}},{"path":"src/main/java/juke/commands/JukeMarkTaskDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Action that marks a {@code JukeTask} as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeMarkTaskDoneCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} that manages the tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** The index of the task of interest. */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" private final int index;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeMarkTaskDoneCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} that manages the tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @param index Index of the Task to act on","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" public JukeMarkTaskDoneCommand(TaskList taskList, int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" * Carries out an action when the command is executed.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there are any errors encountered when reading the data file","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList.setAsComplete(this.index);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(\"Task marked as done: \" + this.taskList.getTaskInformation(this.index),","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":44}},{"path":"src/main/java/juke/commands/JukeMarkTaskUndoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Action that marks a {@code JukeTask} as undone.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeMarkTaskUndoneCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} that manages the tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** The index of the task of interest. */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" private final int index;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeMarkTaskUndoneCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} that manages the tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @param index Index of the Task to act on","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" public JukeMarkTaskUndoneCommand(TaskList taskList, int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" * Carries out an action when the command is executed.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there are any errors encountered when reading the data file","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList.setAsIncomplete(this.index);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(\"Task marked as undone: \" + this.taskList.getTaskInformation(this.index),","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":44}},{"path":"src/main/java/juke/commands/JukePrintCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * Action that invokes a print action on the command line.","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"public class JukePrintCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /** Object to print. */","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" private final JukeObject printTarget;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukePrintCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * @param printTarget {@code Object} to print","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" public JukePrintCommand(JukeObject printTarget) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" this.printTarget \u003d printTarget;","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Carries out an action when the command is executed.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(printTarget.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":32}},{"path":"src/main/java/juke/commands/JukeSortListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Action that sorts the {@code TaskList}.","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeSortListCommand extends JukeCommand {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code SortOrderEnum} to sort the {@code TaskList} by (order). */","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" private final SortOrderEnum sortOrder;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code SortTypeEnum} to sort the {@code TaskList} on (fields). */","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" private final SortTypeEnum sortType;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} to manage all tasks. */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Constructs an sort list command.","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder {@code SortOrderEnum} enum that describes the order of sorting","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType {@code SortTypeEnum} enum that describes the type of sorting","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object to sort","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" public JukeSortListCommand(SortOrderEnum sortOrder, SortTypeEnum sortType, TaskList taskList) {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" this.sortOrder \u003d sortOrder;","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" this.sortType \u003d sortType;","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * Carries out an action when the command is executed.","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if there are any errors encountered when sorting","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList.sort(this.sortOrder, this.sortType);","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(\"Your task list is now sorted!\\n\\n\" + this.taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" } catch (JukeIllegalArgumentException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(e.toString());","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"asdfghjkxd":51}},{"path":"src/main/java/juke/commons/classes/JukeObject.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.classes;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Abstract Class that represents objects that Juke can handle.","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * This class has no functionality, and is merely present for subclassing relationships.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class JukeObject {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":9}},{"path":"src/main/java/juke/commons/enums/SortOrderEnum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.enums;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Enumeration on the order in which to sort the {@code TaskList} by.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public enum SortOrderEnum {","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /** Ascending order sort. */","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" ASCENDING(1),","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /** Descending order sort. */","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" DESCENDING(-1);","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** Comparator multiplier to dictate order of sort, 1 for ascending and -1 for descending. */","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" private final int multiplier;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * Constructs a {@code SortOrderEnum} object. This method cannot be invoked by the user.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" SortOrderEnum(int multiplier) {","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" this.multiplier \u003d multiplier;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * Parses the input string into a {@code SortOrderEnum} enum.","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @param order String representing the order to sort by","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code SortOrderEnum} enum value","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" public static SortOrderEnum ofOrder(String order) {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" String lowerCaseOrder \u003d order.toLowerCase().strip();","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" switch (lowerCaseOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" case \"a\":","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" case \"asc\":","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" case \"ascending\":","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" return SortOrderEnum.ASCENDING;","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" case \"d\":","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" case \"desc\":","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" case \"descending\":","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" return SortOrderEnum.DESCENDING;","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" throw new IllegalArgumentException(\"Oh no! The sort order you entered is invalid!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the multiplier for the specified {@code SortOrderEnum} enum.","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" * @return 1 if the sort is ascending, -1 if the sort is descending","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" public int getMultiplier() {","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" return this.multiplier;","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"asdfghjkxd":53}},{"path":"src/main/java/juke/commons/enums/SortTypeEnum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.enums;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Enumeration on the type of sort to be performed on the {@code TaskList}.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public enum SortTypeEnum {","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /** Sort by description of task. */","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" DESCRIPTION,","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /** Sort by start date of task. */","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" START_DATE,","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** Sort by end date of task. */","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" END_DATE,","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** Sort by deadline of task. */","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" DEADLINE;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * Parses the input string into a {@code SortTypeEnum} enum.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * @param type String representing the type of sort to perform","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code SortTypeEnum} enum value","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" public static SortTypeEnum ofType(String type) {","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" String lowerCaseType \u003d type.toLowerCase().strip();","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" switch (lowerCaseType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" case \"d\":","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" case \"desc\":","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" case \"description\":","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" return SortTypeEnum.DESCRIPTION;","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" case \"s\":","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" case \"start\":","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" case \"start date\":","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" return SortTypeEnum.START_DATE;","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" case \"e\":","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" case \"end\":","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" case \"end date\":","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" return SortTypeEnum.END_DATE;","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" case \"dl\":","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" return SortTypeEnum.DEADLINE;","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" throw new IllegalArgumentException(\"Oh no! The sort type you entered is invalid!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"asdfghjkxd":47}},{"path":"src/main/java/juke/commons/interfaces/Savable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.interfaces;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Denotes a class that can be saved to the datafile.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public interface Savable {","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the string which represents this object when it is saved into the datafile.","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @return Datafile representation of this object","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" String save();","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"asdfghjkxd":13}},{"path":"src/main/java/juke/commons/interfaces/TaskSortable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.interfaces;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Defines a contract whereby objects of generic type {@code T extends JukeTask} can be sorted.","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @param \u003cT\u003e Generic type that extends {@code JukeTask}","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"public interface TaskSortable\u003cT extends JukeTask\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * Sorts the objects of type {@code T} in the specified order and by the specified type.","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" int sortBy(T task, SortOrderEnum sortOrder, SortTypeEnum sortType);","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"asdfghjkxd":21}},{"path":"src/main/java/juke/commons/utils/StringUtils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.utils;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.StringTokenizer;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Utility class that provides methods for manipulating Strings.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class StringUtils {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Wraps the given text to the specified length. Text is automatically","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * delimited by the carriage return character.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Inspiration for this method comes from:","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * \u003ca href\u003d\"https://stackoverflow.com/questions/41056517/breaking-a-long-url-to-several-line-in-javadoc\"\u003e...\u003c/a\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * @param text Text to wrap","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * @param maxWrap Max number of characters that can exist on a line","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * @return Text wrapped to the specified maxWrap length","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" public static String wrap(String text, int maxWrap) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" StringTokenizer tokenizer \u003d new StringTokenizer(text, \" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" StringBuilder lineBuilder \u003d new StringBuilder(text.length());","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" int lineCounter \u003d 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" while (tokenizer.hasMoreTokens()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" String nextWord \u003d tokenizer.nextToken();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" if (nextWord.length() + lineCounter \u003e maxWrap) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" lineBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" lineCounter \u003d 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" lineBuilder.append(nextWord).append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" lineCounter +\u003d nextWord.length();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" return lineBuilder.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":39}},{"path":"src/main/java/juke/exceptions/JukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Base Exception class for which all other Juke Exceptions are based on.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Note that as this program is expected to parse any and all errors into a readable","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * format before being thrown back to the user through {@code JukeExceptionAction},","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * almost all exceptions should be unchecked and be caught only by the main event","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" * loop which executes the Actions.","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * @see java.lang.RuntimeException","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeException extends RuntimeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /** Error description. */","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" private final String error;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" public JukeException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" this.error \u003d error;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of the {@code JukeException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representing the exception this object is encapsulating","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" return this.error;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":35}},{"path":"src/main/java/juke/exceptions/JukeInitialisationException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Exception that encapsulates the situation whereby Juke cannot","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" * properly instantiate and should therefore exit.","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * All {@code JukeInitialisationExceptions} and subclasses of it should cause","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * the program to exit, as there is no way for the program to continue","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" * if it cannot initialise the variables and data it needs to work.","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeInitialisationException extends JukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeInitialisationException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" public JukeInitialisationException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":20}},{"path":"src/main/java/juke/exceptions/JukeStateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents the error when the user tries to modify the state of any","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" * {@code JukeObject} unsuccessfully.","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeStateException extends JukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeStateException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" public JukeStateException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":16}},{"path":"src/main/java/juke/exceptions/arguments/JukeIllegalArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.arguments;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Exception that is thrown when illegal argument(s) is/are used anywhere.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeIllegalArgumentException extends JukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeIllegalArgumentException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error Description","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" public JukeIllegalArgumentException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of {@code JukeIllegalArgumentException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation of the exception","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" return super.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":27}},{"path":"src/main/java/juke/exceptions/arguments/JukeIllegalCommandArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.arguments;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Exception that is thrown when an illegal command argument is entered into","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" * the command line.","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeIllegalCommandArgumentException extends JukeIllegalArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" /** String representing the expected arguments for a command. */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" private final String expectedArguments;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeIllegalCommandArgumentException}","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error Description","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * @param expectedArguments Expected arguments","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" public JukeIllegalCommandArgumentException(String error, String expectedArguments) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" this.expectedArguments \u003d expectedArguments;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of {@code JukeIllegalCommandArgumentException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation of the exception","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" return super.toString() + \"\\nUsage: \" + expectedArguments;","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":31}},{"path":"src/main/java/juke/exceptions/parsers/JukeDataFileParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an error with the parsing the datafile.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDataFileParseException extends JukeParseException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeDataFileParseException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDataFileParseException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":15}},{"path":"src/main/java/juke/exceptions/parsers/JukeDateFormatParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an error with the parsing of some datetime input.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDateFormatParseException extends JukeParseException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeDateFormatParseException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDateFormatParseException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":15}},{"path":"src/main/java/juke/exceptions/parsers/JukeParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an error thrown when any parser encounters an error with parsing","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * some input data.","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeParseException extends JukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeParseException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" public JukeParseException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":18}},{"path":"src/main/java/juke/exceptions/storage/JukeStorageException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Represents a generic error with the storing, retrieving or modifying of data","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * in the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeStorageException extends JukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeStorageException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" public JukeStorageException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":18}},{"path":"src/main/java/juke/exceptions/storage/JukeStorageReadException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an error with the reading data from the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeStorageReadException extends JukeStorageException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeStorageReadException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" public JukeStorageReadException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":15}},{"path":"src/main/java/juke/exceptions/storage/JukeStorageWriteException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an error with the writing of data to the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeStorageWriteException extends JukeStorageException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeStorageWriteException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" public JukeStorageWriteException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":15}},{"path":"src/main/java/juke/parsers/DateTimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeDateFormatParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * Parses Datetime Strings into the relevant {@code LocalDateTime} objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"public class DateTimeParser extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /** Regex for recognising DateTime inputs. */","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" private static final String DATETIME_REGEX \u003d \"^(0?[1-9]|[12][0-9]|3[01])(\\\\/|-)(0?[1-9]|1[0-2])(\\\\/|-)\\\\d{4} \"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" + \"([01]?[0-9]|2[0-3])?(-|:)?[0-5][0-9]$\";","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" /** Regex for recognising Date inputs. */","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" private static final String DATE_REGEX \u003d \"^(0?[1-9]|[12][0-9]|3[01])(\\\\/|-)(0?[1-9]|1[0-2])(\\\\/|-)\\\\d{4}\";","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * Checks if the input date is of the correct Date format.","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * @param date Input date","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @return true if the String is a valid Date format, else false","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" public static boolean isValidDate(String date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" return Pattern.matches(DateTimeParser.DATE_REGEX, date);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" * Checks if the input date is of the correct DateTime format.","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * @param datetime Input datetime","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @return true if the String is a valid DateTime format, else false","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" public static boolean isValidDateTime(String datetime) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" return Pattern.matches(DateTimeParser.DATETIME_REGEX, datetime);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * Parses the input String into a {@code LocalDateTime} object, provided that the","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" * string meets the requirement of either being a valid Date or DateTime.","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" * @param datetime Input date/datetime string","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code LocalDateTime} object representing the input datetime","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" public static LocalDateTime parse(String datetime) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" // strip the datetime first to avoid any errors","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" datetime \u003d datetime.strip();","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" if (isValidDateTime(datetime)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" String[] dateTimeSplit \u003d datetime.split(\" \");","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsedDate \u003d dateTimeSplit[0].split(\"\\\\/|-\");","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" boolean isMatchingRegex \u003d Pattern.matches(\"\\\\d{4}\", dateTimeSplit[1]);","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsedTime \u003d isMatchingRegex","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" ? new String[]{dateTimeSplit[1].substring(0, 2), dateTimeSplit[1].substring(2, 4)}","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" : dateTimeSplit[1].split(\"-|:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" return LocalDateTime.parse(parsedDate[2] + \"-\" + parsedDate[1] + \"-\" + parsedDate[0] + \"T\"","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" + parsedTime[0] + \":\" + parsedTime[1] + \":00\");","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" } else if (isValidDate(datetime)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" String[] date \u003d datetime.split(\"\\\\/|-\");","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" return LocalDateTime.parse(date[2] + \"-\" + date[1] + \"-\" + date[0] + \"T00:00:00\");","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDateFormatParseException(\"Oh no! I cannot understand the date format you have given me!\\nEnsure \"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" + \"that datetimes are given as such: DD(/-)MM(/-)YYYY[ \"","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" + \"HH(:-)MM],\\nwhere (...) represents the set of acceptable \"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" + \"symbols and [...] represents\\noptional arguments.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" * Parses stored datafile representation of {@code LocalDateTime}","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" * objects into actual {@code LocalDateTime} objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" * @param dateTimeString Stored string","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code LocalDateTime} object","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" public static LocalDateTime fromDateTimeString(String dateTimeString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" return LocalDateTime.parse(dateTimeString);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDateFormatParseException(\"Oh no! I cannot understand the date format you have given me!\"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" + \"\\nEnsure that datetimes are given as such: \"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" + \"YYYY-MM-DDTHH:MM\");","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":89}},{"path":"src/main/java/juke/parsers/FileParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeDataFileParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeDeadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeEvent;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTodo;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Contains methods used to parse the datafile back into {@code JukeTask} objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * This parser may not be instantiated. All methods are exposed via","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * static methods.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class FileParser extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /** Regex String used to parse the datafile lines. */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" private static final String FILE_SEPARATOR_REGEX \u003d \"\\\\|\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Parses a single task into a {@code JukeTask} object.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Single task to parse","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeTask} object","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeDataFileParseException if there are errors with parsing the datafile","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" public static JukeTask parseTask(String task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" String[] data \u003d task.split(FileParser.FILE_SEPARATOR_REGEX);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" if (data.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Data \\\"\" + task + \"\\\" cannot be parsed!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" switch (data[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" if (data.length !\u003d 3) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Todo \\\"\" + task + \"\\\" cannot be parsed!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeTodo(data[2], data[1].equals(\"T\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" if (data.length !\u003d 4) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Deadline \\\"\" + task + \"\\\" cannot be parsed!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeDeadline(data[2], DateTimeParser.fromDateTimeString(data[3]), data[1].equals(\"T\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" if (data.length !\u003d 5) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Event \\\"\" + task + \"\\\" cannot be parsed!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" LocalDateTime start \u003d DateTimeParser.fromDateTimeString(data[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" LocalDateTime end \u003d DateTimeParser.fromDateTimeString(data[4]);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" if (start.isAfter(end)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Event start date cannot be after the end date!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeEvent(data[2], start, end, data[1].equals(\"T\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Data \\\"\" + task + \"\\\" cannot be parsed!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":66}},{"path":"src/main/java/juke/parsers/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Contains methods used to parse the commands given by the user. Note that excessive whitespaces surrounding","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" * command arguments will be ignored and the command will be treated as if there were no excessive","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * whitespaces in the first place, mimicking how commands are parsed in shells like zsh and bash.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * This parser may not be instantiated. All methods are exposed via static methods.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class Parser extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" /** String regex for splitting a command by any number of spaces. */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" private static final String SPACE_REGEX \u003d \"\\\\s+\";","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" * String regex for checking a command by \"/by\", preceded or proceeded by any number of whitespaces","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * or characters.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" private static final String CHECKING_BY_STRING_REGEX \u003d \".*\\\\s+/by\\\\s+.*\";","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" /** String regex for splitting a command by \"/by\", preceded or proceeded by any number of whitespaces. */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" private static final String SPLITTING_BY_STRING_REGEX \u003d \"\\\\s+/by\\\\s+\";","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" * String regex for checking a command for \"/from\" and \"/to\", preceded or proceeded by any number of whitespaces","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" * or characters.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" private static final String CHECKING_FROM_TO_STRING_REGEX \u003d \".*\\\\s+/from\\\\s+.*\\\\s+/to\\\\s+.*\";","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * String regex for splitting a command by \"/from\" and \"/to\", , preceded or proceeded by any number of whitespaces.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" private static final String SPLITTING_FROM_TO_STRING_REGEX \u003d \"\\\\s+/from\\\\s+|\\\\s+/to\\\\s+\";","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" * Parses a command by a space. This method is used to obtain the first command in the command chain.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" * @param command Raw Command","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * @return Parsed array of Strings which represents the tokens in the command.","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" public static String[] parseBySpace(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" return command.strip().split(Parser.SPACE_REGEX);","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" * Parses a command by the String \"/by\". This method is to be invoked only on a cleaned String where","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" * the first starting command is discarded.","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" * @param command Processed Command","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" * @return Parsed array of String which represents the parsed tokens in the command","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" public static String[] parseByByString(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" return command.strip().split(Parser.SPLITTING_BY_STRING_REGEX);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" * Parses a command by the String \"/from\" and \"/to\". This method is to be invoked only on a","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" * cleaned String where the first starting command is discarded.","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" * @param command Processed Command","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" * @return Parsed array of String which represents the parsed tokens in the command","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" public static String[] parseByFromToString(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" return command.strip().split(Parser.SPLITTING_FROM_TO_STRING_REGEX);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" * Checks if the input string matches the \"/by\" sequence.","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" * @param command String to check","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" * @return true if the input string matches, else false","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" public static boolean isMatchByString(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" return Pattern.matches(Parser.CHECKING_BY_STRING_REGEX, command);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" * Checks if the input string matches the \"/from ... /to\" sequence.","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" * @param command String to check","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" * @return true if the input string matches, else false","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" public static boolean isMatchFromToString(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" return Pattern.matches(Parser.CHECKING_FROM_TO_STRING_REGEX, command);","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":89}},{"path":"src/main/java/juke/responses/Response.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.responses;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Simple class that represents the responses from Juke or the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"public class Response extends JukeObject {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" /** Represents the input message from the user. */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" private final String inputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" /** Represents the output message from Juke. */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" private final String outputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * Constructs an instance of {@code Response}.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * @param inputMessage User input","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" * @param outputMessage Juke output","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" public Response(String inputMessage, String outputMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" this.inputMessage \u003d inputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" this.outputMessage \u003d outputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * Returns a {@code Response} containing the response from the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" * @param inputMessage User response","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} containing the response from the user","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" public static Response ofUser(String inputMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" return new Response(inputMessage, null);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" * Returns a {@code Response} containing the response from Juke.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" * @param outputMessage Juke response","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} containing the response from Juke","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" public static Response ofJuke(String outputMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" return new Response(null, outputMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" * Composes a {@code Response} with the user\u0027s input message. If called with a Response object that","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" * already has a user input, then the user input will be overwritten.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" * @param inputMessage User input","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} with the user\u0027s input message","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" public Response withUser(String inputMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" return new Response(inputMessage, this.outputMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" * Composes a {@code Response} with Juke\u0027s output message. If called with a Response object that","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" * already has a Juke output, then the Juke output will be overwritten.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" * @param outputMessage Juke output","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} with Juke\u0027s output message","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" public Response withJuke(String outputMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" return new Response(this.inputMessage, outputMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" * Returns a {@code Response} with no input or output messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} with no input or output messages","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" public static Response of() {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" return new Response(null, null);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the input message from the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representing the input message from the user","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" public String getInputMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" return this.inputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the output message from Juke.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representing the output message from Juke","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" public String getOutputMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" return this.outputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":94}},{"path":"src/main/java/juke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.LinkedList;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageReadException;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageWriteException;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"import juke.parsers.FileParser;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" * Manages the storage and retrieval of data from the data file.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"public class Storage extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" /** Path to the data directory. */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" private static final Path DIRECTORY_PATH \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" /** Path to the data file. */","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" private static final Path FILE_PATH \u003d Paths.get(\"./data/tasks.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code Storage}. Prevents external instantiation through","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" * any methods other than {@code Storage.of()}.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" private Storage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" super();","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code Storage} and creates the files","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * and directories required if necessary.","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Storage} instance","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeInitialisationException if the directories or files cannot be","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" * created or initialised","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" public static Storage of() throws JukeInitialisationException {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" // if the directory does not exist, create the directory","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" if (!Files.exists(Storage.DIRECTORY_PATH)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" Files.createDirectory(Storage.DIRECTORY_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeInitialisationException(\"Oh no! I am unable to create a directory to store your \"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" + \"tasks! Please try again later!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" if (!Files.exists(Storage.FILE_PATH)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" // if the dir exist but file doesn\u0027t, then just create the file","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" Files.createFile(Storage.FILE_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeInitialisationException(\"Oh no! I am unable to create a datafile to store your \"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" + \"tasks! Please try again later!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" // the file and directory should exist if execution reaches here","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" assert Files.exists(Storage.FILE_PATH);","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" assert Files.exists(Storage.DIRECTORY_PATH);","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" return new Storage();","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" * Returns a list of saved task from the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" * @return List of {@code JukeTasks} retrieved","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException If the file could not be opened or processed for any reason","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" public List\u003cJukeTask\u003e read() throws JukeStorageReadException {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" try (BufferedReader br \u003d Files.newBufferedReader(Storage.FILE_PATH)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" String curr;","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" List\u003cJukeTask\u003e tasks \u003d new LinkedList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" while ((curr \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" tasks.add(FileParser.parseTask(curr));","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeStorageReadException(\"Oh no! I am unable to understand the data stored \"","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" + \"in the datafile!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" * Writes the list of tasks into the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" * @param tasks List of {@code JukeTasks} to write","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException If the file could not be opened or written to for any reason","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" public void write(List\u003cJukeTask\u003e tasks) throws JukeStorageWriteException {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" try (BufferedWriter bw \u003d Files.newBufferedWriter(Storage.FILE_PATH)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" for (JukeTask t : tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" bw.write(t.save());","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" bw.newLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeStorageWriteException(\"Oh no! I cannot save your data to the datafile!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":112}},{"path":"src/main/java/juke/tasks/JukeDeadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeStateException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Represents a Deadline task. Deadline tasks contain a deadline which is","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * represented by a {@code LocalDateTime} object.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDeadline extends JukeTask {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** String which represents the Task Identifier. */","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" private static final String TASK_DESCRIPTOR \u003d \"[D] \";","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /** Deadline for Task. */","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" private final LocalDateTime deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeDeadline}.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Task description","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @param deadline Deadline for task","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDeadline(String task, LocalDateTime deadline) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" super(task);","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeDeadline}.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Task description","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" * @param deadline Deadline for task","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * @param isCompleted Status of completion of the task","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the task is already completed","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDeadline(String task, LocalDateTime deadline, boolean isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" this(task, deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" if (isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" this.setAsComplete();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the string which represents this object when it is saved into the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" * @return Datafile representation of this object","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" return \"D\" + super.save() + \"|\" + deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeDeadline}\u0027s deadline with respect to the localDateTime object passed in. This method","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" * is mainly used for sorting, and should not be invoked directly by the user.","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" * @param localDateTime {@code LocalDateTime} object to compare with","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeDeadline}\u0027s deadline is before the localDateTime object passed in, 0 if they are","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" * the same, and 1 if this {@code JukeDeadline}\u0027s deadline is after the localDateTime object passed in","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" public int compareDeadline(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" return localDateTime.compareTo(this.deadline);","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeTask} object with the specified {@code JukeTask} object for order.","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" * @return a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" * the specified object.","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" public int sortBy(JukeTask task, SortOrderEnum sortOrder, SortTypeEnum sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" switch (sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" case DESCRIPTION:","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" return super.sortBy(task, sortOrder, sortType);","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" case END_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" return this.compareDeadlineOrEndDate(task, sortOrder);","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" case START_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" return this.compareStartDate(task, sortOrder);","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list on that field!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" * Compares the start date between this {@code JukeDeadline} object with another {@code JukeTask} object.","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeDeadline} object is before the {@code JukeTask} object passed in, 0 if they are the","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" * same, and 1 if this {@code JukeDeadline} object is after the {@code JukeTask} object passed in","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" private int compareStartDate(JukeTask task, SortOrderEnum sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" if (task instanceof JukeEvent) {","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" // deadlines are assumed to have an infinitely early start date","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" // and is hence always before any event task","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" return -1 * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeDeadline) {","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" // deadlines are of equal priority when compared to other deadlines","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" return 0;","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeTodo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" // todos are assumed to have a smaller but infinitely early start date","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" // and are hence before after any deadline task","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" return sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" // should not reach here, unless there are other unknown subclasses of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list with an unknown task within it!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeDeadline}\u0027s deadline or end date with respect to the input {@code JukeEvent} object.","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeDeadline}\u0027s deadline or end date is before the {@code JukeEvent} object passed in,","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":" * 0 if they are the same, and 1 if this {@code JukeDeadline}\u0027s deadline or end date is after the","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" * {@code JukeEvent} object passed in","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":" private int compareDeadlineOrEndDate(JukeTask task, SortOrderEnum sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":" if (task instanceof JukeEvent) {","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":" JukeEvent event \u003d (JukeEvent) task;","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":" return event.compareEndTime(this.deadline) * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeDeadline) {","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":" JukeDeadline deadline \u003d (JukeDeadline) task;","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":" return this.deadline.compareTo(deadline.deadline) * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeTodo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" // since todos have an infinitely early deadline, they are always considered to be before events","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" return sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" // should not reach here, unless there are other unknown subclasses of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list with an unknown task within it!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of this {@code JukeDeadline} object","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" return JukeDeadline.TASK_DESCRIPTOR","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":" + super.toString()","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":" + \" (by: \"","lastModifiedDate":"2023-09-08"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy, HHmm\"))","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" + \" hrs)\";","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":159}},{"path":"src/main/java/juke/tasks/JukeEvent.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.interfaces.TaskSortable;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeStateException;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an Event task. Event tasks contain both a startTime and endTime","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * deadline, which are represented by {@code LocalDateTime} objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeEvent extends JukeTask implements TaskSortable\u003cJukeTask\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" /** String which represents the Task Identifier. */","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" private static final String TASK_DESCRIPTOR \u003d \"[E] \";","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /** Start Time. */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" private final LocalDateTime startTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" /** End Time. */","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" private final LocalDateTime endTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeEvent}.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskName Task description","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" * @param startTime Start date/time","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" * @param endTime End date/time","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" public JukeEvent(String taskName, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" super(taskName);","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeEvent}.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskName Task description","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" * @param startTime Start date/time","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" * @param endTime End date/time","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" * @param isCompleted Status of completion of the task","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the task is already completed","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" public JukeEvent(String taskName, LocalDateTime startTime, LocalDateTime endTime, boolean isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" this(taskName, startTime, endTime);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" if (isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" // the event should have a start date that is before the end date","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" assert startTime.isBefore(endTime);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" this.setAsComplete();","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the string which represents this object when it is saved into the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" * @return Datafile representation of this object","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" return \"E\" + super.save() + \"|\" + startTime + \"|\" + endTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" * Compares the input {@code LocalDateTime} object with the end time of this {@code JukeDeadline} object. This","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" * method is mainly used for sorting, and should not be invoked directly by the user.","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" * @param dateTime input {@code LocalDateTime} object","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if the input {@code LocalDateTime} object is before the end time of this {@code JukeDeadline} object,","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" * 0 if they are the same, and 1 if the input {@code LocalDateTime} object is after the end time of this","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" * deadline","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" public int compareEndTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" return dateTime.compareTo(this.endTime);","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeEvent} object with the specified {@code JukeTask} object.","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" * @return a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" * the specified object.","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" public int sortBy(JukeTask task, SortOrderEnum sortOrder, SortTypeEnum sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" switch (sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" case DESCRIPTION:","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" return super.sortBy(task, sortOrder, sortType);","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" case END_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" return this.compareDeadlineOrEndDate(task, sortOrder);","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" case START_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" return this.compareStartDate(task, sortOrder);","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list on that field!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeDeadline}\u0027s deadline or end date with respect to the input {@code JukeEvent} object.","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" * This method exists only for sorting.","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeDeadline}\u0027s deadline or end date is before the {@code JukeEvent} object passed in,","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" * 0 if they are the same, and 1 if this {@code JukeDeadline}\u0027s deadline or end date is after the","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" * {@code JukeEvent} object passed in","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" private int compareDeadlineOrEndDate(JukeTask task, SortOrderEnum sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" if (task instanceof JukeEvent) {","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" JukeEvent event \u003d (JukeEvent) task;","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":" return this.endTime.compareTo(event.endTime) * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeDeadline) {","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":" JukeDeadline deadline \u003d (JukeDeadline) task;","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" int otherDeadlineComparedToSelf \u003d deadline.compareDeadline(this.endTime);","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" return otherDeadlineComparedToSelf * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeTodo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":" // since todos have an infinitely early deadline, they are always considered to be before events","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":" // and so events are always after todos, subjected to the constraints of the sort order","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" return sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" // should not reach here, unless there are other unknown subclasses of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list with an unknown task within it!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":" * Compares the start date between this {@code JukeDeadline} object with another {@code JukeTask} object.","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeDeadline} object is before the {@code JukeTask} object passed in, 0 if they are the","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" * same, and 1 if this {@code JukeDeadline} object is after the {@code JukeTask} object passed in","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" private int compareStartDate(JukeTask task, SortOrderEnum sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" if (task instanceof JukeEvent) {","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" JukeEvent event \u003d (JukeEvent) task;","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":" return this.startTime.compareTo(event.startTime) * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeDeadline || task instanceof JukeTodo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":" // since todos have an infinitely early deadline, they are always considered to be before events","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":" // and so events are always after todos, subjected to the constraints of the sort order","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" return sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":" // should not reach here, unless there are other unknown subclasses of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list with an unknown task within it!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of this {@code JukeEvent} object","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":161,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":162,"author":{"gitId":"asdfghjkxd"},"content":" return JukeEvent.TASK_DESCRIPTOR","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"asdfghjkxd"},"content":" + super.toString()","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"asdfghjkxd"},"content":" + \" (from \" + startTime.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy, HHmm\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":165,"author":{"gitId":"asdfghjkxd"},"content":" + \" hrs to \" + endTime.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy, HHmm\")) + \" hrs)\";","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":167,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":167}},{"path":"src/main/java/juke/tasks/JukeTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.interfaces.Savable;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.interfaces.TaskSortable;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeStateException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Abstract Class that represents a task that the user adds to {@code Juke}.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class JukeTask extends JukeObject implements TaskSortable\u003cJukeTask\u003e, Savable {","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" /** Icon to display when the task is completed. */","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" private static final String COMPLETED_INDICATOR \u003d \"[✓] \";","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" /** Icon to display when the task not completed. */","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" private static final String INCOMPLETE_INDICATOR \u003d \"[ ] \";","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" /** Task description. */","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" private final String taskName;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" /** Boolean to check if the task is completed */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" private boolean isCompleted;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeTask}.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskName Task description","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" public JukeTask(String taskName) {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * Marks a task as complete.","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the task is already completed","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" public void setAsComplete() throws JukeStateException {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" if (this.isCompleted) {","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeStateException(\"Oh no! The task selected is already completed!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" this.isCompleted \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" * Marks a task as incomplete.","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the task is already incomplete","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" public void setAsIncomplete() throws JukeStateException {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" if (!this.isCompleted) {","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeStateException(\"The task selected is already not completed!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the string which represents this object when it is saved into the datafile.","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" * @return Datafile representation of this object","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" return (this.isCompleted ? \"|T|\" : \"|F|\") + this.taskName;","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" * Checks if the task description contains the word being queried. All subclassses of","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" * {@code JukeTask} will reuse this method for checking.","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" * @param word Keyword to check","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" * @return true if the task description contains the keyword, false otherwise","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" public boolean stringMatches(String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" return this.taskName.contains(word);","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" * Converts the task object to a String representation.","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" return (this.isCompleted ? JukeTask.COMPLETED_INDICATOR : JukeTask.INCOMPLETE_INDICATOR) + taskName;","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeTask} object with the specified {@code JukeTask} object for order. This method","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" * can only compare this {@code JukeTask} with another {@code JukeTask} object based on the descriptions of the","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" * tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" * This method is present mainly for polymorphism and method reuse.","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" * @return a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" * the specified object.","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" public int sortBy(JukeTask task, SortOrderEnum sortOrder, SortTypeEnum sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" switch (sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" case ASCENDING:","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" return this.taskName.compareTo(task.taskName);","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" case DESCENDING:","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" return this.taskName.compareTo(task.taskName) * -1;","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list in that order!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":117}},{"path":"src/main/java/juke/tasks/JukeTodo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Represents a Todo task. Todo tasks do not have any deadlines.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeTodo extends JukeTask {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" /** String which represents the Task Identifier. */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" private static final String TASK_DESCRIPTOR \u003d \"[T] \";","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * Constructor to create a {@code JukeTodo}.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Task description","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" public JukeTodo(String task) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" super(task);","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeTodo}.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Task description","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * @param isCompleted Status of completion of the task","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" public JukeTodo(String task, boolean isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" if (isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" this.setAsComplete();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the string which represents this object when it is saved into the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * @return Datafile representation of this object","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" return \"T\" + super.save();","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeTodo} object with the specified {@code JukeTask} object.","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" * @return a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" * the specified object.","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" public int sortBy(JukeTask task, SortOrderEnum sortOrder, SortTypeEnum sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" switch (sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" case DESCRIPTION:","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" return super.sortBy(task, sortOrder, sortType);","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" case END_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" case START_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" return this.compareStartDate(task, sortOrder);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list on that field!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" * Compares the start date between this {@code JukeTodo} object with another {@code JukeTask} object.","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeDeadline} object is before the {@code JukeTask} object passed in, 0 if they are the","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" * same, and 1 if this {@code JukeDeadline} object is after the {@code JukeTask} object passed in","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" private int compareStartDate(JukeTask task, SortOrderEnum sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" if (task instanceof JukeEvent || task instanceof JukeDeadline) {","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" // todos are assumed to have an infinitely early start date","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" // and is hence always before any event task; and","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" // deadlines have a larger but infinitely early start date","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" return -1 * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeTodo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" // todos are of equal priority when compared to other todos","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" return 0;","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" // should not reach here, unless there are other unknown subclasses of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list with an unknown task within it!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of this {@code JukeTodo} object","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" return JukeTodo.TASK_DESCRIPTOR + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":102}},{"path":"src/main/java/juke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.LinkedList;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeStateException;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"import juke.storage.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * Manages {@code JukeTasks}. This class handles the addition/deletion/manipulation of","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * other child {@code JukeTasks} subsumed under its control.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"public class TaskList extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /** Header for {@code TaskList} String representation. */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" private static final String TASK_LIST_HEADER \u003d \"Here\u0027s your list of tasks:\\n\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" /** String representation of the {@code TaskList} when it is empty. */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" private static final String NO_TASKS_PRESENT_STRING \u003d \"No Tasks Present!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /** Max number of characters on a line. */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" private static final int MAX_LINE_LENGTH \u003d 35;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" /** List of JukeTasks under this {@code TaskList}\u0027s control. */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" private final LinkedList\u003cJukeTask\u003e tasks;","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * {@code Storage} instance in charge of storing, retrieving and modifying data.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code TaskList} that initialises the tasks within","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" * this {@code TaskList}.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" * @param storage The storage object that manages any I/O operations on the datafile","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is are any issues with retrieving data from the datafile","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" private TaskList(Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks \u003d new LinkedList\u003c\u003e(storage.read());","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code TaskList}, from existing saved tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code TaskList} object","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is are any issues with retrieving data from the datafile","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" public static TaskList of(Storage storageManager) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" return new TaskList(storageManager);","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" * Adds a task.","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" * @param task {@code JukeTask} object.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" * @return true if the task is added, else false","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is are any issues with retrieving data from the datafile","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" public boolean addTask(JukeTask task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" int lengthOfTasks \u003d this.tasks.size();","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" boolean isSuccess \u003d this.tasks.add(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" if (isSuccess) {","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" assert this.tasks.size() \u003d\u003d lengthOfTasks + 1;","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" this.storage.write(this.tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" return isSuccess;","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" * Deletes a task by index.","lastModifiedDate":"2023-08-21"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Index of {@code JukeTask} object","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeTask} deleted if the task is successfully deleted, else throws an exception","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if the input argument is invalid","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is are any issues with retrieving data from the datafile","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" public JukeTask deleteTask(int task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" JukeTask returnedTask \u003d this.tasks.get(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" int lengthOfTasks \u003d this.tasks.size();","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" if (this.tasks.remove(returnedTask)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" assert this.tasks.size() \u003d\u003d lengthOfTasks - 1;","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" this.storage.write(this.tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" return returnedTask;","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-08-21"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! The task index you have provided is not valid!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" * Sets a task as complete.","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" * @param index Index of task to act on.","lastModifiedDate":"2023-08-20"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if the input argument is invalid","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the user tries to mark a completed task as completed again","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is an issue with storing the changes","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" public void setAsComplete(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" if (index \u003c 0 || index \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-21"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I do not have such task recorded!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks.get(index).setAsComplete();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" this.storage.write(this.tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":" * Sets a task as incomplete.","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" * @param index Index of task to act on.","lastModifiedDate":"2023-08-20"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if the input argument is invalid","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the user tries to mark an incomplete task as incompleted again","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is an issue with storing the changes","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":" public void setAsIncomplete(int index) throws JukeStorageException {","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" if (index \u003c 0 || index \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-21"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I do not have such task recorded!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks.get(index).setAsIncomplete();","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":" this.storage.write(this.tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" * Returns information of the task at the specified index.","lastModifiedDate":"2023-08-20"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" * @param index Index of task to act on.","lastModifiedDate":"2023-08-20"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-20"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if the input argument is invalid","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" public String getTaskInformation(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":" if (index \u003c 0 || index \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I do not have such task recorded!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" return this.tasks.get(index).toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" * Finds all tasks that match the specified word.","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":" * @param word Word of interest","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code List} of {@code JukeTask} objects whose subject matches the word","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" public List\u003cJukeTask\u003e findTask(String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":" List\u003cJukeTask\u003e wordMatches \u003d new LinkedList\u003c\u003e();","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"asdfghjkxd"},"content":" for (JukeTask t : this.tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"asdfghjkxd"},"content":" if (t.stringMatches(word)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"asdfghjkxd"},"content":" wordMatches.add(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"asdfghjkxd"},"content":" return wordMatches;","lastModifiedDate":"2023-09-08"},{"lineNumber":167,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":170,"author":{"gitId":"asdfghjkxd"},"content":" * Sorts the tasks in the {@code TaskList} by the specified {@code SortOrderEnum} and {@code SortTypeEnum}.","lastModifiedDate":"2023-09-11"},{"lineNumber":171,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":172,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder {@code SortOrderEnum} enum that describes the order of sorting","lastModifiedDate":"2023-09-11"},{"lineNumber":173,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType {@code SortTypeEnum} enum that describes the type of sorting","lastModifiedDate":"2023-09-11"},{"lineNumber":174,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":175,"author":{"gitId":"asdfghjkxd"},"content":" public final void sort(SortOrderEnum sortOrder, SortTypeEnum sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":176,"author":{"gitId":"asdfghjkxd"},"content":" // stores the original copy of the tasks for error recovery","lastModifiedDate":"2023-09-11"},{"lineNumber":177,"author":{"gitId":"asdfghjkxd"},"content":" List\u003cJukeTask\u003e originalTasks \u003d new LinkedList\u003c\u003e(this.tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":178,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":179,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":180,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks.sort((task1, task2) -\u003e task1.sortBy(task2, sortOrder, sortType));","lastModifiedDate":"2023-09-11"},{"lineNumber":181,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IllegalArgumentException | UnsupportedOperationException | ClassCastException ex) {","lastModifiedDate":"2023-09-11"},{"lineNumber":182,"author":{"gitId":"asdfghjkxd"},"content":" // if there is an error, revert the changes","lastModifiedDate":"2023-09-11"},{"lineNumber":183,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks.clear();","lastModifiedDate":"2023-09-11"},{"lineNumber":184,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks.addAll(originalTasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":185,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"asdfghjkxd"},"content":" } finally {","lastModifiedDate":"2023-09-11"},{"lineNumber":187,"author":{"gitId":"asdfghjkxd"},"content":" // save any changes made to the task list","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"asdfghjkxd"},"content":" this.storage.write(this.tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":189,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":190,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":191,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":192,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":193,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of the {@code TaskList}. This consists of all the tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"asdfghjkxd"},"content":" * managed by this {@code TaskList}.","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation of this {@code TaskList}.","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":198,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":199,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":200,"author":{"gitId":"asdfghjkxd"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":201,"author":{"gitId":"asdfghjkxd"},"content":" return TaskList.NO_TASKS_PRESENT_STRING;","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":204,"author":{"gitId":"asdfghjkxd"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2023-08-20"},{"lineNumber":205,"author":{"gitId":"asdfghjkxd"},"content":" builder.append(TaskList.TASK_LIST_HEADER);","lastModifiedDate":"2023-08-27"},{"lineNumber":206,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":207,"author":{"gitId":"asdfghjkxd"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-20"},{"lineNumber":208,"author":{"gitId":"asdfghjkxd"},"content":" String built \u003d (i + 1) + \". \" + this.tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":209,"author":{"gitId":"asdfghjkxd"},"content":" builder.append(StringUtils.wrap(built, TaskList.MAX_LINE_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":210,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":211,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":212,"author":{"gitId":"asdfghjkxd"},"content":" return builder.toString().strip();","lastModifiedDate":"2023-09-03"},{"lineNumber":213,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":214,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":214}},{"path":"src/main/java/juke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"import juke.ui.windows.MainWindow;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * User interface of Juke. Extends {@link Application} to allow","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * JavaFX to run this class like a GUI application.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"public class Ui extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" /** Height of the window. */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" public static final double WINDOW_HEIGHT \u003d 700.0d;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" /** Width of the window. */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" public static final double WINDOW_WIDTH \u003d 450.0d;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * Starts the JavaFX application.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" * the application scene can be set. Applications may create","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" * other stages, if needed, but they will not be primary stages.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Ui.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" // specify the overall look of the window","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" // window is non-resizable with a height of 700px and a width of 450px","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" stage.setTitle(MainWindow.APPLICATION_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" stage.setMinHeight(Ui.WINDOW_HEIGHT);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" stage.setMinWidth(Ui.WINDOW_WIDTH);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeInitialisationException(\"I cannot initialise! There was an issue loading the necessary \"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" + \"FXML files to load up the GUI!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":51}},{"path":"src/main/java/juke/ui/components/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.ui.components;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Abstract class that is used to represent a dialog box that is","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * displayed to the user through the GUI.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * Inverts the order of the widgets within this dialog box. This method is left here as a quick way","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * to reverse the order of the child widgets. This method will be deprecated in the future.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" @Deprecated","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" public void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" ObservableList\u003cNode\u003e childWidgets \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" FXCollections.reverse(childWidgets);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" this.getChildren().setAll(childWidgets);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a dialog box that represents the user\u0027s inputs.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" * @param text Text to render in the dialog box","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code UserDialog} object","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" public static DialogBox ofUser(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" return new UserDialog(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a dialog box that represents Juke\u0027s outputs.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" * @param text Text to render in the dialog box","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeDialog} object","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" public static DialogBox ofJuke(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeDialog(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":45}},{"path":"src/main/java/juke/ui/components/JukeDialog.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.ui.components;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.StackPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Represents a dialog box containing Juke\u0027s response.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDialog extends DialogBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** Container for the dialog box contents. */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" private StackPane dialogBubble;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /** Background of the dialog box contents. */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" private Region backgroundRegion;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" /** Text within the dialog box. */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" private Label textLabel;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" /** Profile image to display in the chat. */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" private ImageView displayImage;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * Constructs an instance of {@code JukeDialog}.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @param text Text to display in the dialog box","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDialog(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Juke.class.getResource(\"/view/JukeDialog.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" textLabel.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" this.backgroundRegion.maxHeightProperty().bind(this.textLabel.heightProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" this.backgroundRegion.minHeightProperty().bind(this.textLabel.heightProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" this.backgroundRegion.minWidthProperty().bind(this.textLabel.widthProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" this.backgroundRegion.maxWidthProperty().bind(this.textLabel.widthProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeInitialisationException(\"I cannot initialise! There was an issue loading the necessary \"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" + \"FXML files to load up the GUI!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":54}},{"path":"src/main/java/juke/ui/components/UserDialog.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.ui.components;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.StackPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Represents a dialog box containing the user\u0027s message.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"public class UserDialog extends DialogBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** Container for the dialog box contents. */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" private StackPane dialogBubble;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /** Background of the dialog box contents. */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" private Region backgroundRegion;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" /** Text within the dialog box. */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" private Label textLabel;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" /** Profile image to display in the chat. */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" private ImageView displayImage;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * Constructs an instance of {@code UserDialog}.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @param text Text to display in the dialog box","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" public UserDialog(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Juke.class.getResource(\"/view/UserDialog.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" textLabel.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" this.backgroundRegion.maxHeightProperty().bind(this.textLabel.heightProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" this.backgroundRegion.minHeightProperty().bind(this.textLabel.heightProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" this.backgroundRegion.minWidthProperty().bind(this.textLabel.widthProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" this.backgroundRegion.maxWidthProperty().bind(this.textLabel.widthProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeInitialisationException(\"I cannot initialise! There was an issue loading the necessary \"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" + \"FXML files to load up the GUI!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":54}},{"path":"src/main/java/juke/ui/windows/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.ui.windows;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commands.JukeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commands.JukeExceptionCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commands.JukeExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"import juke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"import juke.ui.components.DialogBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * Controller class for the main window of the application.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" /** Name of the application. */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" public static final String APPLICATION_NAME \u003d \"Juke\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" /** Offset for the widgets. */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" public static final double OFFSETS \u003d 1.5d;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" /** Storage object that handles the loading and saving of tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" private Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" /** TaskList object that handles the manipulation of tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" /** ScrollPane container that contains a scrollable object. */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" /** VBox container that contains the dialog bubbles. */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" /** TextField that accepts user input. */","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" private TextField inputField;","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" /** Button that submits the user input. */","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" private Button submitButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" * Initialises the core services of Juke, such as the","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" * Storage and TaskList services.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" private void initialiseCoreServices() {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" // init services","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" this.storage \u003d Storage.of();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d TaskList.of(this.storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" } catch (JukeInitialisationException | JukeStorageException","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" | JukeParseException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" this.dialogContainer.getChildren().add(DialogBox.ofJuke(ex.getMessage()));","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" this.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" * Initialises the main window and configures it with the specified","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" * parameters.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" // anchor the widgets to the parent layout\u0027s edges","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" AnchorPane.setTopAnchor(this.scrollPane, MainWindow.OFFSETS);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" AnchorPane.setBottomAnchor(this.submitButton, MainWindow.OFFSETS);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" AnchorPane.setBottomAnchor(this.inputField, MainWindow.OFFSETS);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" AnchorPane.setRightAnchor(this.submitButton, MainWindow.OFFSETS);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" AnchorPane.setLeftAnchor(this.inputField, MainWindow.OFFSETS);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" // anchor the scroll","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" this.scrollPane.vvalueProperty().bind(this.dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" // add the introductory dialog to the dialog container","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" this.dialogContainer.getChildren().add(this.getIntroductoryDialog());","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" // handle user inputs","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" this.submitButton.setOnMouseClicked((event) -\u003e this.handleInput());","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" this.inputField.setOnAction((event) -\u003e this.handleInput());","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" // initialise core services after setting the handlers","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" this.initialiseCoreServices();","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" * Dispatches the command and acts on it.","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" private void handleInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" String inputCommand \u003d this.inputField.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" Response response \u003d Response.ofUser(inputCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" JukeCommand action \u003d JukeCommand.of(inputCommand, this.taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" if (action instanceof JukeExitCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" Response returns \u003d action.execute(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" String inputMessage \u003d returns.getInputMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" String outputMessage \u003d returns.getOutputMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" if (inputMessage !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" DialogBox userDialog \u003d getAsUserInput(inputMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" this.dialogContainer.getChildren().addAll(userDialog);","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":" if (outputMessage !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" DialogBox jukeDialog \u003d getAsJukeOutput(outputMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" this.dialogContainer.getChildren().addAll(jukeDialog);","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":" } catch (JukeException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":" Response returns \u003d new JukeExceptionCommand(ex).execute(Response.ofUser(inputCommand));","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" this.dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":" getAsUserInput(returns.getInputMessage()),","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" getAsJukeOutput(returns.getOutputMessage()));","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":" this.inputField.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":" * Returns a UserDialog object that contains the inputs given by","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":" * the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" * @param userInput User input","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code UserDialog} object","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" private DialogBox getAsUserInput(String userInput) {","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" return DialogBox.ofUser(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":" * Returns a JukeDialog object that contains the outputs returned by","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":" * Juke.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":" * @param jukeOutput Juke output","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeDialog} object","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" private DialogBox getAsJukeOutput(String jukeOutput) {","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" return DialogBox.ofJuke(jukeOutput);","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" * Returns a DialogBox object that contains the introductory message","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":" * when the user first starts Juke.","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeDialog} object with the introductory message","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"asdfghjkxd"},"content":" private DialogBox getIntroductoryDialog() {","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"asdfghjkxd"},"content":" String introductoryMessage \u003d \"Hello! I\u0027m Juke (J|ava D|uke)!\\nWhat can I do for you today?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"asdfghjkxd"},"content":" return this.getAsJukeOutput(introductoryMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"asdfghjkxd"},"content":" * Forces an exit of the application. This may be deprecated in the future","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"asdfghjkxd"},"content":" * if the application is to deprecate support for the \"bye\" command.","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"asdfghjkxd"},"content":" private void exit() {","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"asdfghjkxd"},"content":" System.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":174}},{"path":"src/main/resources/view/JukeDialog.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.geometry.Pos?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"\u003cfx:root alignment\u003d\"TOP_LEFT\" maxHeight\u003d\"Infinity\" maxWidth\u003d\"450.0\"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" prefWidth\u003d\"450.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" spacing\u003d\"10.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" \u003cImageView fx:id\u003d\"displayImage\" fitHeight\u003d\"100.0d\" fitWidth\u003d\"100.0d\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" \u003cCircle radius\u003d\"50.0d\" centerX\u003d\"50.0\" centerY\u003d\"50.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" \u003cImage url\u003d\"@/images/DaDuke.png\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" \u003cStackPane fx:id\u003d\"dialogBubble\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" \u003cRegion fx:id\u003d\"backgroundRegion\" maxWidth\u003d\"350.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" \u003cbackground\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" \u003cBackground\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" \u003cfills\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" \u003cBackgroundFill fill\u003d\"lightblue\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" \u003cradii\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" \u003cCornerRadii radius\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/radii\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/BackgroundFill\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/fills\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/Background\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/background\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/Region\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" \u003cLabel fx:id\u003d\"textLabel\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" \u003cInsets top\u003d\"10.0\" right\u003d\"5.0\" bottom\u003d\"10.0\" left\u003d\"5.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":43}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" prefHeight\u003d\"700.0\" prefWidth\u003d\"450.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"juke.ui.windows.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToHeight\u003d\"true\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" prefHeight\u003d\"670.0\" prefWidth\u003d\"450.0\" vbarPolicy\u003d\"ALWAYS\" vvalue\u003d\"1.0\" \u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"200.0\" prefWidth\u003d\"100.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" \u003cTextField fx:id\u003d\"inputField\" layoutY\u003d\"670.0\" maxHeight\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" maxWidth\u003d\"1.7976931348623157E308\" onAction\u003d\"#handleInput\" prefHeight\u003d\"25.0\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" prefWidth\u003d\"370.0\" AnchorPane.bottomAnchor\u003d\"1.0\" AnchorPane.leftAnchor\u003d\"1.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" \u003cButton fx:id\u003d\"submitButton\" layoutX\u003d\"374.0\" layoutY\u003d\"671.0\" mnemonicParsing\u003d\"false\"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" onMouseClicked\u003d\"#handleInput\" prefHeight\u003d\"25.0\" prefWidth\u003d\"75.0\" text\u003d\"Submit\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":24}},{"path":"src/main/resources/view/UserDialog.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.geometry.Pos?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"Infinity\" maxWidth\u003d\"450.0\"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" prefWidth\u003d\"450.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" spacing\u003d\"10.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" \u003cStackPane fx:id\u003d\"dialogBubble\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" \u003cRegion fx:id\u003d\"backgroundRegion\" maxWidth\u003d\"350.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" \u003cbackground\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" \u003cBackground\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" \u003cfills\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" \u003cBackgroundFill fill\u003d\"lightgreen\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" \u003cradii\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" \u003cCornerRadii radius\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/radii\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/BackgroundFill\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/fills\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/Background\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/background\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/Region\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" \u003cLabel fx:id\u003d\"textLabel\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" \u003cImageView fx:id\u003d\"displayImage\" fitHeight\u003d\"100.0d\" fitWidth\u003d\"100.0d\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" \u003cCircle radius\u003d\"50.0d\" centerX\u003d\"50.0\" centerY\u003d\"50.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" \u003cImage url\u003d\"@/images/DaUser.png\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" \u003calignment\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" \u003cPos fx:constant\u003d\"TOP_RIGHT\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/alignment\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" \u003cInsets top\u003d\"10.0\" right\u003d\"5.0\" bottom\u003d\"10.0\" left\u003d\"5.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":46}},{"path":"src/test/java/juke/parsers/DateTimeParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeDateFormatParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the DateTimeParser class.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"public class DateTimeParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDate} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDate_normal_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" Assertions.assertTrue(DateTimeParser.isValidDate(\"15-02-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(DateTimeParser.isValidDate(\"15/02/2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDate} method with invalid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDate_invalidDate_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\"32-12-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\"12-14-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\"12-05-1000000\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDate} method with whitespace-leading or whitespace-trailing","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * commands.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDate_whitespaced_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\" 15-02-2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\" 15/02/2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDate} method with excessively whitespaced commands.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDate_excessivelyWhitespaced_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\" 15 - 02 - 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\" 15 / 02 / 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDate} method with illegal symbols.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDate_illegalSymbols_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\"15?02?2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\"15|02|2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDate} method with gibberish inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDate_gibberish_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\"15002/2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\"15002|2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDate(\"15002-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDateTime} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDateTime_normal_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(DateTimeParser.isValidDateTime(\"15-02-2023 15-23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(DateTimeParser.isValidDateTime(\"15/02/2023 15-23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(DateTimeParser.isValidDateTime(\"15-02-2023 15:23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(DateTimeParser.isValidDateTime(\"15/02/2023 15:23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDateTime} method with invalid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDateTime_whitespaced_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15-02-2023 15-23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15/02/2023 15-23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15-02-2023 15:23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15/02/2023 15:23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDateTime} method with excessively whitespaced inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDateTime_excessivelyWhitespaced_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15 - 02 - 2023 15 - 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15 / 02 / 2023 15 - 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15 - 02 - 2023 15 : 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15 / 02 / 2023 15 : 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDateTime} method with illegal symbols.","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDateTime_illegalSymbols_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15?02?2023 14?23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15|02|2023 14|23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15?02?2023 14|23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15|02|2023 14?23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isValidDateTime} method with gibberish inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" public void isValidDateTime_gibberish_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15002/2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15002|2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15002-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parse} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":" public void parse_normal_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\"15-02-2023\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\"15/02/2023\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\"15-02-2023\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\"15/02/2023\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\"15-02-2023 15-23\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\"15/02/2023 15-23\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\"15-02-2023 15:23\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\"15/02/2023 15:23\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parse} method with whitespace-leading or trailing inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":" public void parse_whitespace_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\" 15-02-2023 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\" 15/02/2023 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\" 15-02-2023 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\" 15/02/2023 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\" 15-02-2023 15-23 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\" 15/02/2023 15-23 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\" 15-02-2023 15:23 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\" 15/02/2023 15:23 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parse} method with excessively whitespaced inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"asdfghjkxd"},"content":" public void parse_excessiveWhitespaces_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"asdfghjkxd"},"content":" \" 15 - 02 - 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"asdfghjkxd"},"content":" \" 15 / 02 / 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"asdfghjkxd"},"content":" \" 15 - 02 - 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"asdfghjkxd"},"content":" \" 15 / 02 / 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"asdfghjkxd"},"content":" \" 15 - 02 - 2023 15 - 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"asdfghjkxd"},"content":" \" 15 / 02 / 2023 15 - 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"asdfghjkxd"},"content":" \" 15 - 02 - 2023 15 : 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"asdfghjkxd"},"content":" \" 15 / 02 / 2023 15 : 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parse} method with gibberish inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"asdfghjkxd"},"content":" public void parse_gibberish_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002/2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002|2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002/2023 14-23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002/2023 14:23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002|2023 14-23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002|2023 14:23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002-2023 14-23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002-2023 14:23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":199,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":200,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parse} method with illegal symbols.","lastModifiedDate":"2023-08-27"},{"lineNumber":201,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":202,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":203,"author":{"gitId":"asdfghjkxd"},"content":" public void parse_illegalSymbols_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":204,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15|02|2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":205,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15?02?2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":206,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15|02|2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":207,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15?02?2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15|02|2023 14|23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":209,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15?02?2023 14?23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15|02|2023 14?23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":211,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15?02?2023 14|23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":212,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":213,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":213}},{"path":"src/test/java/juke/parsers/FileParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeDataFileParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeDateFormatParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeDeadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeEvent;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTodo;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the FileParser class.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"public class FileParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseTask} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" public void parseTask_normal_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" Assertions.assertEquals(new JukeTodo(\"testing\", false).toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" FileParser.parseTask(\"T|F|testing\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(new JukeDeadline(\"testing\", DateTimeParser","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" .fromDateTimeString(\"2027-07-15T15:34\"), false).toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" FileParser.parseTask(\"D|F|testing|2027-07-15T15:34\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(new JukeEvent(","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" \"testing\", DateTimeParser.fromDateTimeString(\"2027-07-15T15:34\"),","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" DateTimeParser.fromDateTimeString(\"2027-08-15T15:34\"), false).toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" FileParser.parseTask(\"E|F|testing|2027-07-15T15:34|2027-08-15T15:34\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseTask} method with gibberish commands.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" public void parseTask_gibberish_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(\"this is obviously wrong\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(\"T|Ftesting\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(\"D|Ftesting|2027-07-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(\"D|Ftesting|10000-07-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" \"E|Ftesting|2027-07-15T15:34|2027-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" \"E|Ftesting|203414-07-15T15:34|2027-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" \"E|Ftesting|2027-07-15T15:34|200202-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseTask} method with invalid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" public void parseTask_illegalDates_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(\"D|F|testing|202020-07-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(\"D|F|testing|2020-100-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" \"D|F|testing|2020-07-2132131321T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" \"E|F|testing|203414-07-15T15:34|2027-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" \"E|F|testing|2020-420-15T15:34|2027-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" \"E|F|testing|2020-07-200T15:34|2027-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" \"E|F|testing|2020-07-15T15:34|202721412-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" \"E|F|testing|2020-07-15T15:34|2020-800-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" \"E|F|testing|2020-07-15T15:34|2020-08-222323T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" \"E|F|testing|2020-08-15T15:34|2020-07-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":76}},{"path":"src/test/java/juke/parsers/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the Parser class.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseBySpace} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" public void parseBySpace_normal_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseBySpace(\"test command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"test\");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[1], \"command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseBySpace} method with whitespace-leading or whitespace-trailing inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" public void parseBySpace_withWhitespaces_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseBySpace(\" tested command \");","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"tested\");","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[1], \"command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseBySpace} method with excessively whitespaced inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" public void parseBySpace_excessivelyWhitespaced_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseBySpace(\" tested command \");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"tested\");","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[1], \"command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseBySpace} method with gibberish inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" public void parseBySpace_gibberish_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseBySpace(\"thisshouldnotwork\");","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"thisshouldnotwork\");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseByByString} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" public void parseByByString_normal_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseByByString(\"string /by time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[1], \"time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseByByString} method with whitespace-leading or","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" * whitespace-trailing inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" public void parseByByString_withWhitespaces_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseByByString(\" string /by time \");","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[1], \"time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseByByString} method with excessively whitespaced inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" public void parseByByString_excessivelyWhitespaced_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseByByString(\" string /by time \");","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[1], \"time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseByByString} method with gibberish inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" public void parseByByString_gibberish_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseByByString(\"string/bytime\");","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"string/bytime\");","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseByFromToString} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" public void parseByFromToString_normal_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseByFromToString(\"string /from now /to later\");","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[1], \"now\");","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[2], \"later\");","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseByFromToString} method with whitespace-leading or","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" * whitespace-trailing inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" public void parseByFromToString_withWhitespaces_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseByFromToString(\" string /from now /to later \");","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[1], \"now\");","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[2], \"later\");","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseByFromToString} method with excessively whitespaced inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":" public void parseByFromToString_excessivelyWhitespaced_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseByFromToString(\" string /from now /to later \");","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[1], \"now\");","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[2], \"later\");","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code parseByFromToString} method with gibberish inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" public void parseByFromToString_gibberish_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsed \u003d Parser.parseByFromToString(\"string/fromnow/tolater\");","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed.length, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":" assertEquals(parsed[0], \"string/fromnow/tolater\");","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isMatchByString} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":" public void isMatchByString_normal_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(Parser.isMatchByString(\"testing /by test\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(Parser.isMatchByString(\"testing /by test more than one item\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(Parser.isMatchByString(\"testing more than one argument /by test\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isMatchByString} method with gibberish inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"asdfghjkxd"},"content":" public void isMatchByString_gibberish_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(Parser.isMatchByString(\"testing/bytest\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(Parser.isMatchByString(\"testing/by test\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(Parser.isMatchByString(\"testing /bytest\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isMatchFromToString} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"asdfghjkxd"},"content":" public void isMatchFromToString_normal_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(Parser.isMatchFromToString(\"testing /from testdate /to enddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(Parser.isMatchFromToString(\"testing more than one arg /from testdate /to enddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(Parser.isMatchFromToString(\"testing /from testdate more than one /to enddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(Parser.isMatchFromToString(\"testing /from testdate /to enddate more than one\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"asdfghjkxd"},"content":" assertTrue(Parser.isMatchFromToString(\"testing /from testdate more than one /to enddate more \"","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"asdfghjkxd"},"content":" + \"than one\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"asdfghjkxd"},"content":" * Tests for the {@code isMatchFromToString} method with gibberish inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"asdfghjkxd"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"asdfghjkxd"},"content":" public void isMatchFromToString_gibberish_failure() {","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(Parser.isMatchFromToString(\"testing/fromtestdate/toenddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(Parser.isMatchFromToString(\"testing/from testdate/toenddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(Parser.isMatchFromToString(\"testing/fromtestdate/to enddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(Parser.isMatchFromToString(\"testing/fromtestdate /to enddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"asdfghjkxd"},"content":" assertFalse(Parser.isMatchFromToString(\"testing /from testdate/toenddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":191}},{"path":"src/test/java/juke/tasks/JukeDeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDeadlineTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":4}},{"path":"src/test/java/juke/tasks/JukeEventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeEventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":4}},{"path":"src/test/java/juke/tasks/JukeListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeListTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":4}},{"path":"src/test/java/juke/tasks/JukeTaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeTaskTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":4}},{"path":"src/test/java/juke/tasks/JukeTodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeTodoTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":4}},{"path":"text-ui-test/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"E|F|splashdown|2022-04-24T00:00|2022-04-25T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"D|F|finish cs career|9999-12-31T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"T|F|finish cs2100 lecture","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"E|F|very big event oh no|2023-12-25T00:00|2023-12-26T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"T|F|complete tp","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"D|F|go to bed|9999-12-31T23:59","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"E|F|go to prom|2023-08-09T00:00|2023-08-10T00:00","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":7}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"todo complete tp","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"deadline go to bed /by 31-12-9999 23:59","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"event go to prom /from 09-08-2023 /to 10-08-2023","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"unmark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"unmark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"mark 1000","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"unmark 1000","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"todo","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"deadline","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"event","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"deadline /malformed","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"event /malformed /request","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":17}},{"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":"asdfghjkxd"},"content":"# set up the tasks.txt file","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"if [ -e \"./data/tasks.txt\" ]","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"then","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" echo \"E|T|splashdown|2022-04-24T00:00|2022-04-25T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"D|F|finish cs career|9999-12-31T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"T|F|finish cs2100 lecture","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"E|F|very big event oh no|2023-12-25T00:00|2023-12-26T00:00\" \u003e ./data/tasks.txt","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"fi","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"if ! javac -cp \\","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/actions:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions/arguments:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions/storage:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/parsers:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/storage:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/tasks:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/core \\","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"-Xlint:none -d ../bin \\","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/actions/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions/arguments/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions/storage/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/parsers/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/storage/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/tasks/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/core/*.java","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"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":51,"author":{"gitId":"asdfghjkxd"},"content":"java -classpath ../bin main.java.Juke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":"# compare the output to the expected output, ignoring ending whitespaces, since the output generates them but the","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":"# expected file erases them","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":"diff ACTUAL.TXT EXPECTED.TXT -b --ignore-blank-lines","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"asdfghjkxd":33,"-":30}}] +[{"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":"asdfghjkxd"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-26"},{"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":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-08-27"},{"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":"asdfghjkxd"},"content":" mainClass.set(\"juke.Juke\")","lastModifiedDate":"2023-08-26"},{"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":"asdfghjkxd"},"content":" archiveBaseName \u003d \"juke\"","lastModifiedDate":"2023-08-26"},{"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":"asdfghjkxd"},"content":"checkstyle {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"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":{"asdfghjkxd":22,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"E|T|splashdown|2022-04-24T00:00|2022-04-25T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"D|T|finish cs career|9999-12-31T00:00","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"T|F|finish cs2100 lecture","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"E|F|very big event oh no|2023-12-25T00:00|2023-12-26T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"T|F|oh no is this a bug","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"T|F|thing","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"T|F|event","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"T|F|bye","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":8}},{"path":"src/main/java/juke/Juke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commands.JukeExceptionCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.ui.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Juke Virtual Assistant.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"public class Juke {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" /** Represents the max character width of any String printed to screen. */","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" public static final int MAX_STRING_LENGTH \u003d 35;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" * Runs the main event loop for Juke. This method invokes the inner {@code start()}","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * method to start the UI.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * @param args CLI Arguments","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" Juke jukeAssistant \u003d new Juke();","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" jukeAssistant.start();","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" } catch (JukeInitialisationException | JukeStorageException","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" | JukeParseException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" // program should not continue if it cannot initialise properly","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" // or if there are issues with retrieving data from the datafile","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" new JukeExceptionCommand(ex).execute(Response.of());","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" * Starts the UI for Juke.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" private void start() {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" Application.launch(Ui.class);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":42}},{"path":"src/main/java/juke/commands/JukeAddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * Action that adds a Task to the {@code TaskList}.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeAddTaskCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} to manage all tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code JukeTask} to add. */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" private final JukeTask task;","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeAddTaskAction}","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * @param task {@code JukeTask} to add","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" public JukeAddTaskCommand(TaskList taskList, JukeTask task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" * Invokes an action when the command is executed.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object composed with response from Juke or the user","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there are any errors encountered when reading the data file","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList.addTask(this.task);","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(\"Task added: \" + this.task, Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":44}},{"path":"src/main/java/juke/commands/JukeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalCommandArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"import juke.parsers.DateTimeParser;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"import juke.parsers.Parser;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeDeadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeEvent;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTodo;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Abstract class used to dispatch commands to the respective commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class JukeCommand extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":" // Regex strings are reused with major modification from ChatGPT, and is built and tested with","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"-"},"content":" // https://regex101.com/.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * Regex to detect \"|\" in the topic, which is a reserved character for the datafile.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * Adapted from ChatGPT.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final String ILLEGAL_TOPIC_REGEX \u003d \".*\\\\|.*\";","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * Creates the specified {@code JukeCommand} of interest.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * @param command Raw command from the user input","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * @return Corresponding {@code JukeCommand} object","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" public static JukeCommand of(String command, TaskList taskList) throws JukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.dispatchCommand(Parser.parseBySpace(command), taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" * Dispatches the commands to the necessary subclasses of {@code JukeCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" * @return Corresponding {@code JukeCommand} object","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if the argument provided is not understood","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeCommand dispatchCommand(String[] args, TaskList taskList) throws JukeIllegalArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeException(\"Oh no! No commands are present!\");","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" String mainCommand \u003d args[0];","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" switch (mainCommand) {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" case \"list\":","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" return new JukePrintCommand(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" case \"bye\":","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" case \"mark\":","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.mark(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.unmark(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.delete(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.todo(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.deadline(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.event(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" case \"find\":","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.find(args, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" case \"sort\":","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" return JukeCommand.sort(args, taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" // exits the switch and throws an exception in the proceeding line","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I do not understand that command!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeMarkTaskDoneCommand} object. Command will mark a task as complete.","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeMarkTaskDoneCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeMarkTaskDoneCommand mark(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your mark command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" \"mark [task number]\");","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" int index \u003d Integer.parseInt(args[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeMarkTaskDoneCommand(taskList, index - 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" } catch (NumberFormatException ex) {","lastModifiedDate":"2023-08-20"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! You must input a valid task number \"","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" + \"for the command \\\"mark\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeMarkTaskUndoneCommand} object. Command will mark a task as incomplete.","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeMarkTaskUndoneCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeMarkTaskUndoneCommand unmark(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your unmark command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" \"unmark [task number]\");","lastModifiedDate":"2023-08-21"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":" int index \u003d Integer.parseInt(args[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeMarkTaskUndoneCommand(taskList, index - 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":" } catch (NumberFormatException ex) {","lastModifiedDate":"2023-08-20"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! You must input a valid task number \"","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":" + \"for the command \\\"unmark\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeDeleteTaskCommand} object. Command will delete a task.","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeDeleteTaskCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeDeleteTaskCommand delete(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your delete command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":" \"delete [task number]\");","lastModifiedDate":"2023-08-21"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":" int index \u003d Integer.parseInt(args[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeDeleteTaskCommand(taskList, index - 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":" } catch (NumberFormatException ex) {","lastModifiedDate":"2023-08-21"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! You must input a valid task number \"","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":" + \"for the command \\\"unmark\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeAddTaskCommand} object. Command will add a Todo task.","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeAddTaskCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeAddTaskCommand todo(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-21"},{"lineNumber":165,"author":{"gitId":"asdfghjkxd"},"content":" // contains only the command text","lastModifiedDate":"2023-08-21"},{"lineNumber":166,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your todo command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":167,"author":{"gitId":"asdfghjkxd"},"content":" \"todo [description]\");","lastModifiedDate":"2023-08-21"},{"lineNumber":168,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":169,"author":{"gitId":"asdfghjkxd"},"content":" // concatenate back the string","lastModifiedDate":"2023-08-21"},{"lineNumber":170,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"-"},"content":" // Method is reused from https://www.spigotmc.org/threads/how-to-combine-args.239109/","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"-"},"content":" String newArgs \u003d String.join(\" \", Arrays.copyOfRange(args, 1, args.length));","lastModifiedDate":"2023-08-21"},{"lineNumber":173,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"asdfghjkxd"},"content":" if (Pattern.matches(JukeCommand.ILLEGAL_TOPIC_REGEX, newArgs)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! The topic cannot contain the character \\\"|\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"asdfghjkxd"},"content":" JukeTask jt \u003d new JukeTodo(newArgs);","lastModifiedDate":"2023-08-21"},{"lineNumber":180,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeAddTaskCommand(taskList, jt);","lastModifiedDate":"2023-08-26"},{"lineNumber":181,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":182,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeAddTaskCommand} object. Command will add a Deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeAddTaskCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeAddTaskCommand deadline(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"asdfghjkxd"},"content":" // concatenate back the string","lastModifiedDate":"2023-08-21"},{"lineNumber":193,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"-"},"content":" // Method is reused from https://www.spigotmc.org/threads/how-to-combine-args.239109/","lastModifiedDate":"2023-09-16"},{"lineNumber":195,"author":{"gitId":"-"},"content":" String newDeadlineArgs \u003d String.join(\" \", Arrays.copyOfRange(args, 1, args.length));","lastModifiedDate":"2023-08-21"},{"lineNumber":196,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":198,"author":{"gitId":"asdfghjkxd"},"content":" // check if fulfills regex","lastModifiedDate":"2023-08-21"},{"lineNumber":199,"author":{"gitId":"asdfghjkxd"},"content":" if (!Parser.isMatchByString(newDeadlineArgs)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":200,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your deadline command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":201,"author":{"gitId":"asdfghjkxd"},"content":" \"deadline [description] /by [DD(-/)MM(-/)YYYY HH(-:)MM \"","lastModifiedDate":"2023-08-27"},{"lineNumber":202,"author":{"gitId":"asdfghjkxd"},"content":" + \"or DD(-/)MM(-/)YYYY]\\n(..) -\u003e any of\");","lastModifiedDate":"2023-08-27"},{"lineNumber":203,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":204,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsedArguments \u003d Parser.parseByByString(newDeadlineArgs);","lastModifiedDate":"2023-08-26"},{"lineNumber":205,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":206,"author":{"gitId":"asdfghjkxd"},"content":" if (Pattern.matches(JukeCommand.ILLEGAL_TOPIC_REGEX, parsedArguments[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! The topic cannot contain the character \\\"|\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":209,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"asdfghjkxd"},"content":" JukeTask jt \u003d new JukeDeadline(parsedArguments[0], DateTimeParser.parse(parsedArguments[1]));","lastModifiedDate":"2023-08-26"},{"lineNumber":211,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeAddTaskCommand(taskList, jt);","lastModifiedDate":"2023-08-26"},{"lineNumber":212,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":213,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeAddTaskCommand} object. Command will add a Event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeAddTaskCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":221,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeAddTaskCommand event(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":223,"author":{"gitId":"asdfghjkxd"},"content":" // concatenate back the string","lastModifiedDate":"2023-08-21"},{"lineNumber":224,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":225,"author":{"gitId":"-"},"content":" // Method is reused from https://www.spigotmc.org/threads/how-to-combine-args.239109/","lastModifiedDate":"2023-09-16"},{"lineNumber":226,"author":{"gitId":"-"},"content":" String newEventArgs \u003d String.join(\" \", Arrays.copyOfRange(args, 1, args.length));","lastModifiedDate":"2023-08-21"},{"lineNumber":227,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":228,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":229,"author":{"gitId":"asdfghjkxd"},"content":" // check if fulfills regex","lastModifiedDate":"2023-08-21"},{"lineNumber":230,"author":{"gitId":"asdfghjkxd"},"content":" if (!Parser.isMatchFromToString(newEventArgs)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":231,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your event command!\",","lastModifiedDate":"2023-08-26"},{"lineNumber":232,"author":{"gitId":"asdfghjkxd"},"content":" \"event [description] /from [DD(-/)MM(-/)YYYY HH(-:)MM \"","lastModifiedDate":"2023-08-27"},{"lineNumber":233,"author":{"gitId":"asdfghjkxd"},"content":" + \"or DD(-/)MM(-/)YYYY]\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":234,"author":{"gitId":"asdfghjkxd"},"content":" + \"/to [DD(-/)MM(-/)YYYY HH(-:)MM or DD(-/)\"","lastModifiedDate":"2023-08-27"},{"lineNumber":235,"author":{"gitId":"asdfghjkxd"},"content":" + \"MM(-/)YYYY]\\n(..) -\u003e any of\");","lastModifiedDate":"2023-08-27"},{"lineNumber":236,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":237,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsedArguments \u003d Parser.parseByFromToString(newEventArgs);","lastModifiedDate":"2023-08-26"},{"lineNumber":238,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":239,"author":{"gitId":"asdfghjkxd"},"content":" if (Pattern.matches(JukeCommand.ILLEGAL_TOPIC_REGEX, parsedArguments[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! The topic cannot contain the character \\\"|\\\"!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":241,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":242,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":243,"author":{"gitId":"asdfghjkxd"},"content":" LocalDateTime startTime \u003d DateTimeParser.parse(parsedArguments[1]);","lastModifiedDate":"2023-09-08"},{"lineNumber":244,"author":{"gitId":"asdfghjkxd"},"content":" LocalDateTime endTime \u003d DateTimeParser.parse(parsedArguments[2]);","lastModifiedDate":"2023-09-08"},{"lineNumber":245,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":246,"author":{"gitId":"asdfghjkxd"},"content":" if (endTime.isBefore(startTime)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":247,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! The \\\"to\\\" date cannot be before the \"","lastModifiedDate":"2023-08-26"},{"lineNumber":248,"author":{"gitId":"asdfghjkxd"},"content":" + \"\\\"from\\\" date!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":249,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":250,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":251,"author":{"gitId":"asdfghjkxd"},"content":" JukeTask jt \u003d new JukeEvent(parsedArguments[0], startTime, endTime);","lastModifiedDate":"2023-09-08"},{"lineNumber":252,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeAddTaskCommand(taskList, jt);","lastModifiedDate":"2023-08-26"},{"lineNumber":253,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":254,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeFindTaskCommand} object.","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeFindTaskCommand} object","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeFindTaskCommand find(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":265,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your find command!\",","lastModifiedDate":"2023-08-27"},{"lineNumber":266,"author":{"gitId":"asdfghjkxd"},"content":" \"find [word]\");","lastModifiedDate":"2023-08-27"},{"lineNumber":267,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":268,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":269,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":270,"author":{"gitId":"-"},"content":" // Method is reused from https://www.spigotmc.org/threads/how-to-combine-args.239109/","lastModifiedDate":"2023-09-16"},{"lineNumber":271,"author":{"gitId":"-"},"content":" String newFindArgs \u003d String.join(\" \", Arrays.copyOfRange(args, 1, args.length));","lastModifiedDate":"2023-08-27"},{"lineNumber":272,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":273,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":274,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeFindTaskCommand(taskList, newFindArgs);","lastModifiedDate":"2023-08-27"},{"lineNumber":275,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":276,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":277,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":278,"author":{"gitId":"asdfghjkxd"},"content":" * Creates a {@code JukeSortListCommand} object.","lastModifiedDate":"2023-09-16"},{"lineNumber":279,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":280,"author":{"gitId":"asdfghjkxd"},"content":" * @param args Parsed arguments","lastModifiedDate":"2023-09-16"},{"lineNumber":281,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object which manages all tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":282,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeSortListCommand} object","lastModifiedDate":"2023-09-16"},{"lineNumber":283,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":284,"author":{"gitId":"asdfghjkxd"},"content":" private static JukeSortListCommand sort(String[] args, TaskList taskList) {","lastModifiedDate":"2023-09-11"},{"lineNumber":285,"author":{"gitId":"asdfghjkxd"},"content":" if (args.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-11"},{"lineNumber":286,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your sort command!\",","lastModifiedDate":"2023-09-11"},{"lineNumber":287,"author":{"gitId":"asdfghjkxd"},"content":" \"sort [a/asc/ascend/ascending | \"","lastModifiedDate":"2023-09-16"},{"lineNumber":288,"author":{"gitId":"asdfghjkxd"},"content":" + \"d/desc/ascend/descending] \"","lastModifiedDate":"2023-09-16"},{"lineNumber":289,"author":{"gitId":"asdfghjkxd"},"content":" + \"[d/des/descript/description | \"","lastModifiedDate":"2023-09-16"},{"lineNumber":290,"author":{"gitId":"asdfghjkxd"},"content":" + \"dl/dead/deadln/deadline | \"","lastModifiedDate":"2023-09-16"},{"lineNumber":291,"author":{"gitId":"asdfghjkxd"},"content":" + \"s/st/start/start date | \"","lastModifiedDate":"2023-09-16"},{"lineNumber":292,"author":{"gitId":"asdfghjkxd"},"content":" + \"e/en/end/end date]\");","lastModifiedDate":"2023-09-16"},{"lineNumber":293,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":294,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":295,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":296,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":297,"author":{"gitId":"-"},"content":" // Method is reused from https://www.spigotmc.org/threads/how-to-combine-args.239109/","lastModifiedDate":"2023-09-16"},{"lineNumber":298,"author":{"gitId":"-"},"content":" String newSortArgs \u003d String.join(\" \", Arrays.copyOfRange(args, 2, args.length));","lastModifiedDate":"2023-09-11"},{"lineNumber":299,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":300,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":301,"author":{"gitId":"asdfghjkxd"},"content":" SortOrderEnum sortOrder \u003d SortOrderEnum.ofOrder(args[1].toLowerCase());","lastModifiedDate":"2023-09-11"},{"lineNumber":302,"author":{"gitId":"asdfghjkxd"},"content":" SortTypeEnum sortType \u003d SortTypeEnum.ofType(newSortArgs.toLowerCase());","lastModifiedDate":"2023-09-11"},{"lineNumber":303,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeSortListCommand(sortOrder, sortType, taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":304,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IllegalArgumentException ex) {","lastModifiedDate":"2023-09-11"},{"lineNumber":305,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalCommandArgumentException(\"Oh no! I cannot understand your sort command!\",","lastModifiedDate":"2023-09-11"},{"lineNumber":306,"author":{"gitId":"asdfghjkxd"},"content":" \"sort [a/asc/ascend/ascending | \"","lastModifiedDate":"2023-09-16"},{"lineNumber":307,"author":{"gitId":"asdfghjkxd"},"content":" + \"d/desc/ascend/descending] \"","lastModifiedDate":"2023-09-16"},{"lineNumber":308,"author":{"gitId":"asdfghjkxd"},"content":" + \"[d/des/descript/description | \"","lastModifiedDate":"2023-09-16"},{"lineNumber":309,"author":{"gitId":"asdfghjkxd"},"content":" + \"dl/dead/deadln/deadline | \"","lastModifiedDate":"2023-09-16"},{"lineNumber":310,"author":{"gitId":"asdfghjkxd"},"content":" + \"s/st/start/start date | \"","lastModifiedDate":"2023-09-16"},{"lineNumber":311,"author":{"gitId":"asdfghjkxd"},"content":" + \"e/en/end/end date]\");","lastModifiedDate":"2023-09-16"},{"lineNumber":312,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":313,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":314,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":315,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":316,"author":{"gitId":"asdfghjkxd"},"content":" * Invokes an action when the command is executed.","lastModifiedDate":"2023-09-16"},{"lineNumber":317,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":318,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":319,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object composed with response from Juke or the user","lastModifiedDate":"2023-09-16"},{"lineNumber":320,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeException or any of its subclasses if there are any issues encountered","lastModifiedDate":"2023-09-08"},{"lineNumber":321,"author":{"gitId":"asdfghjkxd"},"content":" * during the execution of code","lastModifiedDate":"2023-09-08"},{"lineNumber":322,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":323,"author":{"gitId":"asdfghjkxd"},"content":" public abstract Response execute(Response response) throws JukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":324,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":294,"-":30}},{"path":"src/main/java/juke/commands/JukeDeleteTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * Action that deletes a Task from the {@code TaskList}.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDeleteTaskCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} to manage all tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" /** JukeTask to remove. */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" private final int task;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeDeleteTaskCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} instance","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Index of task to delete","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDeleteTaskCommand(TaskList taskList, int task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" * Invokes an action when the command is executed.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object composed with response from Juke or the user","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there are any errors encountered when reading the data file","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" JukeTask jt \u003d this.taskList.deleteTask(this.task);","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(\"Task deleted: \" + jt, Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":44}},{"path":"src/main/java/juke/commands/JukeExceptionCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" * Action class that corresponds to an exception is raised.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeExceptionCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" /** Error description. */","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" private final Exception exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeExceptionCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * @param exception Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" public JukeExceptionCommand(JukeException exception) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" this.exception \u003d exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * Invokes an action when the command is executed.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object composed with response from Juke or the user","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(exception.toString(), Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":35}},{"path":"src/main/java/juke/commands/JukeExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Action that is invoked when the user wishes to quit Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeExitCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" /** The farewell statement used by the assistant when the user decides to quit the assistant. */","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" private static final String EXIT_STRING \u003d \"Goodbye!\";","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeExitCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" public JukeExitCommand() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * Invokes an action when the command is executed.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object composed with response from Juke or the user","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(JukeExitCommand.EXIT_STRING, Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":30}},{"path":"src/main/java/juke/commands/JukeFindTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Action that finds a Task in the {@code TaskList} according to the task description.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeFindTaskCommand extends JukeCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} to manage all tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" /** Word of interest to search. */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" private final String word;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeFindTaskCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} instance","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @param word Word of interest to search","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" public JukeFindTaskCommand(TaskList taskList, String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" this.word \u003d word;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * Invokes an action when the command is executed.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object composed with response from Juke or the user","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" List\u003cJukeTask\u003e foundTasks \u003d this.taskList.findTask(this.word);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" if (foundTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" stringBuilder.append(\"Sorry! I could not find any task with the word \\\"\")","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" .append(this.word)","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" .append(\"\\\" in the task list!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" stringBuilder.append(\"Found them! Here are some of the tasks in your task list that contain the \"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" + \"word \\\"\")","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" .append(this.word)","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" .append(\"\\\":\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" for (JukeTask t : foundTasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" stringBuilder.append(t).append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(stringBuilder.toString(), Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":61}},{"path":"src/main/java/juke/commands/JukeMarkTaskDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Action that marks a {@code JukeTask} as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeMarkTaskDoneCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} that manages the tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** The index of the task of interest. */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" private final int index;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeMarkTaskDoneCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} that manages the tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @param index Index of the Task to act on","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" public JukeMarkTaskDoneCommand(TaskList taskList, int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" * Invokes an action when the command is executed.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object composed with response from Juke or the user","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there are any errors encountered when reading the data file","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList.setAsComplete(this.index);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(\"Task marked as done: \" + this.taskList.getTaskInformation(this.index),","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":44}},{"path":"src/main/java/juke/commands/JukeMarkTaskUndoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Action that marks a {@code JukeTask} as undone.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeMarkTaskUndoneCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} that manages the tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** The index of the task of interest. */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" private final int index;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeMarkTaskUndoneCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} that manages the tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @param index Index of the Task to act on","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" public JukeMarkTaskUndoneCommand(TaskList taskList, int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" * Invokes an action when the command is executed.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object composed with response from Juke or the user","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there are any errors encountered when reading the data file","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList.setAsIncomplete(this.index);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" StringUtils.wrap(\"Task marked as undone: \" + this.taskList.getTaskInformation(this.index),","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" Juke.MAX_STRING_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":44}},{"path":"src/main/java/juke/commands/JukePrintCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * Action that invokes a print action on the command line.","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"public class JukePrintCommand extends JukeCommand {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /** Object to print. */","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" private final JukeObject printTarget;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukePrintCommand}.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * @param printTarget {@code Object} to print","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" public JukePrintCommand(JukeObject printTarget) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" this.printTarget \u003d printTarget;","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Invokes an action when the command is executed.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object composed with response from Juke or the user","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(printTarget.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":32}},{"path":"src/main/java/juke/commands/JukeSortListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commands;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Action that sorts the {@code TaskList}.","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeSortListCommand extends JukeCommand {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code SortOrderEnum} to sort the {@code TaskList} by (order). */","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" private final SortOrderEnum sortOrder;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code SortTypeEnum} to sort the {@code TaskList} on (fields). */","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" private final SortTypeEnum sortType;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /** {@code TaskList} to manage all tasks. */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Constructs a sort list command.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder {@code SortOrderEnum} enum that describes the order of sorting","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType {@code SortTypeEnum} enum that describes the type of sorting","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskList {@code TaskList} object to sort","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" public JukeSortListCommand(SortOrderEnum sortOrder, SortTypeEnum sortType, TaskList taskList) {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" this.sortOrder \u003d sortOrder;","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" this.sortType \u003d sortType;","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * Invokes an action when the command is executed. Note that sorting the task list is","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" * inherently destructive, and the initial order of the task list will be destroyed","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * after the sort.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * @param response {@code Response} object that contains response from Juke and the user","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} object composed with response from Juke or the user","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if there are any errors encountered when sorting","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" public Response execute(Response response) {","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" this.taskList.sort(this.sortOrder, this.sortType);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(\"Your task list is now sorted!\\n\\n\" + this.taskList);","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" } catch (JukeIllegalArgumentException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" return response.withJuke(e.toString());","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"asdfghjkxd":53}},{"path":"src/main/java/juke/commons/classes/JukeObject.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.classes;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Abstract Class that represents objects that Juke can handle.","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * This class has no functionality, and is merely present for subclassing relationships.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class JukeObject {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":9}},{"path":"src/main/java/juke/commons/enums/SortOrderEnum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.enums;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Enumeration on the order in which to sort the {@code TaskList} by.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public enum SortOrderEnum {","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /** Ascending order sort. */","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" ASCENDING(1),","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /** Descending order sort. */","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" DESCENDING(-1);","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** Comparator multiplier to dictate order of sort, 1 for ascending and -1 for descending. */","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" private final int multiplier;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * Constructs a {@code SortOrderEnum} object. This method cannot be invoked by the user.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" SortOrderEnum(int multiplier) {","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" this.multiplier \u003d multiplier;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * Parses the input string into a {@code SortOrderEnum} enum. switch-case","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * is adapted from GitHub Copilot.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * @param order String representing the order to sort by","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code SortOrderEnum} enum value","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" public static SortOrderEnum ofOrder(String order) {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" String lowerCaseOrder \u003d order.toLowerCase().strip();","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"-"},"content":" // switch-case cases are adapted from GitHub Copilot, with some modifications made","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"-"},"content":" // to the cases Strings","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"-"},"content":" switch (lowerCaseOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"-"},"content":" case \"a\":","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"-"},"content":" case \"asc\":","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"-"},"content":" case \"ascend\":","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"-"},"content":" case \"ascending\":","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"-"},"content":" return SortOrderEnum.ASCENDING;","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"-"},"content":" case \"d\":","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"-"},"content":" case \"desc\":","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"-"},"content":" case \"descend\":","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"-"},"content":" case \"descending\":","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"-"},"content":" return SortOrderEnum.DESCENDING;","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" throw new IllegalArgumentException(\"Oh no! The sort order you entered is invalid!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the multiplier for the specified {@code SortOrderEnum} enum.","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" * @return 1 if the sort is ascending, -1 if the sort is descending","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" public int getMultiplier() {","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" return this.multiplier;","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"asdfghjkxd":46,"-":15}},{"path":"src/main/java/juke/commons/enums/SortTypeEnum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.enums;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Enumeration on the type of sort to be performed on the {@code TaskList}.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public enum SortTypeEnum {","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /** Sort by description of task. */","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" DESCRIPTION,","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /** Sort by start date of task. */","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" START_DATE,","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** Sort by end date of task. */","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" END_DATE,","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** Sort by deadline of task. */","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" DEADLINE;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * Parses the input string into a {@code SortTypeEnum} enum. switch-case","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" * is adapted from GitHub Copilot.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * @param type String representing the type of sort to perform","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code SortTypeEnum} enum value","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" public static SortTypeEnum ofType(String type) {","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" String lowerCaseType \u003d type.toLowerCase().strip();","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"-"},"content":" // switch-case cases are adapted from GitHub Copilot, with some modifications made","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // to the cases Strings","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"-"},"content":" switch (lowerCaseType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"-"},"content":" case \"d\":","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"-"},"content":" case \"des\":","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"-"},"content":" case \"descript\":","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"-"},"content":" case \"description\":","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return SortTypeEnum.DESCRIPTION;","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"-"},"content":" case \"s\":","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"-"},"content":" case \"st\":","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"-"},"content":" case \"start\":","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"-"},"content":" case \"start date\":","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return SortTypeEnum.START_DATE;","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"-"},"content":" case \"e\":","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"-"},"content":" case \"en\":","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"-"},"content":" case \"end\":","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"-"},"content":" case \"end date\":","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"-"},"content":" return SortTypeEnum.END_DATE;","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"-"},"content":" case \"dl\":","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"-"},"content":" case \"dead\":","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"-"},"content":" case \"deadln\":","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"-"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return SortTypeEnum.DEADLINE;","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" throw new IllegalArgumentException(\"Oh no! The sort type you entered is invalid!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"asdfghjkxd":33,"-":25}},{"path":"src/main/java/juke/commons/interfaces/Savable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.interfaces;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Denotes a class that can be saved to the datafile.","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public interface Savable {","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the String which represents this object when it is saved into the datafile.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @return Datafile representation of this object","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" String save();","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"asdfghjkxd":13}},{"path":"src/main/java/juke/commons/interfaces/TaskSortable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.interfaces;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Defines a contract whereby objects of generic type {@code T extends JukeTask} can be sorted.","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @param \u003cT\u003e Generic type that extends {@code JukeTask}","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"public interface TaskSortable\u003cT extends JukeTask\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * Sorts the objects of type {@code T} in the specified order and by the specified sort type.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" int sortBy(T task, SortOrderEnum sortOrder, SortTypeEnum sortType);","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"asdfghjkxd":21}},{"path":"src/main/java/juke/commons/utils/StringUtils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.commons.utils;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.StringTokenizer;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Utility class that provides methods for manipulating Strings.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class StringUtils {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Wraps the given text to the specified length. Text is automatically","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * delimited by the carriage return character.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Method is reused from https://stackoverflow.com/questions/7528045/large-string-split-into-lines-with-","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * maximum-length-in-java with minor modifications.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * @param text Text to wrap","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * @param maxWrap Max number of characters that can exist on a line","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * @return Text wrapped to the specified maxWrap length","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" public static String wrap(String text, int maxWrap) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":" // Reused from https://stackoverflow.com/questions/7528045/large-string-split-into-lines-with-","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":" // maximum-length-in-java with minor modifications to the code","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":" StringTokenizer tokenizer \u003d new StringTokenizer(text, \" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"-"},"content":" StringBuilder lineBuilder \u003d new StringBuilder(text.length());","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"-"},"content":" int lineCounter \u003d 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"-"},"content":" while (tokenizer.hasMoreTokens()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"-"},"content":" String nextWord \u003d tokenizer.nextToken();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"-"},"content":" if (nextWord.length() + lineCounter \u003e maxWrap) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"-"},"content":" lineBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":" lineCounter \u003d 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"-"},"content":" lineBuilder.append(nextWord).append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":" lineCounter +\u003d nextWord.length();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return lineBuilder.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":22,"-":21}},{"path":"src/main/java/juke/exceptions/JukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Base Exception class for which all other Juke Exceptions are based on.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Note that as this program is expected to parse any and all errors into a readable","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * format before being thrown back to the user through {@code JukeExceptionAction},","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * almost all exceptions should be unchecked and be caught only by the main event","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" * loop which executes the Actions.","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * @see java.lang.RuntimeException","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeException extends RuntimeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /** Error description. */","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" private final String error;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" public JukeException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" this.error \u003d error;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of the {@code JukeException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representing the exception this object is encapsulating","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" return this.error;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":35}},{"path":"src/main/java/juke/exceptions/JukeInitialisationException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Exception that encapsulates the situation whereby Juke cannot","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" * properly instantiate. This error cannot be recovered from and causes","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Juke to exit.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * All {@code JukeInitialisationExceptions} and subclasses of it should cause","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" * the program to exit, as there is no way for the program to continue","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * if it cannot initialise the variables and data it needs to work.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeInitialisationException extends JukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeInitialisationException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" public JukeInitialisationException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":21}},{"path":"src/main/java/juke/exceptions/JukeStateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents the error when the user tries to illegally modify the state of any","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" * {@code JukeObject} or if the user tries to modify the state of any {@code JukeObject}","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * unsuccessfully.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeStateException extends JukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeStateException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" public JukeStateException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":17}},{"path":"src/main/java/juke/exceptions/arguments/JukeIllegalArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.arguments;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Represents illegal argument(s) being used anywhere in Juke. This exception is the","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * superclass of all other exceptions that involve the use of illegal arguments/values.","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeIllegalArgumentException extends JukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeIllegalArgumentException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error Description","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" public JukeIllegalArgumentException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of {@code JukeIllegalArgumentException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation of the exception","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" return super.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":28}},{"path":"src/main/java/juke/exceptions/arguments/JukeIllegalCommandArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.arguments;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an illegal command argument being entered into the command line.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeIllegalCommandArgumentException extends JukeIllegalArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /** String representing the expected arguments for a command. */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" private final String expectedArguments;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeIllegalCommandArgumentException}","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error Description","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * @param expectedArguments Expected arguments","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" public JukeIllegalCommandArgumentException(String error, String expectedArguments) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" this.expectedArguments \u003d expectedArguments;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of {@code JukeIllegalCommandArgumentException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation of the exception","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" return super.toString() + \"\\nUsage: \" + expectedArguments;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":30}},{"path":"src/main/java/juke/exceptions/parsers/JukeDataFileParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an error with the parsing the datafile.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDataFileParseException extends JukeParseException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeDataFileParseException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDataFileParseException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":15}},{"path":"src/main/java/juke/exceptions/parsers/JukeDateFormatParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an error with the parsing of some datetime input.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDateFormatParseException extends JukeParseException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeDateFormatParseException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDateFormatParseException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"asdfghjkxd":15}},{"path":"src/main/java/juke/exceptions/parsers/JukeParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an error thrown when any parser encounters an error with parsing","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * some input data. This exception is the superclass of all other exceptions that","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * involve some parsing error in Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeParseException extends JukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeParseException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" public JukeParseException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":19}},{"path":"src/main/java/juke/exceptions/storage/JukeStorageException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Represents a generic error with the storing, retrieving or modifying of data","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * in the datafile. This exception is the superclass of any other exception that","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * involves the use of the device\u0027s storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeStorageException extends JukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeStorageException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" public JukeStorageException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":19}},{"path":"src/main/java/juke/exceptions/storage/JukeStorageReadException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an error with the reading data from the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeStorageReadException extends JukeStorageException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeStorageReadException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" public JukeStorageReadException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":15}},{"path":"src/main/java/juke/exceptions/storage/JukeStorageWriteException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.exceptions.storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an error with the writing of data to the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeStorageWriteException extends JukeStorageException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeStorageWriteException}.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * @param error Error description","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" public JukeStorageWriteException(String error) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" super(error);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":15}},{"path":"src/main/java/juke/parsers/DateTimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeDateFormatParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * Parses Datetime Strings into the relevant {@code LocalDateTime} objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Note: The regex patterns are adapted from ChatGPT, modified to better meet the requirements of","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * Juke. \u003ca href\u003d\"https://regex101.com/\"\u003eThis\u003c/a\u003e was used to build and test the new regex patterns.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"public class DateTimeParser extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"-"},"content":" // Regex strings are reused with some modification from ChatGPT, and is also built and tested with","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"-"},"content":" // https://regex101.com/.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Regex for recognising DateTime inputs. The regex pattern below are adapted from ChatGPT,","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * modified to better meet the requirements of Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * \u003ca href\u003d\"https://regex101.com/\"\u003eThis\u003c/a\u003e was used to build and test the new regex patterns.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private static final String DATETIME_REGEX \u003d \"^(0?[1-9]|[12][0-9]|3[01])(\\\\/|-)(0?[1-9]|1[0-2])(\\\\/|-)\\\\d{4} \"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"-"},"content":" + \"([01]?[0-9]|2[0-3])?(-|:)?[0-5][0-9]$\";","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * Regex for recognising Date inputs. The regex pattern below are adapted from ChatGPT,","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * modified to better meet the requirements of Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * \u003ca href\u003d\"https://regex101.com/\"\u003eThis\u003c/a\u003e was used to build and test the new regex patterns.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final String DATE_REGEX \u003d \"^(0?[1-9]|[12][0-9]|3[01])(\\\\/|-)(0?[1-9]|1[0-2])(\\\\/|-)\\\\d{4}\";","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"-"},"content":" //@@ author","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Checks if the input date is of the correct Date format. A Date format is specified by only the date","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * and does not include the time.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * @param date Input date","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * @return true if the String is a valid Date format, else false","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public static boolean isValidDate(String date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" return Pattern.matches(DateTimeParser.DATE_REGEX, date);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":" * Checks if the input date is of the correct DateTime format. A DateTime format specifies both the date","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"-"},"content":" * and the time.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * @param datetime Input datetime","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"-"},"content":" * @return true if the String is a valid DateTime format, else false","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public static boolean isValidDateTime(String datetime) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return Pattern.matches(DateTimeParser.DATETIME_REGEX, datetime);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" * Parses the input String into a {@code LocalDateTime} object, provided that the","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":" * string meets the requirement of either being a valid Date or DateTime.","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"-"},"content":" * @param datetime Input date/datetime string","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * @return {@code LocalDateTime} object representing the input datetime","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * @throws JukeDateFormatParseException if the input String is not in the valid Date or DateTime format as","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"-"},"content":" * described above","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public static LocalDateTime parse(String datetime) {","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" // strip the datetime first to avoid any errors","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":" datetime \u003d datetime.strip();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" if (isValidDateTime(datetime)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"-"},"content":" // Regex strings are reused with major modification from ChatGPT, and is built and tested with","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"-"},"content":" // https://regex101.com/.","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"-"},"content":" String[] dateTimeSplit \u003d datetime.split(\" \");","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" String[] parsedDate \u003d dateTimeSplit[0].split(\"\\\\/|-\");","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"-"},"content":" boolean isMatchingRegex \u003d Pattern.matches(\"\\\\d{4}\", dateTimeSplit[1]);","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" String[] parsedTime \u003d isMatchingRegex","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" ? new String[]{dateTimeSplit[1].substring(0, 2), dateTimeSplit[1].substring(2, 4)}","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" : dateTimeSplit[1].split(\"-|:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" return LocalDateTime.parse(parsedDate[2] + \"-\" + parsedDate[1] + \"-\" + parsedDate[0] + \"T\"","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" + parsedTime[0] + \":\" + parsedTime[1] + \":00\");","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" } else if (isValidDate(datetime)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" String[] date \u003d datetime.split(\"\\\\/|-\");","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" return LocalDateTime.parse(date[2] + \"-\" + date[1] + \"-\" + date[0] + \"T00:00:00\");","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDateFormatParseException(\"Oh no! I cannot understand the date format you have given me!\\nEnsure \"","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" + \"that datetimes are given as such: DD(/-)MM(/-)YYYY[ \"","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" + \"HH(:-)MM],\\nwhere (...) represents the set of acceptable \"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" + \"symbols and [...] represents\\noptional arguments.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" * Parses stored datafile representation of {@code LocalDateTime}","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" * objects into actual {@code LocalDateTime} objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" * @param dateTimeString Stored string","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code LocalDateTime} object","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" public static LocalDateTime fromDateTimeString(String dateTimeString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" return LocalDateTime.parse(dateTimeString);","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" } catch (DateTimeParseException | JukeDateFormatParseException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDateFormatParseException(\"Oh no! I cannot understand the date format you have given me!\"","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" + \"\\nEnsure that datetimes are given as such: \"","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" + \"YYYY-MM-DDTHH:MM\");","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":50,"-":64}},{"path":"src/main/java/juke/parsers/FileParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeDataFileParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeDeadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeEvent;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTodo;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Contains methods used to parse the datafile back into {@code JukeTask} objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * This parser may not be instantiated. All methods are exposed via","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * static methods.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class FileParser extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"-"},"content":" // Regex strings are reused with major modification from ChatGPT, and is built and tested with","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":" // https://regex101.com/.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Regex String used to parse the datafile lines. The regex patterns below are","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * adapted from ChatGPT, modified to better meet the requirements of","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * \u003ca href\u003d\"https://regex101.com/\"\u003eThis\u003c/a\u003e was used to build and test the new regex patterns.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final String FILE_SEPARATOR_REGEX \u003d \"\\\\|\";","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * Parses a single task into a {@code JukeTask} object.","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Single task to parse","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeTask} object","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeDataFileParseException if there are errors with parsing the datafile","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" public static JukeTask parseTask(String task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" String[] data \u003d task.split(FileParser.FILE_SEPARATOR_REGEX);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" if (data.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Data \\\"\" + task + \"\\\" cannot be parsed!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" switch (data[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" if (data.length !\u003d 3) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Todo \\\"\" + task + \"\\\" cannot be parsed!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeTodo(data[2], data[1].equals(\"T\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" if (data.length !\u003d 4) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Deadline \\\"\" + task + \"\\\" cannot be parsed!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeDeadline(data[2], DateTimeParser.fromDateTimeString(data[3]), data[1].equals(\"T\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" if (data.length !\u003d 5) {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Event \\\"\" + task + \"\\\" cannot be parsed!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" LocalDateTime start \u003d DateTimeParser.fromDateTimeString(data[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" LocalDateTime end \u003d DateTimeParser.fromDateTimeString(data[4]);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" if (start.isAfter(end)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Event start date cannot be after the end date!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" return new JukeEvent(data[2], start, end, data[1].equals(\"T\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeDataFileParseException(\"Oh no! Data \\\"\" + task + \"\\\" cannot be parsed!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":64,"-":12}},{"path":"src/main/java/juke/parsers/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Contains methods used to parse the commands given by the user. Note that excessive whitespaces surrounding","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" * command arguments will be ignored and the command will be treated as if there were no excessive","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" * whitespaces in the first place, mimicking how commands are parsed in shells like zsh and bash.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * This parser may not be instantiated. All methods are exposed via static methods.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * Note: The regex patterns below are adapted and modified from ChatGPT, to better meet the requirements of","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * Juke. \u003ca href\u003d\"https://regex101.com/\"\u003eThis\u003c/a\u003e was used to build and test the new regex patterns.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class Parser extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"-"},"content":" // Regex strings are reused with major modification from ChatGPT, and is built and tested with","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"-"},"content":" // https://regex101.com/.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * String regex for splitting a command by any number of spaces. The regex pattern below are","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * adapted from ChatGPT, modified to better meet the requirements of Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * \u003ca href\u003d\"https://regex101.com/\"\u003eThis\u003c/a\u003e was used to build and test the new regex patterns.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private static final String SPACE_REGEX \u003d \"\\\\s+\";","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * String regex for checking a command by \"/by\", preceded or proceeded by any number of whitespaces","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * or characters. The regex pattern below are adapted from ChatGPT, modified to better meet the","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * requirements of Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * \u003ca href\u003d\"https://regex101.com/\"\u003eThis\u003c/a\u003e was used to build and test the new regex patterns.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":" private static final String CHECKING_BY_STRING_REGEX \u003d \".*\\\\s+/by\\\\s+.*\";","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * String regex for splitting a command by \"/by\", preceded or proceeded by any number of whitespaces.","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * The regex pattern below are adapted from ChatGPT, modified to better meet the requirements of Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * \u003ca href\u003d\"https://regex101.com/\"\u003eThis\u003c/a\u003e was used to build and test the new regex patterns.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private static final String SPLITTING_BY_STRING_REGEX \u003d \"\\\\s+/by\\\\s+\";","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * String regex for checking a command for \"/from\" and \"/to\", preceded or proceeded by any number of whitespaces","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * or characters. The regex pattern below are adapted from ChatGPT, modified to better meet the requirements","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * of Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"-"},"content":" * \u003ca href\u003d\"https://regex101.com/\"\u003eThis\u003c/a\u003e was used to build and test the new regex patterns.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private static final String CHECKING_FROM_TO_STRING_REGEX \u003d \".*\\\\s+/from\\\\s+.*\\\\s+/to\\\\s+.*\";","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * String regex for splitting a command by \"/from\" and \"/to\", , preceded or proceeded by any number of whitespaces.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * The regex pattern below are adapted from ChatGPT, modified to better meet the requirements of Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * \u003ca href\u003d\"https://regex101.com/\"\u003eThis\u003c/a\u003e was used to build and test the new regex patterns.","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":" private static final String SPLITTING_FROM_TO_STRING_REGEX \u003d \"\\\\s+/from\\\\s+|\\\\s+/to\\\\s+\";","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" * Parses a command by a space. This method is used to obtain the first command in the command chain.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" * @param command Raw Command","lastModifiedDate":"2023-08-21"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" * @return Parsed array of Strings which represents the tokens in the command.","lastModifiedDate":"2023-08-21"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" public static String[] parseBySpace(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" return command.strip().split(Parser.SPACE_REGEX);","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" * Parses a command by the String \"/by\". This method is to be invoked only on a cleaned String where","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" * the first starting command is discarded.","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" * @param command Processed Command","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" * @return Parsed array of String which represents the parsed tokens in the command","lastModifiedDate":"2023-08-21"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" public static String[] parseByByString(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" return command.strip().split(Parser.SPLITTING_BY_STRING_REGEX);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" * Parses a command by the String \"/from\" and \"/to\". This method is to be invoked only on a","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" * cleaned String where the first starting command is discarded.","lastModifiedDate":"2023-08-21"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" * @param command Processed Command","lastModifiedDate":"2023-08-21"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" * @return Parsed array of String which represents the parsed tokens in the command","lastModifiedDate":"2023-08-21"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" public static String[] parseByFromToString(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" return command.strip().split(Parser.SPLITTING_FROM_TO_STRING_REGEX);","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" * Checks if the input string matches the \"/by\" sequence.","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" * @param command String to check","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" * @return true if the input string matches, else false","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" public static boolean isMatchByString(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" return Pattern.matches(Parser.CHECKING_BY_STRING_REGEX, command);","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" * Checks if the input string matches the \"/from ... /to\" sequence.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" * @param command String to check","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" * @return true if the input string matches, else false","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" public static boolean isMatchFromToString(String command) {","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" return Pattern.matches(Parser.CHECKING_FROM_TO_STRING_REGEX, command);","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":70,"-":45}},{"path":"src/main/java/juke/responses/Response.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.responses;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":" * Represents the two-sided conversation between Juke and the user. Future implementation of this class","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":" * may see the use of a history list to capture more conversations between the user and Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"public class Response extends JukeObject {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":" /** Represents the input message from the user. */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" private final String inputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" /** Represents the output message from Juke. */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" private final String outputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * Constructs an instance of {@code Response}. This method is made private to","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" * prevent illegal instantiation from the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" * @param inputMessage String representing user input","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" * @param outputMessage String representing Juke output","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" private Response(String inputMessage, String outputMessage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" this.inputMessage \u003d inputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" this.outputMessage \u003d outputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" * Returns a {@code Response} containing the inputs from the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" * @param inputMessage User response","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} containing the inputs from the user","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" public static Response ofUser(String inputMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" return new Response(inputMessage, null);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" * Composes a {@code Response} with Juke\u0027s output message. Be warned that if","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * this method is called with a Response object that already has a Juke output,","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" * then the previous Juke output will be overwritten. This behaviour may be changed","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * in a future implementation of the Response class.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" * @param outputMessage Juke output","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} with Juke\u0027s output message","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" public Response withJuke(String outputMessage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" return new Response(this.inputMessage, outputMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" * Returns a {@code Response} with no input or output messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Response} with no input or output messages","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" public static Response of() {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" return new Response(null, null);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the input message from the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representing the input message from the user","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" public String getInputMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" return this.inputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the output message from Juke.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representing the output message from Juke","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" public String getOutputMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" return this.outputMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":77}},{"path":"src/main/java/juke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.LinkedList;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageReadException;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageWriteException;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"import juke.parsers.FileParser;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" * Manages the storage and retrieval of data from the data file. Internal runtime data is","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" * handled by the TaskList object, and any read/writes to the device\u0027s memory is routed through","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * this class.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"public class Storage extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /** Path to the data directory. */","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" private static final Path DIRECTORY_PATH \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" /** Path to the data file. */","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" private static final Path FILE_PATH \u003d Paths.get(\"./data/tasks.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code Storage}. Prevents external instantiation through","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * any methods other than {@code Storage.of()}.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" private Storage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" super();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code Storage} and the files","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * and directories required if necessary.","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code Storage} instance that is fully instantiated","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeInitialisationException if the directories or files cannot be","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" * created or initialised","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" public static Storage of() throws JukeInitialisationException {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" // if the directory does not exist, create the directory","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" if (!Files.exists(Storage.DIRECTORY_PATH)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" Files.createDirectory(Storage.DIRECTORY_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeInitialisationException(\"Oh no! I am unable to create a directory to store your \"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" + \"tasks! Please try again later!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" // if the dir exist but file doesn\u0027t, then just create the file","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" if (!Files.exists(Storage.FILE_PATH)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" Files.createFile(Storage.FILE_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeInitialisationException(\"Oh no! I am unable to create a datafile to store your \"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" + \"tasks! Please try again later!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" // the file and directory should exist if execution reaches here","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" assert Files.exists(Storage.FILE_PATH);","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" assert Files.exists(Storage.DIRECTORY_PATH);","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" return new Storage();","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" * Returns a list of saved task after the datafile is parsed by the {@code FileParser}.","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" * Code is inspired from https://jsparrow.github.io/rules/use-files-buffered-reader.html#code-changes","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" * and https://www.baeldung.com/java-buffered-reader.","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" * @return List of {@code JukeTasks} retrieved","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException If the file could not be opened or processed for any reason","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" public List\u003cJukeTask\u003e read() throws JukeStorageReadException {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" try (BufferedReader br \u003d Files.newBufferedReader(Storage.FILE_PATH)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" String curr;","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" List\u003cJukeTask\u003e tasks \u003d new LinkedList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" while ((curr \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" tasks.add(FileParser.parseTask(curr));","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeStorageReadException(\"Oh no! I am unable to understand the data stored \"","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" + \"in the datafile!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" * Writes the list of tasks into the datafile.","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" * Code is inspired from https://jsparrow.github.io/rules/use-files-buffered-reader.html#code-changes","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" * and https://www.baeldung.com/java-buffered-reader.","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" * @param tasks List of {@code JukeTasks} to write","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException If the file could not be opened or written to for any reason","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" public void write(List\u003cJukeTask\u003e tasks) throws JukeStorageWriteException {","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" try (BufferedWriter bw \u003d Files.newBufferedWriter(Storage.FILE_PATH)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" for (JukeTask t : tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" bw.write(t.save());","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" bw.newLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeStorageWriteException(\"Oh no! I cannot save your data to the datafile!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":118}},{"path":"src/main/java/juke/tasks/JukeDeadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeStateException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Represents a Deadline task. Deadline tasks contain a deadline which is represented by a","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * {@code LocalDateTime} object.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDeadline extends JukeTask {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** String which represents the Task Identifier. */","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" private static final String TASK_DESCRIPTOR \u003d \"[D] \";","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /** Deadline for Task. */","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" private final LocalDateTime deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeDeadline}.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Task description","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @param deadline Deadline for task","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDeadline(String task, LocalDateTime deadline) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" super(task);","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeDeadline}.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Task description","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" * @param deadline Deadline for task","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * @param isCompleted Status of completion of the task","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the task is already completed","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" public JukeDeadline(String task, LocalDateTime deadline, boolean isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" this(task, deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" if (isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" this.setAsComplete();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the String which represents this object when it is saved into the datafile.","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" * @return Datafile representation of this object","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" return \"D\" + super.save() + \"|\" + deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeDeadline}\u0027s deadline with respect to the localDateTime object input. This method","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" * is mainly used for sorting, and should not be invoked directly by the user.","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" * @param localDateTime {@code LocalDateTime} object to compare with","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeDeadline}\u0027s deadline is before the input {@code LocalDateTime} object,","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" * 0 if they are the same, and 1 if this {@code JukeDeadline}\u0027s deadline is after the","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" * input {@code LocalDateTime} object","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" public int compareDeadline(LocalDateTime localDateTime) {","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" return localDateTime.compareTo(this.deadline);","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeTask} object with the input {@code JukeTask} object for order. This method should","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" * not be directly invoked by the user as it is mainly used for sorting.","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeDeadline} object is before the {@code JukeTask} object passed in, 0 if they","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" * are the same, and 1 if this {@code JukeDeadline} object is after the {@code JukeTask} object passed in","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" public int sortBy(JukeTask task, SortOrderEnum sortOrder, SortTypeEnum sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" switch (sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" case DESCRIPTION:","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" // reuses the superclass\u0027s description comparator method","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" return super.sortBy(task, sortOrder, sortType);","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" case END_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" return this.compareDeadlineOrEndDate(task, sortOrder);","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" case START_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" return this.compareStartDate(task, sortOrder);","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list on that field!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" * Compares the start date between this {@code JukeDeadline} object with another input {@code JukeTask} object.","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" * This method should not be directly invoked by the user as it is mainly used for sorting.","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeDeadline} object\u0027s start date is before the start date of the","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" * input {@code JukeTask} object, 0 if they are the same, and 1 if this {@code JukeDeadline}\u0027s","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" * start date is after the start date of the input {@code JukeTask} object","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" private int compareStartDate(JukeTask task, SortOrderEnum sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" if (task instanceof JukeEvent) {","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" // deadlines are assumed to have an infinitely early start date","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" // and is hence always before any event task","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" return -1 * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeDeadline) {","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" // deadlines are of equal priority when compared to other deadlines","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" return 0;","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeTodo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" // todos are assumed to have a smaller but infinitely early start date","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":" // and are hence before after any deadline task","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":" return sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" // should not reach here, unless there are other unknown subclasses of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list with an unknown task within it!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":" * Compares the deadline or end date of this {@code JukeDeadline} object","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" * with another input {@code JukeEvent} object.","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeDeadline} object\u0027s deadline is before the deadline/end date of the","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":" * input {@code JukeTask} object, 0 if they are the same, and 1 if this {@code JukeDeadline}\u0027s","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":" * deadline is after the deadline/end date of the input {@code JukeTask} object","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":" private int compareDeadlineOrEndDate(JukeTask task, SortOrderEnum sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" if (task instanceof JukeEvent) {","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" JukeEvent event \u003d (JukeEvent) task;","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" return event.compareEndTime(this.deadline) * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeDeadline) {","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" JukeDeadline deadline \u003d (JukeDeadline) task;","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" return this.deadline.compareTo(deadline.deadline) * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeTodo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":" // since todos have an infinitely early deadline, they are always considered to be before events","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":" return sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":" // should not reach here, unless there are other unknown subclasses of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list with an unknown task within it!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of this {@code JukeDeadline} object.","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":" return JukeDeadline.TASK_DESCRIPTOR","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"asdfghjkxd"},"content":" + super.toString()","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"asdfghjkxd"},"content":" + \" (by: \"","lastModifiedDate":"2023-09-08"},{"lineNumber":162,"author":{"gitId":"asdfghjkxd"},"content":" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy, HHmm\"))","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"asdfghjkxd"},"content":" + \" hrs)\";","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":165,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":165}},{"path":"src/main/java/juke/tasks/JukeEvent.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.interfaces.TaskSortable;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeStateException;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Represents an Event task. Event tasks contain both a startTime and endTime","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" * deadline, which are represented by {@code LocalDateTime} objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeEvent extends JukeTask implements TaskSortable\u003cJukeTask\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" /** String which represents the Task Identifier. */","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" private static final String TASK_DESCRIPTOR \u003d \"[E] \";","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /** Start Time. */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" private final LocalDateTime startTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" /** End Time. */","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" private final LocalDateTime endTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeEvent}.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskName Task description","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" * @param startTime Start date/time","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" * @param endTime End date/time","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" public JukeEvent(String taskName, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" super(taskName);","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeEvent}.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskName Task description","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" * @param startTime Start date/time","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" * @param endTime End date/time","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" * @param isCompleted Status of completion of the task","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the task is already completed","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" public JukeEvent(String taskName, LocalDateTime startTime, LocalDateTime endTime, boolean isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" this(taskName, startTime, endTime);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" if (isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" // the event should have a start date that is before the end date","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" assert startTime.isBefore(endTime);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" this.setAsComplete();","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the String which represents this object when it is saved into the datafile.","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" * @return Datafile representation of this object","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" return \"E\" + super.save() + \"|\" + startTime + \"|\" + endTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" * Compares the input {@code LocalDateTime} object with the end time of this {@code JukeEvent} object. This","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" * method is mainly used for sorting, and should not be invoked directly by the user.","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" * @param dateTime input {@code LocalDateTime} object","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if the input {@code LocalDateTime} object is before the end time of this {@code JukeEvent} object,","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" * 0 if they are the same, and 1 if the input {@code LocalDateTime} object is after the end time of this","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" * {@code JukeEvent} object","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" public int compareEndTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" return dateTime.compareTo(this.endTime);","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeEvent} object with the input {@code JukeTask} object for order.","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" * This method should not be directly invoked by the user as it is mainly used for sorting.","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeEvent} object is before the input {@code JukeTask} object, 0 if they","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" * are the same, and 1 if this {@code JukeEvent} object is after the input {@code JukeTask} object","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" public int sortBy(JukeTask task, SortOrderEnum sortOrder, SortTypeEnum sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" switch (sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" case DESCRIPTION:","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" // reuses the superclass\u0027s description comparator method","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" return super.sortBy(task, sortOrder, sortType);","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" case END_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" return this.compareDeadlineOrEndDate(task, sortOrder);","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" case START_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" return this.compareStartDate(task, sortOrder);","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list on that field!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeEvent}\u0027s deadline or end date with respect to the input {@code JukeTask} object.","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" * This method should not be directly invoked by the user as it is mainly used for sorting.","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeEvent}\u0027s end date is before the deadline/end date of the input","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" * {@code JukeTask} object, 0 if they are the same, and 1 if this {@code JukeEvent}\u0027s end","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" * date is after the deadline/end date of the input {@code JukeTask} object","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" private int compareDeadlineOrEndDate(JukeTask task, SortOrderEnum sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":" if (task instanceof JukeEvent) {","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":" JukeEvent event \u003d (JukeEvent) task;","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":" return this.endTime.compareTo(event.endTime) * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeDeadline) {","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" JukeDeadline deadline \u003d (JukeDeadline) task;","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" int otherDeadlineComparedToSelf \u003d deadline.compareDeadline(this.endTime);","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":" return otherDeadlineComparedToSelf * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeTodo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" // since todos have an infinitely early deadline, they are always considered to be before events","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":" // and so events are always after todos, subjected to the constraints of the sort order","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" return sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":" // should not reach here, unless there are other unknown subclasses of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list with an unknown task within it!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":" * Compares the start date between this {@code JukeEvent} object with another input {@code JukeTask} object.","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" * This method should not be directly invoked by the user as it is mainly used for sorting.","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeEvent} object\u0027s start date is before the start date of the input {@code JukeTask}","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" * object, 0 if they are the same, and 1 if this {@code JukeEvent} object is after the start date of the input","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" * {@code JukeTask} object","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":" private int compareStartDate(JukeTask task, SortOrderEnum sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":" if (task instanceof JukeEvent) {","lastModifiedDate":"2023-09-11"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":" JukeEvent event \u003d (JukeEvent) task;","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" return this.startTime.compareTo(event.startTime) * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeDeadline || task instanceof JukeTodo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":" // since todos have an infinitely early deadline, they are always considered to be before events","lastModifiedDate":"2023-09-11"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":" // and so events are always after todos, subjected to the constraints of the sort order","lastModifiedDate":"2023-09-11"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" return sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":" // should not reach here, unless there are other unknown subclasses of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list with an unknown task within it!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of this {@code JukeEvent} object.","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":165,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":166,"author":{"gitId":"asdfghjkxd"},"content":" return JukeEvent.TASK_DESCRIPTOR","lastModifiedDate":"2023-09-08"},{"lineNumber":167,"author":{"gitId":"asdfghjkxd"},"content":" + super.toString()","lastModifiedDate":"2023-09-08"},{"lineNumber":168,"author":{"gitId":"asdfghjkxd"},"content":" + \" (from \" + startTime.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy, HHmm\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":169,"author":{"gitId":"asdfghjkxd"},"content":" + \" hrs to \" + endTime.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy, HHmm\")) + \" hrs)\";","lastModifiedDate":"2023-09-08"},{"lineNumber":170,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":171,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":171}},{"path":"src/main/java/juke/tasks/JukeTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.interfaces.Savable;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.interfaces.TaskSortable;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeStateException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" * Abstract Class that represents a task that the user can add to Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"public abstract class JukeTask extends JukeObject implements TaskSortable\u003cJukeTask\u003e, Savable {","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" /** String to represent when the task is completed. */","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" private static final String COMPLETED_INDICATOR \u003d \"[✓] \";","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" /** String to represent when the task not completed. */","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" private static final String INCOMPLETE_INDICATOR \u003d \"[ ] \";","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" /** Task description. */","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" private final String taskName;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" /** Boolean to check if the task is completed */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" private boolean isCompleted;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeTask}. Since this is an abstract method,","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" * this method is purely for subclasses to call for initialising common aspects of","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" * the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" * @param taskName Task description","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" public JukeTask(String taskName) {","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * Marks a task as complete.","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the task is already completed","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" public void setAsComplete() throws JukeStateException {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" if (this.isCompleted) {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeStateException(\"Oh no! The task selected is already completed!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" this.isCompleted \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" * Marks a task as incomplete.","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the task is already incomplete","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" public void setAsIncomplete() throws JukeStateException {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" if (!this.isCompleted) {","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeStateException(\"The task selected is already not completed!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the String which represents this object when it is saved into the datafile.","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" * @return Datafile representation of this object","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" return (this.isCompleted ? \"|T|\" : \"|F|\") + this.taskName;","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" * Checks if the task description contains the word being queried. All subclassses of","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" * {@code JukeTask} will reuse this method for checking.","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" * @param word Keyword to check","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" * @return true if the task description contains the keyword, false otherwise","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" public boolean stringMatches(String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" return this.taskName.contains(word);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" * Converts the task object to its corresponding String representation.","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" return (this.isCompleted ? JukeTask.COMPLETED_INDICATOR : JukeTask.INCOMPLETE_INDICATOR) + taskName;","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeTask} object with the specified {@code JukeTask} object for order. This method","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" * compares task description only.","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" * This method is present mainly for polymorphism and method reuse.","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeTask} object is before the {@code JukeTask} object passed in, 0 if they","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" * are the same, and 1 if this {@code JukeTask} object is after the {@code JukeTask} object passed in","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" public int sortBy(JukeTask task, SortOrderEnum sortOrder, SortTypeEnum sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" switch (sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" case ASCENDING:","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" return this.taskName.compareTo(task.taskName);","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" case DESCENDING:","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":" return this.taskName.compareTo(task.taskName) * -1;","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list in that order!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":118}},{"path":"src/main/java/juke/tasks/JukeTodo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":" * Represents a Todo task. Todo tasks do not have any deadlines.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeTodo extends JukeTask {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":" /** String which represents the Task Identifier. */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":" private static final String TASK_DESCRIPTOR \u003d \"[T] \";","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeTodo}.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Task description","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" public JukeTodo(String task) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" super(task);","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code JukeTodo}.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Task description","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" * @param isCompleted Status of completion of the task","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" public JukeTodo(String task, boolean isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" super(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" if (isCompleted) {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" this.setAsComplete();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * Returns the String which represents this object when it is saved into the datafile.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * @return Datafile representation of this object","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" return \"T\" + super.save();","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" * Compares this {@code JukeTodo} object with the input {@code JukeTask} object.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if this {@code JukeTodo} object is before the input {@code JukeTask} object,","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" * 0 if they are of the same date order, and 1 if this {@code JukeTodo} object is after","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" * the input {@code JukeTask} object","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" public int sortBy(JukeTask task, SortOrderEnum sortOrder, SortTypeEnum sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" switch (sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" case DESCRIPTION:","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" // reuses the superclass\u0027s description comparator method","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" return super.sortBy(task, sortOrder, sortType);","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" case END_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" case START_DATE:","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" return this.compareStartDate(task, sortOrder);","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list on that field!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":" * Compares the start date between this {@code JukeTodo} object with the input {@code JukeTask} object.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" * @param task the {@code JukeTask} object to be compared with","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" * @return -1 if the start date of this {@code JukeDeadline} object is before the start date of the input","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" * {@code JukeTask} object, 0 if they are the same, and 1 if the start date of this {@code JukeDeadline}","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" * object is after the start date of the input {@code JukeTask} object","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" private int compareStartDate(JukeTask task, SortOrderEnum sortOrder) {","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" if (task instanceof JukeEvent || task instanceof JukeDeadline) {","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" // todos are assumed to have an infinitely early start date","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" // and is hence always before any event task; and","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" // deadlines have a larger but infinitely early start date","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" return -1 * sortOrder.getMultiplier();","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" } else if (task instanceof JukeTodo) {","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" // todos are of equal priority when compared to other todos","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":" return 0;","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" // should not reach here, unless there are other unknown subclasses of JukeTask","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list with an unknown task within it!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of this {@code JukeTodo} object","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" return JukeTodo.TASK_DESCRIPTOR + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":105}},{"path":"src/main/java/juke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.LinkedList;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.classes.JukeObject;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortOrderEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.enums.SortTypeEnum;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commons.utils.StringUtils;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeStateException;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.arguments.JukeIllegalArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"import juke.storage.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" * Manages all {@code JukeTask}s. This class handles the addition/deletion/manipulation of","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" * any {@code JukeTask}s that are created by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"public class TaskList extends JukeObject {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /** Header for {@code TaskList} String representation. */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" private static final String TASK_LIST_HEADER \u003d \"Here\u0027s your list of tasks:\\n\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" /** String representation of the {@code TaskList} when it is empty. */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" private static final String NO_TASKS_PRESENT_STRING \u003d \"No Tasks Present!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" /** Max number of characters on a line. */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" private static final int MAX_LINE_LENGTH \u003d 35;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" /** List of JukeTasks under this {@code TaskList}\u0027s control. */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" private final LinkedList\u003cJukeTask\u003e tasks;","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" * {@code Storage} instance in charge of storing, retrieving and modifying data.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code TaskList} with all tasks loaded from the datafile.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" * @param storage The storage object that manages any I/O operations on the datafile","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is are any issues with retrieving data from the datafile","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" private TaskList(Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks \u003d new LinkedList\u003c\u003e(storage.read());","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" * Creates an instance of {@code TaskList} from existing tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code TaskList} object","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is are any issues with retrieving data from the datafile","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" public static TaskList of(Storage storageManager) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" return new TaskList(storageManager);","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":" * @param task {@code JukeTask} object.","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":" * @return true if the task is added, else false","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is are any issues with retrieving data from the datafile","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"asdfghjkxd"},"content":" public boolean addTask(JukeTask task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"asdfghjkxd"},"content":" int lengthOfTasks \u003d this.tasks.size();","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"asdfghjkxd"},"content":" boolean isSuccess \u003d this.tasks.add(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"asdfghjkxd"},"content":" if (isSuccess) {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"asdfghjkxd"},"content":" assert this.tasks.size() \u003d\u003d lengthOfTasks + 1;","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"asdfghjkxd"},"content":" this.storage.write(this.tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":73,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":74,"author":{"gitId":"asdfghjkxd"},"content":" return isSuccess;","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"asdfghjkxd"},"content":" * Deletes a task by index from the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"asdfghjkxd"},"content":" * @param task Index of {@code JukeTask} object","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code JukeTask} deleted if the task is successfully deleted, else throws an exception","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if the input argument is invalid","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is are any issues with retrieving data from the datafile","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":85,"author":{"gitId":"asdfghjkxd"},"content":" public JukeTask deleteTask(int task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"asdfghjkxd"},"content":" JukeTask returnedTask \u003d this.tasks.get(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"asdfghjkxd"},"content":" int lengthOfTasks \u003d this.tasks.size();","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"asdfghjkxd"},"content":" if (this.tasks.remove(returnedTask)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"asdfghjkxd"},"content":" assert this.tasks.size() \u003d\u003d lengthOfTasks - 1;","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"asdfghjkxd"},"content":" this.storage.write(this.tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"asdfghjkxd"},"content":" return returnedTask;","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-08-21"},{"lineNumber":97,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! The task index you have provided is not valid!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":99,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":100,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":102,"author":{"gitId":"asdfghjkxd"},"content":" * Marks a task in the task list as complete.","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"asdfghjkxd"},"content":" * @param index Index of task to act on.","lastModifiedDate":"2023-08-20"},{"lineNumber":105,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if the input argument is invalid","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the user tries to mark a completed task as completed again","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is an issue with storing the changes","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":109,"author":{"gitId":"asdfghjkxd"},"content":" public void setAsComplete(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"asdfghjkxd"},"content":" if (index \u003c 0 || index \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-21"},{"lineNumber":111,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I do not have such task recorded!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":113,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":114,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks.get(index).setAsComplete();","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"asdfghjkxd"},"content":" this.storage.write(this.tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":117,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":118,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":119,"author":{"gitId":"asdfghjkxd"},"content":" * Marks a task as incomplete.","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"asdfghjkxd"},"content":" * @param index Index of task to act on.","lastModifiedDate":"2023-08-20"},{"lineNumber":122,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if the input argument is invalid","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStateException if the user tries to mark an incomplete task as incompleted again","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeStorageException if there is an issue with storing the changes","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":126,"author":{"gitId":"asdfghjkxd"},"content":" public void setAsIncomplete(int index) throws JukeStorageException {","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"asdfghjkxd"},"content":" if (index \u003c 0 || index \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-21"},{"lineNumber":128,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I do not have such task recorded!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":130,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":131,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks.get(index).setAsIncomplete();","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"asdfghjkxd"},"content":" this.storage.write(this.tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":134,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":135,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":136,"author":{"gitId":"asdfghjkxd"},"content":" * Returns information of the task at the input index.","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"asdfghjkxd"},"content":" * @param index Index of task to act on.","lastModifiedDate":"2023-08-20"},{"lineNumber":139,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-20"},{"lineNumber":140,"author":{"gitId":"asdfghjkxd"},"content":" * @throws JukeIllegalArgumentException if the input argument is invalid","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":142,"author":{"gitId":"asdfghjkxd"},"content":" public String getTaskInformation(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"asdfghjkxd"},"content":" if (index \u003c 0 || index \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I do not have such task recorded!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"asdfghjkxd"},"content":" return this.tasks.get(index).toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":148,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":149,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":150,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":151,"author":{"gitId":"asdfghjkxd"},"content":" * Finds all tasks that match the specified word.","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"asdfghjkxd"},"content":" * @param word Word of interest","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"asdfghjkxd"},"content":" * @return {@code List} of {@code JukeTask} objects whose subject matches the word","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"asdfghjkxd"},"content":" public List\u003cJukeTask\u003e findTask(String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"asdfghjkxd"},"content":" List\u003cJukeTask\u003e wordMatches \u003d new LinkedList\u003c\u003e();","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"asdfghjkxd"},"content":" for (JukeTask t : this.tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"asdfghjkxd"},"content":" if (t.stringMatches(word)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"asdfghjkxd"},"content":" wordMatches.add(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":162,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"asdfghjkxd"},"content":" return wordMatches;","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":169,"author":{"gitId":"asdfghjkxd"},"content":" * Sorts the tasks in the {@code TaskList} by the input {@code SortOrderEnum} and {@code SortTypeEnum}.","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":171,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortOrder the order to sort the tasks by","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"asdfghjkxd"},"content":" * @param sortType the type of sort to perform on the tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":174,"author":{"gitId":"asdfghjkxd"},"content":" public final void sort(SortOrderEnum sortOrder, SortTypeEnum sortType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":175,"author":{"gitId":"asdfghjkxd"},"content":" // stores the original copy of the tasks for error recovery","lastModifiedDate":"2023-09-11"},{"lineNumber":176,"author":{"gitId":"asdfghjkxd"},"content":" List\u003cJukeTask\u003e originalTasks \u003d new LinkedList\u003c\u003e(this.tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":177,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":178,"author":{"gitId":"asdfghjkxd"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":179,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks.sort((task1, task2) -\u003e task1.sortBy(task2, sortOrder, sortType));","lastModifiedDate":"2023-09-11"},{"lineNumber":180,"author":{"gitId":"asdfghjkxd"},"content":" } catch (IllegalArgumentException | UnsupportedOperationException | ClassCastException ex) {","lastModifiedDate":"2023-09-11"},{"lineNumber":181,"author":{"gitId":"asdfghjkxd"},"content":" // if there is an error, revert the changes","lastModifiedDate":"2023-09-11"},{"lineNumber":182,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks.clear();","lastModifiedDate":"2023-09-11"},{"lineNumber":183,"author":{"gitId":"asdfghjkxd"},"content":" this.tasks.addAll(originalTasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":184,"author":{"gitId":"asdfghjkxd"},"content":" throw new JukeIllegalArgumentException(\"Oh no! I cannot sort the list!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":185,"author":{"gitId":"asdfghjkxd"},"content":" } finally {","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"asdfghjkxd"},"content":" // save any changes made to the task list","lastModifiedDate":"2023-09-11"},{"lineNumber":187,"author":{"gitId":"asdfghjkxd"},"content":" this.storage.write(this.tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":189,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":190,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":191,"author":{"gitId":"asdfghjkxd"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":192,"author":{"gitId":"asdfghjkxd"},"content":" * Returns String representation of the {@code TaskList}, which contains all tasks present","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"asdfghjkxd"},"content":" * within the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"asdfghjkxd"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"asdfghjkxd"},"content":" * @return String representation of this {@code TaskList}.","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":197,"author":{"gitId":"asdfghjkxd"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":198,"author":{"gitId":"asdfghjkxd"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":199,"author":{"gitId":"asdfghjkxd"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":200,"author":{"gitId":"asdfghjkxd"},"content":" return TaskList.NO_TASKS_PRESENT_STRING;","lastModifiedDate":"2023-09-03"},{"lineNumber":201,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"asdfghjkxd"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2023-08-20"},{"lineNumber":204,"author":{"gitId":"asdfghjkxd"},"content":" builder.append(TaskList.TASK_LIST_HEADER);","lastModifiedDate":"2023-08-27"},{"lineNumber":205,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":206,"author":{"gitId":"asdfghjkxd"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-20"},{"lineNumber":207,"author":{"gitId":"asdfghjkxd"},"content":" String built \u003d (i + 1) + \". \" + this.tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":208,"author":{"gitId":"asdfghjkxd"},"content":" builder.append(StringUtils.wrap(built, TaskList.MAX_LINE_LENGTH));","lastModifiedDate":"2023-09-03"},{"lineNumber":209,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":210,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":211,"author":{"gitId":"asdfghjkxd"},"content":" return builder.toString().strip();","lastModifiedDate":"2023-09-03"},{"lineNumber":212,"author":{"gitId":"asdfghjkxd"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":213,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":213}},{"path":"src/main/java/juke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * User interface of Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"public class Ui extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** Name of the application. */","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" public static final String APPLICATION_NAME \u003d \"Juke\";","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" /** Height of the window. */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" public static final double WINDOW_HEIGHT \u003d 700.0d;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" /** Width of the window. */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" public static final double WINDOW_WIDTH \u003d 450.0d;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"-"},"content":" // Code is largely reused from https://se-education.org/guides/tutorials/javaFxPart2.html and","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":" // https://se-education.org/guides/tutorials/javaFxPart4.html with very minor modifications.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Starts the JavaFX application.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * @param stage the scaffold of the application, whereby Nodes/widgets will be displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"-"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Ui.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"-"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":" // specify the overall look of the window","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"-"},"content":" // window is non-resizable with a height of 700px and a width of 450px","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":" stage.setTitle(Ui.APPLICATION_NAME);","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"-"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"-"},"content":" stage.setMinHeight(Ui.WINDOW_HEIGHT);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"-"},"content":" stage.setMinWidth(Ui.WINDOW_WIDTH);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"-"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"-"},"content":" throw new JukeInitialisationException(\"I cannot initialise! There was an issue loading the necessary \"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":" + \"FXML files to load up the GUI!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"asdfghjkxd":25,"-":29}},{"path":"src/main/java/juke/ui/components/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.ui.components;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"-"},"content":"//@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"-"},"content":"// Class reused from https://se-education.org/guides/tutorials/javaFxPart3.html.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * Abstract class that is used to represent a dialog box that is","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * displayed to the user through the GUI.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public abstract class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Inverts the order of the widgets within this dialog box. This method is left here as a quick way","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * to reverse the order of the child widgets. This method will be deprecated in the future.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Deprecated","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"-"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"-"},"content":" ObservableList\u003cNode\u003e childWidgets \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"-"},"content":" FXCollections.reverse(childWidgets);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"-"},"content":" this.getChildren().setAll(childWidgets);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Creates a dialog box that represents the user\u0027s inputs.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * @param text Text to render in the dialog box","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * @return {@code UserDialog} object","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static DialogBox ofUser(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return new UserDialog(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Creates a dialog box that represents Juke\u0027s outputs.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * @param text Text to render in the dialog box","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * @return {@code JukeDialog} object","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public static DialogBox ofJuke(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return new JukeDialog(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"-"},"content":"//@@author","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"asdfghjkxd":8,"-":40}},{"path":"src/main/java/juke/ui/components/JukeDialog.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.ui.components;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.StackPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Represents a dialog box containing Juke\u0027s response.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"public class JukeDialog extends DialogBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** Container for the dialog box contents. */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" private StackPane dialogBubble;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /** Background of the dialog box contents. */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" private Region backgroundRegion;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"-"},"content":" // Style of loading the FXML file is reused from https://se-education.org/guides/tutorials/javaFxPart4.html.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"-"},"content":" /** Text within the dialog box. */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private Label textLabel;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":" /** Profile image to display in the chat. */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private ImageView displayImage;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Constructs an instance of {@code JukeDialog}.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * @param text Text to display in the dialog box","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public JukeDialog(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Juke.class.getResource(\"/view/JukeDialog.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"-"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"-"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"-"},"content":" textLabel.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.backgroundRegion.maxHeightProperty().bind(this.textLabel.heightProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.backgroundRegion.minHeightProperty().bind(this.textLabel.heightProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"-"},"content":" this.backgroundRegion.minWidthProperty().bind(this.textLabel.widthProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":" this.backgroundRegion.maxWidthProperty().bind(this.textLabel.widthProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"-"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"-"},"content":" throw new JukeInitialisationException(\"I cannot initialise! There was an issue loading the necessary \"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"-"},"content":" + \"FXML files to load up the GUI!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":24,"-":33}},{"path":"src/main/java/juke/ui/components/UserDialog.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.ui.components;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.StackPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.Juke;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":" * Represents a dialog box containing the user\u0027s message.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"public class UserDialog extends DialogBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" /** Container for the dialog box contents. */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" private StackPane dialogBubble;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" /** Background of the dialog box contents. */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" private Region backgroundRegion;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"-"},"content":" //@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"-"},"content":" // Style of loading the FXML file is reused from https://se-education.org/guides/tutorials/javaFxPart4.html.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"-"},"content":" /** Text within the dialog box. */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private Label textLabel;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":" /** Profile image to display in the chat. */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private ImageView displayImage;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Constructs an instance of {@code UserDialog}.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * @param text Text to display in the dialog box","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public UserDialog(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Juke.class.getResource(\"/view/UserDialog.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"-"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"-"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"-"},"content":" textLabel.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.backgroundRegion.maxHeightProperty().bind(this.textLabel.heightProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.backgroundRegion.minHeightProperty().bind(this.textLabel.heightProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"-"},"content":" this.backgroundRegion.minWidthProperty().bind(this.textLabel.widthProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":" this.backgroundRegion.maxWidthProperty().bind(this.textLabel.widthProperty().add(25.0d));","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"-"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"-"},"content":" throw new JukeInitialisationException(\"I cannot initialise! There was an issue loading the necessary \"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"-"},"content":" + \"FXML files to load up the GUI!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"-"},"content":" //@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"asdfghjkxd":24,"-":33}},{"path":"src/main/java/juke/ui/windows/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.ui.windows;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commands.JukeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commands.JukeExceptionCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"import juke.commands.JukeExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.JukeInitialisationException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.storage.JukeStorageException;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"import juke.responses.Response;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"import juke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"import juke.ui.components.DialogBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"-"},"content":"//@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":"// Code is largely reused with some major modifications from","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":"// https://se-education.org/guides/tutorials/javaFxPart4.html","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * Controller class for the main window of the application.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /** Offset for the widgets. */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public static final double OFFSETS \u003d 1.5d;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"-"},"content":" /** Storage object that handles the loading and saving of tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"-"},"content":" /** TaskList object that handles the manipulation of tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"-"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"-"},"content":" /** ScrollPane container that contains a scrollable object. */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"-"},"content":" /** VBox container that contains the dialog bubbles. */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"-"},"content":" /** TextField that accepts user input. */","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private TextField inputField;","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":" /** Button that submits the user input. */","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"-"},"content":" private Button submitButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Initialises the core services of Juke, such as the","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Storage and TaskList services.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"-"},"content":" private void initialiseCoreServices() {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"-"},"content":" // init services","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.storage \u003d Storage.of();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"-"},"content":" this.taskList \u003d TaskList.of(this.storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"-"},"content":" } catch (JukeInitialisationException | JukeStorageException","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"-"},"content":" | JukeParseException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.dialogContainer.getChildren().add(DialogBox.ofJuke(ex.getMessage()));","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Initialises the main window and configures it with the preconfigured parameters.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"-"},"content":" // anchor the widgets to the parent layout\u0027s edges","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"-"},"content":" AnchorPane.setTopAnchor(this.scrollPane, MainWindow.OFFSETS);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"-"},"content":" AnchorPane.setBottomAnchor(this.submitButton, MainWindow.OFFSETS);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"-"},"content":" AnchorPane.setBottomAnchor(this.inputField, MainWindow.OFFSETS);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"-"},"content":" AnchorPane.setRightAnchor(this.submitButton, MainWindow.OFFSETS);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"-"},"content":" AnchorPane.setLeftAnchor(this.inputField, MainWindow.OFFSETS);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"-"},"content":" // anchor the scroll","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.scrollPane.vvalueProperty().bind(this.dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"-"},"content":" // add the introductory dialog to the dialog container","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.dialogContainer.getChildren().add(this.getIntroductoryDialog());","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"-"},"content":" // handle user inputs","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"-"},"content":" this.submitButton.setOnMouseClicked((event) -\u003e this.handleInput());","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"-"},"content":" this.inputField.setOnAction((event) -\u003e this.handleInput());","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"-"},"content":" // initialise core services after setting the handlers","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"-"},"content":" this.initialiseCoreServices();","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"-"},"content":" * Dispatches the command and acts on it.","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"-"},"content":" private void handleInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"-"},"content":" String inputCommand \u003d this.inputField.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":" Response response \u003d Response.ofUser(inputCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":" JukeCommand action \u003d JukeCommand.of(inputCommand, this.taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":" // invokes the exit action should the user key in \"bye\" as the command","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"-"},"content":" if (action instanceof JukeExitCommand) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"-"},"content":" exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"-"},"content":" // otherwise, execute the command and get the responses from the user and Juke","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"-"},"content":" Response returns \u003d action.execute(response);","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"-"},"content":" String inputMessage \u003d returns.getInputMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"-"},"content":" String outputMessage \u003d returns.getOutputMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"-"},"content":" if (inputMessage !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"-"},"content":" DialogBox userDialog \u003d getAsUserInput(inputMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"-"},"content":" this.dialogContainer.getChildren().addAll(userDialog);","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"-"},"content":" if (outputMessage !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"-"},"content":" DialogBox jukeDialog \u003d getAsJukeOutput(outputMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"-"},"content":" this.dialogContainer.getChildren().addAll(jukeDialog);","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"-"},"content":" } catch (JukeException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"-"},"content":" Response returns \u003d new JukeExceptionCommand(ex).execute(Response.ofUser(inputCommand));","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"-"},"content":" this.dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"-"},"content":" getAsUserInput(returns.getInputMessage()),","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"-"},"content":" getAsJukeOutput(returns.getOutputMessage()));","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"-"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"-"},"content":" this.inputField.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * Returns a UserDialog object that contains the inputs by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"-"},"content":" * @param userInput User input","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"-"},"content":" * @return {@code UserDialog} object","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"-"},"content":" private DialogBox getAsUserInput(String userInput) {","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"-"},"content":" return DialogBox.ofUser(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"-"},"content":" * Returns a JukeDialog object that contains the outputs from Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":" * @param jukeOutput Juke output","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"-"},"content":" * @return {@code JukeDialog} object","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"-"},"content":" private DialogBox getAsJukeOutput(String jukeOutput) {","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return DialogBox.ofJuke(jukeOutput);","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Returns a DialogBox object that contains the introductory message","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"-"},"content":" * when the user first launch Juke.","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"-"},"content":" * @return {@code JukeDialog} object with the introductory message","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"-"},"content":" private DialogBox getIntroductoryDialog() {","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"-"},"content":" String introductoryMessage \u003d \"Hello! I\u0027m Juke (J|ava D|uke)!\\nWhat can I do for you today?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"-"},"content":" return this.getAsJukeOutput(introductoryMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"-"},"content":" * Forces the application to exit. This may be deprecated in the future","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"-"},"content":" * if the \"bye\" command is deprecated.","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"-"},"content":" private void exit() {","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"-"},"content":" System.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"-"},"content":"//@@author","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"asdfghjkxd":20,"-":154}},{"path":"src/main/resources/images/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"# Acknowledgements","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"The image files in this directory are reused directly from https://se-education.org/guides/tutorials/javaFxPart3.html","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"with little modifications done to the images.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"asdfghjkxd":4}},{"path":"src/main/resources/view/JukeDialog.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"\u003c!--","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"Code reused from https://se-education.org/guides/tutorials/javaFxPart4.html, with some minor changes.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"--\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"\u003cfx:root alignment\u003d\"TOP_LEFT\" maxHeight\u003d\"Infinity\" maxWidth\u003d\"450.0\"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" prefWidth\u003d\"450.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" spacing\u003d\"10.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" \u003cImageView fx:id\u003d\"displayImage\" fitHeight\u003d\"100.0d\" fitWidth\u003d\"100.0d\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" \u003cCircle radius\u003d\"50.0d\" centerX\u003d\"50.0\" centerY\u003d\"50.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" \u003c!--","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" @@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" Image reused from https://se-education.org/guides/tutorials/javaFxPart3.html.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" --\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" \u003cImage url\u003d\"@/images/DaDuke.png\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" \u003c!--","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" @@author","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" --\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" \u003cStackPane fx:id\u003d\"dialogBubble\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" \u003cRegion fx:id\u003d\"backgroundRegion\" maxWidth\u003d\"350.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" \u003cbackground\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" \u003cBackground\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" \u003cfills\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" \u003cBackgroundFill fill\u003d\"lightblue\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" \u003cradii\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" \u003cCornerRadii radius\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/radii\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/BackgroundFill\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/fills\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/Background\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/background\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/Region\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" \u003cLabel fx:id\u003d\"textLabel\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" \u003cInsets top\u003d\"10.0\" right\u003d\"5.0\" bottom\u003d\"10.0\" left\u003d\"5.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":"\u003c!--","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":"@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":"--\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"asdfghjkxd":58}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"\u003c!--","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"Code reused from https://se-education.org/guides/tutorials/javaFxPart4.html, with some minor changes.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"--\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":" prefHeight\u003d\"700.0\" prefWidth\u003d\"450.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"juke.ui.windows.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToHeight\u003d\"true\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" prefHeight\u003d\"670.0\" prefWidth\u003d\"450.0\" vbarPolicy\u003d\"ALWAYS\" vvalue\u003d\"1.0\" \u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"200.0\" prefWidth\u003d\"100.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" \u003cTextField fx:id\u003d\"inputField\" layoutY\u003d\"670.0\" maxHeight\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" maxWidth\u003d\"1.7976931348623157E308\" onAction\u003d\"#handleInput\" prefHeight\u003d\"25.0\"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" prefWidth\u003d\"370.0\" AnchorPane.bottomAnchor\u003d\"1.0\" AnchorPane.leftAnchor\u003d\"1.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" \u003cButton fx:id\u003d\"submitButton\" layoutX\u003d\"374.0\" layoutY\u003d\"671.0\" mnemonicParsing\u003d\"false\"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" onMouseClicked\u003d\"#handleInput\" prefHeight\u003d\"25.0\" prefWidth\u003d\"75.0\" text\u003d\"Submit\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"\u003c!--","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":"--\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"asdfghjkxd":33}},{"path":"src/main/resources/view/UserDialog.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"\u003c!--","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"Code reused from https://se-education.org/guides/tutorials/javaFxPart4.html, with some minor changes.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"--\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.geometry.Pos?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"Infinity\" maxWidth\u003d\"450.0\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":" prefWidth\u003d\"450.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" spacing\u003d\"10.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" \u003cStackPane fx:id\u003d\"dialogBubble\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":" \u003cRegion fx:id\u003d\"backgroundRegion\" maxWidth\u003d\"350.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":" \u003cbackground\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":" \u003cBackground\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":" \u003cfills\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"asdfghjkxd"},"content":" \u003cBackgroundFill fill\u003d\"lightgreen\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":" \u003cradii\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":" \u003cCornerRadii radius\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/radii\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/BackgroundFill\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/fills\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/Background\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/background\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/Region\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":" \u003cLabel fx:id\u003d\"textLabel\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":" \u003cImageView fx:id\u003d\"displayImage\" fitHeight\u003d\"100.0d\" fitWidth\u003d\"100.0d\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":" \u003cCircle radius\u003d\"50.0d\" centerX\u003d\"50.0\" centerY\u003d\"50.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":" \u003c!--","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":" @@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":" Image reused from https://se-education.org/guides/tutorials/javaFxPart3.html.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":" --\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"asdfghjkxd"},"content":" \u003cImage url\u003d\"@/images/DaUser.png\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"asdfghjkxd"},"content":" \u003c!--","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"asdfghjkxd"},"content":" @@author","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"asdfghjkxd"},"content":" --\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"asdfghjkxd"},"content":" \u003calignment\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":" \u003cPos fx:constant\u003d\"TOP_RIGHT\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/alignment\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"asdfghjkxd"},"content":" \u003cInsets top\u003d\"10.0\" right\u003d\"5.0\" bottom\u003d\"10.0\" left\u003d\"5.0\"/\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"asdfghjkxd"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"asdfghjkxd"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"asdfghjkxd"},"content":"\u003c!--","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"asdfghjkxd"},"content":"@@author","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"asdfghjkxd"},"content":"--\u003e","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"asdfghjkxd":62}},{"path":"src/test/java/juke/parsers/DateTimeParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeDateFormatParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"-"},"content":"//@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"-"},"content":"// Code is reused from GitHub Copilot autocompletion. Some test cases, as well as the data, may have been","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"-"},"content":"// inevitably reused during the autocompletion process.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * Tests for the DateTimeParser class.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"-"},"content":"public class DateTimeParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with valid dash inputs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public void isValidDate_validDash_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"-"},"content":" assertTrue(DateTimeParser.isValidDate(\"15-02-2023\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with valid slash inputs.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public void isValidDate_validSlash_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"-"},"content":" assertTrue(DateTimeParser.isValidDate(\"15/02/2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with valid mixed delimiters.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public void isValidDate_validMixed_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":" assertTrue(DateTimeParser.isValidDate(\"15/02-2023\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with invalid day.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public void isValidDate_invalidDay_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\"32-12-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with invalid month.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public void isValidDate_invalidMonth_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\"12-14-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with invalid year.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public void isValidDate_invalidYear_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\"12-05-1000000\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with whitespace-leading or whitespace-trailing","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * commands with dash.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public void isValidDate_whitespacedDash_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\" 15-02-2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with whitespace-leading or whitespace-trailing","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * commands with slash.","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void isValidDate_whitespacedSlash_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\" 15/02/2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with excessively whitespaced commands with dash.","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public void isValidDate_excessivelyWhitespacedDash_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\" 15 - 02 - 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with excessively whitespaced commands with slash.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void isValidDate_excessivelyWhitespacedSlash_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\" 15 / 02 / 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with illegal symbol \"?\".","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public void isValidDate_illegalSymbolsQuestionMark_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\"15?02?2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with illegal symbol \"|\".","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"-"},"content":" public void isValidDate_illegalSymbolsPipe_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\"15|02|2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with malformed input with slash.","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"-"},"content":" public void isValidDate_malformedSlash_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\"15002/2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDate} method with malformed input with dash.","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public void isValidDate_malformedDash_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDate(\"15002-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with valid inputs one.","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"-"},"content":" public void isValidDateTime_normalCombinationOne_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"-"},"content":" assertTrue(DateTimeParser.isValidDateTime(\"15-02-2023 15-23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with valid inputs two.","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"-"},"content":" public void isValidDateTime_normalCombinationTwo_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"-"},"content":" assertTrue(DateTimeParser.isValidDateTime(\"15/02/2023 15-23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with valid inputs three.","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"-"},"content":" public void isValidDateTime_normalCombinationThree_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"-"},"content":" assertTrue(DateTimeParser.isValidDateTime(\"15-02-2023 15:23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with valid inputs four.","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"-"},"content":" public void isValidDateTime_normalCombinationFour_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"-"},"content":" assertTrue(DateTimeParser.isValidDateTime(\"15/02/2023 15:23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method whiteSpaced DateTimes for combination","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"-"},"content":" * one.","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"-"},"content":" public void isValidDateTime_whitespacedCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15-02-2023 15-23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method whiteSpaced DateTimes for combination","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"-"},"content":" * two.","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"-"},"content":" public void isValidDateTime_whitespacedCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15/02/2023 15-23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method whiteSpaced DateTimes for combination","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"-"},"content":" * three.","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public void isValidDateTime_whitespacedCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15-02-2023 15:23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method whiteSpaced DateTimes for combination","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"-"},"content":" * four.","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"-"},"content":" public void isValidDateTime_whitespacedCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":200,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15/02/2023 15:23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":203,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":204,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with excessively whitespaced DateTimes","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"-"},"content":" * with combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":207,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public void isValidDateTime_excessivelyWhitespacedCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":209,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15 - 02 - 2023 15 - 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":212,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":213,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with excessively whitespaced DateTimes","lastModifiedDate":"2023-08-29"},{"lineNumber":214,"author":{"gitId":"-"},"content":" * with combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":215,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":217,"author":{"gitId":"-"},"content":" public void isValidDateTime_excessivelyWhitespacedCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15 / 02 / 2023 15 - 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with excessively whitespaced DateTimes","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"-"},"content":" * with combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":225,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"-"},"content":" public void isValidDateTime_excessivelyWhitespacedCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":227,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15 - 02 - 2023 15 : 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":228,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":230,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":231,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with excessively whitespaced DateTimes","lastModifiedDate":"2023-08-29"},{"lineNumber":232,"author":{"gitId":"-"},"content":" * with combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":234,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"-"},"content":" public void isValidDateTime_excessivelyWhitespacedCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":236,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\" 15 / 02 / 2023 15 : 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":239,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with illegal symbols with combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":241,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":242,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":243,"author":{"gitId":"-"},"content":" public void isValidDateTime_illegalSymbolsCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":244,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15?02?2023 14?23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":247,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with illegal symbols with combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"-"},"content":" public void isValidDateTime_illegalSymbolsCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":252,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15|02|2023 14|23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":254,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":255,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with illegal symbols with combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":258,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":259,"author":{"gitId":"-"},"content":" public void isValidDateTime_illegalSymbolsCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":260,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15?02?2023 14|23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":261,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":264,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with illegal symbols with combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"-"},"content":" public void isValidDateTime_illegalSymbolsCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":268,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15|02|2023 14?23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":271,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":272,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with malformed inputs combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":273,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":274,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":275,"author":{"gitId":"-"},"content":" public void isValidDateTime_malformedCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":276,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15002/2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":278,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":279,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":280,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with malformed inputs combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":281,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":282,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":283,"author":{"gitId":"-"},"content":" public void isValidDateTime_malformedCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":284,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15002|2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":285,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":287,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":288,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":289,"author":{"gitId":"-"},"content":" * Tests for the {@code isValidDateTime} method with malformed inputs combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":290,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":291,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":292,"author":{"gitId":"-"},"content":" public void isValidDateTime_malformedCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":293,"author":{"gitId":"-"},"content":" assertFalse(DateTimeParser.isValidDateTime(\"15002-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":294,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":296,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":297,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":298,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with valid Date inputs combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":299,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":300,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":301,"author":{"gitId":"-"},"content":" public void parse_validDateCombinationOne_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":302,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\"15-02-2023\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":303,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":305,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":306,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with valid Date inputs combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":307,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":308,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":309,"author":{"gitId":"-"},"content":" public void parse_validDateCombinationTwo_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":310,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\"15/02/2023\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":311,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":312,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":313,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":314,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with valid Date inputs combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":315,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":316,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":317,"author":{"gitId":"-"},"content":" public void parse_validDateCombinationThree_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":318,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\"15-02-2023\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":319,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":321,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":322,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with valid Date inputs combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":323,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":324,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":325,"author":{"gitId":"-"},"content":" public void parse_validDateCombinationFour_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":326,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\"15/02/2023\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":327,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":329,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":330,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with valid DateTime inputs combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":331,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":332,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":333,"author":{"gitId":"-"},"content":" public void parse_validDateTimeCombinationOne_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":334,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\"15-02-2023 15-23\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":336,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":337,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":338,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with valid DateTime inputs combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":339,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":340,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":341,"author":{"gitId":"-"},"content":" public void parse_validDateTimeCombinationTwo_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":342,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\"15/02/2023 15-23\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":343,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":344,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":345,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":346,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with valid DateTime inputs combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":347,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":348,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":349,"author":{"gitId":"-"},"content":" public void parse_validDateTimeCombinationThree_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":350,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\"15-02-2023 15:23\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":353,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":354,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with valid DateTime inputs combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":355,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":356,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":357,"author":{"gitId":"-"},"content":" public void parse_validDateTimeCombinationFour_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":358,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\"15/02/2023 15:23\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":359,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":360,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":361,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":362,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with whitespace-leading or trailing inputs with Date combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":363,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":364,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":365,"author":{"gitId":"-"},"content":" public void parse_dateWhitespaceCombinationOne_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":366,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\" 15-02-2023 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":367,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":368,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":369,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":370,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with whitespace-leading or trailing inputs with Date combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":371,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":372,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":373,"author":{"gitId":"-"},"content":" public void parse_dateWhitespaceCombinationTwo_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":374,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\" 15/02/2023 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":375,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":376,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":377,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":378,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with whitespace-leading or trailing inputs with Date combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":379,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":380,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":381,"author":{"gitId":"-"},"content":" public void parse_dateWhitespaceCombinationThree_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":382,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\" 15-02/2023 \").toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":383,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":385,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":386,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with whitespace-leading or trailing inputs with Date combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":387,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":388,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":389,"author":{"gitId":"-"},"content":" public void parse_dateWhitespaceCombinationFour_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":390,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T00:00\", DateTimeParser.parse(\" 15/02-2023 \").toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":391,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":392,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":393,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":394,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with whitespace-leading or trailing inputs with DateTime combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":395,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":396,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":397,"author":{"gitId":"-"},"content":" public void parse_dateTimeWhitespaceCombinationOne_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":398,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\" 15-02-2023 15-23 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":399,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":400,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":401,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":402,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with whitespace-leading or trailing inputs with DateTime combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":403,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":404,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":405,"author":{"gitId":"-"},"content":" public void parse_dateTimeWhitespaceCombinationTwo_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":406,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\" 15/02/2023 15-23 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":407,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":408,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":409,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":410,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with whitespace-leading or trailing inputs with DateTime combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":411,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":412,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":413,"author":{"gitId":"-"},"content":" public void parse_dateTimeWhitespaceCombinationThree_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":414,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\" 15-02-2023 15:23 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":415,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":417,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":418,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with whitespace-leading or trailing inputs with DateTime combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":419,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":420,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":421,"author":{"gitId":"-"},"content":" public void parse_dateTimeWhitespaceCombinationFour_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":422,"author":{"gitId":"-"},"content":" assertEquals(\"2023-02-15T15:23\", DateTimeParser.parse(\" 15/02/2023 15:23 \").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":423,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":424,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":425,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":426,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with excessively whitespaced Date combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":427,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":428,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":429,"author":{"gitId":"-"},"content":" public void parse_dateExcessiveWhitespacesCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":430,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":431,"author":{"gitId":"-"},"content":" \" 15 - 02 - 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":432,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":433,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":434,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":435,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with excessively whitespaced Date combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":436,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":437,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":438,"author":{"gitId":"-"},"content":" public void parse_dateExcessiveWhitespacesCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":439,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":440,"author":{"gitId":"-"},"content":" \" 15 / 02 / 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":441,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":442,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":443,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":444,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with excessively whitespaced Date combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":445,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":446,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":447,"author":{"gitId":"-"},"content":" public void parse_dateExcessiveWhitespacesCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":448,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":449,"author":{"gitId":"-"},"content":" \" 15 - 02 - 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":450,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":451,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":452,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":453,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with excessively whitespaced Date combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":454,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":455,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":456,"author":{"gitId":"-"},"content":" public void parse_dateExcessiveWhitespacesCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":457,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":458,"author":{"gitId":"-"},"content":" \" 15 / 02 / 2023 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":459,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":460,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":461,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":462,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with excessively whitespaced DateTime combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":463,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":464,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":465,"author":{"gitId":"-"},"content":" public void parse_dateTimeExcessiveWhitespacesCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":466,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":467,"author":{"gitId":"-"},"content":" \" 15 - 02 - 2023 15 - 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":468,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":469,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":470,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":471,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with excessively whitespaced DateTime combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":472,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":473,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":474,"author":{"gitId":"-"},"content":" public void parse_dateTimeExcessiveWhitespacesCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":475,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":476,"author":{"gitId":"-"},"content":" \" 15 / 02 / 2023 15 - 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":477,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":479,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":480,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with excessively whitespaced DateTime combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":481,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":482,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":483,"author":{"gitId":"-"},"content":" public void parse_dateTimeExcessiveWhitespacesCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":484,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":485,"author":{"gitId":"-"},"content":" \" 15 - 02 - 2023 15 : 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":486,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":487,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":488,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":489,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with excessively whitespaced DateTime combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":490,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":491,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":492,"author":{"gitId":"-"},"content":" public void parse_dateTimeExcessiveWhitespacesCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":493,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(","lastModifiedDate":"2023-08-27"},{"lineNumber":494,"author":{"gitId":"-"},"content":" \" 15 / 02 / 2023 15 : 23 \"));","lastModifiedDate":"2023-08-27"},{"lineNumber":495,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":496,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":497,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":498,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with malformed Date inputs combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":499,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":500,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":501,"author":{"gitId":"-"},"content":" public void parse_malformedDateCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":502,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002/2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":503,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":504,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":505,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":506,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with malformed Date inputs combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":507,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":508,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":509,"author":{"gitId":"-"},"content":" public void parse_malformedDateCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":510,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002-2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":511,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":512,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":513,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":514,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with malformed DateTime inputs combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":515,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":516,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":517,"author":{"gitId":"-"},"content":" public void parse_malformedDateTimeCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":518,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002/2023 14-23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":519,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":520,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":521,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":522,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with malformed DateTime inputs combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":523,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":524,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":525,"author":{"gitId":"-"},"content":" public void parse_malformedDateTimeCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":526,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002/2023 14:23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":527,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":528,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":529,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":530,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with malformed DateTime inputs combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":531,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":532,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":533,"author":{"gitId":"-"},"content":" public void parse_malformedDateTimeCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":534,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002-2023 14-23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":535,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":536,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":537,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":538,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with malformed DateTime inputs combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":539,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":540,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":541,"author":{"gitId":"-"},"content":" public void parse_malformedDateTimeCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":542,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15002-2023 14:23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":543,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":544,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":545,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":546,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with illegal symbols for Date input combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":547,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":548,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":549,"author":{"gitId":"-"},"content":" public void parse_dateIllegalSymbolsCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":550,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15|02|2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":551,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":552,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":553,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":554,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with illegal symbols for Date input combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":555,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":556,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":557,"author":{"gitId":"-"},"content":" public void parse_dateIllegalSymbolsCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":558,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15?02?2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":559,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":560,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":561,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":562,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with illegal symbols for Date input combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":563,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":564,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":565,"author":{"gitId":"-"},"content":" public void parse_dateIllegalSymbolsCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":566,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15|02|2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":567,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":568,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":569,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":570,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with illegal symbols for Date input combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":571,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":572,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":573,"author":{"gitId":"-"},"content":" public void parse_dateIllegalSymbolsCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":574,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15?02?2023\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":575,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":576,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":577,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":578,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with illegal symbols for DateTime input combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":579,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":580,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":581,"author":{"gitId":"-"},"content":" public void parse_dateTimeIllegalSymbolsCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":582,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15|02|2023 14|23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":583,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":584,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":585,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":586,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with illegal symbols for DateTime input combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":587,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":588,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":589,"author":{"gitId":"-"},"content":" public void parse_dateTimeIllegalSymbolsCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":590,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15?02?2023 14?23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":591,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":592,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":593,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":594,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with illegal symbols for DateTime input combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":595,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":596,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":597,"author":{"gitId":"-"},"content":" public void parse_dateTimeIllegalSymbolsCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":598,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15|02|2023 14?23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":599,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":600,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":601,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":602,"author":{"gitId":"-"},"content":" * Tests for the {@code parse} method with illegal symbols for DateTime input combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":603,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":604,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":605,"author":{"gitId":"-"},"content":" public void parse_dateTimeIllegalSymbolsCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":606,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e DateTimeParser.parse(\"15?02?2023 14|23\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":607,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":608,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":609,"author":{"gitId":"-"},"content":"//@@author","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"asdfghjkxd":11,"-":598}},{"path":"src/test/java/juke/parsers/FileParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeDataFileParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"import juke.exceptions.parsers.JukeDateFormatParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeDeadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeEvent;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"import juke.tasks.JukeTodo;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"-"},"content":"//@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"-"},"content":"// Code is reused with minor modification from GitHub Copilot autocompletion.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"-"},"content":"// Some test cases, as well as the data, may have been inevitably reused during the autocompletion process.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Tests for the FileParser class.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class FileParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with valid inputs combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public void parseTask_validCombinationOne_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":" assertEquals(new JukeTodo(\"testing\", false).toString(),","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"-"},"content":" FileParser.parseTask(\"T|F|testing\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with valid inputs combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public void parseTask_validCombinationTwo_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"-"},"content":" assertEquals(new JukeDeadline(\"testing\", DateTimeParser","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":" .fromDateTimeString(\"2027-07-15T15:34\"), false).toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" FileParser.parseTask(\"D|F|testing|2027-07-15T15:34\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with valid inputs combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public void parseTask_validCombinationThree_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assertEquals(new JukeEvent(","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"testing\", DateTimeParser.fromDateTimeString(\"2027-07-15T15:34\"),","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"-"},"content":" DateTimeParser.fromDateTimeString(\"2027-08-15T15:34\"), false).toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":" FileParser.parseTask(\"E|F|testing|2027-07-15T15:34|2027-08-15T15:34\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with malformed commands combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public void parseTask_malformedCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(\"this is obviously wrong\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with malformed commands combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public void parseTask_malformedCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(\"this is obviously wrong\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with malformed commands combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public void parseTask_malformedCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(\"D|Ftesting|2027-07-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with malformed commands combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public void parseTask_malformedCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"-"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(\"D|Ftesting|10000-07-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with malformed commands combination five.","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void parseTask_malformedCombinationFive_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"-"},"content":" \"E|Ftesting|2027-07-15T15:34|2027-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with malformed commands combination six.","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public void parseTask_malformedCombinationSix_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"-"},"content":" \"E|Ftesting|203414-07-15T15:34|2027-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with malformed commands combination seven.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public void parseTask_malformedCombinationSeven_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"-"},"content":" \"E|Ftesting|2027-07-15T15:34|200202-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with invalid inputs combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"-"},"content":" public void parseTask_illegalDatesCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(\"D|F|testing|202020-07-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with invalid inputs combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"-"},"content":" public void parseTask_illegalDatesCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(\"D|F|testing|2020-100-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with invalid inputs combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public void parseTask_illegalDatesCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \"D|F|testing|2020-07-2132131321T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with invalid inputs combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"-"},"content":" public void parseTask_illegalDatesCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"-"},"content":" \"E|F|testing|203414-07-15T15:34|2027-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with invalid inputs combination five.","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"-"},"content":" public void parseTask_illegalDatesCombinationFive_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"-"},"content":" \"E|F|testing|2020-420-15T15:34|2027-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with invalid inputs combination six.","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"-"},"content":" public void parseTask_illegalDatesCombinationSix_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"-"},"content":" \"E|F|testing|2020-07-200T15:34|2027-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with invalid inputs combination seven.","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public void parseTask_illegalDatesCombinationSeven_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"-"},"content":" \"E|F|testing|2020-07-15T15:34|202721412-08-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with invalid inputs combination eight.","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"-"},"content":" public void parseTask_illegalDatesCombinationEight_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"-"},"content":" \"E|F|testing|2020-07-15T15:34|2020-800-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with invalid inputs combination nine.","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"-"},"content":" public void parseTask_illegalDatesCombinationNine_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"-"},"content":" assertThrows(JukeDateFormatParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \"E|F|testing|2020-07-15T15:34|2020-08-222323T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"-"},"content":" * Tests for the {@code parseTask} method with invalid inputs combination ten.","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"-"},"content":" public void parseTask_illegalDatesCombinationTen_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"-"},"content":" assertThrows(JukeDataFileParseException.class, () -\u003e FileParser.parseTask(","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"-"},"content":" \"E|F|testing|2020-08-15T15:34|2020-07-15T15:34\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"-"},"content":"//@@author","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"asdfghjkxd":13,"-":185}},{"path":"src/test/java/juke/parsers/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"package juke.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":"//@@author asdfghjkxd-reused","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"-"},"content":"// Code is reused from GitHub Copilot autocompletion. Some test cases, as well as the data, may have been","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"-"},"content":"// inevitably reused during the autocompletion process.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * Tests for the Parser class.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Tests for the {@code parseBySpace} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":" public void parseBySpace_valid_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseBySpace(\"test command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"test\");","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":" assertEquals(parsed[1], \"command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Tests for the {@code parseBySpace} method with whitespace-leading or whitespace-trailing inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public void parseBySpace_withWhitespaces_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseBySpace(\" tested command \");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"tested\");","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" assertEquals(parsed[1], \"command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Tests for the {@code parseBySpace} method with excessively whitespaced inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public void parseBySpace_excessivelyWhitespaced_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseBySpace(\" tested command \");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"tested\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertEquals(parsed[1], \"command\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":" * Tests for the {@code parseBySpace} method with malformed inputs.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public void parseBySpace_malformed_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseBySpace(\"thisshouldnotwork\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"thisshouldnotwork\");","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * Tests for the {@code parseByByString} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public void parseByByString_valid_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseByByString(\"string /by time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertEquals(parsed[1], \"time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Tests for the {@code parseByByString} method with whitespace-leading or","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":" * whitespace-trailing inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public void parseByByString_withWhitespaces_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseByByString(\" string /by time \");","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"-"},"content":" assertEquals(parsed[1], \"time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * Tests for the {@code parseByByString} method with excessively whitespaced inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void parseByByString_excessivelyWhitespaced_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseByByString(\" string /by time \");","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assertEquals(parsed[1], \"time\");","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Tests for the {@code parseByByString} method with malformed inputs.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void parseByByString_malformed_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseByByString(\"string/bytime\");","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"string/bytime\");","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"-"},"content":" * Tests for the {@code parseByFromToString} method with valid inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public void parseByFromToString_valid_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseByFromToString(\"string /from now /to later\");","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"-"},"content":" assertEquals(parsed[1], \"now\");","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"-"},"content":" assertEquals(parsed[2], \"later\");","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Tests for the {@code parseByFromToString} method with whitespace-leading or","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * whitespace-trailing inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"-"},"content":" public void parseByFromToString_withWhitespaces_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseByFromToString(\" string /from now /to later \");","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertEquals(parsed[1], \"now\");","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assertEquals(parsed[2], \"later\");","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"-"},"content":" * Tests for the {@code parseByFromToString} method with excessively whitespaced inputs.","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public void parseByFromToString_excessivelyWhitespaced_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseByFromToString(\" string /from now /to later \");","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"string\");","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"-"},"content":" assertEquals(parsed[1], \"now\");","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"-"},"content":" assertEquals(parsed[2], \"later\");","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Tests for the {@code parseByFromToString} method with malformed inputs.","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"-"},"content":" public void parseByFromToString_malformed_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"-"},"content":" String[] parsed \u003d Parser.parseByFromToString(\"string/fromnow/tolater\");","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertEquals(parsed.length, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"-"},"content":" assertEquals(parsed[0], \"string/fromnow/tolater\");","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchByString} method with valid input combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"-"},"content":" public void isMatchByString_validCombinationOne_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"-"},"content":" assertTrue(Parser.isMatchByString(\"testing /by test\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchByString} method with valid input combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"-"},"content":" public void isMatchByString_validCombinationTwo_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"-"},"content":" assertTrue(Parser.isMatchByString(\"testing /by test more than one item\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchByString} method with valid input combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"-"},"content":" public void isMatchByString_validCombinationThree_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"-"},"content":" assertTrue(Parser.isMatchByString(\"testing more than one argument /by test\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchByString} method with malformed by input combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"-"},"content":" public void isMatchByString_malformedCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"-"},"content":" assertFalse(Parser.isMatchByString(\"testing/bytest\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":183,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchByString} method with malformed by input combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":184,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"-"},"content":" public void isMatchByString_malformedCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"-"},"content":" assertFalse(Parser.isMatchByString(\"testing/by test\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchByString} method with malformed by input combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"-"},"content":" public void isMatchByString_malformedCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"-"},"content":" assertFalse(Parser.isMatchByString(\"testing /bytest\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":199,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchFromToString} method with valid input combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":200,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":201,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":202,"author":{"gitId":"-"},"content":" public void isMatchFromToString_validCombinationOne_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"-"},"content":" assertTrue(Parser.isMatchFromToString(\"testing /from testdate /to enddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":207,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchFromToString} method with valid input combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":208,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":209,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public void isMatchFromToString_validCombinationTwo_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":211,"author":{"gitId":"-"},"content":" assertTrue(Parser.isMatchFromToString(\"testing more than one arg /from testdate /to enddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":213,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":214,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":215,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchFromToString} method with valid input combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":217,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"-"},"content":" public void isMatchFromToString_validCombinationThree_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":219,"author":{"gitId":"-"},"content":" assertTrue(Parser.isMatchFromToString(\"testing /from testdate more than one /to enddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchFromToString} method with valid input combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":225,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"-"},"content":" public void isMatchFromToString_validCombinationFour_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":227,"author":{"gitId":"-"},"content":" assertTrue(Parser.isMatchFromToString(\"testing /from testdate /to enddate more than one\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":228,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":230,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":231,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchFromToString} method with valid input combination five.","lastModifiedDate":"2023-08-29"},{"lineNumber":232,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":234,"author":{"gitId":"-"},"content":" public void isMatchFromToString_validCombinationFive_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"-"},"content":" assertTrue(Parser.isMatchFromToString(\"testing /from testdate more than one /to enddate more \"","lastModifiedDate":"2023-08-27"},{"lineNumber":236,"author":{"gitId":"-"},"content":" + \"than one\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":239,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchFromToString} method with malformed to-from input combination one.","lastModifiedDate":"2023-08-29"},{"lineNumber":241,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":242,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":243,"author":{"gitId":"-"},"content":" public void isMatchFromToString_malformedCombinationOne_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":244,"author":{"gitId":"-"},"content":" assertFalse(Parser.isMatchFromToString(\"testing/fromtestdate/toenddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":247,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchFromToString} method with malformed to-from input combination two.","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"-"},"content":" public void isMatchFromToString_malformedCombinationTwo_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":252,"author":{"gitId":"-"},"content":" assertFalse(Parser.isMatchFromToString(\"testing/from testdate/toenddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":254,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":255,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchFromToString} method with malformed to-from input combination three.","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":258,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":259,"author":{"gitId":"-"},"content":" public void isMatchFromToString_malformedCombinationThree_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":260,"author":{"gitId":"-"},"content":" assertFalse(Parser.isMatchFromToString(\"testing/fromtestdate/to enddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":261,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":264,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchFromToString} method with malformed to-from input combination four.","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"-"},"content":" public void isMatchFromToString_malformedCombinationFour_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":268,"author":{"gitId":"-"},"content":" assertFalse(Parser.isMatchFromToString(\"testing/fromtestdate /to enddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":271,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":272,"author":{"gitId":"-"},"content":" * Tests for the {@code isMatchFromToString} method with malformed to-from input combination five.","lastModifiedDate":"2023-08-29"},{"lineNumber":273,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":274,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":275,"author":{"gitId":"-"},"content":" public void isMatchFromToString_malformedCombinationFive_failure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":276,"author":{"gitId":"-"},"content":" assertFalse(Parser.isMatchFromToString(\"testing /from testdate/toenddate\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":278,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":279,"author":{"gitId":"-"},"content":"//@@author","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"asdfghjkxd":8,"-":271}},{"path":"text-ui-test/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"E|F|splashdown|2022-04-24T00:00|2022-04-25T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"D|F|finish cs career|9999-12-31T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"T|F|finish cs2100 lecture","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"E|F|very big event oh no|2023-12-25T00:00|2023-12-26T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"T|F|complete tp","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"D|F|go to bed|9999-12-31T23:59","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"E|F|go to prom|2023-08-09T00:00|2023-08-10T00:00","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"asdfghjkxd":7}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"asdfghjkxd"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"asdfghjkxd"},"content":"todo complete tp","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"asdfghjkxd"},"content":"deadline go to bed /by 31-12-9999 23:59","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"asdfghjkxd"},"content":"event go to prom /from 09-08-2023 /to 10-08-2023","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"asdfghjkxd"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"asdfghjkxd"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"asdfghjkxd"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"asdfghjkxd"},"content":"unmark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"asdfghjkxd"},"content":"unmark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"asdfghjkxd"},"content":"mark 1000","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"asdfghjkxd"},"content":"unmark 1000","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"asdfghjkxd"},"content":"todo","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"asdfghjkxd"},"content":"deadline","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"asdfghjkxd"},"content":"event","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"asdfghjkxd"},"content":"deadline /malformed","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"event /malformed /request","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"asdfghjkxd":17}},{"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":"asdfghjkxd"},"content":"# set up the tasks.txt file","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"asdfghjkxd"},"content":"if [ -e \"./data/tasks.txt\" ]","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"asdfghjkxd"},"content":"then","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"asdfghjkxd"},"content":" echo \"E|T|splashdown|2022-04-24T00:00|2022-04-25T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"asdfghjkxd"},"content":"D|F|finish cs career|9999-12-31T00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"asdfghjkxd"},"content":"T|F|finish cs2100 lecture","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"asdfghjkxd"},"content":"E|F|very big event oh no|2023-12-25T00:00|2023-12-26T00:00\" \u003e ./data/tasks.txt","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"asdfghjkxd"},"content":"fi","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"asdfghjkxd"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"asdfghjkxd"},"content":"if ! javac -cp \\","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/actions:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions/arguments:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions/storage:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/parsers:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/storage:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/tasks:\\","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/core \\","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"asdfghjkxd"},"content":"-Xlint:none -d ../bin \\","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/actions/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions/arguments/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/exceptions/storage/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/parsers/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/storage/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/tasks/*.java \\","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"asdfghjkxd"},"content":"../src/main/java/juke/core/*.java","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"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":51,"author":{"gitId":"asdfghjkxd"},"content":"java -classpath ../bin main.java.Juke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"asdfghjkxd"},"content":"# compare the output to the expected output, ignoring ending whitespaces, since the output generates them but the","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"asdfghjkxd"},"content":"# expected file erases them","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"asdfghjkxd"},"content":"diff ACTUAL.TXT EXPECTED.TXT -b --ignore-blank-lines","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"asdfghjkxd":33,"-":30}}] diff --git a/asdfghjkxd_ip_master/commits.json b/asdfghjkxd_ip_master/commits.json index 75be1ce5..074c92b5 100644 --- a/asdfghjkxd_ip_master/commits.json +++ b/asdfghjkxd_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"asdfghjkxd":[{"date":"2023-08-20","commitResults":[{"hash":"97fbf26abbc245a8bdd2cf07a5ebbefba5dfe7cb","isMergeCommit":false,"messageTitle":"Implementation of Level-0 Requirements.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":10}}},{"hash":"13150f9176ef17e7265855b2f54447d1863b58eb","isMergeCommit":false,"messageTitle":"Implementation of Level-1 Requirements, along with improvements to Level-0 Requirements","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":10}}},{"hash":"d7ecd931481c298c6f14ee8273a6c9b1b62ccf50","isMergeCommit":false,"messageTitle":"Implementation of Level-2 Requirements","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":566,"deletions":86}}},{"hash":"4e425d6b9884ac974410a0818fd3a61c0b2ce16e","isMergeCommit":false,"messageTitle":"Implementation of Level-3 Requirements","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":0}}}]},{"date":"2023-08-21","commitResults":[{"hash":"7f15b10984f5c0af7c7cf08ec53c4746037c4e75","isMergeCommit":false,"messageTitle":"Implementation of Level-4 Requirements","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":240,"deletions":81}}},{"hash":"bb19c687a3dbaf4e8e18ac960931cb1c7ee13dcc","isMergeCommit":false,"messageTitle":"Implementation of Level-5 Requirements","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":102,"deletions":113},"sh":{"insertions":4,"deletions":7}}},{"hash":"38924fcda6e2b8a19789a47fa8ee6e11774ac395","isMergeCommit":false,"messageTitle":"Implementation of Level-6 Requirements","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":219,"deletions":115},"sh":{"insertions":3,"deletions":1}}}]},{"date":"2023-08-26","commitResults":[{"hash":"77e5df0e5971486d2a3b345c230babfc40134c09","isMergeCommit":false,"messageTitle":"Implement Level-7 Requirements","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":21,"deletions":1},"java":{"insertions":518,"deletions":153},"sh":{"insertions":28,"deletions":3}}},{"hash":"1a6e259dec344fa077cc701d8a19dc91b5f4aac5","isMergeCommit":true,"messageTitle":"Implement Level-7 Requirements","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6a54344f8eb8cccc446e2e6adb200880c7622cb1","isMergeCommit":false,"messageTitle":"Implement Level-8 Requirements","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":10},"java":{"insertions":139,"deletions":29},"sh":{"insertions":4,"deletions":3}}},{"hash":"97402fb51c7811fe5cbc982ee6c34d014d2c4544","isMergeCommit":true,"messageTitle":"Implement Level-8 Requirements","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"b776029d8008c619f435c53cc18c8ffda2021c16","isMergeCommit":false,"messageTitle":"Organise Code into Respective Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":91},"sh":{"insertions":20,"deletions":18}}},{"hash":"dc2e2d2bc791be76d274b2baa58a8b1e71434e22","isMergeCommit":true,"messageTitle":"Merge changes to Package Structure","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"e8e7a4d4d67209a738a4eac692d5e7ac973207b5","isMergeCommit":false,"messageTitle":"Refactor classes and rearrange packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":247,"deletions":262},"sh":{"insertions":0,"deletions":2}}},{"hash":"39f74a500ac10f7bf6960be78b5cd10fb4f3b511","isMergeCommit":true,"messageTitle":"Merge changes to classes and packages","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"ac46eb28007f2adc732f39e3ab57630e9ab7c7ca","isMergeCommit":true,"messageTitle":"Merge Gradle support into current repository","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5d431c71c729352954fbc3e833984b1c78f22865","isMergeCommit":false,"messageTitle":"Update Gradle Configurations and Fix Style","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":2},"java":{"insertions":266,"deletions":260}}},{"hash":"78b8e58ece5e50e2ca97fd63dd09a2794aee6895","isMergeCommit":true,"messageTitle":"Merge changes to Gradle files and Code Style","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"6a3ec1796c30b4b4cb927d18e3d932c1d9eabbde","isMergeCommit":false,"messageTitle":"Implement Unit Tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":354,"deletions":7}}},{"hash":"119f4dec91736293c6d9cf42f4bd7aa7ddc5e5b4","isMergeCommit":true,"messageTitle":"Merge implementation of Unit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"53e28903ba5625849605b996d4d73fb570b2b722","isMergeCommit":false,"messageTitle":"Implement JAR file Gradle builds","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"79b97be514acb4b28b3efeb8ea7dc838ff5ba3ad","isMergeCommit":true,"messageTitle":"Merge JAR file Gradle builds","messageBody":"","tags":["v0.1","A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"37b0801b6cc10da3e5f3048afc24e442f72f655d","isMergeCommit":false,"messageTitle":"Update Javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":463,"deletions":217}}},{"hash":"992d6159dce42e4321b8e1b0ec6c7df163e3d6d3","isMergeCommit":false,"messageTitle":"Amend Javadoc to comply with guidelines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":50}}},{"hash":"83d2c9325b2ae3b0be2f48d92ec0bdb429aa1593","isMergeCommit":false,"messageTitle":"Refactor code to meet Java coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":118}}},{"hash":"e36431b7f5e359a0d3c947957767f31278503912","isMergeCommit":false,"messageTitle":"Implement Level-9 Requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":1}}},{"hash":"1908fd2bb1d997f97e162e7906f966cefc21bc97","isMergeCommit":true,"messageTitle":"Merge Level-9 changes","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"1665ae7332829959356a2b6cb6c2393acf11dce8","isMergeCommit":true,"messageTitle":"Merge improvements to Java coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"01214c89374646d4758938745572d2e1e9c240c8","isMergeCommit":true,"messageTitle":"Merge changes made to Javadoc","messageBody":"","tags":["v0.2","A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"60aa34fda5443eea390486177c0d8fc3054b4e50","isMergeCommit":false,"messageTitle":"Abstract command handling logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":183,"deletions":105}}},{"hash":"9d040848984e6730c3fb7a4f211908f4101451a9","isMergeCommit":true,"messageTitle":"Merge changes to command handling logic","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"53b09fcfb53532039518e802cf076588fa62dabf","isMergeCommit":false,"messageTitle":"Enhance Juke with GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"fxml":{"insertions":17,"deletions":0},"java":{"insertions":651,"deletions":157}}},{"hash":"c0b1f82ff34569feff1b20575d6d003ee4d14671","isMergeCommit":false,"messageTitle":"Refactor designs of UI into FXML stylesheets","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":113,"deletions":17},"java":{"insertions":83,"deletions":131}}}]},{"date":"2023-09-05","commitResults":[{"hash":"c3e1b1d2c1007f3c618d1f0292ff53dcb1f0752f","isMergeCommit":false,"messageTitle":"Refactor code into new packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":19}}},{"hash":"bc86e88665eccba44824188502e4e6d0a4c70e63","isMergeCommit":true,"messageTitle":"Merge changes to the UI of the app","messageBody":"","tags":["v1.0","Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"3415c13df6abf2a7e87293d9f7f82feb6c005e16","isMergeCommit":false,"messageTitle":"Add assertions to ensure correctness of code","messageBody":"There are some methods that amend the underlying implementation\nof the TaskList, and correctness (length of the list after amendments)\nneeds to be checked to ensure that invariants are not violated.\n\nAdding assertions to the code improves code quality and correctness.\n\nIn an effort to ensure correctness, let\u0027s include some assertions at\ncrucial points of the code where correctness is important. Doing so\nwill improve code correctness.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":15}}},{"hash":"6b84b4579dfc9255fa6c0fe739af0aa55e6502d0","isMergeCommit":false,"messageTitle":"Improve code quality of codebase","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":46}}},{"hash":"dfe1289a5b8638393d419830c267df064b3fffef","isMergeCommit":true,"messageTitle":"Merge pull request #1 from asdfghjkxd/branch-A-Assertions","messageBody":"Add assertions to ensure correctness of code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"6ad4e08f446df92e47133a3fdb528e3339a4d89c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"06d991aeb4ebf8db8aa1d72c34062955287b0ffe","isMergeCommit":true,"messageTitle":"Merge pull request #2 from asdfghjkxd/branch-A-CodeQuality","messageBody":"Improve code quality of codebase","tags":["v1.1","A-CodeQuality"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"34c45623c697ba4a856aa6d2c971110a290de411","isMergeCommit":false,"messageTitle":"Implement Sort feature for tasks","messageBody":"Previously, the user does not have any reasonable way of sorting the\ntasks that they have added other than to edit the datafile directly,\nwhich may be dangerous as erroneous edits may cause the program to\ncrash.\n\nAdding a sort feature ensures that the user is now able to better\norganise their tasks in a ascending/descending order, based on the\ntask description, start date, end date and deadline of tasks.\n\nTo prevent user-induced errors due to careless edits of the datafile,\nas well as to give users more functionality to customise their\ntask lists, let\u0027s give users a convenient but powerful sort feature\nto allow them to do so.\n","fileTypesAndContributionMap":{"java":{"insertions":514,"deletions":12}}},{"hash":"f2b5c8f47c593b4980257f97780d056ed48daed8","isMergeCommit":true,"messageTitle":"Merge pull request #4 from asdfghjkxd/branch-C-Sort","messageBody":"Implement Sort feature for tasks","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"7547b2d0ac270ba80b947ba13ea22f9555c8afb7","isMergeCommit":false,"messageTitle":"Fix bug with missing datafiles","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"61ae0b54c9339a343af1802347adb18f2243b218","isMergeCommit":true,"messageTitle":"Merge pull request #6 from asdfghjkxd/branch-Fix-Missing-Datafiles","messageBody":"Fix bug with missing datafiles","tags":["v1.2"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"asdfghjkxd":{"java":3215,"md":0,"fxml":113,"sh":33,"bat":0,"gradle":22,"txt":32}},"authorContributionVariance":{"asdfghjkxd":318756.62},"authorDisplayNameMap":{"asdfghjkxd":"CS2103T-T17-1 GEOR.. YAO"}} +{"authorDailyContributionsMap":{"asdfghjkxd":[{"date":"2023-08-20","commitResults":[{"hash":"97fbf26abbc245a8bdd2cf07a5ebbefba5dfe7cb","isMergeCommit":false,"messageTitle":"Implementation of Level-0 Requirements.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":10}}},{"hash":"13150f9176ef17e7265855b2f54447d1863b58eb","isMergeCommit":false,"messageTitle":"Implementation of Level-1 Requirements, along with improvements to Level-0 Requirements","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":10}}},{"hash":"d7ecd931481c298c6f14ee8273a6c9b1b62ccf50","isMergeCommit":false,"messageTitle":"Implementation of Level-2 Requirements","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":566,"deletions":86}}},{"hash":"4e425d6b9884ac974410a0818fd3a61c0b2ce16e","isMergeCommit":false,"messageTitle":"Implementation of Level-3 Requirements","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":0}}}]},{"date":"2023-08-21","commitResults":[{"hash":"7f15b10984f5c0af7c7cf08ec53c4746037c4e75","isMergeCommit":false,"messageTitle":"Implementation of Level-4 Requirements","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":240,"deletions":81}}},{"hash":"bb19c687a3dbaf4e8e18ac960931cb1c7ee13dcc","isMergeCommit":false,"messageTitle":"Implementation of Level-5 Requirements","messageBody":"","tags":["Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":102,"deletions":113},"sh":{"insertions":4,"deletions":7}}},{"hash":"38924fcda6e2b8a19789a47fa8ee6e11774ac395","isMergeCommit":false,"messageTitle":"Implementation of Level-6 Requirements","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":219,"deletions":115},"sh":{"insertions":3,"deletions":1}}}]},{"date":"2023-08-26","commitResults":[{"hash":"77e5df0e5971486d2a3b345c230babfc40134c09","isMergeCommit":false,"messageTitle":"Implement Level-7 Requirements","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":21,"deletions":1},"java":{"insertions":518,"deletions":153},"sh":{"insertions":28,"deletions":3}}},{"hash":"1a6e259dec344fa077cc701d8a19dc91b5f4aac5","isMergeCommit":true,"messageTitle":"Implement Level-7 Requirements","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6a54344f8eb8cccc446e2e6adb200880c7622cb1","isMergeCommit":false,"messageTitle":"Implement Level-8 Requirements","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":10},"java":{"insertions":139,"deletions":29},"sh":{"insertions":4,"deletions":3}}},{"hash":"97402fb51c7811fe5cbc982ee6c34d014d2c4544","isMergeCommit":true,"messageTitle":"Implement Level-8 Requirements","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"b776029d8008c619f435c53cc18c8ffda2021c16","isMergeCommit":false,"messageTitle":"Organise Code into Respective Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":91},"sh":{"insertions":20,"deletions":18}}},{"hash":"dc2e2d2bc791be76d274b2baa58a8b1e71434e22","isMergeCommit":true,"messageTitle":"Merge changes to Package Structure","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"e8e7a4d4d67209a738a4eac692d5e7ac973207b5","isMergeCommit":false,"messageTitle":"Refactor classes and rearrange packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":247,"deletions":262},"sh":{"insertions":0,"deletions":2}}},{"hash":"39f74a500ac10f7bf6960be78b5cd10fb4f3b511","isMergeCommit":true,"messageTitle":"Merge changes to classes and packages","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"ac46eb28007f2adc732f39e3ab57630e9ab7c7ca","isMergeCommit":true,"messageTitle":"Merge Gradle support into current repository","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5d431c71c729352954fbc3e833984b1c78f22865","isMergeCommit":false,"messageTitle":"Update Gradle Configurations and Fix Style","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":2},"java":{"insertions":266,"deletions":260}}},{"hash":"78b8e58ece5e50e2ca97fd63dd09a2794aee6895","isMergeCommit":true,"messageTitle":"Merge changes to Gradle files and Code Style","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"6a3ec1796c30b4b4cb927d18e3d932c1d9eabbde","isMergeCommit":false,"messageTitle":"Implement Unit Tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":354,"deletions":7}}},{"hash":"119f4dec91736293c6d9cf42f4bd7aa7ddc5e5b4","isMergeCommit":true,"messageTitle":"Merge implementation of Unit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"53e28903ba5625849605b996d4d73fb570b2b722","isMergeCommit":false,"messageTitle":"Implement JAR file Gradle builds","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"79b97be514acb4b28b3efeb8ea7dc838ff5ba3ad","isMergeCommit":true,"messageTitle":"Merge JAR file Gradle builds","messageBody":"","tags":["v0.1","A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"37b0801b6cc10da3e5f3048afc24e442f72f655d","isMergeCommit":false,"messageTitle":"Update Javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":463,"deletions":217}}},{"hash":"992d6159dce42e4321b8e1b0ec6c7df163e3d6d3","isMergeCommit":false,"messageTitle":"Amend Javadoc to comply with guidelines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":50}}},{"hash":"83d2c9325b2ae3b0be2f48d92ec0bdb429aa1593","isMergeCommit":false,"messageTitle":"Refactor code to meet Java coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":118}}},{"hash":"e36431b7f5e359a0d3c947957767f31278503912","isMergeCommit":false,"messageTitle":"Implement Level-9 Requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":1}}},{"hash":"1908fd2bb1d997f97e162e7906f966cefc21bc97","isMergeCommit":true,"messageTitle":"Merge Level-9 changes","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"1665ae7332829959356a2b6cb6c2393acf11dce8","isMergeCommit":true,"messageTitle":"Merge improvements to Java coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"01214c89374646d4758938745572d2e1e9c240c8","isMergeCommit":true,"messageTitle":"Merge changes made to Javadoc","messageBody":"","tags":["v0.2","A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"329065b357edfe0d773d545e38a15b8eac2eb15d","isMergeCommit":false,"messageTitle":"Update JUnit tests to satisfy conventions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":665,"deletions":69}}}]},{"date":"2023-09-02","commitResults":[{"hash":"60aa34fda5443eea390486177c0d8fc3054b4e50","isMergeCommit":false,"messageTitle":"Abstract command handling logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":183,"deletions":105}}},{"hash":"9d040848984e6730c3fb7a4f211908f4101451a9","isMergeCommit":true,"messageTitle":"Merge changes to command handling logic","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"53b09fcfb53532039518e802cf076588fa62dabf","isMergeCommit":false,"messageTitle":"Enhance Juke with GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"fxml":{"insertions":17,"deletions":0},"java":{"insertions":651,"deletions":157}}},{"hash":"c0b1f82ff34569feff1b20575d6d003ee4d14671","isMergeCommit":false,"messageTitle":"Refactor designs of UI into FXML stylesheets","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":113,"deletions":17},"java":{"insertions":83,"deletions":131}}}]},{"date":"2023-09-05","commitResults":[{"hash":"c3e1b1d2c1007f3c618d1f0292ff53dcb1f0752f","isMergeCommit":false,"messageTitle":"Refactor code into new packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":19}}},{"hash":"bc86e88665eccba44824188502e4e6d0a4c70e63","isMergeCommit":true,"messageTitle":"Merge changes to the UI of the app","messageBody":"","tags":["v1.0","Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"3415c13df6abf2a7e87293d9f7f82feb6c005e16","isMergeCommit":false,"messageTitle":"Add assertions to ensure correctness of code","messageBody":"There are some methods that amend the underlying implementation\nof the TaskList, and correctness (length of the list after amendments)\nneeds to be checked to ensure that invariants are not violated.\n\nAdding assertions to the code improves code quality and correctness.\n\nIn an effort to ensure correctness, let\u0027s include some assertions at\ncrucial points of the code where correctness is important. Doing so\nwill improve code correctness.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":15}}},{"hash":"6b84b4579dfc9255fa6c0fe739af0aa55e6502d0","isMergeCommit":false,"messageTitle":"Improve code quality of codebase","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":46}}},{"hash":"dfe1289a5b8638393d419830c267df064b3fffef","isMergeCommit":true,"messageTitle":"Merge pull request #1 from asdfghjkxd/branch-A-Assertions","messageBody":"Add assertions to ensure correctness of code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"6ad4e08f446df92e47133a3fdb528e3339a4d89c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"06d991aeb4ebf8db8aa1d72c34062955287b0ffe","isMergeCommit":true,"messageTitle":"Merge pull request #2 from asdfghjkxd/branch-A-CodeQuality","messageBody":"Improve code quality of codebase","tags":["v1.1","A-CodeQuality"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"34c45623c697ba4a856aa6d2c971110a290de411","isMergeCommit":false,"messageTitle":"Implement Sort feature for tasks","messageBody":"Previously, the user does not have any reasonable way of sorting the\ntasks that they have added other than to edit the datafile directly,\nwhich may be dangerous as erroneous edits may cause the program to\ncrash.\n\nAdding a sort feature ensures that the user is now able to better\norganise their tasks in a ascending/descending order, based on the\ntask description, start date, end date and deadline of tasks.\n\nTo prevent user-induced errors due to careless edits of the datafile,\nas well as to give users more functionality to customise their\ntask lists, let\u0027s give users a convenient but powerful sort feature\nto allow them to do so.\n","fileTypesAndContributionMap":{"java":{"insertions":514,"deletions":12}}},{"hash":"f2b5c8f47c593b4980257f97780d056ed48daed8","isMergeCommit":true,"messageTitle":"Merge pull request #4 from asdfghjkxd/branch-C-Sort","messageBody":"Implement Sort feature for tasks","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"7547b2d0ac270ba80b947ba13ea22f9555c8afb7","isMergeCommit":false,"messageTitle":"Fix bug with missing datafiles","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"61ae0b54c9339a343af1802347adb18f2243b218","isMergeCommit":true,"messageTitle":"Merge pull request #6 from asdfghjkxd/branch-Fix-Missing-Datafiles","messageBody":"Fix bug with missing datafiles","tags":["v1.2"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"f592082ab73b4d77d6dc113e1a1a58f3cf963428","isMergeCommit":false,"messageTitle":"Add credits and code reuse comments","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":41,"deletions":1},"java":{"insertions":346,"deletions":200},"md":{"insertions":4,"deletions":0}}},{"hash":"17ddd6ed98373001485d07f40d8de70e65bf6cb2","isMergeCommit":true,"messageTitle":"Merge pull request #8 from asdfghjkxd/branch-MoreCodeQuality","messageBody":"Add credits and code reuse comments","fileTypesAndContributionMap":{}},{"hash":"88d1c9eed5bcf47ebb892d3b88683fdca96eb4c2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-MoreJUnit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fe9ca123eb49a3711decea20daddf46bb9e40b67","isMergeCommit":true,"messageTitle":"Merge pull request #9 from asdfghjkxd/branch-MoreJUnit","messageBody":"Update JUnit tests to satisfy conventions","fileTypesAndContributionMap":{}},{"hash":"c9bc081697115132aa6d68f6acde75f03cfc9d83","isMergeCommit":false,"messageTitle":"Fix code quality oversights","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":23}}},{"hash":"e3c409bd768bd9f27786b0d68c8ac853cd325a7c","isMergeCommit":true,"messageTitle":"Merge pull request #10 from asdfghjkxd/branch-CodeQualityFixes","messageBody":"Fix code quality oversights","tags":["v1.2.1"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"asdfghjkxd":{"java":2380,"md":4,"fxml":153,"sh":33,"bat":0,"gradle":22,"txt":32}},"authorContributionVariance":{"asdfghjkxd":291895.3},"authorDisplayNameMap":{"asdfghjkxd":"CS2103T-T17-1 GEOR.. YAO"}} diff --git a/cbj252_ip_master/authorship.json b/cbj252_ip_master/authorship.json index af613974..c1a6e6b6 100644 --- a/cbj252_ip_master/authorship.json +++ b/cbj252_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Duke project template","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"2. Open the project into Intellij as follows:","lastModifiedDate":"2023-09-09"},{"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":"cbj252"},"content":"3. 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":"2023-09-09"},{"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":"cbj252"},"content":"4. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"cbj252":3,"-":21}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-02"},{"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":"cbj252"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"cbj252"},"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":"cbj252"},"content":" mainClass.set(\"duke.ui.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":"cbj252"},"content":"javafx {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"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":"cbj252"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":25,"-":42}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":" * Represents a deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" protected String by;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" * Deadline constructor.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * @param description Deadline name shown to user.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" * @param by Deadline. A string, no type checking done.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" * Gives string representation of the task, shown to users.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" * @return String representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"cbj252":28}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":" * The main class that contains and controls the other components.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" * Constructor to create the other components.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" * @param filePath File to read from when beginning program.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" Ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" tasks \u003d new TaskList(new ArrayList\u003cTask\u003e());","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" * Main loop that constantly requests input from user when necessary.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" @SuppressWarnings(\"checkstyle:Indentation\")","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" public String run(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" String commandType \u003d Parser.parseCommandType(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" switch (Objects.requireNonNull(commandType)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" case \"bye\" -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" return Ui.showGoodbyeMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" case \"help\" -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" return Ui.showHelpMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" case \"list\" -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" return Ui.listTasks(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" case \"delete\" -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" Task taskDeleted \u003d tasks.deleteTask(Parser.getTaskNumber(input));","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" Storage.writeToDisk(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" return Ui.deleteTask(taskDeleted) + Ui.listTasks(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" case \"mark\" -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" Task taskMarked \u003d tasks.markTask(Parser.getTaskNumber(input));","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" Storage.writeToDisk(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" return Ui.markTask(taskMarked) + Ui.listTasks(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" case \"task\" -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" tasks.addTask(Parser.createNewTask(input));","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" Storage.writeToDisk(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" return Ui.listTasks(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" case \"find\" -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" return Ui.foundTasks(tasks.findTasks(Parser.findKeyword(input)));","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" case \"invalid\" -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" return Ui.invalidCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":" default -\u003e throw new DukeException(\"Invalid task, uncaught by duke.Parser.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" public String showWelcomeMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":" return Ui.showWelcomeMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":77,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"cbj252":74,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":" * An exception when Duke receives an invalid input.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" * Creates a DukeException.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" * @param errorMessage Error message shown to user.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":14}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":" * Represents an event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" protected String from;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" protected String to;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * Event constructor.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" * @param description Event name shown to user.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" * @param from Time the event starts. A string, no type checking done.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" * @param to Time the event ends. A string, no type checking done.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" * Gives string representation of the task, shown to users.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" * @return String representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"cbj252":31}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import static java.lang.Integer.parseInt;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" * Processes the string the user put in.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" static final char TODO_CHAR \u003d \u0027t\u0027;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" static final char DEADLINE_CHAR \u003d \u0027d\u0027;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" static final char EVENT_CHAR \u003d \u0027e\u0027;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" * Returns the type of task.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" * @param response the string the user put in.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" * @return type of task.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" public static String parseCommandType(String response) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(response, \"bye\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" return \"bye\";","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" } else if (Objects.equals(response, \"help\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" return \"help\";","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" } else if (Objects.equals(response, \"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" return \"list\";","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" return \"delete\";","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" return \"mark\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"todo\") || response.startsWith(\"deadline\") || response.startsWith(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" return \"task\";","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"find\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" return \"find\";","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" return \"invalid\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" * Returns the number associated with a delete or mark command.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" * number is reduced by 1 since user will write with 1-indexing while","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" * taskList is 0-indexed.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" * Not to be used for other types of commands.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" * @param response the string the user put in.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" * @return task number.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" public static int getTaskNumber(String response) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" String[] array \u003d response.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" assert array.length \u003e 1 : \"taskNumber used on array without split.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" String lastVal \u003d array[array.length - 1];","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" return parseInt(lastVal) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" * Creates and returns the task given in a command.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" * @param response The string the user put in.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" * @return The task.","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":" * @throws DukeException if incomplete task or not a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" public static Task createNewTask(String response) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" String[] array \u003d response.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":" if (response.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" String title \u003d parseInfo(array, TODO_CHAR)[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" return new Todo(title);","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" String[] receivedInfo \u003d parseInfo(array, DEADLINE_CHAR);","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" String title \u003d receivedInfo[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":" String deadline \u003d receivedInfo[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" if (!title.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":" return new Deadline(title, parseTime(deadline));","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":" throw new DukeException(\"☹ OOPS!!! The title cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"event\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"cbj252"},"content":" String[] receivedInfo \u003d parseInfo(array, EVENT_CHAR);","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"cbj252"},"content":" String title \u003d receivedInfo[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"cbj252"},"content":" String from \u003d receivedInfo[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"cbj252"},"content":" String to \u003d receivedInfo[2];","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"cbj252"},"content":" if (!title.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"cbj252"},"content":" return new Event(title, parseTime(from), parseTime(to));","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"cbj252"},"content":" throw new DukeException(\"☹ OOPS!!! The title cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"cbj252"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"cbj252"},"content":" @SuppressWarnings(\"checkstyle:MissingSwitchDefault\")","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"cbj252"},"content":" private static String[] parseInfo(String[] responseArray, char taskType) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"cbj252"},"content":" String mode \u003d \"title\";","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"cbj252"},"content":" StringBuilder title \u003d new StringBuilder();","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"cbj252"},"content":" StringBuilder deadline \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"cbj252"},"content":" StringBuilder from \u003d new StringBuilder();","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"cbj252"},"content":" StringBuilder to \u003d new StringBuilder();","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"cbj252"},"content":" for (String command : responseArray) {","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"todo\") \u0026\u0026 taskType \u003d\u003d TODO_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"deadline\") \u0026\u0026 taskType \u003d\u003d DEADLINE_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"event\") \u0026\u0026 taskType \u003d\u003d EVENT_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"/by\") \u0026\u0026 taskType \u003d\u003d DEADLINE_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"cbj252"},"content":" mode \u003d \"deadline\";","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"/from\") \u0026\u0026 taskType \u003d\u003d DEADLINE_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"cbj252"},"content":" mode \u003d \"from\";","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"/to\") \u0026\u0026 taskType \u003d\u003d DEADLINE_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"cbj252"},"content":" mode \u003d \"to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"cbj252"},"content":" switch (mode) {","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"cbj252"},"content":" case \"title\" -\u003e addToString(title, command);","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"cbj252"},"content":" case \"deadline\" -\u003e addToString(deadline, command);","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"cbj252"},"content":" case \"from\" -\u003e addToString(from, command);","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"cbj252"},"content":" case \"to\" -\u003e addToString(to, command);","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"cbj252"},"content":" default -\u003e throw new DukeException(\"Invalid mode.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"cbj252"},"content":" if (taskType \u003d\u003d TODO_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"cbj252"},"content":" return new String[] {title.toString()};","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"cbj252"},"content":" } else if (taskType \u003d\u003d DEADLINE_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"cbj252"},"content":" return new String[] {title.toString(), deadline.toString()};","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"cbj252"},"content":" return new String[] {title.toString(), deadline.toString(), to.toString()};","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"cbj252"},"content":" private static void addToString(StringBuilder original, String stringToAdd) {","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"cbj252"},"content":" if (!original.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"cbj252"},"content":" original.append(\" \");","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"cbj252"},"content":" original.append(stringToAdd);","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"cbj252"},"content":" private static String parseTime(String potentialTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"cbj252"},"content":" LocalDate fromDate \u003d LocalDate.parse(potentialTime);","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"cbj252"},"content":" return fromDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"cbj252"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"cbj252"},"content":" return potentialTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"cbj252"},"content":" * Used to parse the keyword used in the find command.","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"cbj252"},"content":" * @param response Command the user put in.","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"cbj252"},"content":" * @return The keyword user is searching for.","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"cbj252"},"content":" public static String findKeyword(String response) {","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"cbj252"},"content":" assert response.startsWith(\"find\") : \"findKeyword used on command that does not start with find\";","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"cbj252"},"content":" return response.substring(5);","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":162}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * Handles reading and writing of the data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" private final File file;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" * Constructor for storage. Makes the prerequisite folder and file if necessary.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" * @param filePath Path to the folder.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" File diskValues \u003d new File(filePath + \"/duke.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" this.file \u003d diskValues;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" File folder \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" if (!folder.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" if (!folder.mkdir()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" throw new IOException();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" if (!diskValues.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" if (!diskValues.createNewFile()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" throw new IOException();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" System.out.println(\"IOException in reading files: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" * Parses one line of the task and returns the associated task.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" * @param oneTask one line from the data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" * @return the task represented by the line from the data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" * @throws DukeException if the data file\u0027s input does not match writing.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" private Task parseOneLine(String oneTask) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" Task theTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" String taskName;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" char taskType \u003d oneTask.charAt(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" String[] splitTask \u003d oneTask.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" if (oneTask.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" taskName \u003d splitTask[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" taskName \u003d splitTask[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" if (taskType \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" theTask \u003d new Todo(taskName);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" } else if (taskType \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":" String deadline \u003d parseDeadlineTask(splitTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" theTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" } else if (taskType \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" String[] receivedInfo \u003d parseEventTask(splitTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":" String from \u003d receivedInfo[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" String to \u003d receivedInfo[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" theTask \u003d new Event(taskName, from, to);","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" throw new DukeException(\"Input file corrupted.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":" if (oneTask.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" theTask.completeTask();","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" return theTask;","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"cbj252"},"content":" private String parseDeadlineTask(String[] splitTask) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"cbj252"},"content":" StringBuilder deadline \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"cbj252"},"content":" String mode \u003d \"none\";","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"cbj252"},"content":" for (String command : splitTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"(by:\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"cbj252"},"content":" mode \u003d \"by\";","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(mode, \"by\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"cbj252"},"content":" if (!deadline.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"cbj252"},"content":" deadline.append(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"cbj252"},"content":" deadline.append(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"cbj252"},"content":" if (!deadline.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"cbj252"},"content":" deadline.deleteCharAt(deadline.length() - 1); // Remove last ).","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"cbj252"},"content":" return deadline.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"cbj252"},"content":" private String[] parseEventTask(String[] splitTask) {","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"cbj252"},"content":" StringBuilder from \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"cbj252"},"content":" StringBuilder to \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"cbj252"},"content":" String mode \u003d \"none\";","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"cbj252"},"content":" for (String command : splitTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"(from:\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"cbj252"},"content":" mode \u003d \"from\";","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"to:\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"cbj252"},"content":" mode \u003d \"to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(mode, \"from\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"cbj252"},"content":" if (!from.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"cbj252"},"content":" from.append(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"cbj252"},"content":" from.append(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"cbj252"},"content":" } else if (Objects.equals(mode, \"to\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"cbj252"},"content":" if (!to.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"cbj252"},"content":" to.append(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"cbj252"},"content":" to.append(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"cbj252"},"content":" if (!to.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"cbj252"},"content":" to.deleteCharAt(to.length() - 1); // Remove last ).","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"cbj252"},"content":" return new String[]{from.toString(), to.toString()};","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"cbj252"},"content":" * Prepares a list of tasks from a data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"cbj252"},"content":" * @return The tasks represented by the line from the data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"cbj252"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"cbj252"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"cbj252"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"cbj252"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"cbj252"},"content":" String oneTask \u003d s.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"cbj252"},"content":" tasks.add(parseOneLine(oneTask));","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"cbj252"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"cbj252"},"content":" System.out.println(\"FileNotFoundException in reading files: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"cbj252"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"cbj252"},"content":" * Writes tasks to the data files.","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"cbj252"},"content":" * @param tasks Tasks to write to the data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"cbj252"},"content":" public static void writeToDisk(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"cbj252"},"content":" FileWriter fw \u003d new FileWriter(\"./data/duke.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"cbj252"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"cbj252"},"content":" fw.write(task.toString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"cbj252"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"cbj252"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"cbj252"},"content":" System.out.println(\"IOException in writing to file: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":161}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":" * A task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" // Description of a task, shown to users.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" protected String description;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * Constructor for task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" * @param description Description of new task.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" * Sets task to complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" public void completeTask() {","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"cbj252":34}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" * Class that contains all the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" return this.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" * Deletes the task with index taskNumber.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" * @param taskNumber the index of task to remove.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" * @throws DukeException if given task does not exist.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" public Task deleteTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" if (taskNumber \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" Task toRemove \u003d tasks.get(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" tasks.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" assert !tasks.contains(toRemove) : \"DeleteTask did not delete task.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" return toRemove;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" throw new DukeException(\"☹ OOPS!!! The delete command needs to be followed by an existing task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" * Completes the task with index taskNumber.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" * @param taskNumber the index of task to complete.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" * @throws DukeException if given task does not exist.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" public Task markTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" // Assumption: You can mark already done tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" if (taskNumber \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" tasks.get(taskNumber).completeTask();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" assert tasks.get(taskNumber).isDone : \"markTask did not complete task.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" return tasks.get(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" throw new DukeException(\"☹ OOPS!!! The mark command needs to be followed by an existing task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" * Adds the task newTask.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" * @param newTask task to add.","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" public void addTask(Task newTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" this.tasks.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" * Returns the tasks that match the keyword in the find task command using regex.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" * @param keyword The keyword used in the find command","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" * @return The tasks that match the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" public ArrayList\u003cTask\u003e findTasks(String keyword) {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" Pattern pattern \u003d Pattern.compile(keyword, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" Matcher matcher \u003d pattern.matcher(task.description);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" foundTasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":" return foundTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":76}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":" * Represents a todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * Gives string representation of the task, shown to users.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" * @return String representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"cbj252":19}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":" * Class that deals with interactions with the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" * Shows a loading error if failing to initialise starting classes.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" public static void showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" System.out.println(\"Unable to initialise duke.Duke.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" * Shows welcome message.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" public static String showWelcomeMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" return (\"Hello I\u0027m iP\");","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" * Shows goodbye message.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" public static String showGoodbyeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" return (\"Bye!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" * Shows help message.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" public static String showHelpMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" String startingLine \u003d \"Hello, I\u0027m iP, please use one of the following commands:\";","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" String byeInfo \u003d \"bye: Prints a goodbye message.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" String helpInfo \u003d \"help: Prints the list of commands.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" String listInfo \u003d \"list: Prints the list of tasks you have.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" String deleteInfo \u003d \"delete \u003ctask_no\u003e: Delete the task given by the task number.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" String markInfo \u003d \"mark \u003ctask_no\u003e: Marks the task given by the task number as complete.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" String todoInfo \u003d \"todo \u003ctitle\u003e: Creates a todo task.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" String deadlineInfo \u003d \"deadline \u003ctitle\u003e /by \u003cdeadline\u003e: Creates a deadline task with a optional deadline\";","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" String eventInfo \u003d \"deadline \u003ctitle\u003e /from \u003ctime\u003e /to \u003ctime\u003e: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" + \"Creates a event task with a optional from time and to time.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" String findInfo \u003d \"find \u003ckeyword\u003e: Finds all tasks that match the keyword provided.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" String[] allInfo \u003d {startingLine, byeInfo, helpInfo, listInfo, deleteInfo, markInfo,","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" todoInfo, deadlineInfo, eventInfo, findInfo};","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" for (String infoLine : allInfo) {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" response.append(infoLine).append(\"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" return response.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" * Shows a list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" * @param tasks Tasks to show.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" public static String listTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":" response.append(\"List of tasks:\").append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" response.append(task.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":" response.append(\"You have \").append(tasks.size()).append(\" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" return response.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" * Returns the message to be sent to the user after a successful delete task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":" * @param taskDeleted The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":" public static String deleteTask(Task taskDeleted) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" return \"Noted. I\u0027ve removed this task:\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":" + taskDeleted.toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"cbj252"},"content":" * Returns the message to be sent to the user after a successful mark task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"cbj252"},"content":" * @param taskCompleted The task that was marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"cbj252"},"content":" public static String markTask(Task taskCompleted) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"cbj252"},"content":" return \"Nice! I\u0027ve marked this task as done:\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"cbj252"},"content":" + taskCompleted.toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"cbj252"},"content":" * Shows a list of given tasks to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"cbj252"},"content":" * @param tasks Tasks to be shown to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"cbj252"},"content":" public static String foundTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"cbj252"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"cbj252"},"content":" response.append(\"Here are the matching tasks in your list:\").append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"cbj252"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"cbj252"},"content":" response.append(task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"cbj252"},"content":" return response.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"cbj252"},"content":" public static String invalidCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"cbj252"},"content":" return \"Invalid command, please try again.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":102}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"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":19,"author":{"gitId":"cbj252"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":60}},{"path":"src/main/java/duke/ui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":11}},{"path":"src/main/java/duke/ui/Layout.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" * Provides the layout of the GUI, such as text box, screen and send button.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":"public class Layout extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" private Scene scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" private final Image user \u003d new Image(","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaUser.png\")));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" private final Image duke \u003d new Image(","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaDuke.png\")));","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" * Initialises the GUI.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"cbj252"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"cbj252"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"cbj252"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"cbj252"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"cbj252"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":85}},{"path":"src/main/java/duke/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":28}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" private duke.Duke mainProgram;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" * Initialises MainWindow.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" mainProgram \u003d new duke.Duke(\"data\");","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" DialogBox.getDukeDialog(mainProgram.showWelcomeMessage(), dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"cbj252"},"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":42,"author":{"gitId":"cbj252"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" String response \u003d mainProgram.run(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":54}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" minHeight\u003d\"-Infinity\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx\" xmlns:fx\u003d\"http://javafx.com/fxml\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"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":13,"author":{"gitId":"cbj252"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"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\" xmlns:fx\u003d\"http://javafx.com/fxml\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"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":"cbj252"},"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":"cbj252"},"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":"cbj252"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke; //same package as the class being tested","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" public void parseCommandType_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" Parser.parseCommandType(\"commandThatMakesNoSense\");","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" assertEquals(\"Invalid command\", e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" public void newTask_missingToFromEvent_nullReturned() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" Task test \u003d Parser.createNewTask(\"event 1 /from 2\");","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" assert test !\u003d null;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" assertEquals(\"[E][ ] 1 (from: 2 to: )\", test.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" assertEquals(\"☹ OOPS!!! The title, from and to sections cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":27}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" public void deleteTask_taskNumberNotAvailable_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" TaskList test \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" test.deleteTask(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" assertEquals(\"☹ OOPS!!! The delete command needs to be followed \"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" + \"by an existing task number.\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" public void markTask_taskNumberNotAvailable_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" TaskList test \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" test.markTask(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" assertEquals(\"☹ OOPS!!! The mark command needs to be followed by an existing task number.\", e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":29}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"todo borrow book","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"cbj252":6}},{"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":"cbj252"},"content":"if ! javac -cp ../src/main/java/Duke.java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2023-08-19"},{"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":{"cbj252":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"# botM","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"botM is a task manager app.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"Commands:","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"## See all commands: `help`","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"Prints the list of commands. ","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"Format: `help`","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"## Print goodbye message: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":"Prints a goodbye message. ","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":"Format: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"## See all tasks: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":"Prints the list of tasks you have. ","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"## Set task as complete: `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":"Marks the task given by the task number as complete. ","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":"Format: `mark (task number)` ","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":"Example: `mark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":"## Remove task from task list: `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":"Delete the task given by the task number. ","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":"Format: `delete (task number)` ","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":"Example: `delete 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":"## Add todo task: `todo`","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":"Creates a todo task with a required title. ","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":"Format: `todo \u003ctitle\u003e` ","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":"Example: `todo Homework`","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":"## deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":"Creates a deadline task with a required title and a optional deadline. ","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":"Format: `deadline \u003ctitle\u003e /by \u003cdeadline\u003e` ","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":"Example: `deadline Promotion /by Sunday` ","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":"## event","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":"Creates a event task with a required title and a optional from time and to time. ","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":"Format: `event \u003ctitle\u003e /from \u003cfromTime\u003e /to \u003ctoTime\u003e` ","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":"Example: `event Concert /from Sunday 2pm /to Sunday 4pm`","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":"## find","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":"Finds all tasks that match the keyword provided. ","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":"Format: `find \u003ckeyword\u003e` ","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":"Example: `find chocolate` finds all tasks that have \"chocolate\" somewhere in their titles.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"cbj252":47}},{"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":"cbj252"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-02"},{"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":"cbj252"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"cbj252"},"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":"cbj252"},"content":" mainClass.set(\"duke.ui.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":"cbj252"},"content":"javafx {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"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":"cbj252"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":25,"-":42}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"# botM User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"botM is a task manager app.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"## Features ","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"## See all commands: `help`","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"Prints the list of commands. ","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"Format: `help`","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"## Print goodbye message: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":"Prints a goodbye message. ","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":"Format: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"## See all tasks: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":"Prints the list of tasks you have. ","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"## Set task as complete: `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":"Marks the task given by the task number as complete. ","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":"Format: `mark (task number)` ","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":"Example: `mark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":"## Remove task from task list: `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":"Delete the task given by the task number. ","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":"Format: `delete (task number)` ","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":"Example: `delete 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":"## Add todo task: `todo`","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":"Creates a todo task with a required title. ","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":"Format: `todo \u003ctitle\u003e` ","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":"Example: `todo Homework`","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":"## deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":"Creates a deadline task with a required title and a optional deadline. ","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":"Format: `deadline \u003ctitle\u003e /by \u003cdeadline\u003e` ","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":"Example: `deadline Promotion /by Sunday` ","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":"## event","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":"Creates a event task with a required title and a optional from time and to time. ","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":"Format: `event \u003ctitle\u003e /from \u003cfromTime\u003e /to \u003ctoTime\u003e` ","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":"Example: `event Concert /from Sunday 2pm /to Sunday 4pm`","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":"## find","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":"Finds all tasks that match the keyword provided. ","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":"Format: `find \u003ckeyword\u003e` ","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":"Example: `find chocolate` finds all tasks that have \"chocolate\" somewhere in their titles.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"cbj252":44,"-":3}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":" * Represents a deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" protected String by;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" * Deadline constructor.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * @param description Deadline name shown to user.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" * @param by Deadline. A string, no type checking done.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" * Gives string representation of the task, shown to users.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" * @return String representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"cbj252":28}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":" * The main class that contains and controls the other components.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" * Constructor to create the other components.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" * @param filePath File to read from when beginning program.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" Ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" tasks \u003d new TaskList(new ArrayList\u003cTask\u003e());","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" * Main loop that constantly requests input from user when necessary.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" @SuppressWarnings(\"checkstyle:Indentation\")","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" public String run(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" String commandType \u003d Parser.parseCommandType(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" switch (Objects.requireNonNull(commandType)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" case \"bye\" -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" return Ui.showGoodbyeMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" case \"help\" -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" return Ui.showHelpMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" case \"list\" -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" return Ui.listTasks(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" case \"delete\" -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" Task taskDeleted \u003d tasks.deleteTask(Parser.getTaskNumber(input));","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" Storage.writeToDisk(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" return Ui.deleteTask(taskDeleted) + Ui.listTasks(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" case \"mark\" -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" Task taskMarked \u003d tasks.markTask(Parser.getTaskNumber(input));","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" Storage.writeToDisk(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" return Ui.markTask(taskMarked) + Ui.listTasks(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" case \"task\" -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" tasks.addTask(Parser.createNewTask(input));","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" Storage.writeToDisk(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" return Ui.listTasks(tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" case \"find\" -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" return Ui.foundTasks(tasks.findTasks(Parser.findKeyword(input)));","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" case \"invalid\" -\u003e {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" return Ui.invalidCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":" default -\u003e throw new DukeException(\"Invalid task, uncaught by duke.Parser.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" public String showWelcomeMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":" return Ui.showWelcomeMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":77,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"cbj252":74,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":" * An exception when Duke receives an invalid input.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" * Creates a DukeException.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" * @param errorMessage Error message shown to user.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":14}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":" * Represents an event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" protected String from;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" protected String to;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * Event constructor.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" * @param description Event name shown to user.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" * @param from Time the event starts. A string, no type checking done.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" * @param to Time the event ends. A string, no type checking done.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" * Gives string representation of the task, shown to users.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" * @return String representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"cbj252":31}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import static java.lang.Integer.parseInt;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" * Processes the string the user put in.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" static final char TODO_CHAR \u003d \u0027t\u0027;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" static final char DEADLINE_CHAR \u003d \u0027d\u0027;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" static final char EVENT_CHAR \u003d \u0027e\u0027;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" * Returns the type of task.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" * @param response the string the user put in.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" * @return type of task.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" public static String parseCommandType(String response) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(response, \"bye\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" return \"bye\";","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" } else if (Objects.equals(response, \"help\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" return \"help\";","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" } else if (Objects.equals(response, \"list\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" return \"list\";","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" return \"delete\";","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" return \"mark\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"todo\") || response.startsWith(\"deadline\") || response.startsWith(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" return \"task\";","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"find\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" return \"find\";","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" return \"invalid\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" * Returns the number associated with a delete or mark command.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" * number is reduced by 1 since user will write with 1-indexing while","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" * taskList is 0-indexed.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" * Not to be used for other types of commands.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" * @param response the string the user put in.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" * @return task number.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" public static int getTaskNumber(String response) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" String[] array \u003d response.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" assert array.length \u003e 1 : \"taskNumber used on array without split.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" String lastVal \u003d array[array.length - 1];","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" return parseInt(lastVal) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" * Creates and returns the task given in a command.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" * @param response The string the user put in.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" * @return The task.","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":" * @throws DukeException if incomplete task or not a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" public static Task createNewTask(String response) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" String[] array \u003d response.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":" if (response.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" String title \u003d parseInfo(array, TODO_CHAR)[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" return new Todo(title);","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" String[] receivedInfo \u003d parseInfo(array, DEADLINE_CHAR);","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" String title \u003d receivedInfo[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":" String deadline \u003d receivedInfo[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" if (!title.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":" return new Deadline(title, parseTime(deadline));","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":" throw new DukeException(\"☹ OOPS!!! The title cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"cbj252"},"content":" } else if (response.startsWith(\"event\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"cbj252"},"content":" String[] receivedInfo \u003d parseInfo(array, EVENT_CHAR);","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"cbj252"},"content":" String title \u003d receivedInfo[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"cbj252"},"content":" String from \u003d receivedInfo[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"cbj252"},"content":" String to \u003d receivedInfo[2];","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"cbj252"},"content":" if (!title.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"cbj252"},"content":" return new Event(title, parseTime(from), parseTime(to));","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"cbj252"},"content":" throw new DukeException(\"☹ OOPS!!! The title cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"cbj252"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"cbj252"},"content":" @SuppressWarnings(\"checkstyle:MissingSwitchDefault\")","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"cbj252"},"content":" private static String[] parseInfo(String[] responseArray, char taskType) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"cbj252"},"content":" String mode \u003d \"title\";","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"cbj252"},"content":" StringBuilder title \u003d new StringBuilder();","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"cbj252"},"content":" StringBuilder deadline \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"cbj252"},"content":" StringBuilder from \u003d new StringBuilder();","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"cbj252"},"content":" StringBuilder to \u003d new StringBuilder();","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"cbj252"},"content":" for (String command : responseArray) {","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"todo\") \u0026\u0026 taskType \u003d\u003d TODO_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"deadline\") \u0026\u0026 taskType \u003d\u003d DEADLINE_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"event\") \u0026\u0026 taskType \u003d\u003d EVENT_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"/by\") \u0026\u0026 taskType \u003d\u003d DEADLINE_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"cbj252"},"content":" mode \u003d \"deadline\";","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"/from\") \u0026\u0026 taskType \u003d\u003d EVENT_CHAR) {","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"cbj252"},"content":" mode \u003d \"from\";","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"/to\") \u0026\u0026 taskType \u003d\u003d EVENT_CHAR) {","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"cbj252"},"content":" mode \u003d \"to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"cbj252"},"content":" switch (mode) {","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"cbj252"},"content":" case \"title\" -\u003e addToString(title, command);","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"cbj252"},"content":" case \"deadline\" -\u003e addToString(deadline, command);","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"cbj252"},"content":" case \"from\" -\u003e addToString(from, command);","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"cbj252"},"content":" case \"to\" -\u003e addToString(to, command);","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"cbj252"},"content":" default -\u003e throw new DukeException(\"Invalid mode.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"cbj252"},"content":" if (taskType \u003d\u003d TODO_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"cbj252"},"content":" return new String[] {title.toString()};","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"cbj252"},"content":" } else if (taskType \u003d\u003d DEADLINE_CHAR) {","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"cbj252"},"content":" return new String[] {title.toString(), deadline.toString()};","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"cbj252"},"content":" return new String[] {title.toString(), from.toString(), to.toString()};","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"cbj252"},"content":" private static void addToString(StringBuilder original, String stringToAdd) {","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"cbj252"},"content":" if (!original.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"cbj252"},"content":" original.append(\" \");","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"cbj252"},"content":" original.append(stringToAdd);","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"cbj252"},"content":" private static String parseTime(String potentialTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"cbj252"},"content":" LocalDate fromDate \u003d LocalDate.parse(potentialTime);","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"cbj252"},"content":" return fromDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"cbj252"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"cbj252"},"content":" return potentialTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"cbj252"},"content":" * Used to parse the keyword used in the find command.","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"cbj252"},"content":" * @param response Command the user put in.","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"cbj252"},"content":" * @return The keyword user is searching for.","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"cbj252"},"content":" public static String findKeyword(String response) {","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"cbj252"},"content":" assert response.startsWith(\"find\") : \"findKeyword used on command that does not start with find\";","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"cbj252"},"content":" return response.substring(5);","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":162}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * Handles reading and writing of the data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" private final File file;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" * Constructor for storage. Makes the prerequisite folder and file if necessary.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" * @param filePath Path to the folder.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" File diskValues \u003d new File(filePath + \"/duke.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" this.file \u003d diskValues;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" File folder \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" if (!folder.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" if (!folder.mkdir()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" throw new IOException();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" if (!diskValues.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" if (!diskValues.createNewFile()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" throw new IOException();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" System.out.println(\"IOException in reading files: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" * Parses one line of the task and returns the associated task.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" * @param oneTask one line from the data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" * @return the task represented by the line from the data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" * @throws DukeException if the data file\u0027s input does not match writing.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" private Task parseOneLine(String oneTask) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" Task theTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" String taskName;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" char taskType \u003d oneTask.charAt(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" String[] splitTask \u003d oneTask.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" if (oneTask.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" taskName \u003d splitTask[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" taskName \u003d splitTask[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" if (taskType \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" theTask \u003d new Todo(taskName);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" } else if (taskType \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":" String deadline \u003d parseDeadlineTask(splitTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" theTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" } else if (taskType \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" String[] receivedInfo \u003d parseEventTask(splitTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":" String from \u003d receivedInfo[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" String to \u003d receivedInfo[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" theTask \u003d new Event(taskName, from, to);","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" throw new DukeException(\"Input file corrupted.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":" if (oneTask.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" theTask.completeTask();","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" return theTask;","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"cbj252"},"content":" private String parseDeadlineTask(String[] splitTask) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"cbj252"},"content":" StringBuilder deadline \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"cbj252"},"content":" String mode \u003d \"none\";","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"cbj252"},"content":" for (String command : splitTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"(by:\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"cbj252"},"content":" mode \u003d \"by\";","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(mode, \"by\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"cbj252"},"content":" if (!deadline.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"cbj252"},"content":" deadline.append(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"cbj252"},"content":" deadline.append(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"cbj252"},"content":" if (!deadline.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"cbj252"},"content":" deadline.deleteCharAt(deadline.length() - 1); // Remove last ).","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"cbj252"},"content":" return deadline.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"cbj252"},"content":" private String[] parseEventTask(String[] splitTask) {","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"cbj252"},"content":" StringBuilder from \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"cbj252"},"content":" StringBuilder to \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"cbj252"},"content":" String mode \u003d \"none\";","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"cbj252"},"content":" for (String command : splitTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"(from:\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"cbj252"},"content":" mode \u003d \"from\";","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(command, \"to:\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"cbj252"},"content":" mode \u003d \"to\";","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"cbj252"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"cbj252"},"content":" if (Objects.equals(mode, \"from\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"cbj252"},"content":" if (!from.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"cbj252"},"content":" from.append(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"cbj252"},"content":" from.append(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"cbj252"},"content":" } else if (Objects.equals(mode, \"to\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"cbj252"},"content":" if (!to.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"cbj252"},"content":" to.append(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"cbj252"},"content":" to.append(command);","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"cbj252"},"content":" if (!to.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"cbj252"},"content":" to.deleteCharAt(to.length() - 1); // Remove last ).","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"cbj252"},"content":" return new String[]{from.toString(), to.toString()};","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"cbj252"},"content":" * Prepares a list of tasks from a data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"cbj252"},"content":" * @return The tasks represented by the line from the data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"cbj252"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"cbj252"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"cbj252"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"cbj252"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"cbj252"},"content":" String oneTask \u003d s.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"cbj252"},"content":" tasks.add(parseOneLine(oneTask));","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"cbj252"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"cbj252"},"content":" System.out.println(\"FileNotFoundException in reading files: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"cbj252"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"cbj252"},"content":" * Writes tasks to the data files.","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"cbj252"},"content":" * @param tasks Tasks to write to the data file.","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"cbj252"},"content":" public static void writeToDisk(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"cbj252"},"content":" FileWriter fw \u003d new FileWriter(\"./data/duke.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"cbj252"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"cbj252"},"content":" fw.write(task.toString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"cbj252"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"cbj252"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"cbj252"},"content":" System.out.println(\"IOException in writing to file: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":161}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":" * A task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" // Description of a task, shown to users.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" protected String description;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * Constructor for task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" * @param description Description of new task.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" * Sets task to complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" public void completeTask() {","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"cbj252":34}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" * Class that contains all the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" return this.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" * Deletes the task with index taskNumber.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" * @param taskNumber the index of task to remove.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" * @throws DukeException if given task does not exist.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" public Task deleteTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" if (taskNumber \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" Task toRemove \u003d tasks.get(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" tasks.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" assert !tasks.contains(toRemove) : \"DeleteTask did not delete task.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" return toRemove;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" throw new DukeException(\"☹ OOPS!!! The delete command needs to be followed by an existing task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" * Completes the task with index taskNumber.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" * @param taskNumber the index of task to complete.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" * @throws DukeException if given task does not exist.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" public Task markTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" // Assumption: You can mark already done tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" if (taskNumber \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" tasks.get(taskNumber).completeTask();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" assert tasks.get(taskNumber).isDone : \"markTask did not complete task.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" return tasks.get(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" throw new DukeException(\"☹ OOPS!!! The mark command needs to be followed by an existing task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" * Adds the task newTask.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" * @param newTask task to add.","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" public void addTask(Task newTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" this.tasks.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" * Returns the tasks that match the keyword in the find task command using regex.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" * @param keyword The keyword used in the find command","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" * @return The tasks that match the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" public ArrayList\u003cTask\u003e findTasks(String keyword) {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" Pattern pattern \u003d Pattern.compile(keyword, Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":" ArrayList\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" Matcher matcher \u003d pattern.matcher(task.description);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" foundTasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":" return foundTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":76}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":" * Represents a todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * Gives string representation of the task, shown to users.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" * @return String representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"cbj252":19}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":" * Class that deals with interactions with the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" * Shows a loading error if failing to initialise starting classes.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" public static void showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" System.out.println(\"Unable to initialise duke.Duke.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" * Shows welcome message.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" public static String showWelcomeMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" return (\"Hello I\u0027m botM, use \u0027help\u0027 to learn about the commands available\");","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" * Shows goodbye message.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" public static String showGoodbyeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" return (\"Bye!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" * Shows help message.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" public static String showHelpMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" String startingLine \u003d \"Hello, I\u0027m botM, please use one of the following commands:\";","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" String byeInfo \u003d \"bye: Prints a goodbye message.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" String helpInfo \u003d \"help: Prints the list of commands.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" String listInfo \u003d \"list: Prints the list of tasks you have.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" String deleteInfo \u003d \"delete \u003ctask_no\u003e: Delete the task given by the task number.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" String markInfo \u003d \"mark \u003ctask_no\u003e: Marks the task given by the task number as complete.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" String todoInfo \u003d \"todo \u003ctitle\u003e: Creates a todo task.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" String deadlineInfo \u003d \"deadline \u003ctitle\u003e /by \u003cdeadline\u003e: Creates a deadline task with a optional deadline\";","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" String eventInfo \u003d \"deadline \u003ctitle\u003e /from \u003ctime\u003e /to \u003ctime\u003e: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" + \"Creates a event task with a optional from time and to time.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" String findInfo \u003d \"find \u003ckeyword\u003e: Finds all tasks that match the keyword provided.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" String[] allInfo \u003d {startingLine, byeInfo, helpInfo, listInfo, deleteInfo, markInfo,","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" todoInfo, deadlineInfo, eventInfo, findInfo};","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" for (String infoLine : allInfo) {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" response.append(infoLine).append(\"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" return response.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" * Shows a list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" * @param tasks Tasks to show.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" public static String listTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":" response.append(\"List of tasks:\").append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" response.append(task.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":" response.append(\"You have \").append(tasks.size()).append(\" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" return response.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" * Returns the message to be sent to the user after a successful delete task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":" * @param taskDeleted The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":" public static String deleteTask(Task taskDeleted) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" return \"Noted. I\u0027ve removed this task:\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":" + taskDeleted.toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"cbj252"},"content":" * Returns the message to be sent to the user after a successful mark task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"cbj252"},"content":" * @param taskCompleted The task that was marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"cbj252"},"content":" public static String markTask(Task taskCompleted) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"cbj252"},"content":" return \"Nice! I\u0027ve marked this task as done:\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"cbj252"},"content":" + taskCompleted.toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"cbj252"},"content":" * Shows a list of given tasks to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"cbj252"},"content":" * @param tasks Tasks to be shown to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"cbj252"},"content":" public static String foundTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"cbj252"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"cbj252"},"content":" response.append(\"Here are the matching tasks in your list:\").append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"cbj252"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"cbj252"},"content":" response.append(task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"cbj252"},"content":" return response.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"cbj252"},"content":" public static String invalidCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"cbj252"},"content":" return \"Invalid command, please try again.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":102}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"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":19,"author":{"gitId":"cbj252"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":60}},{"path":"src/main/java/duke/ui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":11}},{"path":"src/main/java/duke/ui/Layout.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" * Provides the layout of the GUI, such as text box, screen and send button.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":"public class Layout extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" private Scene scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" private final Image user \u003d new Image(","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaUser.png\")));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" private final Image duke \u003d new Image(","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaDuke.png\")));","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" * Initialises the GUI.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"cbj252"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"cbj252"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"cbj252"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"cbj252"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"cbj252"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"cbj252"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"cbj252"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"cbj252"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"cbj252"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"cbj252"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"cbj252"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"cbj252"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"cbj252"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"cbj252"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"cbj252"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"cbj252"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"cbj252"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"cbj252"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"cbj252"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":85}},{"path":"src/main/java/duke/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":28}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" private duke.Duke mainProgram;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" * Initialises MainWindow.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" mainProgram \u003d new duke.Duke(\"data\");","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":" DialogBox.getDukeDialog(mainProgram.showWelcomeMessage(), dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"cbj252"},"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":42,"author":{"gitId":"cbj252"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":" String response \u003d mainProgram.run(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"cbj252"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"cbj252"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"cbj252"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"cbj252"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"cbj252"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":54}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" minHeight\u003d\"-Infinity\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx\" xmlns:fx\u003d\"http://javafx.com/fxml\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"cbj252"},"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":13,"author":{"gitId":"cbj252"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"cbj252"},"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\" xmlns:fx\u003d\"http://javafx.com/fxml\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"cbj252"},"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":"cbj252"},"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":"cbj252"},"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":"cbj252"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"cbj252":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke; //same package as the class being tested","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" public void parseCommandType_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" Parser.parseCommandType(\"commandThatMakesNoSense\");","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" assertEquals(\"Invalid command\", e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" public void parseCommandType_listCommandWithInvalidBack_exceptionThrown() {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" Parser.parseCommandType(\"list additionalInvalidWord\");","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" assertEquals(\"Invalid command\", e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" public void createNewTask_missingToFromEvent_worksNormally() {","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":" Task test \u003d Parser.createNewTask(\"event 1 /from 2\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"cbj252"},"content":" assert test !\u003d null;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"cbj252"},"content":" assertEquals(\"[E][ ] 1 /from 2 (from: to: )\", test.toString());","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"cbj252"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"cbj252"},"content":" assertEquals(\"☹ OOPS!!! The title, from and to sections cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"cbj252"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"cbj252"},"content":" public void createNewTask_invalidTask_returnsNull() {","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"cbj252"},"content":" Task test \u003d Parser.createNewTask(\"help\");","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"cbj252"},"content":" assertNull(test);","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"cbj252"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"cbj252"},"content":" assertEquals(\"Unexpected exception.\", e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":47}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"cbj252"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"cbj252"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"cbj252"},"content":" public void deleteTask_taskNumberNotAvailable_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"cbj252"},"content":" TaskList test \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"cbj252"},"content":" test.deleteTask(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"cbj252"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"cbj252"},"content":" assertEquals(\"☹ OOPS!!! The delete command needs to be followed \"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"cbj252"},"content":" + \"by an existing task number.\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"cbj252"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"cbj252"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"cbj252"},"content":" public void markTask_taskNumberNotAvailable_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"cbj252"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"cbj252"},"content":" TaskList test \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"cbj252"},"content":" test.markTask(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"cbj252"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"cbj252"},"content":" assertEquals(\"☹ OOPS!!! The mark command needs to be followed by an existing task number.\", e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"cbj252"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"cbj252"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"cbj252":29}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"cbj252"},"content":"todo borrow book","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"cbj252"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"cbj252"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"cbj252"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"cbj252"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"cbj252"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"cbj252":6}},{"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":"cbj252"},"content":"if ! javac -cp ../src/main/java/Duke.java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2023-08-19"},{"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":{"cbj252":1,"-":37}}] diff --git a/cbj252_ip_master/commits.json b/cbj252_ip_master/commits.json index ebfacc67..1bf4c1a3 100644 --- a/cbj252_ip_master/commits.json +++ b/cbj252_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"cbj252":[{"date":"2023-08-19","commitResults":[{"hash":"0a517c7c422ce4e910e093f751b4acad9568f30a","isMergeCommit":false,"messageTitle":"Duke Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"c924cca609e7caec326281b07c940c3b1d12bae8","isMergeCommit":false,"messageTitle":"Duke Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"c8f508e25b315a4f57cd148d4977b58603d363a7","isMergeCommit":false,"messageTitle":"Duke Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"cf822b3c89a52637d7f3b319ff768f67065a3e2b","isMergeCommit":false,"messageTitle":"Duke Level-3","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":4}}},{"hash":"9a9c15c25e2f227f59302ed868d020c0fe4dae9e","isMergeCommit":false,"messageTitle":"Duke Level-4","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":9}}},{"hash":"0e03419665374b0f48575f0a74716bcb430e7118","isMergeCommit":false,"messageTitle":"Duke A-Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"74138f8b95c7ea77f6fa4ea50a3c5051a1448b93","isMergeCommit":false,"messageTitle":"Duke A-Exceptions","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":96}}},{"hash":"4530141e88b667347241facf9bc26c428e88639c","isMergeCommit":false,"messageTitle":"Duke Level-6","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":19}}}]},{"date":"2023-08-26","commitResults":[{"hash":"1197180d39283c3529f17aeb7a6e64b1b5f8d835","isMergeCommit":false,"messageTitle":"Duke Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":5}}},{"hash":"5589b4cd0d2ca117d1221909018d14e02489958a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"ffda4db451c388893f8f92622b3181e48fc4d51e","isMergeCommit":false,"messageTitle":"Made changes to do Duke-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"81384fb7ab0ee0903003e28b10640029e06154b4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ca622146b8949cf3dc79dc6edb0d60565aecfb96","isMergeCommit":false,"messageTitle":"Made new classes to solve Duke A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":377,"deletions":258}}},{"hash":"0a36382d60dd575bce6346d0e9bf8a907ae838f3","isMergeCommit":false,"messageTitle":"Put all files into duke package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":7},"md":{"insertions":2,"deletions":2}}},{"hash":"4700a4f1dbf686ec627d82cc60afb8556d338ed5","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0733a8f829def8a837083d89d89d66b6a381b385","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"c8eb28d5e22731a1dd1c1cf7223feb15fa344a6a","isMergeCommit":false,"messageTitle":"Add Junit Tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":11}}},{"hash":"8c0eb0b115f16fb25f682b043231c194bc3da7a3","isMergeCommit":false,"messageTitle":"Add Javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":1}}},{"hash":"48c140d1e1010371f43c014fb14a1cb2d1f9f8c9","isMergeCommit":false,"messageTitle":"Add changes to do A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":23}}},{"hash":"6e973716b1502aacc582b933ad2471171854d1f2","isMergeCommit":false,"messageTitle":"Add find command via regex checking","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":23}}},{"hash":"e091b678e764af9477bbc0b5137758003c0c74a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cfef9ca30d6abdc3e96d4970c68c18b617c42ae2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"c6e9c8359bc40ec3fcd778c9866d48557be19ddd","isMergeCommit":false,"messageTitle":"Remove need for deadline and event tasks to have a deadline, from or to requirement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}}]},{"date":"2023-09-02","commitResults":[{"hash":"5eedb93bcbb4dfb9e646ab9677158efd46c84981","isMergeCommit":false,"messageTitle":"Make style changes after setting up automatic checkstyle","messageBody":"","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":73,"deletions":17}}},{"hash":"ed04c96be9a26e854ee63b907fddac178176ce46","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Checkstyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2f2ea95ad11eb4ae7d8cf7ce7df07974641351e9","isMergeCommit":false,"messageTitle":"Create Java GUI without integration with old code","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":243,"deletions":0}}},{"hash":"65ca62d00d89d05a980063fc8ad570c88bd5ea3b","isMergeCommit":false,"messageTitle":"Integrate old code with GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"fxml":{"insertions":3,"deletions":2},"java":{"insertions":82,"deletions":82}}},{"hash":"f09921a2df032d1a791d33b6f00c98ca82d21882","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"681d47946a1e0f72cbec4bece8a1ccd8587a4aea","isMergeCommit":false,"messageTitle":"Fix bye and welcome command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}}]},{"date":"2023-09-09","commitResults":[{"hash":"8397204d91207460d69e9fa4c5bb4652832e0767","isMergeCommit":false,"messageTitle":"Complete A-Assertions by adding assertions throughout the code","messageBody":"Assertions were created immediately after the mark and delete\ncommands to ensure they were indeed marked as completed or\ndeleted respectively.\n\nAs for the find command, the current implementation relies on the\ncommand being exactly four letters \"find\", followed by the keyword.\nAn assertion is placed in case this assumption becomes false later.\n","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":12,"deletions":3}}},{"hash":"c808293efaec98f230f520a31cb1759e17d5bf10","isMergeCommit":false,"messageTitle":"Refactor parseOneLine \u0026 taskCreation","messageBody":"The two functions were previously responsible for parsing all\nthree types of tasks, leading to very long functions and arrowhead\nstyle-coding. Helper functions have been added to mitigate this.\n\nSome functions are also renamed, like newTask to createNewTask\nto better fit the verb requirements.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":145},"md":{"insertions":4,"deletions":4}}},{"hash":"c4d6e605dee0566434868ac70df48bcdf01c5943","isMergeCommit":true,"messageTitle":"Merge pull request #1 from cbj252/branch-A-CodeQuality","messageBody":"Refactor parseOneLine \u0026 taskCreation","fileTypesAndContributionMap":{}},{"hash":"99620b279d9f7fe8b66bb069e73eeb9e8d513019","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9db8f92582c0e75e3aec2b38c240b79008f12938","isMergeCommit":true,"messageTitle":"Merge pull request #2 from cbj252/branch-A-Assertions","messageBody":"Complete A-Assertions by adding assertions throughout the code","fileTypesAndContributionMap":{}},{"hash":"258f02c6f9609d01b9c786444c571fbfbd42aa1a","isMergeCommit":false,"messageTitle":"Add extension of help command","messageBody":"","tags":["C-Help","BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"cbj252":{"java":995,"md":3,"fxml":36,"sh":1,"bat":0,"gradle":25,"txt":6}},"authorContributionVariance":{"cbj252":60797.734},"authorDisplayNameMap":{"cbj252":"CS2103T-F12-3 CHUA..JIAN"}} +{"authorDailyContributionsMap":{"cbj252":[{"date":"2023-08-19","commitResults":[{"hash":"0a517c7c422ce4e910e093f751b4acad9568f30a","isMergeCommit":false,"messageTitle":"Duke Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"c924cca609e7caec326281b07c940c3b1d12bae8","isMergeCommit":false,"messageTitle":"Duke Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"c8f508e25b315a4f57cd148d4977b58603d363a7","isMergeCommit":false,"messageTitle":"Duke Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"cf822b3c89a52637d7f3b319ff768f67065a3e2b","isMergeCommit":false,"messageTitle":"Duke Level-3","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":4}}},{"hash":"9a9c15c25e2f227f59302ed868d020c0fe4dae9e","isMergeCommit":false,"messageTitle":"Duke Level-4","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":9}}},{"hash":"0e03419665374b0f48575f0a74716bcb430e7118","isMergeCommit":false,"messageTitle":"Duke A-Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"74138f8b95c7ea77f6fa4ea50a3c5051a1448b93","isMergeCommit":false,"messageTitle":"Duke A-Exceptions","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":96}}},{"hash":"4530141e88b667347241facf9bc26c428e88639c","isMergeCommit":false,"messageTitle":"Duke Level-6","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":19}}}]},{"date":"2023-08-26","commitResults":[{"hash":"1197180d39283c3529f17aeb7a6e64b1b5f8d835","isMergeCommit":false,"messageTitle":"Duke Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":5}}},{"hash":"5589b4cd0d2ca117d1221909018d14e02489958a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"ffda4db451c388893f8f92622b3181e48fc4d51e","isMergeCommit":false,"messageTitle":"Made changes to do Duke-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"81384fb7ab0ee0903003e28b10640029e06154b4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ca622146b8949cf3dc79dc6edb0d60565aecfb96","isMergeCommit":false,"messageTitle":"Made new classes to solve Duke A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":377,"deletions":258}}},{"hash":"0a36382d60dd575bce6346d0e9bf8a907ae838f3","isMergeCommit":false,"messageTitle":"Put all files into duke package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":7},"md":{"insertions":2,"deletions":2}}},{"hash":"4700a4f1dbf686ec627d82cc60afb8556d338ed5","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0733a8f829def8a837083d89d89d66b6a381b385","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"c8eb28d5e22731a1dd1c1cf7223feb15fa344a6a","isMergeCommit":false,"messageTitle":"Add Junit Tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":11}}},{"hash":"8c0eb0b115f16fb25f682b043231c194bc3da7a3","isMergeCommit":false,"messageTitle":"Add Javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":1}}},{"hash":"48c140d1e1010371f43c014fb14a1cb2d1f9f8c9","isMergeCommit":false,"messageTitle":"Add changes to do A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":23}}},{"hash":"6e973716b1502aacc582b933ad2471171854d1f2","isMergeCommit":false,"messageTitle":"Add find command via regex checking","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":23}}},{"hash":"e091b678e764af9477bbc0b5137758003c0c74a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cfef9ca30d6abdc3e96d4970c68c18b617c42ae2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"c6e9c8359bc40ec3fcd778c9866d48557be19ddd","isMergeCommit":false,"messageTitle":"Remove need for deadline and event tasks to have a deadline, from or to requirement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}}]},{"date":"2023-09-02","commitResults":[{"hash":"5eedb93bcbb4dfb9e646ab9677158efd46c84981","isMergeCommit":false,"messageTitle":"Make style changes after setting up automatic checkstyle","messageBody":"","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":73,"deletions":17}}},{"hash":"ed04c96be9a26e854ee63b907fddac178176ce46","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Checkstyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2f2ea95ad11eb4ae7d8cf7ce7df07974641351e9","isMergeCommit":false,"messageTitle":"Create Java GUI without integration with old code","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":243,"deletions":0}}},{"hash":"65ca62d00d89d05a980063fc8ad570c88bd5ea3b","isMergeCommit":false,"messageTitle":"Integrate old code with GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"fxml":{"insertions":3,"deletions":2},"java":{"insertions":82,"deletions":82}}},{"hash":"f09921a2df032d1a791d33b6f00c98ca82d21882","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"681d47946a1e0f72cbec4bece8a1ccd8587a4aea","isMergeCommit":false,"messageTitle":"Fix bye and welcome command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}}]},{"date":"2023-09-09","commitResults":[{"hash":"8397204d91207460d69e9fa4c5bb4652832e0767","isMergeCommit":false,"messageTitle":"Complete A-Assertions by adding assertions throughout the code","messageBody":"Assertions were created immediately after the mark and delete\ncommands to ensure they were indeed marked as completed or\ndeleted respectively.\n\nAs for the find command, the current implementation relies on the\ncommand being exactly four letters \"find\", followed by the keyword.\nAn assertion is placed in case this assumption becomes false later.\n","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":12,"deletions":3}}},{"hash":"c808293efaec98f230f520a31cb1759e17d5bf10","isMergeCommit":false,"messageTitle":"Refactor parseOneLine \u0026 taskCreation","messageBody":"The two functions were previously responsible for parsing all\nthree types of tasks, leading to very long functions and arrowhead\nstyle-coding. Helper functions have been added to mitigate this.\n\nSome functions are also renamed, like newTask to createNewTask\nto better fit the verb requirements.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":145},"md":{"insertions":4,"deletions":4}}},{"hash":"c4d6e605dee0566434868ac70df48bcdf01c5943","isMergeCommit":true,"messageTitle":"Merge pull request #1 from cbj252/branch-A-CodeQuality","messageBody":"Refactor parseOneLine \u0026 taskCreation","fileTypesAndContributionMap":{}},{"hash":"99620b279d9f7fe8b66bb069e73eeb9e8d513019","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9db8f92582c0e75e3aec2b38c240b79008f12938","isMergeCommit":true,"messageTitle":"Merge pull request #2 from cbj252/branch-A-Assertions","messageBody":"Complete A-Assertions by adding assertions throughout the code","fileTypesAndContributionMap":{}},{"hash":"258f02c6f9609d01b9c786444c571fbfbd42aa1a","isMergeCommit":false,"messageTitle":"Add extension of help command","messageBody":"","tags":["C-Help","BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":1}}}]},{"date":"2023-09-16","commitResults":[{"hash":"29c4ec3eb087972a944383111942d4b823f754ba","isMergeCommit":false,"messageTitle":"Change starting command to mention help command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"72b9842f1372e6a978de79fd2eb421bbee7134f3","isMergeCommit":false,"messageTitle":"Update tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}},{"hash":"c93fade54b8167774d7db74c54e385e7641fe4ee","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"f41e7829a62c48a03be57dad7c68114c516ee36c","isMergeCommit":false,"messageTitle":"Rename chatbot from iP to botM","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"25116ee157f61a3b79f1b3d919f8968983dadb26","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":51,"deletions":24}}},{"hash":"57a24429c7332233dfff8027af3676eae6f2fd1a","isMergeCommit":false,"messageTitle":"Fix README.md unwanted text","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":5}}},{"hash":"b1883ab69925b03bbcad80117a1efbff436aa7cc","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":44,"deletions":26}}}]}]},"authorFileTypeContributionMap":{"cbj252":{"java":1015,"md":91,"fxml":36,"sh":1,"bat":0,"gradle":25,"txt":6}},"authorContributionVariance":{"cbj252":48847.812},"authorDisplayNameMap":{"cbj252":"CS2103T-F12-3 CHUA..JIAN"}} diff --git a/chiayunrong_ip_master/authorship.json b/chiayunrong_ip_master/authorship.json index 51b9a588..df368347 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":"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":"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}}] diff --git a/chiayunrong_ip_master/commits.json b/chiayunrong_ip_master/commits.json index 44ba3e5c..f4573d1c 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":{}}]}]},"authorFileTypeContributionMap":{"chiayunrong":{"java":1442,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":9,"txt":4}},"authorContributionVariance":{"chiayunrong":238327.58},"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","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"}} diff --git a/craigtonlian_ip_master/authorship.json b/craigtonlian_ip_master/authorship.json index f435f364..eeb811d1 100644 --- a/craigtonlian_ip_master/authorship.json +++ b/craigtonlian_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":"craigtonlian"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"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":"craigtonlian"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"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":"craigtonlian"},"content":" mainClass.set(\"grumpygordon.GrumpyGordon\")","lastModifiedDate":"2023-08-30"},{"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":"craigtonlian"},"content":" archiveBaseName \u003d \"grumpygordon\"","lastModifiedDate":"2023-08-30"},{"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":{"craigtonlian":22,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"T | 0 | a","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"T | 0 | b","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"T | 0 | m","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"T | 0 | r","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"T | 0 | x","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"T | 0 | aa","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"T | 0 | aaa","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"T | 0 | Aaa","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"T | 0 | aAa","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"craigtonlian":9}},{"path":"src/main/java/grumpygordon/GrumpyGordon.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonInitialisationException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonInvalidCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.parser.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * GrumpyGordon Chatbot","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"public class GrumpyGordon {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * Storage for GrumpyGordon.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" * List of tasks for GrumpyGordon.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * Constructor for GrumpyGordon.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonException If GrumpyGordon fails to initialise","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" public GrumpyGordon() throws GrumpyGordonException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" this.tasks \u003d storage.loadTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonInitialisationException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" * Gets GrumpyGordon\u0027s response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" * @param userInput User input","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" * @return GrumpyGordon\u0027s response","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" Command command \u003d Parser.parseCommand(userInput, this.tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" return command.execute(tasks, storage);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonInvalidCommandException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" * Main method for GrumpyGordon.","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" * @param args Command line arguments","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"craigtonlian":60}},{"path":"src/main/java/grumpygordon/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.controllers.MainWindow;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * Grumpy Gordon instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" private GrumpyGordon grumpyGordon;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" * Starts the GUI.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param stage Stage to start GUI on.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" grumpyGordon \u003d new GrumpyGordon();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setGrumpyGordon(grumpyGordon);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"craigtonlian":43}},{"path":"src/main/java/grumpygordon/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to exit the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" private static final String OUTRO \u003d \"Bye. Hope to never see you again.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * Executes the bye command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage of the program","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * @return The outro string","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" return OUTRO;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":22}},{"path":"src/main/java/grumpygordon/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a generic command for GrumpyGordon.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * @param taskList The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" public abstract String execute(TaskList taskList, Storage storage);","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" * Returns true if the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" * @return True if the command is an exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" return this instanceof ByeCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":25}},{"path":"src/main/java/grumpygordon/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to add a deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * Description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" * Deadline of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" private final LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" * Constructor of DeadlineCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of the deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param by Deadline of the deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" public DeadlineCommand(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" tasks.addTask(new Deadline(this.description, this.by, false));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" return \"Deadline task added to list\\n\" + tasks.getTask(tasks.size() - 1).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":45}},{"path":"src/main/java/grumpygordon/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to delete a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Constructor of DeleteCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of the task to be deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" String deletedTask \u003d tasks.getTask(this.index).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" tasks.deleteTask(this.index);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" return \"Task deleted from list!\\n\" + deletedTask;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":36}},{"path":"src/main/java/grumpygordon/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to add an event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" * Description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" * Start time of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * End time of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" * Constructor of EventCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of the event task","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" * @param from Start time of the event task","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" * @param to End time of the event task","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" public EventCommand(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" tasks.addTask(new Event(this.description, this.from, this.to, false));","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" return \"Event task added to list\\n\" + tasks.getTask(tasks.size() - 1).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":53}},{"path":"src/main/java/grumpygordon/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to find tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Pattern to be searched.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" private final String pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Constructor of FindCommand.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * @param pattern Pattern to be searched","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" public FindCommand(String pattern) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" this.pattern \u003d pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" return \"There are no matching tasks in your list!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" if (tasks.getTask(i).toString().contains(pattern)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" sb.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" sb.append((i + 1) + \". \" + tasks.getTask(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" count++;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" return \"There are no matching tasks in your list!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" return sb.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"craigtonlian":50}},{"path":"src/main/java/grumpygordon/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":21}},{"path":"src/main/java/grumpygordon/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Constructor of MarkCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of the task to be marked as done","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" tasks.markTaskAsDone(this.index);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" return \"Marked that task as done!\\n\" + tasks.getTask(this.index).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":35}},{"path":"src/main/java/grumpygordon/commands/SortCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to sort tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class SortCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" return \"There are no tasks in your list to sort!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" tasks.sortTasks();","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" return \"Your tasks have been sorted alphabetically!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"craigtonlian":24}},{"path":"src/main/java/grumpygordon/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to add a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * Constructor of TodoCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of the todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" tasks.addTask(new Todo(this.description, false));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" return \"Todo task added to list!\\n\" + tasks.getTask(tasks.size() - 1).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":36}},{"path":"src/main/java/grumpygordon/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to mark a task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Index of the task to be marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * Constructor of UnmarkCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of the task to be marked as undone","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" tasks.markTaskAsUndone(this.index);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" return \"Marked that task as undone!\\n\" + tasks.getTask(this.index).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":36}},{"path":"src/main/java/grumpygordon/controllers/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.controllers;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.Background;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.BackgroundFill;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.CornerRadii;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"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":27,"author":{"gitId":"craigtonlian"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" Circle clip \u003d new Circle(50, 50, 50);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" displayPicture.setClip(clip);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" db.setBackground(new Background(new BackgroundFill(Color.YELLOW,","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" CornerRadii.EMPTY,","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":" Insets.EMPTY)));","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" public static DialogBox getGordonDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":" db.setBackground(new Background(new BackgroundFill(Color.HOTPINK,","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":" CornerRadii.EMPTY,","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":" Insets.EMPTY)));","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"craigtonlian":81}},{"path":"src/main/java/grumpygordon/controllers/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.controllers;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.GrumpyGordon;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Introductory message from Grumpy Gordon.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" private static final String INTRO \u003d \"Oi! I\u0027m Grumpy Gordon. Why are you bothering me?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" * Scroll pane for dialog container.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * Container for dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" * User input.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" * Grumpy Gordon instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" private GrumpyGordon grumpyGordon;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/userImage.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" private Image gordonImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/gordonImage.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" * Initialises the main window.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" dialogContainer.getChildren().add(DialogBox.getGordonDialog(INTRO, gordonImage));","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" * Sets Grumpy Gordon instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" * @param gg Grumpy Gordon instance","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" public void setGrumpyGordon(GrumpyGordon gg) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" grumpyGordon \u003d gg;","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"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":60,"author":{"gitId":"craigtonlian"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" public void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" String gordonText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" DialogBox.getUserDialog(userText, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":" DialogBox.getGordonDialog(gordonText, gordonImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" if (userText.equals(\"bye\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" System.exit(0);","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":" return grumpyGordon.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"craigtonlian":80}},{"path":"src/main/java/grumpygordon/exceptions/GrumpyGordonDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":" * The GrumpyGordonDateTimeFormatException class is a custom exception class","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":" * that is thrown when the user inputs a date and time in the wrong format.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"public class GrumpyGordonDateTimeFormatException extends GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" * Constructor for GrumpyGordonDateTimeFormatException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" public GrumpyGordonDateTimeFormatException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":16}},{"path":"src/main/java/grumpygordon/exceptions/GrumpyGordonException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":" * The GrumpyGordonException class is a generic custom exception class","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":" * that for subclassing purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"public class GrumpyGordonException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" * Constructor for GrumpyGordonException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" public GrumpyGordonException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":17}},{"path":"src/main/java/grumpygordon/exceptions/GrumpyGordonInitialisationException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":" * The GrumpyGordonInitialisationException class is a custom exception class","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":" * that is thrown when the program fails to initialise.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"public class GrumpyGordonInitialisationException extends GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" * Constructor for GrumpyGordonInitialisationException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" public GrumpyGordonInitialisationException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":16}},{"path":"src/main/java/grumpygordon/exceptions/GrumpyGordonInvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":" * The GrumpyGordonInvalidCommandException class is a custom exception class","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":" * that is thrown when the user inputs an invalid command.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"public class GrumpyGordonInvalidCommandException extends GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" * Constructor for GrumpyGordonInvalidCommandException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" public GrumpyGordonInvalidCommandException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":16}},{"path":"src/main/java/grumpygordon/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.ByeCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.DeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.DeleteCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.EventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.FindCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.SortCommand;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.TodoCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonDateTimeFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonException;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonInitialisationException;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonInvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" * Represents a parser that parses user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" * Separator for saved format.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" private static final String SAVED_FORMAT_SEPARATOR_REGEX \u003d \" \\\\| \";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" * Separator for user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" private static final String SPACE_REGEX \u003d \" \";","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" * Regex for mark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" private static final String MARK_REGEX \u003d \"mark\\\\s([0-9]+)$\";","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" * Regex for unmark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" private static final String UNMARK_REGEX \u003d \"unmark\\\\s([0-9]+)$\";","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" * Regex for delete command.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" private static final String DELETE_REGEX \u003d \"delete\\\\s([0-9]+)$\";","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" * Regex for find command.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" private static final String FIND_REGEX \u003d \"find\\\\s.*$\";","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":" * Regex for deadline command.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" private static final String DEADLINE_INFO_REGEX \u003d \".*\\\\s+/by\\\\s+.*\";","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" * Regex for event command.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" private static final String EVENT_INFO_REGEX \u003d \".*\\\\s+/from\\\\s+.*\\\\s+/to\\\\s+.*\";","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":" * Regex for datetime.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" private static final String DATETIME_REGEX \u003d \"\\\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\\\d|3[01]) \\\\d{2}:\\\\d{2}\";","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" * Regex for datetime.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":" public static boolean isValidDateTime(String datetime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":" datetime \u003d datetime.strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":" return Pattern.matches(DATETIME_REGEX, datetime);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":" * Parses a string to a LocalDateTime object.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"craigtonlian"},"content":" * @param datetime String to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"craigtonlian"},"content":" * @return LocalDateTime object","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonDateTimeFormatException If the datetime format is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"craigtonlian"},"content":" public static LocalDateTime parseDateTime(String datetime) throws GrumpyGordonDateTimeFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"craigtonlian"},"content":" if (isValidDateTime(datetime)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"craigtonlian"},"content":" datetime \u003d datetime.strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"craigtonlian"},"content":" String[] arr \u003d datetime.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"craigtonlian"},"content":" String[] date \u003d arr[0].split(\"-\");","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"craigtonlian"},"content":" String[] time \u003d arr[1].split(\":\");","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"craigtonlian"},"content":" return LocalDateTime.of(","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"craigtonlian"},"content":" Integer.parseInt(date[0]),","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"craigtonlian"},"content":" Integer.parseInt(date[1]),","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"craigtonlian"},"content":" Integer.parseInt(date[2]),","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"craigtonlian"},"content":" Integer.parseInt(time[0]),","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"craigtonlian"},"content":" Integer.parseInt(time[1]));","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"craigtonlian"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonDateTimeFormatException(\"That datetime does not exist.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"craigtonlian"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonDateTimeFormatException(\"Invalid datetime format.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"craigtonlian"},"content":" * Parses a string to a Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"craigtonlian"},"content":" * @param line String to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"craigtonlian"},"content":" * @return Task object","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonException If the saved format is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"craigtonlian"},"content":" public static Task parseStringToTask(String line) throws GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"craigtonlian"},"content":" String[] parts \u003d line.split(SAVED_FORMAT_SEPARATOR_REGEX);","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInitialisationException(\"Saved data is corrupted.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"craigtonlian"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"craigtonlian"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"craigtonlian"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"craigtonlian"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"craigtonlian"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"craigtonlian"},"content":" // Parse the saved format for Todo","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"craigtonlian"},"content":" // Example: \"T | 0 | Sleep\"","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"craigtonlian"},"content":" return new Todo(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"craigtonlian"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"craigtonlian"},"content":" // Parse the saved format for Deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"craigtonlian"},"content":" // Example: \"D | 1 | Buy groceries | 2023-08-31 12:00\"","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"craigtonlian"},"content":" String deadlineBy \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"craigtonlian"},"content":" return new Deadline(description, parseDateTime(deadlineBy), isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"craigtonlian"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"craigtonlian"},"content":" // Parse the saved format for Event","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"craigtonlian"},"content":" // Example: \"E | 0 | Team meeting | 2023-09-01 12:00 | 2023-09-02 14:00\"","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"craigtonlian"},"content":" String eventFrom \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"craigtonlian"},"content":" String eventTo \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"craigtonlian"},"content":" return new Event(description, parseDateTime(eventFrom), parseDateTime(eventTo), isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"craigtonlian"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"craigtonlian"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":141,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonDateTimeFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInitialisationException(\"Saved data could not be parsed.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInitialisationException(\"Saved data could not be parsed.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"craigtonlian"},"content":" * Parses a string to a TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"craigtonlian"},"content":" * @param deadlineInfo String to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"craigtonlian"},"content":" * @return TaskList object","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"craigtonlian"},"content":" public static String[] parseDeadlineInfo(String deadlineInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"craigtonlian"},"content":" String desc \u003d deadlineInfo.split(\" /by \")[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"craigtonlian"},"content":" String by \u003d deadlineInfo.split(\" /by \")[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"craigtonlian"},"content":" return new String[] {desc, by};","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"craigtonlian"},"content":" * Parses a string to a TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"craigtonlian"},"content":" * @param eventInfo String to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"craigtonlian"},"content":" * @return TaskList object","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"craigtonlian"},"content":" public static String[] parseEventInfo(String eventInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"craigtonlian"},"content":" String desc \u003d eventInfo.split(\" /from \")[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"craigtonlian"},"content":" String from \u003d eventInfo.split(\" /from \")[1].split(\" /to \")[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"craigtonlian"},"content":" String to \u003d eventInfo.split(\" /from \")[1].split(\" /to \")[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"craigtonlian"},"content":" return new String[] {desc, from, to};","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"craigtonlian"},"content":" * Parses a string to a TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"craigtonlian"},"content":" * @param userInput String to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"craigtonlian"},"content":" * @return TaskList object","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonException If the command is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"craigtonlian"},"content":" public static Command parseCommand(String userInput, TaskList tasks) throws GrumpyGordonInvalidCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":177,"author":{"gitId":"craigtonlian"},"content":" userInput \u003d userInput.strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"craigtonlian"},"content":" String[] parts \u003d userInput.split(SPACE_REGEX, 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command cannot be empty.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"craigtonlian"},"content":" String command \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-08-29"},{"lineNumber":185,"author":{"gitId":"craigtonlian"},"content":" int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"craigtonlian"},"content":" String[] args;","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"craigtonlian"},"content":" switch (command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"craigtonlian"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"craigtonlian"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"craigtonlian"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"craigtonlian"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"craigtonlian"},"content":" case \"sort\":","lastModifiedDate":"2023-09-12"},{"lineNumber":194,"author":{"gitId":"craigtonlian"},"content":" return new SortCommand();","lastModifiedDate":"2023-09-12"},{"lineNumber":195,"author":{"gitId":"craigtonlian"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":197,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for mark is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":198,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":199,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":200,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(MARK_REGEX, userInput)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":201,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for mark is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"craigtonlian"},"content":" taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"craigtonlian"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"craigtonlian"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e tasks.size() - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"craigtonlian"},"content":" return new MarkCommand(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":215,"author":{"gitId":"craigtonlian"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":217,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for unmark is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":218,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":219,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":220,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(UNMARK_REGEX, userInput)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for unmark is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"craigtonlian"},"content":" taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"craigtonlian"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"craigtonlian"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e tasks.size() - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"craigtonlian"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"craigtonlian"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":236,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":237,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for delete is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":238,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":239,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":240,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(DELETE_REGEX, userInput)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":241,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for delete is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":243,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"craigtonlian"},"content":" taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":246,"author":{"gitId":"craigtonlian"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"craigtonlian"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e tasks.size() - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"craigtonlian"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":255,"author":{"gitId":"craigtonlian"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":257,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for find is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":258,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":259,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":260,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(FIND_REGEX, userInput)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for find is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"craigtonlian"},"content":" String pattern \u003d userInput.split(\" \", 2)[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"craigtonlian"},"content":" return new FindCommand(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"craigtonlian"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":267,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for todo is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":268,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":269,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":270,"author":{"gitId":"craigtonlian"},"content":" String todoInfo \u003d parts[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":271,"author":{"gitId":"craigtonlian"},"content":" if (todoInfo.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for todo is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":274,"author":{"gitId":"craigtonlian"},"content":" return new TodoCommand(todoInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":275,"author":{"gitId":"craigtonlian"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":276,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":277,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for deadline is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":278,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":279,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":280,"author":{"gitId":"craigtonlian"},"content":" String deadlineInfo \u003d parts[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":281,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(DEADLINE_INFO_REGEX, deadlineInfo)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":282,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for deadline is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":284,"author":{"gitId":"craigtonlian"},"content":" args \u003d Parser.parseDeadlineInfo(deadlineInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":285,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":286,"author":{"gitId":"craigtonlian"},"content":" return new DeadlineCommand(args[0], parseDateTime(args[1]));","lastModifiedDate":"2023-08-29"},{"lineNumber":287,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonDateTimeFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":288,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":289,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":290,"author":{"gitId":"craigtonlian"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":291,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":292,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for event is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":293,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":294,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":295,"author":{"gitId":"craigtonlian"},"content":" String eventInfo \u003d parts[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":296,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(EVENT_INFO_REGEX, eventInfo)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":297,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for event is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":298,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":299,"author":{"gitId":"craigtonlian"},"content":" args \u003d Parser.parseEventInfo(eventInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":300,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":301,"author":{"gitId":"craigtonlian"},"content":" return new EventCommand(args[0], parseDateTime(args[1]), parseDateTime(args[2]));","lastModifiedDate":"2023-08-29"},{"lineNumber":302,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonDateTimeFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":303,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":304,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":305,"author":{"gitId":"craigtonlian"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":306,"author":{"gitId":"craigtonlian"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":308,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Invalid command.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":310,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":310}},{"path":"src/main/java/grumpygordon/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonInitialisationException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Represents a storage for tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" * Path to the directory where the data file is stored.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" private static final String DIRECTORY_PATH \u003d \"./data\";","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * Path to the data file.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" private static final String FILE_PATH \u003d \"./data/tasks.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" * Constructor of Storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" public Storage() throws GrumpyGordonInitialisationException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" File dataDirectory \u003d new File(DIRECTORY_PATH);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" File dataFile \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" dataDirectory.mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInitialisationException(\"Error: Unable to create new file to store tasks.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" * Saves the tasks to the data file.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks to be saved","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" public void saveTasks(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" try (FileWriter fw \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" task \u003d tasks.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":" String taskString \u003d task.toSaveFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" bw.write(taskString);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" bw.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" * Loads the tasks from the data file.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" * @return The list of tasks loaded from the data file","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" public TaskList loadTasks() throws GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":" try (FileReader fr \u003d new FileReader(FILE_PATH);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":" BufferedReader br \u003d new BufferedReader(fr)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":" String taskString;","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":" while ((taskString \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":" Task task \u003d Task.fromSaveFormat(taskString);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"craigtonlian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"craigtonlian"},"content":" System.out.println(\"Error reading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"craigtonlian"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":87}},{"path":"src/main/java/grumpygordon/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * End time of deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * Constructor to create a Deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of event","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" * @param by End time of event","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" * @param isDone Boolean that represents whether the task is done","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" public Deadline(String description, LocalDateTime by, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" * Returns a String representation of a Deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of a Deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" return \"[D][\" + this.getStatusIcon() + \"] \" + super.toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" * Returns the format in which an Event task will be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of the save format of an Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" return \"D | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + super.toString() + \" | \" + this.by;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":45}},{"path":"src/main/java/grumpygordon/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents an Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Start time of event.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * End time of event.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" * Constructor to create an Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of event","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" * @param from Start time of event","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param to End time of event","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param isDone Boolean that represents whether the event is done","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" * Returns a String representation of an Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of an Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" return \"[E][\" + this.getStatusIcon() + \"] \" + super.toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" * Returns the format in which an Event task will be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of the save format of an Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" return \"E | \" + (this.isDone ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" + super.toString() + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":54}},{"path":"src/main/java/grumpygordon/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a generic task added by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Description of task.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" protected String description;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * Boolean that represents whether the task is done.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" * Constructor used to create a task.","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" * Returns the status icon of a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" * @return Status icon of a task","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" return (this.isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" * Marks a task as undone.","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" * Returns a String representation of a Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of a Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" return this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" * Returns the Task from the save format.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" * @return Task generated from the save format","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" public static Task fromSaveFormat(String line) throws GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" return Parser.parseStringToTask(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" * Returns the format in which a Task will be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of the save format of a Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" public abstract String toSaveFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":74}},{"path":"src/main/java/grumpygordon/tasks/TaskComparator.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" * Represents a comparator for tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"public class TaskComparator implements Comparator\u003cTask\u003e {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" * Compares two tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param t1 First task","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * @param t2 Second task","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * @return The comparison result","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" public int compare(Task t1, Task t2) {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" return t1.toString().compareTo(t2.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"craigtonlian":19}},{"path":"src/main/java/grumpygordon/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" * Represents a list of tasks added by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Indentation for responses.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" private static final String INDENTATION \u003d \" \";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Response when list is empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" private static final String EMPTY_TASK_LIST_RESPONSE \u003d \"The list is empty, you donkey!\";","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" * Response when list is not empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" private static final String NON_EMPTY_TASK_LIST_RESPONSE \u003d \"Here\u0027s your list, you donkey!\";","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" * Constructor of TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" public int size() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" return tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" * Returns the info of a tasks from it\u0027s index in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of the task in the list","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" * Adds a new task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" * @param task Task to be added","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of task to be deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" * Sorts the tasks in the list.","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" public void sortTasks() {","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" this.tasks.sort(new TaskComparator());","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of task to be marked","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"craigtonlian"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"craigtonlian"},"content":" * Marks a task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of task to be marked","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"craigtonlian"},"content":" public void markTaskAsUndone(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"craigtonlian"},"content":" this.tasks.get(index).markAsUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"craigtonlian"},"content":" * Returns a String representation of a TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of a TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"craigtonlian"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"craigtonlian"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"craigtonlian"},"content":" if (this.tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"craigtonlian"},"content":" sb.append(INDENTATION)","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"craigtonlian"},"content":" .append(EMPTY_TASK_LIST_RESPONSE)","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"craigtonlian"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"craigtonlian"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"craigtonlian"},"content":" sb.append(INDENTATION).append(NON_EMPTY_TASK_LIST_RESPONSE).append(\"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"craigtonlian"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"craigtonlian"},"content":" sb.append(INDENTATION)","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"craigtonlian"},"content":" .append(i + 1)","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"craigtonlian"},"content":" .append(\".\")","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"craigtonlian"},"content":" .append(tasks.get(i).toString())","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"craigtonlian"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"craigtonlian"},"content":" return sb.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":117}},{"path":"src/main/java/grumpygordon/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" * Constructor to create a Todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param isDone Boolean that represents whether the task is done","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * Returns a String representation of a Todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of a Todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" return \"[T][\" + this.getStatusIcon() + \"] \" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * Returns the format in which a Todo task will be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of the save format of a Todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" return \"T | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":34}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"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-05"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" minHeight\u003d\"-Infinity\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"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":"craigtonlian"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"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":"craigtonlian"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"craigtonlian":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"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\"grumpygordon.controllers.MainWindow\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"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":"craigtonlian"},"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":"craigtonlian"},"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":"craigtonlian"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"craigtonlian":19}},{"path":"src/test/java/grumpygordon/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonDateTimeFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * Represents a test class for Parser.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * Tests the parseDateTime method of Parser.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonDateTimeFormatException If the datetime is invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" public void parseDateTime_validDateTime_success() throws GrumpyGordonDateTimeFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" assertEquals(LocalDateTime.of(2021, 9, 1, 19, 32), Parser.parseDateTime(\"2021-09-01 19:32\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" assertEquals(LocalDateTime.of(1995, 2, 28, 0, 0), Parser.parseDateTime(\"1995-02-28 00:00\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" * Tests the parseDateTime method of Parser.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonDateTimeFormatException If the datetime is invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" public void parseDateTime_invalidDateTime_exceptionThrown() throws GrumpyGordonDateTimeFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" assertEquals(LocalDateTime.of(2021, 9, 1, 19, 32), Parser.parseDateTime(\"2021-09-01 19-32\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"Invalid datetime format.\\n\", e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" assertEquals(LocalDateTime.of(2021, 2, 31, 19, 32), Parser.parseDateTime(\"2021-02-31 19-32\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"Invalid date \u0027FEBRUARY 31\u0027\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"craigtonlian":48}},{"path":"src/test/java/grumpygordon/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" * Represents a test class for Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Tests the string conversion of Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"[T][X] Bake cake\", new Todo(\"Bake cake\", true).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"[T][ ] Sleep\", new Todo(\"Sleep\", false).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" * Tests the save format conversion of Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" public void testSaveFormatConversion() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"T | 1 | Bake cake\", new Todo(\"Bake cake\", true).toSaveFormat());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"T | 0 | Sleep\", new Todo(\"Sleep\", false).toSaveFormat());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"craigtonlian":28}},{"path":"text-ui-test/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"T | 0 | eat","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"D | 0 | sleep | 2023-03-10T20:00","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"E | 0 | fight | 2023-03-10T12:00 | 2023-03-10T14:00","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"craigtonlian":3}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"todo eat","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"deadline sleep /by 2023-03-10 20:00","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"event fight /from 2023-03-10 12:00 /to 2023-03-10 14:00","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":5}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"REM Delete tasks.txt if it exists","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"if exist .\\data\\tasks.txt del .\\data\\tasks.txt","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\grumpygordon\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"java -classpath ..\\bin grumpygordon.GrumpyGordon \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"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":{"craigtonlian":5,"-":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":"craigtonlian"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/grumpygordon/*.java","lastModifiedDate":"2023-08-31"},{"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":"craigtonlian"},"content":"# run the program, feed grumpygordon.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"java -classpath ../bin GrumpyGordon \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-19"},{"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":{"craigtonlian":3,"-":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":"craigtonlian"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"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":"craigtonlian"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"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":"craigtonlian"},"content":" mainClass.set(\"grumpygordon.GrumpyGordon\")","lastModifiedDate":"2023-08-30"},{"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":"craigtonlian"},"content":" archiveBaseName \u003d \"grumpygordon\"","lastModifiedDate":"2023-08-30"},{"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":{"craigtonlian":22,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"E | 0 | Dance class | 2023-10-16T18:00 | 2023-10-16T21:00","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"T | 1 | Go gym","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"D | 0 | Submit 2100 assignment | 2023-09-23T13:00","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"T | 0 | Buy toilet paper","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"craigtonlian":4}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"# Grumpy Gordon User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"## Getting Started","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"2. Download the latest `grumpygordon.jar` from [here](https://github.com/craigtonlian/ip/releases/download/A-Jar/grumpygordon.jar).","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"3. Copy the file to the folder you want to use as the home folder for your Grumpy Gordon.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"4. Open a terminal window, `cd` into the folder you put the jar file in, and run the command `java -jar grumpygordon.jar`.","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"5. A GUI similar to the one shown below should appear in a few seconds.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" ![List Command](./Ui.png)","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"6. Type the command in the command box and press Enter to execute it. e.g. typing `list` and pressing Enter will list all tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"7. Refer to the [Features](#features) below for details of each command.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"### `list` - Listing all tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"Displays a list of all tasks in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"![List Command](./ListCommand.png)","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":"### `todo` - Adding a todo task","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":"Adds a todo task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":"Format: `todo DESCRIPTION`","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":"- The `DESCRIPTION` is the description of the todo task.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":"- `todo read book`","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":"### `deadline` - Adding a deadline tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":"Adds a deadline task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":"Format: `deadline DESCRIPTION /by END_DATETIME`","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":"- The `DESCRIPTION` is the description of the deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":"- The `END_DATETIME` is the end date and time of the deadline task in the format `YYYY-MM-DD hh:mm`.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":"- `deadline return book /by 2022-09-30 23:59`","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":"- `deadline submit assignment /by 2023-02-25 08:03`","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":"### `event` - Adding an event task","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":"Adds an event task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":"Format: `event DESCRIPTION /from START_DATETIME /to END_DATETIME`","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":"- The `DESCRIPTION` is the description of the event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":"- The `START_DATETIME` and `END_DATETIME` is the starting and ending date and time of the event task in the format `YYYY-MM-DD hh:mm`.","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":"- `event singing lesson /from 2023-05-22 12:00 /to 2023-05-22 14:00`","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":"### `mark` - Marking a task as done","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":"Marks a task as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":"Format: `mark TASK_INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":"- `list` followed by `mark 2` marks the second task in the task list as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":"### `unmark` - Marking a task as undone","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":"Marks a task as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"craigtonlian"},"content":"Format: `unmark TASK_INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"craigtonlian"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"craigtonlian"},"content":"- `list` followed by `unmark 2` marks the second task in the task list as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"craigtonlian"},"content":"### `delete` - Deleting a task","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"craigtonlian"},"content":"Deletes a task from the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"craigtonlian"},"content":"Format: `delete TASK_INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"craigtonlian"},"content":"- Deletes the task at the specified `TASK_INDEX`.","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"craigtonlian"},"content":"- The index refers to the index number shown in the task list displayed from the `list` command.","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"craigtonlian"},"content":"- The index **must be a positive integer** 1, 2, 3, ...","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"craigtonlian"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"craigtonlian"},"content":"- `list` followed by `delete 1` deletes the first task in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"craigtonlian"},"content":"### `find` - Finding a task in the task list","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"craigtonlian"},"content":"Displays a list of all tasks that contains the keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"craigtonlian"},"content":"Format: `find KEYWORD`","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"craigtonlian"},"content":"- Only the description of the task is searched.","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"craigtonlian"},"content":"- The search is case-insensitive. e.g. `find book` will match `Book`","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"craigtonlian"},"content":"- Partial words will be matched. e.g. `find boo` will match `book`","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"craigtonlian"},"content":"### `sort` - Sorting the tasks in the task list","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":115,"author":{"gitId":"craigtonlian"},"content":"Sorts the tasks in the task list alphabetically.","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":117,"author":{"gitId":"craigtonlian"},"content":"Format: `sort`","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":119,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"craigtonlian"},"content":"### `bye` - Exiting the program","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":123,"author":{"gitId":"craigtonlian"},"content":"Exits the program.","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":125,"author":{"gitId":"craigtonlian"},"content":"Format: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":127,"author":{"gitId":"craigtonlian"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"craigtonlian"},"content":"### Saving the data","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":131,"author":{"gitId":"craigtonlian"},"content":"Task list data are saved in the hard disk automatically after any command that changes the data.","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"craigtonlian"},"content":"There is no need to save manually.","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":135,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"craigtonlian":115,"-":21}},{"path":"src/main/java/grumpygordon/GrumpyGordon.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonInitialisationException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonInvalidCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.parser.Parser;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * GrumpyGordon Chatbot","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"public class GrumpyGordon {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * Storage for GrumpyGordon.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" * List of tasks for GrumpyGordon.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * Constructor for GrumpyGordon.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonException If GrumpyGordon fails to initialise","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" public GrumpyGordon() throws GrumpyGordonException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" this.tasks \u003d storage.loadTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonInitialisationException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" System.out.println(\"erorr whenloadtask\" + e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" * Gets GrumpyGordon\u0027s response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" * @param userInput User input","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" * @return GrumpyGordon\u0027s response","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" Command command \u003d Parser.parseCommand(userInput, this.tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" return command.execute(tasks, storage);","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonInvalidCommandException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" * Main method for GrumpyGordon.","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" * @param args Command line arguments","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"craigtonlian":61}},{"path":"src/main/java/grumpygordon/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.controllers.MainWindow;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * Grumpy Gordon instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" private GrumpyGordon grumpyGordon;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" * Starts the GUI.","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param stage Stage to start GUI on.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" stage.setTitle(\"Grumpy Gordon\");","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" grumpyGordon \u003d new GrumpyGordon();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setGrumpyGordon(grumpyGordon);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"craigtonlian":45}},{"path":"src/main/java/grumpygordon/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to exit the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" private static final String OUTRO \u003d \"Bye. Hope to never see you again.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * Executes the bye command.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage of the program","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * @return The outro string","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" return OUTRO;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":22}},{"path":"src/main/java/grumpygordon/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a generic command for GrumpyGordon.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * @param taskList The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" public abstract String execute(TaskList taskList, Storage storage);","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" * Returns true if the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" * @return True if the command is an exit command","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" return this instanceof ByeCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":25}},{"path":"src/main/java/grumpygordon/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to add a deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * Description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" * Deadline of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" private final LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" * Constructor of DeadlineCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of the deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param by Deadline of the deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" public DeadlineCommand(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" tasks.addTask(new Deadline(this.description, this.by, false));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" return \"Deadline task added to list\\n\" + tasks.getTask(tasks.size() - 1).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":45}},{"path":"src/main/java/grumpygordon/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to delete a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Constructor of DeleteCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of the task to be deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" String deletedTask \u003d tasks.getTask(this.index).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" tasks.deleteTask(this.index);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" return \"Task deleted from list!\\n\" + deletedTask;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":36}},{"path":"src/main/java/grumpygordon/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to add an event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" * Description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" * Start time of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * End time of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" * Constructor of EventCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of the event task","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" * @param from Start time of the event task","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" * @param to End time of the event task","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" public EventCommand(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" tasks.addTask(new Event(this.description, this.from, this.to, false));","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" return \"Event task added to list\\n\" + tasks.getTask(tasks.size() - 1).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":53}},{"path":"src/main/java/grumpygordon/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to find tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Pattern to be searched.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" private final String pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Constructor of FindCommand.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * @param pattern Pattern to be searched","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" public FindCommand(String pattern) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" this.pattern \u003d pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" return \"There are no matching tasks in your list!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" int count \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" if (tasks.getTask(i).toString().toLowerCase().contains(pattern.toLowerCase())) {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" sb.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" sb.append((i + 1) + \". \" + tasks.getTask(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" count++;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" return \"There are no matching tasks in your list!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" return sb.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"craigtonlian":50}},{"path":"src/main/java/grumpygordon/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":21}},{"path":"src/main/java/grumpygordon/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Constructor of MarkCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of the task to be marked as done","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" tasks.markTaskAsDone(this.index);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" return \"Marked that task as done!\\n\" + tasks.getTask(this.index).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":35}},{"path":"src/main/java/grumpygordon/commands/SortCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to sort tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class SortCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" return \"There are no tasks in your list to sort!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" tasks.sortTasks();","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" return \"Your tasks have been sorted alphabetically!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"craigtonlian":24}},{"path":"src/main/java/grumpygordon/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to add a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * Constructor of TodoCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of the todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" tasks.addTask(new Todo(this.description, false));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" return \"Todo task added to list!\\n\" + tasks.getTask(tasks.size() - 1).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":36}},{"path":"src/main/java/grumpygordon/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a command to mark a task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Index of the task to be marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * Constructor of UnmarkCommand.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of the task to be marked as undone","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * Executes the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * @param storage The storage","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" * @return The output string","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" tasks.markTaskAsUndone(this.index);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" return \"Marked that task as undone!\\n\" + tasks.getTask(this.index).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":36}},{"path":"src/main/java/grumpygordon/controllers/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.controllers;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.Background;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.BackgroundFill;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.CornerRadii;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"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":27,"author":{"gitId":"craigtonlian"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" Circle clip \u003d new Circle(50, 50, 50);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" displayPicture.setClip(clip);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" db.setBackground(new Background(new BackgroundFill(new Color(0.82, 0.90, 1, 0.4),","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" CornerRadii.EMPTY,","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" Insets.EMPTY)));","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":" public static DialogBox getGordonDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" db.setBackground(new Background(new BackgroundFill(Color.rgb(250, 250, 250),","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" CornerRadii.EMPTY,","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" Insets.EMPTY)));","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"craigtonlian":77}},{"path":"src/main/java/grumpygordon/controllers/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.controllers;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.GrumpyGordon;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Introductory message from Grumpy Gordon.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" private static final String INTRO \u003d \"Oi! I\u0027m Grumpy Gordon. Why are you bothering me?\";","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" * Scroll pane for dialog container.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * Container for dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" * User input.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" * Grumpy Gordon instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" private GrumpyGordon grumpyGordon;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/userImage.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" private Image gordonImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/gordonImage.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" * Initialises the main window.","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" dialogContainer.getChildren().add(DialogBox.getGordonDialog(INTRO, gordonImage));","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" * Sets Grumpy Gordon instance.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" * @param gg Grumpy Gordon instance","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" public void setGrumpyGordon(GrumpyGordon gg) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" grumpyGordon \u003d gg;","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"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":60,"author":{"gitId":"craigtonlian"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" public void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" String gordonText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" DialogBox.getUserDialog(userText, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":" DialogBox.getGordonDialog(gordonText, gordonImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" if (userText.equals(\"bye\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" System.exit(0);","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":" return grumpyGordon.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"craigtonlian":80}},{"path":"src/main/java/grumpygordon/exceptions/GrumpyGordonDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":" * The GrumpyGordonDateTimeFormatException class is a custom exception class","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":" * that is thrown when the user inputs a date and time in the wrong format.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"public class GrumpyGordonDateTimeFormatException extends GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" * Constructor for GrumpyGordonDateTimeFormatException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" public GrumpyGordonDateTimeFormatException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":16}},{"path":"src/main/java/grumpygordon/exceptions/GrumpyGordonException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":" * The GrumpyGordonException class is a generic custom exception class","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":" * that for subclassing purposes.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"public class GrumpyGordonException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" * Constructor for GrumpyGordonException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" public GrumpyGordonException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":17}},{"path":"src/main/java/grumpygordon/exceptions/GrumpyGordonInitialisationException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":" * The GrumpyGordonInitialisationException class is a custom exception class","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":" * that is thrown when the program fails to initialise.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"public class GrumpyGordonInitialisationException extends GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" * Constructor for GrumpyGordonInitialisationException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" public GrumpyGordonInitialisationException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":16}},{"path":"src/main/java/grumpygordon/exceptions/GrumpyGordonInvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.exceptions;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":" * The GrumpyGordonInvalidCommandException class is a custom exception class","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":" * that is thrown when the user inputs an invalid command.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"public class GrumpyGordonInvalidCommandException extends GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" * Constructor for GrumpyGordonInvalidCommandException.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param message The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" public GrumpyGordonInvalidCommandException(String message) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" super(message);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":16}},{"path":"src/main/java/grumpygordon/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.ByeCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.DeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.DeleteCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.EventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.FindCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.SortCommand;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.TodoCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.commands.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonDateTimeFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonException;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonInitialisationException;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonInvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" * Represents a parser that parses user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" * Separator for saved format.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" private static final String SAVED_FORMAT_SEPARATOR_REGEX \u003d \" \\\\| \";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" * Separator for user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" private static final String SPACE_REGEX \u003d \" \";","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" * Regex for mark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" private static final String MARK_REGEX \u003d \"mark\\\\s([0-9]+)$\";","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" * Regex for unmark command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" private static final String UNMARK_REGEX \u003d \"unmark\\\\s([0-9]+)$\";","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" * Regex for delete command.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" private static final String DELETE_REGEX \u003d \"delete\\\\s([0-9]+)$\";","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" * Regex for find command.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" private static final String FIND_REGEX \u003d \"find\\\\s.*$\";","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":" * Regex for deadline command.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" private static final String DEADLINE_INFO_REGEX \u003d \".*\\\\s+/by\\\\s+.*\";","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" * Regex for event command.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" private static final String EVENT_INFO_REGEX \u003d \".*\\\\s+/from\\\\s+.*\\\\s+/to\\\\s+.*\";","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":" * Regex for datetime from user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" private static final String DATETIME_REGEX \u003d \"\\\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\\\d|3[01]) \\\\d{2}:\\\\d{2}\";","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" * Regex for datetime from saved format.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":" private static final String LOCALDATETIME_REGEX \u003d \"\\\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\\\d|3[01])T\\\\d{2}:\\\\d{2}\";","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":" * Checks if a string is a valid datetime.","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":" * @param datetime String to be checked","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":" * @return Boolean that represents whether the string is a valid datetime","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":" public static boolean isValidDateTime(String datetime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"craigtonlian"},"content":" datetime \u003d datetime.strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"craigtonlian"},"content":" return Pattern.matches(DATETIME_REGEX, datetime) || Pattern.matches(LOCALDATETIME_REGEX, datetime);","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"craigtonlian"},"content":" * Parses a string to a LocalDateTime object.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"craigtonlian"},"content":" * @param datetime String to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"craigtonlian"},"content":" * @return LocalDateTime object","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonDateTimeFormatException If the datetime format is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"craigtonlian"},"content":" public static LocalDateTime parseDateTime(String datetime) throws GrumpyGordonDateTimeFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"craigtonlian"},"content":" if (isValidDateTime(datetime) \u0026\u0026 Pattern.matches(DATETIME_REGEX, datetime)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"craigtonlian"},"content":" datetime \u003d datetime.strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"craigtonlian"},"content":" String[] arr \u003d datetime.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"craigtonlian"},"content":" String[] date \u003d arr[0].split(\"-\");","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"craigtonlian"},"content":" String[] time \u003d arr[1].split(\":\");","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"craigtonlian"},"content":" return LocalDateTime.of(","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"craigtonlian"},"content":" Integer.parseInt(date[0]),","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"craigtonlian"},"content":" Integer.parseInt(date[1]),","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"craigtonlian"},"content":" Integer.parseInt(date[2]),","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"craigtonlian"},"content":" Integer.parseInt(time[0]),","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"craigtonlian"},"content":" Integer.parseInt(time[1]));","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"craigtonlian"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonDateTimeFormatException(\"That datetime does not exist.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"craigtonlian"},"content":" } else if (isValidDateTime(datetime) \u0026\u0026 Pattern.matches(LOCALDATETIME_REGEX, datetime)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"craigtonlian"},"content":" return LocalDateTime.parse(datetime);","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"craigtonlian"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonDateTimeFormatException(\"That datetime does not exist.\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"craigtonlian"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonDateTimeFormatException(\"Invalid datetime format.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"craigtonlian"},"content":" * Parses a string to a Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"craigtonlian"},"content":" * @param line String to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"craigtonlian"},"content":" * @return Task object","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonException If the saved format is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"craigtonlian"},"content":" public static Task parseStringToTask(String line) throws GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"craigtonlian"},"content":" String[] parts \u003d line.split(SAVED_FORMAT_SEPARATOR_REGEX);","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInitialisationException(\"Saved data is corrupted.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"craigtonlian"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"craigtonlian"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"craigtonlian"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"craigtonlian"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"craigtonlian"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"craigtonlian"},"content":" // Parse the saved format for Todo","lastModifiedDate":"2023-09-05"},{"lineNumber":138,"author":{"gitId":"craigtonlian"},"content":" // Example: \"T | 0 | Sleep\"","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"craigtonlian"},"content":" return new Todo(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"craigtonlian"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"craigtonlian"},"content":" // Parse the saved format for Deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"craigtonlian"},"content":" // Example: \"D | 1 | Buy groceries | 2023-08-31 12:00\"","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"craigtonlian"},"content":" String deadlineBy \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"craigtonlian"},"content":" return new Deadline(description, parseDateTime(deadlineBy), isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"craigtonlian"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"craigtonlian"},"content":" // Parse the saved format for Event","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"craigtonlian"},"content":" // Example: \"E | 0 | Team meeting | 2023-09-01 12:00 | 2023-09-02 14:00\"","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"craigtonlian"},"content":" String eventFrom \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"craigtonlian"},"content":" String eventTo \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"craigtonlian"},"content":" return new Event(description, parseDateTime(eventFrom), parseDateTime(eventTo), isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"craigtonlian"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"craigtonlian"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonDateTimeFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":155,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInitialisationException(\"Saved data could not be parsed.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":156,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInitialisationException(\"Saved data could not be parsed.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":158,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"craigtonlian"},"content":" * Parses a string to a TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"craigtonlian"},"content":" * @param deadlineInfo String to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"craigtonlian"},"content":" * @return TaskList object","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"craigtonlian"},"content":" public static String[] parseDeadlineInfo(String deadlineInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"craigtonlian"},"content":" String desc \u003d deadlineInfo.split(\" /by \")[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"craigtonlian"},"content":" String by \u003d deadlineInfo.split(\" /by \")[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"craigtonlian"},"content":" return new String[] {desc, by};","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":171,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"craigtonlian"},"content":" * Parses a string to a TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"craigtonlian"},"content":" * @param eventInfo String to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"craigtonlian"},"content":" * @return TaskList object","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"craigtonlian"},"content":" public static String[] parseEventInfo(String eventInfo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"craigtonlian"},"content":" String desc \u003d eventInfo.split(\" /from \")[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"craigtonlian"},"content":" String from \u003d eventInfo.split(\" /from \")[1].split(\" /to \")[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"craigtonlian"},"content":" String to \u003d eventInfo.split(\" /from \")[1].split(\" /to \")[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"craigtonlian"},"content":" return new String[] {desc, from, to};","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":182,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"craigtonlian"},"content":" * Parses a string to a TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"craigtonlian"},"content":" * @param userInput String to be parsed","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"craigtonlian"},"content":" * @return TaskList object","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonException If the command is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"craigtonlian"},"content":" public static Command parseCommand(String userInput, TaskList tasks) throws GrumpyGordonInvalidCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":189,"author":{"gitId":"craigtonlian"},"content":" userInput \u003d userInput.strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"craigtonlian"},"content":" String[] parts \u003d userInput.split(SPACE_REGEX, 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command cannot be empty.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"craigtonlian"},"content":" String command \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"craigtonlian"},"content":" int taskIndex;","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"craigtonlian"},"content":" String[] args;","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":200,"author":{"gitId":"craigtonlian"},"content":" switch (command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":201,"author":{"gitId":"craigtonlian"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"craigtonlian"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"craigtonlian"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"craigtonlian"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"craigtonlian"},"content":" case \"sort\":","lastModifiedDate":"2023-09-12"},{"lineNumber":206,"author":{"gitId":"craigtonlian"},"content":" return new SortCommand();","lastModifiedDate":"2023-09-12"},{"lineNumber":207,"author":{"gitId":"craigtonlian"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":208,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":209,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for mark is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":210,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":211,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":212,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(MARK_REGEX, userInput)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":213,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for mark is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":215,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"craigtonlian"},"content":" taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"craigtonlian"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"craigtonlian"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e tasks.size() - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"craigtonlian"},"content":" return new MarkCommand(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":227,"author":{"gitId":"craigtonlian"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":228,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":229,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for unmark is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":230,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":231,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":232,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(UNMARK_REGEX, userInput)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for unmark is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"craigtonlian"},"content":" taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":238,"author":{"gitId":"craigtonlian"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"craigtonlian"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e tasks.size() - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"craigtonlian"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":247,"author":{"gitId":"craigtonlian"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":249,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for delete is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":250,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":251,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":252,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(DELETE_REGEX, userInput)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":253,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for delete is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":255,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"craigtonlian"},"content":" taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":258,"author":{"gitId":"craigtonlian"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"craigtonlian"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e tasks.size() - 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Task number is invalid.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"craigtonlian"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"craigtonlian"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":269,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for find is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":270,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":271,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":272,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(FIND_REGEX, userInput)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for find is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"craigtonlian"},"content":" String pattern \u003d userInput.split(\" \", 2)[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"craigtonlian"},"content":" return new FindCommand(pattern);","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"craigtonlian"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":278,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":279,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for todo is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":280,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":281,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":282,"author":{"gitId":"craigtonlian"},"content":" String todoInfo \u003d parts[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":283,"author":{"gitId":"craigtonlian"},"content":" if (todoInfo.isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for todo is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":286,"author":{"gitId":"craigtonlian"},"content":" return new TodoCommand(todoInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":287,"author":{"gitId":"craigtonlian"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":288,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":289,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for deadline is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":290,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":291,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":292,"author":{"gitId":"craigtonlian"},"content":" String deadlineInfo \u003d parts[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":293,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(DEADLINE_INFO_REGEX, deadlineInfo)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":294,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for deadline is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":295,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":296,"author":{"gitId":"craigtonlian"},"content":" args \u003d Parser.parseDeadlineInfo(deadlineInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":297,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":298,"author":{"gitId":"craigtonlian"},"content":" return new DeadlineCommand(args[0], parseDateTime(args[1]));","lastModifiedDate":"2023-08-29"},{"lineNumber":299,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonDateTimeFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":300,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":301,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":302,"author":{"gitId":"craigtonlian"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":303,"author":{"gitId":"craigtonlian"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":304,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for event is incorrect.\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":305,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":306,"author":{"gitId":"craigtonlian"},"content":" assert parts.length \u003e 1 : \"parts.length should be more than 1\";","lastModifiedDate":"2023-09-11"},{"lineNumber":307,"author":{"gitId":"craigtonlian"},"content":" String eventInfo \u003d parts[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":308,"author":{"gitId":"craigtonlian"},"content":" if (!Pattern.matches(EVENT_INFO_REGEX, eventInfo)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":309,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Command syntax for event is incorrect.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":311,"author":{"gitId":"craigtonlian"},"content":" args \u003d Parser.parseEventInfo(eventInfo);","lastModifiedDate":"2023-08-29"},{"lineNumber":312,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":313,"author":{"gitId":"craigtonlian"},"content":" return new EventCommand(args[0], parseDateTime(args[1]), parseDateTime(args[2]));","lastModifiedDate":"2023-08-29"},{"lineNumber":314,"author":{"gitId":"craigtonlian"},"content":" } catch (GrumpyGordonDateTimeFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":315,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":316,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":317,"author":{"gitId":"craigtonlian"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":318,"author":{"gitId":"craigtonlian"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":319,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":320,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInvalidCommandException(\"Invalid command.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":321,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":322,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":322}},{"path":"src/main/java/grumpygordon/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonInitialisationException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Represents a storage for tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" * Path to the directory where the data file is stored.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" private static final String DIRECTORY_PATH \u003d \"./data\";","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * Path to the data file.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" private static final String FILE_PATH \u003d \"./data/tasks.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" * Constructor of Storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" public Storage() throws GrumpyGordonInitialisationException {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" File dataDirectory \u003d new File(DIRECTORY_PATH);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" File dataFile \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" dataDirectory.mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" dataFile.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" throw new GrumpyGordonInitialisationException(\"Error: Unable to create new file to store tasks.\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" * Saves the tasks to the data file.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" * @param tasks The list of tasks to be saved","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" public void saveTasks(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" try (FileWriter fw \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" task \u003d tasks.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":" String taskString \u003d task.toSaveFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" bw.write(taskString);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" bw.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" * Loads the tasks from the data file.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" * @return The list of tasks loaded from the data file","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" public TaskList loadTasks() throws GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":" try (FileReader fr \u003d new FileReader(FILE_PATH);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":" BufferedReader br \u003d new BufferedReader(fr)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":" String taskString;","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":" while ((taskString \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":" Task task \u003d Task.fromSaveFormat(taskString);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"craigtonlian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"craigtonlian"},"content":" System.out.println(\"Error reading tasks from file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"craigtonlian"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":87}},{"path":"src/main/java/grumpygordon/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * End time of deadline.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * Constructor to create a Deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of event","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" * @param by End time of event","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" * @param isDone Boolean that represents whether the task is done","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" public Deadline(String description, LocalDateTime by, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" * Returns a String representation of a Deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of a Deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" return \"[D][\" + this.getStatusIcon() + \"] \" + super.toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" * Returns the format in which an Event task will be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of the save format of an Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" return \"D | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + super.toString() + \" | \" + this.by;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":45}},{"path":"src/main/java/grumpygordon/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents an Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Start time of event.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * End time of event.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" * Constructor to create an Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of event","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" * @param from Start time of event","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" * @param to End time of event","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * @param isDone Boolean that represents whether the event is done","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" * Returns a String representation of an Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of an Event task","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" return \"[E][\" + this.getStatusIcon() + \"] \" + super.toString()","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" + \" (from: \" + this.from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"))","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" + \" to: \" + this.to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" * Returns the format in which an Event task will be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of the save format of an Event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" return \"E | \" + (this.isDone ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" + super.toString() + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":54}},{"path":"src/main/java/grumpygordon/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" * Represents a generic task added by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Description of task.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" protected String description;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" * Boolean that represents whether the task is done.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" * Constructor used to create a task.","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" * Returns the status icon of a task.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" * @return Status icon of a task","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" return (this.isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" * Marks a task as undone.","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" * Returns a String representation of a Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of a Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" return this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" * Returns the Task from the save format.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" * @return Task generated from the save format","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" public static Task fromSaveFormat(String line) throws GrumpyGordonException {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" return Parser.parseStringToTask(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":" * Returns the format in which a Task will be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of the save format of a Task.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" public abstract String toSaveFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":" * Returns the description of a Task.","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of the description of a Task.","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":" return this.description;","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":82}},{"path":"src/main/java/grumpygordon/tasks/TaskComparator.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" * Represents a comparator for tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"public class TaskComparator implements Comparator\u003cTask\u003e {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" * Compares two tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param t1 First task","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * @param t2 Second task","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" * @return The comparison result","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" public int compare(Task t1, Task t2) {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" return t1.getDescription().compareTo(t2.getDescription());","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"craigtonlian":19}},{"path":"src/main/java/grumpygordon/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":" * Represents a list of tasks added by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * Response when list is empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" private static final String EMPTY_TASK_LIST_RESPONSE \u003d \"The list is empty, you donkey!\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" * Response when list is not empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" private static final String NON_EMPTY_TASK_LIST_RESPONSE \u003d \"Here\u0027s your list, you donkey!\";","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" * The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" * Constructor of TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" public int size() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" return tasks.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":" * Returns the info of a tasks from it\u0027s index in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of the task in the list","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":" * Adds a new task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"craigtonlian"},"content":" * @param task Task to be added","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"craigtonlian"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"craigtonlian"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"craigtonlian"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"craigtonlian"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of task to be deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"craigtonlian"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"craigtonlian"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"craigtonlian"},"content":" * Sorts the tasks in the list.","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"craigtonlian"},"content":" public void sortTasks() {","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"craigtonlian"},"content":" this.tasks.sort(new TaskComparator());","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"craigtonlian"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of task to be marked","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"craigtonlian"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"craigtonlian"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"craigtonlian"},"content":" * Marks a task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"craigtonlian"},"content":" * @param index Index of task to be marked","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"craigtonlian"},"content":" public void markTaskAsUndone(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"craigtonlian"},"content":" this.tasks.get(index).markAsUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"craigtonlian"},"content":" * Returns a String representation of a TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of a TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"craigtonlian"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"craigtonlian"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"craigtonlian"},"content":" if (this.tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"craigtonlian"},"content":" sb.append(EMPTY_TASK_LIST_RESPONSE).append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"craigtonlian"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"craigtonlian"},"content":" sb.append(NON_EMPTY_TASK_LIST_RESPONSE).append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"craigtonlian"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"craigtonlian"},"content":" sb.append(i + 1)","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"craigtonlian"},"content":" .append(\". \")","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"craigtonlian"},"content":" .append(tasks.get(i).toString())","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"craigtonlian"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"craigtonlian"},"content":" return sb.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"craigtonlian":109}},{"path":"src/main/java/grumpygordon/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" * Constructor to create a Todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" * @param description Description of task","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" * @param isDone Boolean that represents whether the task is done","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * Returns a String representation of a Todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of a Todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" return \"[T][\" + this.getStatusIcon() + \"] \" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" * Returns the format in which a Todo task will be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" * @return String representation of the save format of a Todo task","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" public String toSaveFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" return \"T | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":34}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"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-05"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" \u003cHBox alignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" \u003cInsets top\u003d\"0\" bottom\u003d\"0\" left\u003d\"10\" right\u003d\"10\"/\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" maxWidth\u003d\"Infinity\" minHeight\u003d\"-Infinity\"/\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" \u003cHBox spacing\u003d\"5.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" \u003cInsets top\u003d\"0\" bottom\u003d\"0\" left\u003d\"5\" right\u003d\"5\"/\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"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":21,"author":{"gitId":"craigtonlian"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"craigtonlian":26}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"600.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"grumpygordon.controllers.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"524.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"524.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"600.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"588.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"craigtonlian":19}},{"path":"src/test/java/grumpygordon/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"import grumpygordon.exceptions.GrumpyGordonDateTimeFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" * Represents a test class for Parser.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" * Tests the parseDateTime method of Parser.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonDateTimeFormatException If the datetime is invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" public void parseDateTime_validDateTime_success() throws GrumpyGordonDateTimeFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" assertEquals(LocalDateTime.of(2021, 9, 1, 19, 32), Parser.parseDateTime(\"2021-09-01 19:32\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" assertEquals(LocalDateTime.of(1995, 2, 28, 0, 0), Parser.parseDateTime(\"1995-02-28 00:00\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"craigtonlian"},"content":" * Tests the parseDateTime method of Parser.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"craigtonlian"},"content":" * @throws GrumpyGordonDateTimeFormatException If the datetime is invalid","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"craigtonlian"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"craigtonlian"},"content":" public void parseDateTime_invalidDateTime_exceptionThrown() throws GrumpyGordonDateTimeFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"craigtonlian"},"content":" assertEquals(LocalDateTime.of(2021, 9, 1, 19, 32), Parser.parseDateTime(\"2021-09-01 19-32\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"craigtonlian"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"craigtonlian"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"Invalid datetime format.\\n\", e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"craigtonlian"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"craigtonlian"},"content":" assertEquals(LocalDateTime.of(2021, 2, 31, 19, 32), Parser.parseDateTime(\"2021-02-31 19-32\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"craigtonlian"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"craigtonlian"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"Invalid date \u0027FEBRUARY 31\u0027\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"craigtonlian":48}},{"path":"src/test/java/grumpygordon/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"package grumpygordon.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"craigtonlian"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"craigtonlian"},"content":" * Represents a test class for Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"craigtonlian"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"craigtonlian"},"content":" * Tests the string conversion of Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"craigtonlian"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"craigtonlian"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"[T][X] Bake cake\", new Todo(\"Bake cake\", true).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"[T][ ] Sleep\", new Todo(\"Sleep\", false).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"craigtonlian"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":" * Tests the save format conversion of Todo.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"craigtonlian"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"craigtonlian"},"content":" public void testSaveFormatConversion() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"T | 1 | Bake cake\", new Todo(\"Bake cake\", true).toSaveFormat());","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"craigtonlian"},"content":" assertEquals(\"T | 0 | Sleep\", new Todo(\"Sleep\", false).toSaveFormat());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"craigtonlian"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"craigtonlian"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"craigtonlian":28}},{"path":"text-ui-test/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"T | 0 | eat","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"D | 0 | sleep | 2023-03-10T20:00","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"E | 0 | fight | 2023-03-10T12:00 | 2023-03-10T14:00","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"craigtonlian":3}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"craigtonlian"},"content":"todo eat","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"craigtonlian"},"content":"deadline sleep /by 2023-03-10 20:00","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"event fight /from 2023-03-10 12:00 /to 2023-03-10 14:00","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"craigtonlian":5}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"craigtonlian"},"content":"REM Delete tasks.txt if it exists","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"craigtonlian"},"content":"if exist .\\data\\tasks.txt del .\\data\\tasks.txt","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"craigtonlian"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"craigtonlian"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\grumpygordon\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"craigtonlian"},"content":"java -classpath ..\\bin grumpygordon.GrumpyGordon \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"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":{"craigtonlian":5,"-":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":"craigtonlian"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/grumpygordon/*.java","lastModifiedDate":"2023-08-31"},{"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":"craigtonlian"},"content":"# run the program, feed grumpygordon.commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"craigtonlian"},"content":"java -classpath ../bin GrumpyGordon \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-19"},{"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":{"craigtonlian":3,"-":35}}] diff --git a/craigtonlian_ip_master/commits.json b/craigtonlian_ip_master/commits.json index c81a2a16..e6465b8c 100644 --- a/craigtonlian_ip_master/commits.json +++ b/craigtonlian_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"craigtonlian":[{"date":"2023-08-19","commitResults":[{"hash":"7b6f7149ae4dcf0ddb76aa8d9faff3f1617bf6ab","isMergeCommit":false,"messageTitle":"added Level-0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"bc992638464ec14f4f75535ecb7be851553a40f1","isMergeCommit":false,"messageTitle":"added Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"b051a53760626d11446f9c19155fcdb7bd410de8","isMergeCommit":false,"messageTitle":"added Level-2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"3e71c3289a36e834c2a1a9710df8fa799ea0f03f","isMergeCommit":false,"messageTitle":"added Level-3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":20}}},{"hash":"041dfa2e9c40d56942105b05e2ffb774524346c3","isMergeCommit":false,"messageTitle":"added Level-4: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":7}}},{"hash":"262a7fa314393aa0dde6034fa36c2ee45b066c63","isMergeCommit":false,"messageTitle":"added A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"a2684ebd21c12f7b744431b2f95afda8f3a66741","isMergeCommit":false,"messageTitle":"added Level-5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":221,"deletions":75}}},{"hash":"16be6e8b6608223331d6c412bb599da0de9098ab","isMergeCommit":false,"messageTitle":"added Level-6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":13}}},{"hash":"52e41560d58fe20f648c773adf4813f4d237d608","isMergeCommit":false,"messageTitle":"added A-Enums: Use Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":10}}},{"hash":"e4818c12a68d5acc9579c82508430dc4ca14da74","isMergeCommit":false,"messageTitle":"added A-Enums: Use Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":10}}},{"hash":"3bd536a8efe6a46147577d7f5a5769bf8c2855ef","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/craigtonlian/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/Command.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-08-24","commitResults":[{"hash":"9f989df59be0e06d9c10c2f06c75e20f87e3270e","isMergeCommit":false,"messageTitle":"added: javadocs comments for classes","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"4dc9580d6c66bcc64555dbccf90c4d11be4a6695","isMergeCommit":false,"messageTitle":"Add Level-7: Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":147,"deletions":40}}},{"hash":"5b342c1a2528edfdd44e609219877703339af65e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c9a69ca3721ec4c7f0139d9b39dd0299e97c00cb","isMergeCommit":false,"messageTitle":"Add Level-8: Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":5},"java":{"insertions":82,"deletions":26}}},{"hash":"b68fb86b1b6bef8e93f529b79dd3e6079e872101","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"6e9067908bbf3aec657a11654f8d57aaa2240837","isMergeCommit":false,"messageTitle":"Add A-MoreOOP: Use More OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":484,"deletions":391}}},{"hash":"7e9900583aa2f49b7e1706dde0c9b7b92d722e1c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"fb34479e66f206462d5c45281cda6de57108f84c","isMergeCommit":false,"messageTitle":"Add A-Packages: Organize into Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":37},"sh":{"insertions":1,"deletions":1}}},{"hash":"eaf3c9c78e7d6c96d62885f1337fcf3fd10d0a2d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"6d2c8b15d5fbd882d25000fb43a1e943984c38ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"3792dc12ec68f91d6a2cb3b1698affc2530c54f8","isMergeCommit":false,"messageTitle":"Add A-JUnit: Add JUnit Tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":194,"deletions":199}}},{"hash":"c37c95c1eea5460e4f9f2d87d2460b548f816680","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"e0ca166e71307e6bb11d2b304ab6d77d92f896f6","isMergeCommit":false,"messageTitle":"Add A-Jar: Create a JAR File","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":2,"deletions":0},"java":{"insertions":169,"deletions":25}}},{"hash":"e6010e8718762409f870f27f939d3047aee1e549","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"4b1127d38c527f42eea8387032a11173d27dd364","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":379,"deletions":35}}},{"hash":"946e1b609f7fe2c449dc8c18ddc5fc6decc24117","isMergeCommit":false,"messageTitle":"Add coding standard edits","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":12}}},{"hash":"de5996f4985b9dd53fddc84f1fc4efe502e72e58","isMergeCommit":false,"messageTitle":"Add Level-9: Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":2},"java":{"insertions":120,"deletions":77}}},{"hash":"bda3dadc90f18db623cc80fe21ef7929a01a6243","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7a18e287a37db07bd30ee568718b898c8a088eb3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/grumpygordon/ui/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"c61fc5b51acbd322339ac7eec71d44cebbd873ce","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/grumpygordon/parser/Parser.java\n#\tsrc/main/java/grumpygordon/storage/Storage.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"ea20114e2f6ed31171324ebe8961b41b39ad841b","isMergeCommit":false,"messageTitle":"Fix runtest.bat error when run with existing task list storage file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":17},"java":{"insertions":3,"deletions":35},"bat":{"insertions":5,"deletions":2},"sh":{"insertions":1,"deletions":1}}},{"hash":"4fe05578a1bc2b0f88fbce469d93d7afd3456865","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-textui-fixes\u0027","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"55ade708baa211978bcc22e9ee5cb1841f9e638c","isMergeCommit":false,"messageTitle":"Add A-CheckStyle: Use CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":118,"deletions":77}}},{"hash":"59968a297184915e002014f63deac314896115ce","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"7aee8f4acb1cfd1472c11bb7083b3f3a7607d7f9","isMergeCommit":false,"messageTitle":"Add gradle dependencies","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"5e6e73977365c8746a216f34fbfc935a4c608a49","isMergeCommit":false,"messageTitle":"Add launcher integration with javafx","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":27,"deletions":1}}},{"hash":"093a5e8936d01666263ae6cd461d9e65bbb0f489","isMergeCommit":false,"messageTitle":"Add ScrollPane, Container, TextField, SendButton ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":0}}},{"hash":"244457a4092686f8c59d43d205a0ab0eef1dd9c8","isMergeCommit":false,"messageTitle":"Add DialogBox","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":4}}},{"hash":"c00fb97b4b005e4eeec291c971f42b7859c291b2","isMergeCommit":false,"messageTitle":"Add DialogBox custom behaviors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":5}}}]},{"date":"2023-09-04","commitResults":[{"hash":"825125f80f9ab3e458d50020be5062a4639ab2f3","isMergeCommit":false,"messageTitle":"Add gui without response loop","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":207,"deletions":94}}}]},{"date":"2023-09-05","commitResults":[{"hash":"50481b09fe9ecd6167030e5d2bd1f5a233a950d5","isMergeCommit":false,"messageTitle":"Integrate response loop with GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"fxml":{"insertions":2,"deletions":2},"java":{"insertions":139,"deletions":172}}},{"hash":"521f3093f60f35c5c6cfb952a263697a6ab56ca5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"f710c2c8644da2a53b3eb5776cdf96a43486540b","isMergeCommit":false,"messageTitle":"Add assertions to Parser class","messageBody":"No assertions used in Parser class.\n\nAssertions help to ensure expected behaviour.\n\nLet\u0027s update Parser class with the necessary assertions.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":93,"deletions":171}}},{"hash":"bcb4fdafcc705e2c3c7f8c0579b61dacfb398c79","isMergeCommit":false,"messageTitle":"Unify Ui and Launcher with GrumpyGordon class","messageBody":"Ui class and Launcher class is redundant.\n\nWith the integration of JavaFX, there is no further need for a separate\nUi class to encapsulate the interface components.\n\nLet\u0027s refactor away the unnecessary code portions for better\nmaintainability.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":130}}},{"hash":"cea0476ea236a8001c247bf7694eb6ac50576514","isMergeCommit":true,"messageTitle":"Merge pull request #1 from craigtonlian/branch-A-CodeQuality","messageBody":"Merge A-CodeQuality to master","fileTypesAndContributionMap":{}},{"hash":"2b1d2d8426298957b531fb24c980654e9e91f129","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/craigtonlian/ip","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"87f362cbb1f82bbc03d01ac2048c8e8504c8efc4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"# Conflicts:\n#\tsrc/main/java/grumpygordon/ui/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"d53dd292b82ddd4d98ee698f0f76bb000292f952","isMergeCommit":true,"messageTitle":"Merge pull request #2 from craigtonlian/branch-A-Assertions","messageBody":"Merge A-Assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"681c2becae74c358099d401d6d1bc16e97bb0f2d","isMergeCommit":false,"messageTitle":"Set up CI","messageBody":"No CI is set up with github workflow.\n\nCI will improve automated build processes when certain project events\nare triggered.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-12","commitResults":[{"hash":"41d1939cb82b3dfdf0a210813b1063b64916fa21","isMergeCommit":false,"messageTitle":"Add task sorting function","messageBody":"Tasks are sorted by order of insertion.\n\nTasks can be more easily located if sorted alphabetically.\n\nLet\u0027s implement the functionality to allow tasks to sorted\nalphabetically.\n","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":8},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":56,"deletions":10}}},{"hash":"a7472ec46456ee59062927a9af1640444d933f1e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Sort\u0027","messageBody":"","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"5e6440d1a17b298f868efb55ef85743e92a291ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CI","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"craigtonlian":{"java":1528,"md":0,"fxml":35,"sh":3,"bat":5,"gradle":22,"txt":17}},"authorContributionVariance":{"craigtonlian":128794.914},"authorDisplayNameMap":{"craigtonlian":"CS2103T-W08-1 CRAI..JOHN"}} +{"authorDailyContributionsMap":{"craigtonlian":[{"date":"2023-08-19","commitResults":[{"hash":"7b6f7149ae4dcf0ddb76aa8d9faff3f1617bf6ab","isMergeCommit":false,"messageTitle":"added Level-0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"bc992638464ec14f4f75535ecb7be851553a40f1","isMergeCommit":false,"messageTitle":"added Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"b051a53760626d11446f9c19155fcdb7bd410de8","isMergeCommit":false,"messageTitle":"added Level-2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":8}}},{"hash":"3e71c3289a36e834c2a1a9710df8fa799ea0f03f","isMergeCommit":false,"messageTitle":"added Level-3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":20}}},{"hash":"041dfa2e9c40d56942105b05e2ffb774524346c3","isMergeCommit":false,"messageTitle":"added Level-4: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":7}}},{"hash":"262a7fa314393aa0dde6034fa36c2ee45b066c63","isMergeCommit":false,"messageTitle":"added A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"a2684ebd21c12f7b744431b2f95afda8f3a66741","isMergeCommit":false,"messageTitle":"added Level-5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":221,"deletions":75}}},{"hash":"16be6e8b6608223331d6c412bb599da0de9098ab","isMergeCommit":false,"messageTitle":"added Level-6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":13}}},{"hash":"52e41560d58fe20f648c773adf4813f4d237d608","isMergeCommit":false,"messageTitle":"added A-Enums: Use Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":10}}},{"hash":"e4818c12a68d5acc9579c82508430dc4ca14da74","isMergeCommit":false,"messageTitle":"added A-Enums: Use Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":10}}},{"hash":"3bd536a8efe6a46147577d7f5a5769bf8c2855ef","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/craigtonlian/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/Command.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-08-24","commitResults":[{"hash":"9f989df59be0e06d9c10c2f06c75e20f87e3270e","isMergeCommit":false,"messageTitle":"added: javadocs comments for classes","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"4dc9580d6c66bcc64555dbccf90c4d11be4a6695","isMergeCommit":false,"messageTitle":"Add Level-7: Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":147,"deletions":40}}},{"hash":"5b342c1a2528edfdd44e609219877703339af65e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c9a69ca3721ec4c7f0139d9b39dd0299e97c00cb","isMergeCommit":false,"messageTitle":"Add Level-8: Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":5},"java":{"insertions":82,"deletions":26}}},{"hash":"b68fb86b1b6bef8e93f529b79dd3e6079e872101","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"6e9067908bbf3aec657a11654f8d57aaa2240837","isMergeCommit":false,"messageTitle":"Add A-MoreOOP: Use More OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":484,"deletions":391}}},{"hash":"7e9900583aa2f49b7e1706dde0c9b7b92d722e1c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"fb34479e66f206462d5c45281cda6de57108f84c","isMergeCommit":false,"messageTitle":"Add A-Packages: Organize into Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":37},"sh":{"insertions":1,"deletions":1}}},{"hash":"eaf3c9c78e7d6c96d62885f1337fcf3fd10d0a2d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"6d2c8b15d5fbd882d25000fb43a1e943984c38ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"3792dc12ec68f91d6a2cb3b1698affc2530c54f8","isMergeCommit":false,"messageTitle":"Add A-JUnit: Add JUnit Tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":194,"deletions":199}}},{"hash":"c37c95c1eea5460e4f9f2d87d2460b548f816680","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"e0ca166e71307e6bb11d2b304ab6d77d92f896f6","isMergeCommit":false,"messageTitle":"Add A-Jar: Create a JAR File","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":2,"deletions":0},"java":{"insertions":169,"deletions":25}}},{"hash":"e6010e8718762409f870f27f939d3047aee1e549","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"4b1127d38c527f42eea8387032a11173d27dd364","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":379,"deletions":35}}},{"hash":"946e1b609f7fe2c449dc8c18ddc5fc6decc24117","isMergeCommit":false,"messageTitle":"Add coding standard edits","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":12}}},{"hash":"de5996f4985b9dd53fddc84f1fc4efe502e72e58","isMergeCommit":false,"messageTitle":"Add Level-9: Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":2},"java":{"insertions":120,"deletions":77}}},{"hash":"bda3dadc90f18db623cc80fe21ef7929a01a6243","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7a18e287a37db07bd30ee568718b898c8a088eb3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/grumpygordon/ui/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"c61fc5b51acbd322339ac7eec71d44cebbd873ce","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/grumpygordon/parser/Parser.java\n#\tsrc/main/java/grumpygordon/storage/Storage.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"ea20114e2f6ed31171324ebe8961b41b39ad841b","isMergeCommit":false,"messageTitle":"Fix runtest.bat error when run with existing task list storage file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":17},"java":{"insertions":3,"deletions":35},"bat":{"insertions":5,"deletions":2},"sh":{"insertions":1,"deletions":1}}},{"hash":"4fe05578a1bc2b0f88fbce469d93d7afd3456865","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-textui-fixes\u0027","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"55ade708baa211978bcc22e9ee5cb1841f9e638c","isMergeCommit":false,"messageTitle":"Add A-CheckStyle: Use CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":118,"deletions":77}}},{"hash":"59968a297184915e002014f63deac314896115ce","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"7aee8f4acb1cfd1472c11bb7083b3f3a7607d7f9","isMergeCommit":false,"messageTitle":"Add gradle dependencies","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"5e6e73977365c8746a216f34fbfc935a4c608a49","isMergeCommit":false,"messageTitle":"Add launcher integration with javafx","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":27,"deletions":1}}},{"hash":"093a5e8936d01666263ae6cd461d9e65bbb0f489","isMergeCommit":false,"messageTitle":"Add ScrollPane, Container, TextField, SendButton ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":0}}},{"hash":"244457a4092686f8c59d43d205a0ab0eef1dd9c8","isMergeCommit":false,"messageTitle":"Add DialogBox","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":4}}},{"hash":"c00fb97b4b005e4eeec291c971f42b7859c291b2","isMergeCommit":false,"messageTitle":"Add DialogBox custom behaviors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":5}}}]},{"date":"2023-09-04","commitResults":[{"hash":"825125f80f9ab3e458d50020be5062a4639ab2f3","isMergeCommit":false,"messageTitle":"Add gui without response loop","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":207,"deletions":94}}}]},{"date":"2023-09-05","commitResults":[{"hash":"50481b09fe9ecd6167030e5d2bd1f5a233a950d5","isMergeCommit":false,"messageTitle":"Integrate response loop with GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"fxml":{"insertions":2,"deletions":2},"java":{"insertions":139,"deletions":172}}},{"hash":"521f3093f60f35c5c6cfb952a263697a6ab56ca5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"f710c2c8644da2a53b3eb5776cdf96a43486540b","isMergeCommit":false,"messageTitle":"Add assertions to Parser class","messageBody":"No assertions used in Parser class.\n\nAssertions help to ensure expected behaviour.\n\nLet\u0027s update Parser class with the necessary assertions.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":93,"deletions":171}}},{"hash":"bcb4fdafcc705e2c3c7f8c0579b61dacfb398c79","isMergeCommit":false,"messageTitle":"Unify Ui and Launcher with GrumpyGordon class","messageBody":"Ui class and Launcher class is redundant.\n\nWith the integration of JavaFX, there is no further need for a separate\nUi class to encapsulate the interface components.\n\nLet\u0027s refactor away the unnecessary code portions for better\nmaintainability.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":130}}},{"hash":"cea0476ea236a8001c247bf7694eb6ac50576514","isMergeCommit":true,"messageTitle":"Merge pull request #1 from craigtonlian/branch-A-CodeQuality","messageBody":"Merge A-CodeQuality to master","fileTypesAndContributionMap":{}},{"hash":"2b1d2d8426298957b531fb24c980654e9e91f129","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/craigtonlian/ip","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"87f362cbb1f82bbc03d01ac2048c8e8504c8efc4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"# Conflicts:\n#\tsrc/main/java/grumpygordon/ui/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"d53dd292b82ddd4d98ee698f0f76bb000292f952","isMergeCommit":true,"messageTitle":"Merge pull request #2 from craigtonlian/branch-A-Assertions","messageBody":"Merge A-Assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"681c2becae74c358099d401d6d1bc16e97bb0f2d","isMergeCommit":false,"messageTitle":"Set up CI","messageBody":"No CI is set up with github workflow.\n\nCI will improve automated build processes when certain project events\nare triggered.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-12","commitResults":[{"hash":"41d1939cb82b3dfdf0a210813b1063b64916fa21","isMergeCommit":false,"messageTitle":"Add task sorting function","messageBody":"Tasks are sorted by order of insertion.\n\nTasks can be more easily located if sorted alphabetically.\n\nLet\u0027s implement the functionality to allow tasks to sorted\nalphabetically.\n","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":8},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":56,"deletions":10}}},{"hash":"a7472ec46456ee59062927a9af1640444d933f1e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Sort\u0027","messageBody":"","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"5e6440d1a17b298f868efb55ef85743e92a291ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CI","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"aef0928746a9ca3cedb89e8d3aa41700a9d900eb","isMergeCommit":false,"messageTitle":"Improve GUI with padding and colors","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"fxml":{"insertions":12,"deletions":2},"java":{"insertions":10,"deletions":18}}},{"hash":"983e04b81c848d2523e5394cf49237bc7ffb8471","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-BetterGui\u0027","messageBody":"","tags":["A-BetterGui"],"fileTypesAndContributionMap":{}},{"hash":"02bd1960015194d70101b2239fa79e252141eea2","isMergeCommit":false,"messageTitle":"Update user guide readme","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":9},"fxml":{"insertions":5,"deletions":5},"java":{"insertions":22,"deletions":6},"md":{"insertions":101,"deletions":16}}},{"hash":"5ce1dd9801ca336034585d871980a5de0f18ff08","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5dd2c91b293cb08ab3285b6a952dba9beb22ccab","isMergeCommit":false,"messageTitle":"Fix checkstyle error in Main","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"129f10e16583236fd55aa3e600a1d39c319cbe8f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e67fc18ba7851e5c08a2548bc90482ffa24b3a79","isMergeCommit":false,"messageTitle":"Fix formatting of readme","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":22,"deletions":0}}},{"hash":"003238fe37b7c8320b150fd80f8b7f21c1b24e51","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{}},{"hash":"d3db5546a8add23ba1b7689cbcde67bc9b03f026","isMergeCommit":false,"messageTitle":"Update javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"8f1fbe65312b26c4f674e0ba4ab45e36ff3db4b7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"craigtonlian":{"java":1539,"md":115,"fxml":45,"sh":3,"bat":5,"gradle":22,"txt":12}},"authorContributionVariance":{"craigtonlian":118277.8},"authorDisplayNameMap":{"craigtonlian":"CS2103T-W08-1 CRAI..JOHN"}} diff --git a/darrentfy_ip_master/commits.json b/darrentfy_ip_master/commits.json index c2a45287..35ef13b6 100644 --- a/darrentfy_ip_master/commits.json +++ b/darrentfy_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"darrentfy":[{"date":"2023-08-22","commitResults":[{"hash":"cc1d56c6ac831d7506d5cd2e04fa7ad741ac9595","isMergeCommit":false,"messageTitle":"renamed chatbot and implemented skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"706f66747315532f2aca7d53b671afd4db6f97a4","isMergeCommit":false,"messageTitle":"added feature to echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"a147b6a42042be0f6674dcd218763d722e4f17bb","isMergeCommit":false,"messageTitle":"added feature to add and display tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":7}}}]},{"date":"2023-08-23","commitResults":[{"hash":"104ab2d1e09d089e76a7571da063f81b9bf4ee50","isMergeCommit":false,"messageTitle":"added Task class to represent tasks and feature to mark and unmark tasks as done","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":5}}},{"hash":"fa1b6b26209e2da2d755558b570436fb5e3d3626","isMergeCommit":false,"messageTitle":"added subclasses of the Task class, Deadline, Event and Todo","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":90}}},{"hash":"978bdaca5653098289a4197535b026e9e2e14e33","isMergeCommit":false,"messageTitle":"added custom exception classes and handling of incorrect inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":10}}},{"hash":"8fa855e9c57882f04726acef061fabacfa3121d2","isMergeCommit":false,"messageTitle":"added feature to delete tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"70c3407b0d609ed2fb2759555ad3096d44b6b2e6","isMergeCommit":false,"messageTitle":"reorganised code and and removed exceptions that could be handled with if else statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":83}}},{"hash":"2666a559f4bd34583d5f08aef0181acde2ad857a","isMergeCommit":false,"messageTitle":"added DukeException class to handle exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":83}}},{"hash":"7f0a5a59fd7716dd541098f061932bdbe7e9f52b","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0}}},{"hash":"9ee4f8114c524ea3c197a39ba67a1c6905da57a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of github.com:darrentfy/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"cb9bef7fa61b2b0fba30e38746a6421e36fd53e0","isMergeCommit":true,"messageTitle":"Added DukeException class to handle exceptions","messageBody":"","tags":["Level-6","Level-5","A-Exceptions","A-Collections"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-24","commitResults":[{"hash":"730512cc5f6a197aff6526f1fae9bc62cdafde7d","isMergeCommit":false,"messageTitle":"added text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":28,"deletions":0},"java":{"insertions":9,"deletions":9}}}]},{"date":"2023-08-28","commitResults":[{"hash":"1df0b96cf5ddef7a168db4ef5ca0220c985bf7aa","isMergeCommit":false,"messageTitle":"Add checks for whitespace after command in user input eg \"todo \"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":9}}}]},{"date":"2023-08-29","commitResults":[{"hash":"75058e280ec7a7faac7ad52085344565a7da703f","isMergeCommit":false,"messageTitle":"Add feature to save tasks list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":6}}},{"hash":"8050da495819bcb3dbfed47bbe9db1f91970789c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"* branch-Level-7:\n Add feature to save tasks list\n","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c08ea732e87f871564661c031936211c50a1ca1b","isMergeCommit":false,"messageTitle":"Add feature to read date and time and update testcases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":38,"deletions":16}}},{"hash":"2ad22f0397292b60987adf6b9cf4bb27c80a304d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Add feature to read date and time and update testcases\n","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"7381fa0759b25c9ea29acacd444b2ff8607b2101","isMergeCommit":false,"messageTitle":"Create new classes to refactor code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":390,"deletions":177}}},{"hash":"826f4b85ae43c12e8c01d8db47e961f72885bc58","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-moreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"fae2fb6894aaa5b3efcb3b05eac6a97fd73803c5","isMergeCommit":false,"messageTitle":"Organise classes into task, command and duke packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":17},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"7f6185c1de100dd673b53caf64cedddb7c19dca3","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"f2d291c07916fd45d082c38a105fdf7a5e6e9359","isMergeCommit":false,"messageTitle":"Set up Gradle and add unit testing for Parser and TaskList","messageBody":"","tags":["v0.1","A-Jar","A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":287,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"8748530699ae4301aaa9e536ac5c26e81bf795fb","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":345,"deletions":22}}},{"hash":"f9de69dad60af7691be5d9a5d597d04a51f31abc","isMergeCommit":false,"messageTitle":"Reorganised code to fit SE-EDU Java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":381,"deletions":68}}},{"hash":"c30fedf544c564063b88e64c8287755ac19d060c","isMergeCommit":false,"messageTitle":"Add feature to filter tasks using find keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":18}}},{"hash":"62b3e5481326ea37fb7f77cb4bb10b82632ecb20","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8e81219ebd02e6f745951be00250780e5b66b584","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"61033a8ea5dced4b63cb057b92e90a0f0e10c955","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"c169af822e8764bac0134ee20519c9c16f45e4e1","isMergeCommit":false,"messageTitle":"Add checkstyle and fixed coding style violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":88,"deletions":52}}},{"hash":"96ca4e08ab5ed8dc24c05e608377ecce1114c38a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"5853c741c29540464a4811e409a8c0860575cf6e","isMergeCommit":false,"messageTitle":"Add GUI to Duke using JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"fxml":{"insertions":46,"deletions":0},"java":{"insertions":233,"deletions":190}}}]},{"date":"2023-09-08","commitResults":[{"hash":"7edba06b5f0c5d42db81053599d3a6c4ce108459","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"63c9289f22ccbed512a8aebe83102765e3ff2b25","isMergeCommit":false,"messageTitle":"Refactor task classes to remove an unnecessary method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":32}}},{"hash":"97cf97a70be9d2a24878c1bd65a498f13d2f78ce","isMergeCommit":false,"messageTitle":"Refactor Task classes and add Java assert","messageBody":"Java assert feature is not used and task classes have a getType method\nto return a string with a letter representing the task type.\n\nWhile there are checks for invalid user input values, there is no way to\ncheck for any invalid program states. The getType method is repetitive\nas it simply returns a single letter depending on the Task subclass.\n\nLet\u0027s,\n* add Java assertions to monitor program state\n* refactor Task subclasses to have a taskType field instead\n\nAdding assertions allow us to detect possible bugs and refactoring the\nTask subclasses helps reduce code duplication from unnecessary methods.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":32}}},{"hash":"49a10abd6513605705b9f6bf4cb0833d8352668a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Assertions\u0027","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"45ecbe8538c3730ad081a2a463d5a37c4bda0fc8","isMergeCommit":false,"messageTitle":"Refactor code to improve code quality","messageBody":"Parser has multiple repeated checks and long conditional checks.\n\nThese unnecessarily repetitive and complicated checks make code less\nreadable.\n\nLet\u0027s abstract the checks into a method and rewrite repetitive messages\nas constants.\n\nThese changes will make the code more readable and easier to understand.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":49}}},{"hash":"7e557db557590db85d47ce5ac99c99c6d700c36e","isMergeCommit":true,"messageTitle":"Merge pull request #1 from darrentfy/branch-A-CodeQuality","messageBody":"Refactor code to improve code quality","fileTypesAndContributionMap":{}},{"hash":"7a7f85c9a49eda774420838e41abb8428dfac008","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of github.com:darrentfy/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"55b4e2984264b993b021456660a12517e4053556","isMergeCommit":false,"messageTitle":"Add user help feature","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":4,"deletions":4},"java":{"insertions":90,"deletions":56}}},{"hash":"b72d4c677259cecbc2eb2b7d102bc1bb9c95655a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Help\u0027","messageBody":"","tags":["C-Help"],"fileTypesAndContributionMap":{}},{"hash":"fbb6ae2e9a4b93010523067d8291223ba3ceaeb7","isMergeCommit":false,"messageTitle":"Fix issues with checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"darrentfy":{"java":1548,"md":2,"fxml":46,"sh":1,"bat":1,"gradle":20,"txt":34}},"authorContributionVariance":{"darrentfy":69198.914},"authorDisplayNameMap":{"darrentfy":"CS2103T-W13-4 DARR..ANYI"}} +{"authorDailyContributionsMap":{"darrentfy":[{"date":"2023-08-22","commitResults":[{"hash":"cc1d56c6ac831d7506d5cd2e04fa7ad741ac9595","isMergeCommit":false,"messageTitle":"renamed chatbot and implemented skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"706f66747315532f2aca7d53b671afd4db6f97a4","isMergeCommit":false,"messageTitle":"added feature to echo commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"a147b6a42042be0f6674dcd218763d722e4f17bb","isMergeCommit":false,"messageTitle":"added feature to add and display tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":7}}}]},{"date":"2023-08-23","commitResults":[{"hash":"104ab2d1e09d089e76a7571da063f81b9bf4ee50","isMergeCommit":false,"messageTitle":"added Task class to represent tasks and feature to mark and unmark tasks as done","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":5}}},{"hash":"fa1b6b26209e2da2d755558b570436fb5e3d3626","isMergeCommit":false,"messageTitle":"added subclasses of the Task class, Deadline, Event and Todo","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":90}}},{"hash":"978bdaca5653098289a4197535b026e9e2e14e33","isMergeCommit":false,"messageTitle":"added custom exception classes and handling of incorrect inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":10}}},{"hash":"8fa855e9c57882f04726acef061fabacfa3121d2","isMergeCommit":false,"messageTitle":"added feature to delete tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"70c3407b0d609ed2fb2759555ad3096d44b6b2e6","isMergeCommit":false,"messageTitle":"reorganised code and and removed exceptions that could be handled with if else statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":83}}},{"hash":"2666a559f4bd34583d5f08aef0181acde2ad857a","isMergeCommit":false,"messageTitle":"added DukeException class to handle exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":83}}},{"hash":"7f0a5a59fd7716dd541098f061932bdbe7e9f52b","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0}}},{"hash":"9ee4f8114c524ea3c197a39ba67a1c6905da57a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of github.com:darrentfy/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"cb9bef7fa61b2b0fba30e38746a6421e36fd53e0","isMergeCommit":true,"messageTitle":"Added DukeException class to handle exceptions","messageBody":"","tags":["Level-6","Level-5","A-Exceptions","A-Collections"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-24","commitResults":[{"hash":"730512cc5f6a197aff6526f1fae9bc62cdafde7d","isMergeCommit":false,"messageTitle":"added text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":28,"deletions":0},"java":{"insertions":9,"deletions":9}}}]},{"date":"2023-08-28","commitResults":[{"hash":"1df0b96cf5ddef7a168db4ef5ca0220c985bf7aa","isMergeCommit":false,"messageTitle":"Add checks for whitespace after command in user input eg \"todo \"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":9}}}]},{"date":"2023-08-29","commitResults":[{"hash":"75058e280ec7a7faac7ad52085344565a7da703f","isMergeCommit":false,"messageTitle":"Add feature to save tasks list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":6}}},{"hash":"8050da495819bcb3dbfed47bbe9db1f91970789c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"* branch-Level-7:\n Add feature to save tasks list\n","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c08ea732e87f871564661c031936211c50a1ca1b","isMergeCommit":false,"messageTitle":"Add feature to read date and time and update testcases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":38,"deletions":16}}},{"hash":"2ad22f0397292b60987adf6b9cf4bb27c80a304d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Add feature to read date and time and update testcases\n","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"7381fa0759b25c9ea29acacd444b2ff8607b2101","isMergeCommit":false,"messageTitle":"Create new classes to refactor code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":390,"deletions":177}}},{"hash":"826f4b85ae43c12e8c01d8db47e961f72885bc58","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-moreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"fae2fb6894aaa5b3efcb3b05eac6a97fd73803c5","isMergeCommit":false,"messageTitle":"Organise classes into task, command and duke packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":17},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"7f6185c1de100dd673b53caf64cedddb7c19dca3","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"f2d291c07916fd45d082c38a105fdf7a5e6e9359","isMergeCommit":false,"messageTitle":"Set up Gradle and add unit testing for Parser and TaskList","messageBody":"","tags":["v0.1","A-Jar","A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":287,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"8748530699ae4301aaa9e536ac5c26e81bf795fb","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":345,"deletions":22}}},{"hash":"f9de69dad60af7691be5d9a5d597d04a51f31abc","isMergeCommit":false,"messageTitle":"Reorganised code to fit SE-EDU Java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":381,"deletions":68}}},{"hash":"c30fedf544c564063b88e64c8287755ac19d060c","isMergeCommit":false,"messageTitle":"Add feature to filter tasks using find keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":18}}},{"hash":"62b3e5481326ea37fb7f77cb4bb10b82632ecb20","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8e81219ebd02e6f745951be00250780e5b66b584","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"61033a8ea5dced4b63cb057b92e90a0f0e10c955","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"c169af822e8764bac0134ee20519c9c16f45e4e1","isMergeCommit":false,"messageTitle":"Add checkstyle and fixed coding style violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":88,"deletions":52}}},{"hash":"96ca4e08ab5ed8dc24c05e608377ecce1114c38a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"5853c741c29540464a4811e409a8c0860575cf6e","isMergeCommit":false,"messageTitle":"Add GUI to Duke using JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"fxml":{"insertions":46,"deletions":0},"java":{"insertions":233,"deletions":190}}}]},{"date":"2023-09-08","commitResults":[{"hash":"7edba06b5f0c5d42db81053599d3a6c4ce108459","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"63c9289f22ccbed512a8aebe83102765e3ff2b25","isMergeCommit":false,"messageTitle":"Refactor task classes to remove an unnecessary method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":32}}},{"hash":"97cf97a70be9d2a24878c1bd65a498f13d2f78ce","isMergeCommit":false,"messageTitle":"Refactor Task classes and add Java assert","messageBody":"Java assert feature is not used and task classes have a getType method\nto return a string with a letter representing the task type.\n\nWhile there are checks for invalid user input values, there is no way to\ncheck for any invalid program states. The getType method is repetitive\nas it simply returns a single letter depending on the Task subclass.\n\nLet\u0027s,\n* add Java assertions to monitor program state\n* refactor Task subclasses to have a taskType field instead\n\nAdding assertions allow us to detect possible bugs and refactoring the\nTask subclasses helps reduce code duplication from unnecessary methods.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":32}}},{"hash":"49a10abd6513605705b9f6bf4cb0833d8352668a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Assertions\u0027","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"45ecbe8538c3730ad081a2a463d5a37c4bda0fc8","isMergeCommit":false,"messageTitle":"Refactor code to improve code quality","messageBody":"Parser has multiple repeated checks and long conditional checks.\n\nThese unnecessarily repetitive and complicated checks make code less\nreadable.\n\nLet\u0027s abstract the checks into a method and rewrite repetitive messages\nas constants.\n\nThese changes will make the code more readable and easier to understand.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":49}}},{"hash":"7e557db557590db85d47ce5ac99c99c6d700c36e","isMergeCommit":true,"messageTitle":"Merge pull request #1 from darrentfy/branch-A-CodeQuality","messageBody":"Refactor code to improve code quality","fileTypesAndContributionMap":{}},{"hash":"7a7f85c9a49eda774420838e41abb8428dfac008","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of github.com:darrentfy/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"55b4e2984264b993b021456660a12517e4053556","isMergeCommit":false,"messageTitle":"Add user help feature","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":4,"deletions":4},"java":{"insertions":90,"deletions":56}}},{"hash":"b72d4c677259cecbc2eb2b7d102bc1bb9c95655a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Help\u0027","messageBody":"","tags":["C-Help","BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"fbb6ae2e9a4b93010523067d8291223ba3ceaeb7","isMergeCommit":false,"messageTitle":"Fix issues with checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"darrentfy":{"java":1548,"md":2,"fxml":46,"sh":1,"bat":1,"gradle":20,"txt":34}},"authorContributionVariance":{"darrentfy":69198.914},"authorDisplayNameMap":{"darrentfy":"CS2103T-W13-4 DARR..ANYI"}} diff --git a/dloh2236_ip_master/authorship.json b/dloh2236_ip_master/authorship.json index 9c2855f6..588ff5ca 100644 --- a/dloh2236_ip_master/authorship.json +++ b/dloh2236_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":"dloh2236"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" ","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"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":"dloh2236"},"content":" mainClass.set(\"oreo.Oreo\")","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" archiveBaseName \u003d \"oreo\"","lastModifiedDate":"2023-09-03"},{"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":"dloh2236"},"content":"checkstyle{","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"dloh2236":21,"-":40}},{"path":"src/main/java/oreo/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"import oreo.MainWindow;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"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":21,"author":{"gitId":"dloh2236"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" public static DialogBox getOreoDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":62}},{"path":"src/main/java/oreo/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":13}},{"path":"src/main/java/oreo/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" MainWindow gui \u003d fxmlLoader.getController();","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" Oreo oreo \u003d new Oreo(\"/Users/daniel/Desktop/CS2103T/iP/src/main/java/data/oreo.txt\",","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" gui);","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" stage.setTitle(\"Oreo\");","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":31}},{"path":"src/main/java/oreo/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"import oreo.command.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"import oreo.parser.Parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" private Oreo oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" private Image oreoImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/oreo.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" private void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty()); // scroll follows","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" public void setOreo(Oreo oreo) {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" this.oreo \u003d oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"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":46,"author":{"gitId":"dloh2236"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" if (c.isExit()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" exit(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" String response \u003d oreo.execute(c);","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" DialogBox.getOreoDialog(response, oreoImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" public void startUp() {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" oreo.startUp();","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" greetUser();","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" } catch (FileNotFoundException | IllegalDateTimeException |","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" InputMismatchException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" oreo.clearTaskAndFile();","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" String fileCorruptMessage \u003d \"saved file is corrupt, creating new file...\";","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" DialogBox.getOreoDialog(fileCorruptMessage, oreoImage));","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" private void greetUser() {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" DialogBox.getOreoDialog(oreo.greet(), oreoImage));","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" private void exit(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" oreo.closeProcess();","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":" DialogBox.getOreoDialog(oreo.sayBye(), oreoImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"dloh2236"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"dloh2236"},"content":" Platform.exit();","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"dloh2236"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"dloh2236"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"dloh2236"},"content":" DialogBox.getOreoDialog(e.getMessage(), oreoImage));","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":98}},{"path":"src/main/java/oreo/Oreo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import oreo.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import oreo.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" * This class implements the chatbot Oreo.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":"public class Oreo {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" private MainWindow ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" * Constructor of Oreo chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" * @param filePath file path to where saved file is and where saved","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" * task will be written to file for next start up","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" * of chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" public Oreo(String filePath, MainWindow gui) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" this.ui \u003d gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" gui.setOreo(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" gui.startUp();","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" * Handles the main logic of the chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalCommandException If user inputs a command that","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" * is not accepted.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" return \"Oreo heard: \" + input;","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" public void startUp() throws FileNotFoundException, IllegalDateTimeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" storage.readFile(tasks); // reads loaded file","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" public void clearTaskAndFile() {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" storage.clearFile();","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" tasks.clearAll();","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" public String greet() {","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" String greetMessage \u003d \"Woof! I\u0027m Oreo! How may I help you?\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" if (tasks.getNumberOfTask() !\u003d 0) {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" return greetMessage","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" + \"Welcome back! \"","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" + tasks.list();","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" return greetMessage;","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" public String sayBye() {","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" return \"I will be sad to see you go! bye!\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" public String execute(Command command) {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" return command.execute(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" public void closeProcess() throws IOException {","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" storage.writeFile(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"dloh2236":82,"-":1}},{"path":"src/main/java/oreo/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" private Scanner tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" public AddCommand(String command, Scanner tokeniser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" this.tokeniser \u003d tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" Task newTask \u003d Task.generateTask(command, tokeniser);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" return \"Gotchu! noted down: \\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" + Ui.indentLineBy(newTask.toString(), 2)","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" + \"Now you have \" + tasks.getNumberOfTask()","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" + \" tasks in the list!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalCommandException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalDateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":35}},{"path":"src/main/java/oreo/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" return \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":11}},{"path":"src/main/java/oreo/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":" * Implements abstract command class, parent class of specific commands","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" * Executes the command","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" * @param ui Ui of the chatbot","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" * @param tasks Tasklist of the chatbot","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" public abstract String execute(TaskList tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" * Checks if command is bye","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" * @return true if command is ByeCommand","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" return this instanceof ByeCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":29}},{"path":"src/main/java/oreo/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" private Scanner tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" public DeleteCommand(Scanner tokeniser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" this.tokeniser \u003d tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" return tasks.deleteTask(tokeniser);","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalCommandException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":23}},{"path":"src/main/java/oreo/command/EmptyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"public class EmptyCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" return \"uhhh what???\";","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":11}},{"path":"src/main/java/oreo/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" private Scanner tokeniser;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" public FindCommand(Scanner tokeniser) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" this.tokeniser \u003d tokeniser;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" return tasks.findTasksWith(tokeniser);","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalCommandException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dloh2236":24}},{"path":"src/main/java/oreo/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" return tasks.list();","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":12}},{"path":"src/main/java/oreo/command/MarkUnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"public class MarkUnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" private Scanner tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" public MarkUnmarkCommand(String command, Scanner tokeniser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" this.tokeniser \u003d tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" return tasks.changeMark(command, tokeniser);","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalCommandException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":26}},{"path":"src/main/java/oreo/datetime/TimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.datetime;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" * Implements class that handles parsing of time input","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"public class TimeParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" * Parses date input for display","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" * @param input date input","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" * @return output date","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" private static String parseDateOut(String input) throws IllegalDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" String modifiedInput \u003d input.replace(\"/\", \"-\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" LocalDate date;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" date \u003d LocalDate.parse(modifiedInput, format);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" throw new IllegalDateTimeException(\"Date or date format is invalid\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" + \"try dd/mm/yyyy format instead\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" * Parses date for file data","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" * @param input date as displayed","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" * @return output date for file data","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" public static String parseDateForFile(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" LocalDate date \u003d LocalDate.parse(input, format);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" return date.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" * Parses time input for display","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" * @param input time input","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" * @return output time","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" public static String parseTimeOut(String input) throws IllegalDateTimeException{","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" LocalTime time;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" time \u003d LocalTime.parse(input,","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" throw new IllegalDateTimeException((\"Time or time format is invalid\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" + \"try HHmm format instead\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" return time.format(DateTimeFormatter.ofPattern(\"h:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" * Parses time for file data","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" * @param input time input","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" * @return output time","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" public static String parseTimeForFile(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" return \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"h:mm a\");","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" LocalTime time \u003d LocalTime.parse(input, format);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" return \" \" + time.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" * Parses input for display","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":" * @param input date time input by user","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"dloh2236"},"content":" * @return date time format for display","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"dloh2236"},"content":" public static String[] parseInputOut(String input) throws IllegalDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"dloh2236"},"content":" String[] out \u003d new String[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"dloh2236"},"content":" String[] dateTime \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"dloh2236"},"content":" out[0] \u003d parseDateOut(dateTime[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"dloh2236"},"content":" if (dateTime.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"dloh2236"},"content":" out[1] \u003d parseTimeOut(dateTime[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"dloh2236"},"content":" return out;","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"dloh2236"},"content":" return out;","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"dloh2236"},"content":" * Checks if to date is after from date","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"dloh2236"},"content":" * @param fromDate start date","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"dloh2236"},"content":" * @param toDate end date","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if end date is before start date","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dloh2236"},"content":" public static void checkValidEventDate(String fromDate, String toDate) throws IllegalDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"dloh2236"},"content":" LocalDate from \u003d LocalDate.parse(fromDate,","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"dloh2236"},"content":" LocalDate to \u003d LocalDate.parse(toDate,","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"dloh2236"},"content":" if (to.isBefore(from)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"dloh2236"},"content":" throw new IllegalDateTimeException(\"to date cannot be earlier than from date\");","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"dloh2236"},"content":" * Checks if to time is after from time","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"dloh2236"},"content":" * @param fromTime start time","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"dloh2236"},"content":" * @param toTime end time","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if end time is before start time in the same day","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"dloh2236"},"content":" public static void checkValidEventTime(String fromTime, String toTime) throws IllegalDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"dloh2236"},"content":" LocalTime from \u003d LocalTime.parse(fromTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter.ofPattern(\"h:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"dloh2236"},"content":" LocalTime to \u003d LocalTime.parse(toTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter.ofPattern(\"h:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"dloh2236"},"content":" if (to.isBefore(from)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"dloh2236"},"content":" throw new IllegalDateTimeException(\"to time cannot be before from time\");","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"dloh2236":137}},{"path":"src/main/java/oreo/exception/IllegalCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"public class IllegalCommandException extends NoSuchElementException {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":" private String cmsg;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" public IllegalCommandException(String cmsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" this.cmsg \u003d cmsg;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" String message \u003d \"I dont think I can \" + cmsg + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" + \"do you want to try again?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" return message;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"dloh2236":18}},{"path":"src/main/java/oreo/exception/IllegalDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"public class IllegalDateTimeException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":" private String msg;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" public IllegalDateTimeException(String msg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" this.msg \u003d msg;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" return msg;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"dloh2236":16}},{"path":"src/main/java/oreo/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.command.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" * Implements class that handles parsing of user input","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" * Parses input by user","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" * @param fullCommand full input by user","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" * @return Command instance of the appropriate type base on input.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" public static Command parse(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" Scanner tokeniser \u003d new Scanner(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" String command \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" command \u003d tokeniser.next();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" } catch (NoSuchElementException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" return new EmptyCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" switch (command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" case(\"bye\") :","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" case(\"list\") :","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" case(\"unmark\") :","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" case(\"mark\") :","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" return new MarkUnmarkCommand(command, tokeniser);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" case(\"delete\") :","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" return new DeleteCommand(tokeniser);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" case(\"find\") :","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" return new FindCommand(tokeniser);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" return new AddCommand(command, tokeniser);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":46}},{"path":"src/main/java/oreo/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" * This class implements the storage function of the chatbot","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" private final File storageFile;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" * Constructor for storage","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" * @param filePath file path to where file is saved","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" this.storageFile \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" loadFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" private void loadFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" storageFile.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" * Reads saved file if it exists","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" * @param tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" * @throws FileNotFoundException","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" public void readFile(TaskList tasks) throws FileNotFoundException, IllegalDateTimeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" Scanner sc \u003d new Scanner(this.storageFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" int id \u003d sc.nextInt();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" int mark \u003d sc.nextInt();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" String description \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" Task newTask \u003d Task.generateSavedTask(id, mark \u003d\u003d 1, description);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" * Clears file in the file path","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" public void clearFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" new FileWriter(filePath, false).close();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" * Writes file with list of task input upon bye command","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" * @param tasks TaskList with all the task","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" * @throws IOException for filewriter","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" public void writeFile(TaskList tasks) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" clearFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" int numberOfTasks \u003d tasks.getNumberOfTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" for (int i \u003d 0; i \u003c numberOfTasks; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" String data \u003d tasks.get(i).writeToFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":" fw.write(data);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":89}},{"path":"src/main/java/oreo/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.datetime.TimeParser;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":" private String date;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" private String time;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" public Deadline(String d, String date, String time) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" public Deadline(String d, String date, String time, boolean completed) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" this.isComplete \u003d completed;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" String marker \u003d \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" String timeString;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" timeString \u003d (this.time \u003d\u003d null) ? \"\" : (\" \" + this.time);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" if (this.isComplete) marker \u003d \"[X]\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" return \"[D]\" + marker + \" \" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" + \" (by: \" + this.date + timeString + \")\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" public String writeToFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" int mark \u003d isComplete ? 1 : 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" String data \u003d 2 + \" \" + mark + description + \"/\" + TimeParser.parseDateForFile(this.date)","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" + TimeParser.parseTimeForFile(this.time) + System.lineSeparator();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" return data;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dloh2236":40}},{"path":"src/main/java/oreo/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.datetime.TimeParser;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":" private String fromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" private String fromTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" private String toDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" private String toTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" public Event(String d, String fromDate, String fromTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" String toDate, String toTime) throws IllegalDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" TimeParser.checkValidEventDate(fromDate, toDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" if (fromDate.equals(toDate)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" TimeParser.checkValidEventTime(fromTime, toTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" this.fromTime \u003d fromTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" this.toTime \u003d toTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" public Event(String d, String fromDate, String fromTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" String toDate, String toTime , boolean completed) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" this.fromTime \u003d fromTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" this.toTime \u003d toTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" this.isComplete \u003d completed;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" String marker \u003d \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" String fromTimeString;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" String toTimeString;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" fromTimeString \u003d (this.fromTime \u003d\u003d null) ? \"\" : (\" \" + this.fromTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" toTimeString \u003d (this.toTime \u003d\u003d null) ? \"\" : (\" \" + this.toTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" if (this.isComplete) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" marker \u003d \"[X]\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" return \"[E]\" + marker + \" \" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" + \" (from: \" + this.fromDate + fromTimeString","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" + \" to: \" + this.toDate + toTimeString + \")\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" public String writeToFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" int mark \u003d isComplete ? 1 : 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" String data \u003d 3 + \" \" + mark + description + \"/\" + TimeParser.parseDateForFile(this.fromDate)","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" + TimeParser.parseTimeForFile(this.fromTime) + \"/\" + TimeParser.parseDateForFile(this.toDate)","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" + TimeParser.parseTimeForFile(this.toTime) + System.lineSeparator();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" return data;","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dloh2236":57}},{"path":"src/main/java/oreo/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.datetime.TimeParser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" * This class implements an abstract class, parent class for","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" * the other specific task.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"public abstract class Task implements Comparable\u003cTask\u003e {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" * id of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" protected int id;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" * description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" * whether task is complete.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" protected boolean isComplete;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" private static int idTracker \u003d 0;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" * Constructor of Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" * @param d description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" public Task(String d) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" this.id \u003d idTracker;","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" idTracker++;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" this.description \u003d d;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" * Generates the appropriate sub task instance based on user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" * @param command Command inputted by user.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" * @param tokeniser String that follows the command as a Scanner.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" * @return Approriate task base on input by user.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalCommandException when command is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException when date time input is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" public static Task generateTask(String command, Scanner tokeniser) throws IllegalCommandException,","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" IllegalDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" Task newTask;","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" if (!command.equals(\"todo\") \u0026\u0026 !command.equals(\"deadline\")","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" \u0026\u0026 !command.equals(\"event\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that\");","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" } else if (!tokeniser.hasNext()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"process an empty task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" String contents \u003d tokeniser.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" if (contents.contains(\"/by\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that for a todo,\"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" + \"are you thinking of a deadline?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" } else if (contents.contains(\"/from\") || contents.contains(\"/to\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that for a todo,\"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" + \"are you thinking of an event?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" newTask \u003d new ToDo(contents);","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" } else if (command.equals(\"deadline\")){","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" String contents \u003d tokeniser.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" if (!contents.contains(\"/by\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"set a deadline wihtout a \\\"/by\\\"\");","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" } else if (contents.contains(\"/from\") || contents.contains(\"/to\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that for a deadline,\"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" + \"are you thinking of an event?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" String[] parts \u003d contents.split(\" /by \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" String[] dateTime \u003d TimeParser.parseInputOut(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":" newTask \u003d new Deadline(parts[0], dateTime[0], dateTime[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" String contents \u003d tokeniser.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" if (!contents.contains(\"/from\") || !contents.contains(\"/to\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"set an event wihtout a \\\"/from\\\" and/or \\\"/to\\\"\");","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"dloh2236"},"content":" } else if (contents.contains(\"/by\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that for an event,\"","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"dloh2236"},"content":" + \"are you thinking of a deadline?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"dloh2236"},"content":" String[] message \u003d contents.split(\" /from \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"dloh2236"},"content":" String[] fromto \u003d message[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"dloh2236"},"content":" String[] fromDateTime \u003d TimeParser.parseInputOut(fromto[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"dloh2236"},"content":" String[] toDateTime \u003d TimeParser.parseInputOut(fromto[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"dloh2236"},"content":" newTask \u003d new Event(message[0], fromDateTime[0], fromDateTime[1],","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"dloh2236"},"content":" toDateTime[0], toDateTime[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"dloh2236"},"content":" return newTask;","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"dloh2236"},"content":" public boolean isComplete() {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"dloh2236"},"content":" return this.isComplete;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"dloh2236"},"content":" * Change mark to opposite of the current status.","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dloh2236"},"content":" public void switchMark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"dloh2236"},"content":" isComplete \u003d !isComplete;","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"dloh2236"},"content":" * Generates appropriate task from file data.","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"dloh2236"},"content":" * @param id determines type of task.","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"dloh2236"},"content":" * @param mark determines if task is done.","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"dloh2236"},"content":" * @param description contains description of task.","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"dloh2236"},"content":" * @return Appropriate task base on file input.","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException date time format is invalid,","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"dloh2236"},"content":" * file format is corrupt.","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"dloh2236"},"content":" public static Task generateSavedTask(int id, boolean mark, String description) throws IllegalDateTimeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"dloh2236"},"content":" switch (id) {","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"dloh2236"},"content":" case (1):","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"dloh2236"},"content":" return new ToDo(description, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"dloh2236"},"content":" case (2):","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"dloh2236"},"content":" String[] parts \u003d description.split(\"/\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"dloh2236"},"content":" String[] dateTime \u003d TimeParser.parseInputOut(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"dloh2236"},"content":" return new Deadline(parts[0], dateTime[0], dateTime[1], mark);","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"dloh2236"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"dloh2236"},"content":" String[] message \u003d description.split(\"/\", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"dloh2236"},"content":" String[] fromDateTime \u003d TimeParser.parseInputOut(message[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"dloh2236"},"content":" String[] toDateTime \u003d TimeParser.parseInputOut(message[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"dloh2236"},"content":" return new Event(message[0], fromDateTime[0], fromDateTime[1],","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"dloh2236"},"content":" toDateTime[0], toDateTime[1], mark);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"dloh2236"},"content":" * Converts task to file data to write to file.","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"dloh2236"},"content":" * @return task in file data format.","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"dloh2236"},"content":" public abstract String writeToFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"dloh2236"},"content":" * Checks if description contains keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"dloh2236"},"content":" * @param keyword String of interest","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"dloh2236"},"content":" * @return true if description contains String","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"dloh2236"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"dloh2236"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"dloh2236"},"content":" public abstract String toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"dloh2236"},"content":" public int compareTo(Task other) {","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"dloh2236"},"content":" return this.id - other.id;","lastModifiedDate":"2023-08-24"},{"lineNumber":164,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dloh2236":165}},{"path":"src/main/java/oreo/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" * This class implements the TaskList used by the chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" private int numberOfCompletedTasks \u003d 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" * Constructor for TaskList, initialise an ArrayList.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" * Adds task to list.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" * Removes task from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" * @param index Index position of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" * @return Task that was removed from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" public Task remove(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" Task removedTask \u003d taskList.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" if (removedTask.isComplete()) numberOfCompletedTasks--;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" return removedTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" * Clears entire list, only when file is corrupt.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" public void clearAll() {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" taskList.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" public int getNumberOfTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" return taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" * Gets task in that index.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" * @param index position of task in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" * @return Task in specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" * Checks if all tasks are complete.","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" * @return true if all complete, false if not.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" public boolean isAllComplete() {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" return taskList.size() \u003d\u003d numberOfCompletedTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" * String of list of task and list headers depending on","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" * number of task in the list left (including","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" * if all task are completed)","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" * @return list of task and appropriate headers","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" public String list() {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" return \"list looks empty to me!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"dloh2236"},"content":" StringBuilder displayList \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"dloh2236"},"content":" if (isAllComplete()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"dloh2236"},"content":" displayList.append(\"Wow! You are ALL COMPLETE!!!!\\n\")","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"dloh2236"},"content":" .append(\"TIME TO PLAY WITH MEEEEE :DDDD\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"dloh2236"},"content":" } else if (taskList.size() \u003e 10) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"dloh2236"},"content":" displayList.append(\"Seems like you have a lot of things to do...\\n\")","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"dloh2236"},"content":" .append(\"Remember to play with me after :D\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"dloh2236"},"content":" displayList.append(\"Here are the things you told me to keep track of:\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"dloh2236"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"dloh2236"},"content":" displayList.append(i + 1 + \".\").append(taskList.get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"dloh2236"},"content":" return displayList.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"dloh2236"},"content":" * Handles the unmark/mark command input by user","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"dloh2236"},"content":" * @param command mark or unmark","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dloh2236"},"content":" * @param tokeniser number for which task is to be mark/unmark","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"dloh2236"},"content":" * @return String of whether mark/unmark was succesful or if all task is complete","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalCommandExceptiontask if command is in invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"dloh2236"},"content":" public String changeMark(String command, Scanner tokeniser) throws IllegalCommandException {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"dloh2236"},"content":" if (!tokeniser.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that without specifying a task number\");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"dloh2236"},"content":" String content \u003d tokeniser.next();","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"dloh2236"},"content":" if (isInteger(content)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"dloh2236"},"content":" int id \u003d Integer.parseInt(content);","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"dloh2236"},"content":" if (id \u003e getNumberOfTask()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that... this task does not exist :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"dloh2236"},"content":" if (command.equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"dloh2236"},"content":" String message \u003d markDone(id - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"dloh2236"},"content":" if (isAllComplete()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"dloh2236"},"content":" message +\u003d list();","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"dloh2236"},"content":" return message;","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"dloh2236"},"content":" return markNotDone(id - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that... try a number instead\");","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"dloh2236"},"content":" public String listResults(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"dloh2236"},"content":" if (getNumberOfTask() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"dloh2236"},"content":" return \"Unfortunately, I couldn\u0027t find any task matching \\\"\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"dloh2236"},"content":" keyword +","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"dloh2236"},"content":" \"\\\" :(\";","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"dloh2236"},"content":" StringBuilder displayList \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"dloh2236"},"content":" displayList.append(\"Here are task(s) matching \\\"\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"dloh2236"},"content":" keyword +","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"dloh2236"},"content":" \"\\\" in your list: \\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"dloh2236"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"dloh2236"},"content":" displayList.append(i + 1 + \".\").append(taskList.get(i).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"dloh2236"},"content":" return displayList.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"dloh2236"},"content":" * Handles the main logic of delete task command input by user","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"dloh2236"},"content":" * @param tokeniser input of user behind delete command","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"dloh2236"},"content":" * @return Message if task has been successful or not and if all task are complete","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalCommandException invalid format of command","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"dloh2236"},"content":" public String deleteTask(Scanner tokeniser) throws IllegalCommandException {","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"dloh2236"},"content":" if (!tokeniser.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that without specifying a task number\");","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"dloh2236"},"content":" String content \u003d tokeniser.next();","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"dloh2236"},"content":" if (isInteger(content)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"dloh2236"},"content":" int id \u003d Integer.parseInt(content);","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"dloh2236"},"content":" if (id \u003e getNumberOfTask()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that... this task does not exist :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"dloh2236"},"content":" Task removedTask \u003d remove(id - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"dloh2236"},"content":" String message \u003d \"Happily scratched this off your list:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"dloh2236"},"content":" + Ui.indentLineBy(removedTask.toString(), 2) + \"Now you have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"dloh2236"},"content":" + getNumberOfTask() + \" tasks in the list!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"dloh2236"},"content":" if (isAllComplete()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"dloh2236"},"content":" message +\u003d list();","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"dloh2236"},"content":" return message;","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that... try a number instead\");","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"dloh2236"},"content":" private String markDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"dloh2236"},"content":" Task task \u003d get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"dloh2236"},"content":" if (task.isComplete()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"dloh2236"},"content":" return \"That was done already...\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"dloh2236"},"content":" \"are you sure you wanted to mark that?\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"dloh2236"},"content":" + task.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"dloh2236"},"content":" task.switchMark();","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"dloh2236"},"content":" numberOfCompletedTasks++;","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"dloh2236"},"content":" return \"Yay! One step closer to playing with me!\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"dloh2236"},"content":" + task.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"dloh2236"},"content":" private String markNotDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"dloh2236"},"content":" Task task \u003d get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"dloh2236"},"content":" if (!task.isComplete()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"dloh2236"},"content":" return \"Don\u0027t worry it\u0027s still not done\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":206,"author":{"gitId":"dloh2236"},"content":" + \"What are you doing? Let\u0027s get it done now!\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"dloh2236"},"content":" + task.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"dloh2236"},"content":" task.switchMark();","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"dloh2236"},"content":" numberOfCompletedTasks--;","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"dloh2236"},"content":" return \"Oh no... what happened :(\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"dloh2236"},"content":" + task.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":217,"author":{"gitId":"dloh2236"},"content":" * Finds task in tasklist with keyword specified in tokeniser","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":219,"author":{"gitId":"dloh2236"},"content":" * @param tokeniser input by user after command","lastModifiedDate":"2023-09-03"},{"lineNumber":220,"author":{"gitId":"dloh2236"},"content":" * @return list of results","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalCommandException if input by user is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":222,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":223,"author":{"gitId":"dloh2236"},"content":" public String findTasksWith(Scanner tokeniser) throws IllegalCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":224,"author":{"gitId":"dloh2236"},"content":" if (!tokeniser.hasNext()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":225,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that without specifying a keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":226,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":227,"author":{"gitId":"dloh2236"},"content":" String keyword \u003d tokeniser.next();","lastModifiedDate":"2023-09-03"},{"lineNumber":228,"author":{"gitId":"dloh2236"},"content":" TaskList toPrint \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":229,"author":{"gitId":"dloh2236"},"content":" for (int i \u003d 0; i \u003c getNumberOfTask(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":230,"author":{"gitId":"dloh2236"},"content":" Task ref \u003d taskList.get(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":231,"author":{"gitId":"dloh2236"},"content":" if (ref.contains(keyword)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":232,"author":{"gitId":"dloh2236"},"content":" toPrint.add(ref);","lastModifiedDate":"2023-09-03"},{"lineNumber":233,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":234,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":235,"author":{"gitId":"dloh2236"},"content":" return toPrint.listResults(keyword);","lastModifiedDate":"2023-09-03"},{"lineNumber":236,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":237,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":238,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":239,"author":{"gitId":"dloh2236"},"content":" * Utility method to check if str is an integer input","lastModifiedDate":"2023-09-03"},{"lineNumber":240,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":241,"author":{"gitId":"dloh2236"},"content":" * @param str input","lastModifiedDate":"2023-09-03"},{"lineNumber":242,"author":{"gitId":"dloh2236"},"content":" * @return true if integer, false if not","lastModifiedDate":"2023-09-03"},{"lineNumber":243,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":244,"author":{"gitId":"dloh2236"},"content":" public static boolean isInteger(String str) {","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"dloh2236"},"content":" if (str \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"dloh2236"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":247,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":248,"author":{"gitId":"dloh2236"},"content":" int length \u003d str.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"dloh2236"},"content":" if (length \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":250,"author":{"gitId":"dloh2236"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":251,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":252,"author":{"gitId":"dloh2236"},"content":" int i \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"dloh2236"},"content":" if (str.charAt(0) \u003d\u003d \u0027-\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":254,"author":{"gitId":"dloh2236"},"content":" if (length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"dloh2236"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"dloh2236"},"content":" i \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"dloh2236"},"content":" for (; i \u003c length; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"dloh2236"},"content":" char c \u003d str.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"dloh2236"},"content":" if (c \u003c \u00270\u0027 || c \u003e \u00279\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"dloh2236"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":265,"author":{"gitId":"dloh2236"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":266,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":267,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":267}},{"path":"src/main/java/oreo/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":" public ToDo(String d) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" public ToDo(String d, boolean completed) {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" this.isComplete \u003d completed;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" String marker \u003d \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" if (this.isComplete) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" marker \u003d \"[X]\";","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" return \"[T]\" + marker + \" \" + this.description + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" public String writeToFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" int mark \u003d isComplete ? 1 : 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" String data \u003d 1 + \" \" + mark + description + System.lineSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" return data;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dloh2236":28}},{"path":"src/main/java/oreo/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" * This class implements the Ui of the chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" private String logo \u003d \" .-\\\"-.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" + \" /|6 6|\\\\\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" + \" _ ._ _ _ {/(_0_)\\\\}\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" + \"(_) | (/_ (_) _/ ^ \\\\_\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" + \" (/ /^\\\\ \\\\)-\u0027\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" + \" \\\"\\\"\u0027 \u0027\\\"\\\"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" private String greet \u003d logo + \"Woof! I\u0027m Oreo! How may I help you?\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" private String exit \u003d \"I will be sad to see you go! bye!\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" private String hLine \u003d \" ____________________________________________________________\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" private String indent \u003d \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" * Indents line by the number of spaces specified.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" * @param message contents to be indented.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" * @param indents number of spaces to indent by.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" * @return returns the message with the specified amount of indents.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" public static String indentLineBy(String message, int indents) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" StringBuilder indentedLine \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" for (int i \u003d 0; i \u003c indents; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" indentedLine.append(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" return indentedLine.append(message).toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" * Sets indent for reply message of chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" * @param message message to display by chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" * @return messaged indented for reply.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" private String indentMessage(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" String[] lines \u003d message.split(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" StringBuilder indentedMessage \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" for (String line : lines) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" indentedMessage.append(indent).append(line).append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" return indentedMessage.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" * Wraps message in the reply UI of the chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" * @param message the message to be wrapped.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" * @return messaged wrapped for reply by chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" private String botReply(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" StringBuilder reply \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" return reply.append(hLine).append(indentMessage(message))","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" .append(hLine).toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" * Displays exit message to user.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" public void sayBye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" System.out.println(botReply(exit));","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" * Displays message to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" * @param message message to be displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" public void say(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" System.out.println(botReply(message));","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"dloh2236"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"dloh2236"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":93}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" minHeight\u003d\"-Infinity\" prefWidth\u003d\"423.0\" spacing\u003d\"5.0\" type\u003d\"HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" \u003cjavafx.scene.layout.HBox alignment\u003d\"CENTER_RIGHT\" depthTest\u003d\"ENABLE\" maxHeight\u003d\"340.0\" maxWidth\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" opacity\u003d\"0.8\" style\u003d\"-fx-background-radius: 1em; -fx-background-color: lightgray;\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" \u003cFont name\u003d\"SF Pro Text Regular\" size\u003d\"11.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" \u003cInsets bottom\u003d\"7.0\" top\u003d\"7.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" \u003c/javafx.scene.layout.HBox\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"46.0\" fitWidth\u003d\"47.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":40}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"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\"oreo.MainWindow\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" \u003cTextField fx:id\u003d\"userInput\" cache\u003d\"true\" layoutX\u003d\"2.0\" layoutY\u003d\"567.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"25.0\" prefWidth\u003d\"320.0\" promptText\u003d\"Type something here...\" style\u003d\"-fx-background-radius: 5em;\" AnchorPane.bottomAnchor\u003d\"7.0\" AnchorPane.leftAnchor\u003d\"2.0\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" \u003cFont name\u003d\"SF Pro Display Regular\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" \u003cButton fx:id\u003d\"sendButton\" contentDisplay\u003d\"CENTER\" layoutX\u003d\"324.0\" layoutY\u003d\"567.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"25.0\" prefWidth\u003d\"70.0\" style\u003d\"-fx-background-radius: 1em;\" text\u003d\"Send\" textFill\u003d\"#3695ff\" AnchorPane.leftAnchor\u003d\"324.0\" AnchorPane.rightAnchor\u003d\"2.0\" AnchorPane.topAnchor\u003d\"567.0\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" \u003cFont name\u003d\"SF Pro Rounded Medium\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToHeight\u003d\"true\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"560.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-radius: 0.5em;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" maxHeight\u003d\"1.7976931348623157E308\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: linear-gradient(#4568DC, #B06AB3);\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":26}},{"path":"src/test/java/oreo/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" public void execute_addCommandTodoToTaskList_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" String description \u003d \"read book\";","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" Scanner tokeniser \u003d new Scanner(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" AddCommand ac \u003d new AddCommand(\"todo\", tokeniser);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" ac.execute(ui, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" assertEquals(tasks.get(0).toString(),","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" new ToDo(\"read book\").toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" public void execute_addCommandInvalidInput_tasksNoChange() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" String description \u003d \"read book\";","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" Scanner tokeniser \u003d new Scanner(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" AddCommand ac \u003d new AddCommand(\"abc\", tokeniser);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" ac.execute(ui, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" assertEquals(0,","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" tasks.getNumberOfTask());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dloh2236":36}},{"path":"src/test/java/oreo/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" public void generateTask_generateTodoTask_success() throws IllegalCommandException,","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" IllegalDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" assertEquals(new ToDo(\"read book\").toString(),","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" Task.generateTask(\"todo\", new Scanner(\"read book\")).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" public void generateTask_generateDeadlineTask_success() throws IllegalCommandException,","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" IllegalDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" assertEquals(new Deadline(\"return book\", \"Sep 3 2023\", null).toString(),","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" Task.generateTask(\"deadline\",","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"return book /by 03/09/2023\")).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" public void generateTask_generateEventTask_success() throws IllegalCommandException,","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" IllegalDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" assertEquals(new Event(\"study at cafe\", \"Sep 3 2023\", \"3:00 PM\",","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" \"Sep 3 2023\", \"4:00 PM\").toString(),","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" Task.generateTask(\"event\",","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"study at cafe /from 03/09/2023 1500 /to 03/09/2023 1600\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" .toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" public void generateTask_invalidCommand_exceptionThrown() throws IllegalDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" assertEquals(0, Task.generateTask(\"abc\",","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalCommandException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" assertEquals(\"I dont think I can do that\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" \"do you want to try again?\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" public void generateTask_invalidDate_exceptionThrown() throws IllegalCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" assertEquals(0, Task.generateTask(\"deadline\",","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"return book /by 2023-09-03\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalDateTimeException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" assertEquals(\"Date or date format is invalid\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" + \"try dd/mm/yyyy format instead\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" public void generateTask_invalidTime_exceptionThrown() throws IllegalCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" assertEquals(0, Task.generateTask(\"deadline\",","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"return book /by 03/09/2023 6pm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalDateTimeException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" assertEquals(\"Time or time format is invalid\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" + \"try HHmm format instead\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" public void generateTask_invalidFromToTime_exceptionThrown() throws IllegalCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" assertEquals(0, Task.generateTask(\"event\",","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"study /from 03/09/2023 1600 /to 03/09/2023 1400\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalDateTimeException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" assertEquals(\"to time cannot be before from time\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dloh2236":84}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"todo read book","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"deadline return book /by 03/09/2023 1400","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"deadline leave library /by 03/09/2023 1500","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"event dinner with friends /from 03/09/2023 1800 /to 03/09/2023 2100","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"mark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"unmark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"unmark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"delete 1","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"mark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"delete 2","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":"mark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":"unmark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":"delete 2","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":"mark","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":"unmark","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":"todo","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":"deadline","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"event","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":"deadline finish code /from 02/09/2023 2359","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":"event finish coding time /by 02/09/2023 2359","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":"event start coding /from 02/09/2023","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"dloh2236":30}}] +[{"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":"dloh2236"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" ","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"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":"dloh2236"},"content":" mainClass.set(\"oreo.Launcher\")","lastModifiedDate":"2023-09-16"},{"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":"dloh2236"},"content":" archiveBaseName \u003d \"oreo\"","lastModifiedDate":"2023-09-03"},{"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":"dloh2236"},"content":"checkstyle{","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"dloh2236":21,"-":40}},{"path":"src/main/java/oreo/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"import oreo.MainWindow;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"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":21,"author":{"gitId":"dloh2236"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" public static DialogBox getOreoDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":62}},{"path":"src/main/java/oreo/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":13}},{"path":"src/main/java/oreo/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" MainWindow gui \u003d fxmlLoader.getController();","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" Oreo oreo \u003d new Oreo(\"/Users/daniel/Desktop/CS2103T/iP/src/main/java/data/oreo.txt\",","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" gui);","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" stage.setTitle(\"Oreo\");","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":31}},{"path":"src/main/java/oreo/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"import oreo.command.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"import oreo.parser.Parser;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" private Oreo oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" private Image oreoImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/oreo.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" private void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty()); // scroll follows","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" public void setOreo(Oreo oreo) {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" this.oreo \u003d oreo;","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"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":46,"author":{"gitId":"dloh2236"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" if (c.isExit()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" exit(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" String response \u003d oreo.execute(c);","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" DialogBox.getOreoDialog(response, oreoImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" public void startUp() {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" oreo.startUp();","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" greetUser();","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" } catch (FileNotFoundException | IllegalDateTimeException |","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" InputMismatchException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" oreo.clearTaskAndFile();","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" String fileCorruptMessage \u003d \"saved file is corrupt, creating new file...\";","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" DialogBox.getOreoDialog(fileCorruptMessage, oreoImage));","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" greetUser();","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" private void greetUser() {","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" DialogBox.getOreoDialog(oreo.greet(), oreoImage));","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":" private void exit(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" oreo.closeProcess();","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"dloh2236"},"content":" DialogBox.getOreoDialog(oreo.sayBye(), oreoImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"dloh2236"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"dloh2236"},"content":" Platform.exit();","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"dloh2236"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"dloh2236"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"dloh2236"},"content":" DialogBox.getOreoDialog(e.getMessage(), oreoImage));","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":99}},{"path":"src/main/java/oreo/Oreo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import oreo.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import oreo.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" * This class implements the chatbot Oreo.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":"public class Oreo {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" private MainWindow ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" * Constructor of Oreo chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" * @param filePath file path to where saved file is and where saved","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" * task will be written to file for next start up","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" * of chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" public Oreo(String filePath, MainWindow gui) {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" this.ui \u003d gui;","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" gui.setOreo(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" gui.startUp();","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" * Handles the main logic of the chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalCommandException If user inputs a command that","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" * is not accepted.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" public void startUp() throws FileNotFoundException, IllegalDateTimeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" storage.readFile(tasks); // reads loaded file","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" public void clearTaskAndFile() {","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" storage.clearFile();","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" tasks.clearAll();","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" public String greet() {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" String greetMessage \u003d \"Woof! I\u0027m Oreo! How may I help you?\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" if (tasks.getNumberOfTask() !\u003d 0) {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" return greetMessage","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" + \"Welcome back! \"","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" + tasks.list();","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" return greetMessage;","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" public String sayBye() {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" return \"I will be sad to see you go! bye!\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" public String execute(Command command) {","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" return command.execute(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" public void closeProcess() throws IOException {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" storage.writeFile(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"dloh2236":78,"-":1}},{"path":"src/main/java/oreo/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" private Scanner tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" public AddCommand(String command, Scanner tokeniser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" this.tokeniser \u003d tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" Task newTask \u003d Task.generateTask(command, tokeniser);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" return \"Gotchu! noted down: \\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" + Ui.indentLineBy(newTask.toString(), 2)","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" + \"Now you have \" + tasks.getNumberOfTask()","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" + \" tasks in the list!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalCommandException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalDateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":35}},{"path":"src/main/java/oreo/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" return \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":11}},{"path":"src/main/java/oreo/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":" * Implements abstract command class, parent class of specific commands","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" * Executes the command","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" * @param ui Ui of the chatbot","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" * @param tasks Tasklist of the chatbot","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" public abstract String execute(TaskList tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" * Checks if command is bye","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" * @return true if command is ByeCommand","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" return this instanceof ByeCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":29}},{"path":"src/main/java/oreo/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" private Scanner tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" public DeleteCommand(Scanner tokeniser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" this.tokeniser \u003d tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" return tasks.deleteTask(tokeniser);","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalCommandException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":23}},{"path":"src/main/java/oreo/command/EmptyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"public class EmptyCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" return \"uhhh what???\";","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":11}},{"path":"src/main/java/oreo/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" private Scanner tokeniser;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" public FindCommand(Scanner tokeniser) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" this.tokeniser \u003d tokeniser;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" return tasks.findTasksWith(tokeniser);","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalCommandException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dloh2236":24}},{"path":"src/main/java/oreo/command/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"public class InvalidCommand extends Command{","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) throws IllegalCommandException {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" return new IllegalCommandException(\"do that\").getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"dloh2236":12}},{"path":"src/main/java/oreo/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" return tasks.list();","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":12}},{"path":"src/main/java/oreo/command/MarkUnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"public class MarkUnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" private Scanner tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" public MarkUnmarkCommand(String command, Scanner tokeniser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" this.tokeniser \u003d tokeniser;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" public String execute(TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" return tasks.changeMark(command, tokeniser);","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalCommandException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":26}},{"path":"src/main/java/oreo/datetime/TimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.datetime;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" * Implements class that handles parsing of time input","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"public class TimeParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" * Parses date input for display","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" * @param input date input","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" * @return output date","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" private static String parseDateOut(String input) throws IllegalDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" String modifiedInput \u003d input.replace(\"/\", \"-\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" LocalDate date;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" date \u003d LocalDate.parse(modifiedInput, format);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" throw new IllegalDateTimeException(\"Date or date format is invalid\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" + \"try dd/mm/yyyy format instead\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" * Parses date for file data","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" * @param input date as displayed","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" * @return output date for file data","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" public static String parseDateForFile(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" LocalDate date \u003d LocalDate.parse(input, format);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" return date.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" * Parses time input for display","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" * @param input time input","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" * @return output time","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" public static String parseTimeOut(String input) throws IllegalDateTimeException{","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" LocalTime time;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" time \u003d LocalTime.parse(input,","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" throw new IllegalDateTimeException((\"Time or time format is invalid\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" + \"try HHmm format instead\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" return time.format(DateTimeFormatter.ofPattern(\"h:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" * Parses time for file data","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" * @param input time input","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" * @return output time","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" public static String parseTimeForFile(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" return \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"h:mm a\");","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" LocalTime time \u003d LocalTime.parse(input, format);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" return \" \" + time.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" * Parses input for display","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":" * @param input date time input by user","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"dloh2236"},"content":" * @return date time format for display","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"dloh2236"},"content":" public static String[] parseInputOut(String input) throws IllegalDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"dloh2236"},"content":" String[] out \u003d new String[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"dloh2236"},"content":" String[] dateTime \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"dloh2236"},"content":" out[0] \u003d parseDateOut(dateTime[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"dloh2236"},"content":" if (dateTime.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"dloh2236"},"content":" out[1] \u003d parseTimeOut(dateTime[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"dloh2236"},"content":" return out;","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"dloh2236"},"content":" return out;","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"dloh2236"},"content":" * Checks if to date is after from date","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"dloh2236"},"content":" * @param fromDate start date","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"dloh2236"},"content":" * @param toDate end date","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if end date is before start date","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dloh2236"},"content":" public static void checkValidEventDate(String fromDate, String toDate) throws IllegalDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"dloh2236"},"content":" LocalDate from \u003d LocalDate.parse(fromDate,","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"dloh2236"},"content":" LocalDate to \u003d LocalDate.parse(toDate,","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"dloh2236"},"content":" if (to.isBefore(from)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"dloh2236"},"content":" throw new IllegalDateTimeException(\"to date cannot be earlier than from date\");","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"dloh2236"},"content":" * Checks if to time is after from time","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"dloh2236"},"content":" * @param fromTime start time","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"dloh2236"},"content":" * @param toTime end time","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException if end time is before start time in the same day","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"dloh2236"},"content":" public static void checkValidEventTime(String fromTime, String toTime) throws IllegalDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"dloh2236"},"content":" LocalTime from \u003d LocalTime.parse(fromTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter.ofPattern(\"h:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"dloh2236"},"content":" LocalTime to \u003d LocalTime.parse(toTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"dloh2236"},"content":" DateTimeFormatter.ofPattern(\"h:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"dloh2236"},"content":" if (to.isBefore(from)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"dloh2236"},"content":" throw new IllegalDateTimeException(\"to time cannot be before from time\");","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"dloh2236":137}},{"path":"src/main/java/oreo/exception/IllegalCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"public class IllegalCommandException extends NoSuchElementException {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":" private String cmsg;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" public IllegalCommandException(String cmsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" this.cmsg \u003d cmsg;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" String message \u003d \"I dont think I can \" + cmsg + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" + \"do you want to try again?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" return message;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"dloh2236":18}},{"path":"src/main/java/oreo/exception/IllegalDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"public class IllegalDateTimeException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":" private String msg;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" public IllegalDateTimeException(String msg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" this.msg \u003d msg;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" return msg;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"dloh2236":16}},{"path":"src/main/java/oreo/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.command.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" * Implements class that handles parsing of user input","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" * Parses input by user","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" * @param fullCommand full input by user","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" * @return Command instance of the appropriate type base on input.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" public static Command parse(String fullCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" Scanner tokeniser \u003d new Scanner(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" String command \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" command \u003d tokeniser.next();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" } catch (NoSuchElementException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" return new EmptyCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" switch (command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" case \"bye\" :","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" case \"list\" :","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" case \"unmark\" :","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" case \"mark\" :","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" return new MarkUnmarkCommand(command, tokeniser);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" case \"delete\" :","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" return new DeleteCommand(tokeniser);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" case \"find\" :","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" return new FindCommand(tokeniser);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" case \"deadline\" :","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" case \"event\" :","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" return new AddCommand(command, tokeniser);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":51}},{"path":"src/main/java/oreo/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" * This class implements the storage function of the chatbot","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" private final File storageFile;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" * Constructor for storage","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" * @param filePath file path to where file is saved","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" this.storageFile \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" loadFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" private void loadFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" storageFile.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" * Reads saved file if it exists","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" * @param tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" * @throws FileNotFoundException","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" public void readFile(TaskList tasks) throws FileNotFoundException, IllegalDateTimeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" Scanner sc \u003d new Scanner(this.storageFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" int id \u003d sc.nextInt();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" int mark \u003d sc.nextInt();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" String description \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" Task newTask \u003d Task.generateSavedTask(id, mark \u003d\u003d 1, description);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" * Clears file in the file path","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" public void clearFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" new FileWriter(filePath, false).close();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" * Writes file with list of task input upon bye command","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" * @param tasks TaskList with all the task","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" * @throws IOException for filewriter","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" public void writeFile(TaskList tasks) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" clearFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" int numberOfTasks \u003d tasks.getNumberOfTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" for (int i \u003d 0; i \u003c numberOfTasks; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" String data \u003d tasks.get(i).writeToFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":" fw.write(data);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":89}},{"path":"src/main/java/oreo/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.datetime.TimeParser;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":" private String date;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" private String time;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" public Deadline(String d, String date, String time) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" public Deadline(String d, String date, String time, boolean completed) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" this.time \u003d time;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" this.isComplete \u003d completed;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" String marker \u003d \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" String timeString;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" timeString \u003d (this.time \u003d\u003d null) ? \"\" : (\" \" + this.time);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" if (this.isComplete) marker \u003d \"[X]\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" return \"[D]\" + marker + \" \" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" + \" (by: \" + this.date + timeString + \")\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" public String writeToFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" int mark \u003d isComplete ? 1 : 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" String data \u003d 2 + \" \" + mark + description + \"/\" + TimeParser.parseDateForFile(this.date)","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" + TimeParser.parseTimeForFile(this.time) + System.lineSeparator();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" return data;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dloh2236":40}},{"path":"src/main/java/oreo/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.datetime.TimeParser;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":" private String fromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" private String fromTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" private String toDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" private String toTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" public Event(String d, String fromDate, String fromTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" String toDate, String toTime) throws IllegalDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" TimeParser.checkValidEventDate(fromDate, toDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" if (fromDate.equals(toDate)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" TimeParser.checkValidEventTime(fromTime, toTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" this.fromTime \u003d fromTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" this.toTime \u003d toTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" public Event(String d, String fromDate, String fromTime,","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" String toDate, String toTime , boolean completed) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" this.fromTime \u003d fromTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" this.toTime \u003d toTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" this.isComplete \u003d completed;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" String marker \u003d \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" String fromTimeString;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" String toTimeString;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" fromTimeString \u003d (this.fromTime \u003d\u003d null) ? \"\" : (\" \" + this.fromTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" toTimeString \u003d (this.toTime \u003d\u003d null) ? \"\" : (\" \" + this.toTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" if (this.isComplete) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" marker \u003d \"[X]\";","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" return \"[E]\" + marker + \" \" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" + \" (from: \" + this.fromDate + fromTimeString","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" + \" to: \" + this.toDate + toTimeString + \")\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" public String writeToFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" int mark \u003d isComplete ? 1 : 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" String data \u003d 3 + \" \" + mark + description + \"/\" + TimeParser.parseDateForFile(this.fromDate)","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" + TimeParser.parseTimeForFile(this.fromTime) + \"/\" + TimeParser.parseDateForFile(this.toDate)","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" + TimeParser.parseTimeForFile(this.toTime) + System.lineSeparator();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" return data;","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dloh2236":57}},{"path":"src/main/java/oreo/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.datetime.TimeParser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" * This class implements an abstract class, parent class for","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" * the other specific task.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"public abstract class Task implements Comparable\u003cTask\u003e {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" * id of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" protected int id;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" * description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" * whether task is complete.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" protected boolean isComplete;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" private static int idTracker \u003d 0;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" * Constructor of Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" * @param d description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" public Task(String d) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" this.id \u003d idTracker;","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" idTracker++;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" this.description \u003d d;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" * Generates the appropriate sub task instance based on user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" * @param command Command inputted by user.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" * @param tokeniser String that follows the command as a Scanner.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" * @return Approriate task base on input by user.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalCommandException when command is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException when date time input is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" public static Task generateTask(String command, Scanner tokeniser) throws IllegalCommandException,","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" IllegalDateTimeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" Task newTask;","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" if (!tokeniser.hasNext()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"process an empty task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" String contents \u003d tokeniser.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" assert !contents.isEmpty(): \"contents should not be empty\";","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" if (command.equals(\"todo\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" if (contents.contains(\"/by\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that for a todo, \"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" + \"are you thinking of a deadline?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" } else if (contents.contains(\"/from\") || contents.contains(\"/to\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that for a todo,\"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" + \"are you thinking of an event?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" newTask \u003d new ToDo(contents);","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" } else if (command.equals(\"deadline\")){","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" if (!contents.contains(\"/by\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"set a deadline wihtout a \\\"/by\\\"\");","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" } else if (contents.contains(\"/from\") || contents.contains(\"/to\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that for a deadline,\"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" + \"are you thinking of an event?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" String[] parts \u003d contents.split(\" /by \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" String[] dateTime \u003d TimeParser.parseInputOut(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" newTask \u003d new Deadline(parts[0], dateTime[0], dateTime[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" if (!contents.contains(\"/from\") || !contents.contains(\"/to\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"set an event wihtout a \\\"/from\\\" and/or \\\"/to\\\"\");","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" } else if (contents.contains(\"/by\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that for an event,\"","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"dloh2236"},"content":" + \"are you thinking of a deadline?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"dloh2236"},"content":" String[] message \u003d contents.split(\" /from \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"dloh2236"},"content":" String[] fromto \u003d message[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"dloh2236"},"content":" String[] fromDateTime \u003d TimeParser.parseInputOut(fromto[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"dloh2236"},"content":" String[] toDateTime \u003d TimeParser.parseInputOut(fromto[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"dloh2236"},"content":" newTask \u003d new Event(message[0], fromDateTime[0], fromDateTime[1],","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"dloh2236"},"content":" toDateTime[0], toDateTime[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"dloh2236"},"content":" return newTask;","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"dloh2236"},"content":" public boolean isComplete() {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"dloh2236"},"content":" return this.isComplete;","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"dloh2236"},"content":" * Change mark to opposite of the current status.","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"dloh2236"},"content":" public void switchMark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"dloh2236"},"content":" isComplete \u003d !isComplete;","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"dloh2236"},"content":" * Generates appropriate task from file data.","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"dloh2236"},"content":" * @param id determines type of task.","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"dloh2236"},"content":" * @param mark determines if task is done.","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"dloh2236"},"content":" * @param description contains description of task.","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"dloh2236"},"content":" * @return Appropriate task base on file input.","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalDateTimeException date time format is invalid,","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"dloh2236"},"content":" * file format is corrupt.","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"dloh2236"},"content":" public static Task generateSavedTask(int id, boolean mark, String description) throws IllegalDateTimeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"dloh2236"},"content":" switch (id) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"dloh2236"},"content":" case (1):","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"dloh2236"},"content":" return new ToDo(description, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"dloh2236"},"content":" case (2):","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"dloh2236"},"content":" String[] parts \u003d description.split(\"/\", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"dloh2236"},"content":" String[] dateTime \u003d TimeParser.parseInputOut(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"dloh2236"},"content":" return new Deadline(parts[0], dateTime[0], dateTime[1], mark);","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"dloh2236"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"dloh2236"},"content":" String[] message \u003d description.split(\"/\", 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"dloh2236"},"content":" String[] fromDateTime \u003d TimeParser.parseInputOut(message[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"dloh2236"},"content":" String[] toDateTime \u003d TimeParser.parseInputOut(message[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"dloh2236"},"content":" return new Event(message[0], fromDateTime[0], fromDateTime[1],","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"dloh2236"},"content":" toDateTime[0], toDateTime[1], mark);","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"dloh2236"},"content":" * Converts task to file data to write to file.","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"dloh2236"},"content":" * @return task in file data format.","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"dloh2236"},"content":" public abstract String writeToFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"dloh2236"},"content":" * Checks if description contains keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"dloh2236"},"content":" * @param keyword String of interest","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"dloh2236"},"content":" * @return true if description contains String","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"dloh2236"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"dloh2236"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":157,"author":{"gitId":"dloh2236"},"content":" public abstract String toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":158,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"dloh2236"},"content":" public int compareTo(Task other) {","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"dloh2236"},"content":" return this.id - other.id;","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dloh2236":163}},{"path":"src/main/java/oreo/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" * This class implements the TaskList used by the chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" private int numberOfCompletedTasks \u003d 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" * Constructor for TaskList, initialise an ArrayList.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" * Adds task to list.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" * Removes task from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" * @param index Index position of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" * @return Task that was removed from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" public Task remove(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" Task removedTask \u003d taskList.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" if (removedTask.isComplete()) numberOfCompletedTasks--;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" System.out.println(numberOfCompletedTasks + \" \" + getNumberOfTask());","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" assert numberOfCompletedTasks \u003c\u003d getNumberOfTask():","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" \"completed task must always be less than or equal total number of task\";","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" return removedTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" * Clears entire list, only when file is corrupt.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" public void clearAll() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" taskList.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" public int getNumberOfTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" return taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" * Gets task in that index.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" * @param index position of task in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" * @return Task in specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" * Checks if all tasks are complete.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" * @return true if all complete, false if not.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" public boolean isAllComplete() {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" return taskList.size() \u003d\u003d numberOfCompletedTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" * String of list of task and list headers depending on","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" * number of task in the list left (including","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":" * if all task are completed)","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" * @return list of task and appropriate headers","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":" public String list() {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"dloh2236"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"dloh2236"},"content":" return \"list looks empty to me!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"dloh2236"},"content":" StringBuilder displayList \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"dloh2236"},"content":" if (isAllComplete()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"dloh2236"},"content":" displayList.append(\"Wow! You are ALL COMPLETE!!!!\\n\")","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"dloh2236"},"content":" .append(\"TIME TO PLAY WITH MEEEEE :DDDD\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"dloh2236"},"content":" } else if (taskList.size() \u003e 10) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"dloh2236"},"content":" displayList.append(\"Seems like you have a lot of things to do...\\n\")","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"dloh2236"},"content":" .append(\"Remember to play with me after :D\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"dloh2236"},"content":" displayList.append(\"Here are the things you told me to keep track of:\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"dloh2236"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"dloh2236"},"content":" displayList.append(i + 1 + \".\").append(taskList.get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"dloh2236"},"content":" return displayList.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"dloh2236"},"content":" * Handles the unmark/mark command input by user","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"dloh2236"},"content":" * @param command mark or unmark","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"dloh2236"},"content":" * @param tokeniser number for which task is to be mark/unmark","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"dloh2236"},"content":" * @return String of whether mark/unmark was succesful or if all task is complete","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalCommandException task if command is in invalid format","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"dloh2236"},"content":" public String changeMark(String command, Scanner tokeniser) throws IllegalCommandException {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"dloh2236"},"content":" if (!tokeniser.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that without specifying a task number\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"dloh2236"},"content":" String content \u003d tokeniser.next();","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"dloh2236"},"content":" if (isInteger(content)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"dloh2236"},"content":" int id \u003d Integer.parseInt(content);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"dloh2236"},"content":" if (id \u003e getNumberOfTask()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that... this task does not exist :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"dloh2236"},"content":" if (command.equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"dloh2236"},"content":" String message \u003d markDone(id - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"dloh2236"},"content":" if (isAllComplete()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"dloh2236"},"content":" message +\u003d list();","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"dloh2236"},"content":" return message;","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"dloh2236"},"content":" return markNotDone(id - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that... try a number instead\");","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"dloh2236"},"content":" public String listResults(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"dloh2236"},"content":" if (getNumberOfTask() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"dloh2236"},"content":" return \"Unfortunately, I couldn\u0027t find any task matching \\\"\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"dloh2236"},"content":" keyword +","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"dloh2236"},"content":" \"\\\" :(\";","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"dloh2236"},"content":" StringBuilder displayList \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"dloh2236"},"content":" displayList.append(\"Here are task(s) matching \\\"\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"dloh2236"},"content":" keyword +","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"dloh2236"},"content":" \"\\\" in your list: \\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"dloh2236"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"dloh2236"},"content":" displayList.append(i + 1 + \".\").append(taskList.get(i).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"dloh2236"},"content":" return displayList.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"dloh2236"},"content":" * Handles the main logic of delete task command input by user","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"dloh2236"},"content":" * @param tokeniser input of user behind delete command","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"dloh2236"},"content":" * @return Message if task has been successful or not and if all task are complete","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalCommandException invalid format of command","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"dloh2236"},"content":" public String deleteTask(Scanner tokeniser) throws IllegalCommandException {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"dloh2236"},"content":" if (!tokeniser.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that without specifying a task number\");","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"dloh2236"},"content":" String content \u003d tokeniser.next();","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"dloh2236"},"content":" if (isInteger(content)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"dloh2236"},"content":" int id \u003d Integer.parseInt(content);","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"dloh2236"},"content":" if (id \u003e getNumberOfTask()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that... this task does not exist :(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"dloh2236"},"content":" Task removedTask \u003d remove(id - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"dloh2236"},"content":" assert removedTask !\u003d null: \"removed task must exist\";","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"dloh2236"},"content":" String message \u003d \"Happily scratched this off your list:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"dloh2236"},"content":" + Ui.indentLineBy(removedTask.toString(), 2) + \"Now you have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"dloh2236"},"content":" + getNumberOfTask() + \" tasks in the list!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"dloh2236"},"content":" if (isAllComplete()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"dloh2236"},"content":" message +\u003d list();","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"dloh2236"},"content":" return message;","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that... try a number instead\");","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"dloh2236"},"content":" private String markDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"dloh2236"},"content":" Task task \u003d get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"dloh2236"},"content":" if (task.isComplete()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"dloh2236"},"content":" return \"That was done already...\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"dloh2236"},"content":" \"are you sure you wanted to mark that?\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"dloh2236"},"content":" + task.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"dloh2236"},"content":" task.switchMark();","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"dloh2236"},"content":" numberOfCompletedTasks++;","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"dloh2236"},"content":" return \"Yay! One step closer to playing with me!\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"dloh2236"},"content":" + task.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"dloh2236"},"content":" private String markNotDone(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"dloh2236"},"content":" Task task \u003d get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"dloh2236"},"content":" if (!task.isComplete()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"dloh2236"},"content":" return \"Don\u0027t worry it\u0027s still not done\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":210,"author":{"gitId":"dloh2236"},"content":" + \"What are you doing? Let\u0027s get it done now!\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":211,"author":{"gitId":"dloh2236"},"content":" + task.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"dloh2236"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"dloh2236"},"content":" task.switchMark();","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"dloh2236"},"content":" numberOfCompletedTasks--;","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"dloh2236"},"content":" return \"Oh no... what happened :(\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"dloh2236"},"content":" + task.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"dloh2236"},"content":" * Finds task in tasklist with keyword specified in tokeniser","lastModifiedDate":"2023-09-03"},{"lineNumber":222,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":223,"author":{"gitId":"dloh2236"},"content":" * @param tokeniser input by user after command","lastModifiedDate":"2023-09-03"},{"lineNumber":224,"author":{"gitId":"dloh2236"},"content":" * @return list of results","lastModifiedDate":"2023-09-03"},{"lineNumber":225,"author":{"gitId":"dloh2236"},"content":" * @throws IllegalCommandException if input by user is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":226,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":227,"author":{"gitId":"dloh2236"},"content":" public String findTasksWith(Scanner tokeniser) throws IllegalCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":228,"author":{"gitId":"dloh2236"},"content":" if (!tokeniser.hasNext()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":229,"author":{"gitId":"dloh2236"},"content":" throw new IllegalCommandException(\"do that without specifying a keyword\");","lastModifiedDate":"2023-09-03"},{"lineNumber":230,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":231,"author":{"gitId":"dloh2236"},"content":" String keyword \u003d tokeniser.next();","lastModifiedDate":"2023-09-03"},{"lineNumber":232,"author":{"gitId":"dloh2236"},"content":" TaskList toPrint \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":233,"author":{"gitId":"dloh2236"},"content":" for (int i \u003d 0; i \u003c getNumberOfTask(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":234,"author":{"gitId":"dloh2236"},"content":" Task ref \u003d taskList.get(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":235,"author":{"gitId":"dloh2236"},"content":" if (ref.contains(keyword)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":236,"author":{"gitId":"dloh2236"},"content":" toPrint.add(ref);","lastModifiedDate":"2023-09-03"},{"lineNumber":237,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":238,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":239,"author":{"gitId":"dloh2236"},"content":" return toPrint.listResults(keyword);","lastModifiedDate":"2023-09-03"},{"lineNumber":240,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":241,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":242,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":243,"author":{"gitId":"dloh2236"},"content":" * Utility method to check if str is an integer input","lastModifiedDate":"2023-09-03"},{"lineNumber":244,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":245,"author":{"gitId":"dloh2236"},"content":" * @param str input","lastModifiedDate":"2023-09-03"},{"lineNumber":246,"author":{"gitId":"dloh2236"},"content":" * @return true if integer, false if not","lastModifiedDate":"2023-09-03"},{"lineNumber":247,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":248,"author":{"gitId":"dloh2236"},"content":" public static boolean isInteger(String str) {","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"dloh2236"},"content":" if (str \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":250,"author":{"gitId":"dloh2236"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":251,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":252,"author":{"gitId":"dloh2236"},"content":" int length \u003d str.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"dloh2236"},"content":" if (length \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":254,"author":{"gitId":"dloh2236"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"dloh2236"},"content":" int i \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"dloh2236"},"content":" if (str.charAt(0) \u003d\u003d \u0027-\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"dloh2236"},"content":" if (length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"dloh2236"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"dloh2236"},"content":" i \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"dloh2236"},"content":" for (; i \u003c length; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"dloh2236"},"content":" char c \u003d str.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":265,"author":{"gitId":"dloh2236"},"content":" if (c \u003c \u00270\u0027 || c \u003e \u00279\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":266,"author":{"gitId":"dloh2236"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":267,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":268,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":269,"author":{"gitId":"dloh2236"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":270,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":271,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":271}},{"path":"src/main/java/oreo/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":" public ToDo(String d) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" public ToDo(String d, boolean completed) {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" super(d);","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" this.isComplete \u003d completed;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" String marker \u003d \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" if (this.isComplete) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" marker \u003d \"[X]\";","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" return \"[T]\" + marker + \" \" + this.description + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" public String writeToFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" int mark \u003d isComplete ? 1 : 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" String data \u003d 1 + \" \" + mark + description + System.lineSeparator();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" return data;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"dloh2236":28}},{"path":"src/main/java/oreo/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":" * This class implements the Ui of the chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" * @author Daniel Loh","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" * @version 03/09/2023","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" private String logo \u003d \" .-\\\"-.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" + \" /|6 6|\\\\\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" + \" _ ._ _ _ {/(_0_)\\\\}\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" + \"(_) | (/_ (_) _/ ^ \\\\_\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" + \" (/ /^\\\\ \\\\)-\u0027\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" + \" \\\"\\\"\u0027 \u0027\\\"\\\"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" private String greet \u003d logo + \"Woof! I\u0027m Oreo! How may I help you?\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" private String exit \u003d \"I will be sad to see you go! bye!\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" private String hLine \u003d \" ____________________________________________________________\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" private String indent \u003d \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" * Indents line by the number of spaces specified.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" * @param message contents to be indented.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" * @param indents number of spaces to indent by.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" * @return returns the message with the specified amount of indents.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" public static String indentLineBy(String message, int indents) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" StringBuilder indentedLine \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" for (int i \u003d 0; i \u003c indents; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" indentedLine.append(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" return indentedLine.append(message).toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" * Sets indent for reply message of chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":" * @param message message to display by chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" * @return messaged indented for reply.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" private String indentMessage(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" String[] lines \u003d message.split(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" StringBuilder indentedMessage \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" for (String line : lines) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" indentedMessage.append(indent).append(line).append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" return indentedMessage.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" * Wraps message in the reply UI of the chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" * @param message the message to be wrapped.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" * @return messaged wrapped for reply by chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" private String botReply(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" StringBuilder reply \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" return reply.append(hLine).append(indentMessage(message))","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" .append(hLine).toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" * Displays exit message to user.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" public void sayBye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" System.out.println(botReply(exit));","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" * Displays message to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":" * @param message message to be displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"dloh2236"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"dloh2236"},"content":" public void say(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"dloh2236"},"content":" System.out.println(botReply(message));","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"dloh2236"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"dloh2236"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"dloh2236":93}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" minHeight\u003d\"-Infinity\" prefWidth\u003d\"423.0\" spacing\u003d\"5.0\" type\u003d\"HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" \u003cjavafx.scene.layout.HBox alignment\u003d\"CENTER_RIGHT\" depthTest\u003d\"ENABLE\" maxHeight\u003d\"340.0\" maxWidth\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" opacity\u003d\"0.8\" style\u003d\"-fx-background-radius: 1em; -fx-background-color: lightgray;\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" \u003cFont name\u003d\"SF Pro Text Regular\" size\u003d\"11.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" \u003cInsets bottom\u003d\"7.0\" top\u003d\"7.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" \u003c/javafx.scene.layout.HBox\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"46.0\" fitWidth\u003d\"47.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":40}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"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\"oreo.MainWindow\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":" \u003cTextField fx:id\u003d\"userInput\" cache\u003d\"true\" layoutX\u003d\"2.0\" layoutY\u003d\"567.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"25.0\" prefWidth\u003d\"320.0\" promptText\u003d\"Type something here...\" style\u003d\"-fx-background-radius: 5em;\" AnchorPane.bottomAnchor\u003d\"7.0\" AnchorPane.leftAnchor\u003d\"2.0\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" \u003cFont name\u003d\"SF Pro Display Regular\" size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" \u003cButton fx:id\u003d\"sendButton\" contentDisplay\u003d\"CENTER\" layoutX\u003d\"324.0\" layoutY\u003d\"567.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"25.0\" prefWidth\u003d\"70.0\" style\u003d\"-fx-background-radius: 1em;\" text\u003d\"Send\" textFill\u003d\"#3695ff\" AnchorPane.leftAnchor\u003d\"324.0\" AnchorPane.rightAnchor\u003d\"2.0\" AnchorPane.topAnchor\u003d\"567.0\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" \u003cFont name\u003d\"SF Pro Rounded Medium\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToHeight\u003d\"true\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"560.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-radius: 0.5em;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" maxHeight\u003d\"1.7976931348623157E308\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: linear-gradient(#4568DC, #B06AB3);\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"dloh2236":26}},{"path":"src/test/java/oreo/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import oreo.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" public void execute_addCommandTodoToTaskList_success() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":" String description \u003d \"read book\";","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" Scanner tokeniser \u003d new Scanner(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" AddCommand ac \u003d new AddCommand(\"todo\", tokeniser);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" ac.execute(ui, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" assertEquals(tasks.get(0).toString(),","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" new ToDo(\"read book\").toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" public void execute_addCommandInvalidInput_tasksNoChange() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" String description \u003d \"read book\";","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" Scanner tokeniser \u003d new Scanner(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" AddCommand ac \u003d new AddCommand(\"abc\", tokeniser);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" ac.execute(ui, tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" assertEquals(0,","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" tasks.getNumberOfTask());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dloh2236":36}},{"path":"src/test/java/oreo/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"package oreo.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"import oreo.exception.IllegalDateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":" public void generateTask_generateTodoTask_success() throws IllegalCommandException,","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":" IllegalDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":" assertEquals(new ToDo(\"read book\").toString(),","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":" Task.generateTask(\"todo\", new Scanner(\"read book\")).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":" public void generateTask_generateDeadlineTask_success() throws IllegalCommandException,","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":" IllegalDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":" assertEquals(new Deadline(\"return book\", \"Sep 3 2023\", null).toString(),","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":" Task.generateTask(\"deadline\",","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"return book /by 03/09/2023\")).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":" public void generateTask_generateEventTask_success() throws IllegalCommandException,","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":" IllegalDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"dloh2236"},"content":" assertEquals(new Event(\"study at cafe\", \"Sep 3 2023\", \"3:00 PM\",","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"dloh2236"},"content":" \"Sep 3 2023\", \"4:00 PM\").toString(),","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"dloh2236"},"content":" Task.generateTask(\"event\",","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"study at cafe /from 03/09/2023 1500 /to 03/09/2023 1600\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"dloh2236"},"content":" .toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"dloh2236"},"content":" public void generateTask_invalidCommand_exceptionThrown() throws IllegalDateTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"dloh2236"},"content":" assertEquals(0, Task.generateTask(\"abc\",","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"dloh2236"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalCommandException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"dloh2236"},"content":" assertEquals(\"I dont think I can do that\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"dloh2236"},"content":" \"do you want to try again?\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"dloh2236"},"content":" public void generateTask_invalidDate_exceptionThrown() throws IllegalCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"dloh2236"},"content":" assertEquals(0, Task.generateTask(\"deadline\",","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"return book /by 2023-09-03\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"dloh2236"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalDateTimeException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"dloh2236"},"content":" assertEquals(\"Date or date format is invalid\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"dloh2236"},"content":" + \"try dd/mm/yyyy format instead\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"dloh2236"},"content":" public void generateTask_invalidTime_exceptionThrown() throws IllegalCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"dloh2236"},"content":" assertEquals(0, Task.generateTask(\"deadline\",","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"return book /by 03/09/2023 6pm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"dloh2236"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalDateTimeException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"dloh2236"},"content":" assertEquals(\"Time or time format is invalid\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"dloh2236"},"content":" + \"try HHmm format instead\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"dloh2236"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"dloh2236"},"content":" public void generateTask_invalidFromToTime_exceptionThrown() throws IllegalCommandException {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"dloh2236"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"dloh2236"},"content":" assertEquals(0, Task.generateTask(\"event\",","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"dloh2236"},"content":" new Scanner(\"study /from 03/09/2023 1600 /to 03/09/2023 1400\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"dloh2236"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"dloh2236"},"content":" } catch (IllegalDateTimeException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"dloh2236"},"content":" assertEquals(\"to time cannot be before from time\", e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"dloh2236"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"dloh2236"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"dloh2236":84}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"dloh2236"},"content":"todo read book","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"dloh2236"},"content":"deadline return book /by 03/09/2023 1400","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"dloh2236"},"content":"deadline leave library /by 03/09/2023 1500","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"dloh2236"},"content":"event dinner with friends /from 03/09/2023 1800 /to 03/09/2023 2100","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"dloh2236"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"dloh2236"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"dloh2236"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"dloh2236"},"content":"mark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"dloh2236"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"dloh2236"},"content":"unmark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"dloh2236"},"content":"unmark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"dloh2236"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"dloh2236"},"content":"delete 1","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"dloh2236"},"content":"mark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"dloh2236"},"content":"delete 2","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"dloh2236"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"dloh2236"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"dloh2236"},"content":"mark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"dloh2236"},"content":"unmark 2","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"dloh2236"},"content":"delete 2","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"dloh2236"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"dloh2236"},"content":"mark","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"dloh2236"},"content":"unmark","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"dloh2236"},"content":"todo","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"dloh2236"},"content":"deadline","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"dloh2236"},"content":"event","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"dloh2236"},"content":"deadline finish code /from 02/09/2023 2359","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"dloh2236"},"content":"event finish coding time /by 02/09/2023 2359","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"dloh2236"},"content":"event start coding /from 02/09/2023","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"dloh2236"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"dloh2236":30}}] diff --git a/dloh2236_ip_master/commits.json b/dloh2236_ip_master/commits.json index ed123a89..1e9c74aa 100644 --- a/dloh2236_ip_master/commits.json +++ b/dloh2236_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"dloh2236":[{"date":"2023-08-23","commitResults":[{"hash":"4f153951d45587415f6053aba0f8c3b377a726d7","isMergeCommit":false,"messageTitle":"Changed chatbot name, greet and exit message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"9686c9389e4c4f6ed5666cbd1f75159e9654890f","isMergeCommit":false,"messageTitle":"Changed the greet message to include a doggy","messageBody":"","tags":["Level-0.1"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":2}}},{"hash":"3561c0b9e9f53308c7a6bbded418d43118f47a7a","isMergeCommit":false,"messageTitle":"Oreo now echoes back command, exit message when \u0027bye\u0027 command input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}},{"hash":"011248689e2f5a60b3085268b4a492a78f9d1308","isMergeCommit":false,"messageTitle":"Added ability to add text and display back when requested","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":3}}}]},{"date":"2023-08-24","commitResults":[{"hash":"4fcc49bbbde441ef4e489e1b42e777cf5df8adc4","isMergeCommit":false,"messageTitle":"Added a textformat class to clean up reply formatting by auto indenting and adding of horizontal lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":30}}},{"hash":"194deb7d4f5b3c0fda199259867a6e85e83f8c97","isMergeCommit":false,"messageTitle":"Created Task Class that handles Task methods and attributes Re-did Duke file to declaring attributes and methods and main function just runs an instance of Duke","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":38}}},{"hash":"a9149ff35080b00def19cc30403bf45d1fbd6f32","isMergeCommit":false,"messageTitle":"Checks if Task being marked is marked or unmarked already outputs a different message If all task completes, send all complete message Checks if mark/unmark is valid Allow for adding of tasks called mark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":18}}},{"hash":"0ce41b84f7ec4f6224b55cdede46afd845c1b120","isMergeCommit":false,"messageTitle":"Added Deadline, Event, ToDo classes that are child classes of Task Implemented a way to set deadline event and to when given the appropriate command Also able to be manipulated like a task like before","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":43}}},{"hash":"4cb07895c94489944ff745de83b870dca8d645ee","isMergeCommit":false,"messageTitle":"Implemented delete function, changed taskList to ArrayList","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":9}}}]},{"date":"2023-08-25","commitResults":[{"hash":"067f94769f68a788a0612762a1df4cd672e252ff","isMergeCommit":false,"messageTitle":"Added Exception catching of illegal commands","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":9}}}]},{"date":"2023-08-26","commitResults":[{"hash":"23768ee8005dd128809ba30d771ac1be1fcf7fb3","isMergeCommit":false,"messageTitle":"Enhanced the erroneous command to handle more errors. Should cover all wrong input of commands including the lack of commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":24}}},{"hash":"6e223a9bb3753a87e04dae3022fa492fee0bbdd9","isMergeCommit":false,"messageTitle":"minor change to empty list message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"349db5e2db95fbecea5da655c27a8bc2937387d4","isMergeCommit":false,"messageTitle":"Fixed several logic errors for error input, improved readability of some messages and changed handling of certain errors to more relevant methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":17}}},{"hash":"c0cd980724d32630b06bd0231fa02bbf769845e4","isMergeCommit":false,"messageTitle":"wrote text-ui-test, program passes test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":31,"deletions":0},"bat":{"insertions":0,"deletions":21}}}]},{"date":"2023-08-29","commitResults":[{"hash":"99f5a64d106127755bc47d7de2dbb558f7dbfd84","isMergeCommit":false,"messageTitle":"Implement a save function that writes a .txt file onto the hardisk with items on list reads a duke.txt if exist, if not creates one. when bye command is inputted, duke write the task onto duke.txt file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":0}}},{"hash":"18dac4f4eb682394cf337b81b36da7c1c9b559de","isMergeCommit":false,"messageTitle":"Custom greet message based on if saved task exist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f6d0748013babcaa383e4eadf3c7323d42a776e5","isMergeCommit":false,"messageTitle":"Comment run method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"d0e65fbcd83fdcf45e2983dd58f583ecefde81f7","isMergeCommit":false,"messageTitle":"debugging merge issue for git","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":0}}},{"hash":"9f2246fa8e1d887f48a3144732dd0510279c9694","isMergeCommit":false,"messageTitle":"add Duke.java to commit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"6c3120c19ba75239a9c74670ea148f2cc421c7a2","isMergeCommit":false,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":44}}},{"hash":"a05809b73071967aa75abe3d3edc52abdd2a25c7","isMergeCommit":false,"messageTitle":"Merge conflict resolve in master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"38c4bdef12ed98ea7833446f873d1d435b9c88f1","isMergeCommit":true,"messageTitle":"Resolve conflict again","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"681cab1fb8621b3f74a6df6e2a9850c94953b3f1","isMergeCommit":true,"messageTitle":"Resolve conflict for pull","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"3b48c61d111bbb8a66aa15a509ad6dfd3ba36c79","isMergeCommit":false,"messageTitle":"Fix filepath to work for with TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"6f90c37067d0e66a5bfcb7a14675f56b0e5498eb","isMergeCommit":false,"messageTitle":"Implement basic date time parser when adding new tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":9}}}]},{"date":"2023-08-31","commitResults":[{"hash":"377e17c337fdebe4b5dfdda4c5b41a6ec8d76f20","isMergeCommit":false,"messageTitle":"Fixed file writing and file reader to read new time format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":42}}},{"hash":"546f70700c59a7db7fc6b098c05d5c871714ca0c","isMergeCommit":false,"messageTitle":"Change date format input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"7e0127383785436dc62ca2a7382afd0cf194a403","isMergeCommit":false,"messageTitle":"Catch all invalid time inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":11}}},{"hash":"6b545079c79764bf86fdf58bca47a5c5e9dc4334","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 to master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"70733d66ed90aa1c15e218e70122003c07826ac1","isMergeCommit":false,"messageTitle":"Clean up import list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"692f79e40168fe04e8a069385cabf3f419f470cb","isMergeCommit":false,"messageTitle":"Minor bug fix for list() and Text UI output","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":4}}}]},{"date":"2023-09-01","commitResults":[{"hash":"b7f6d17ee43b0bd2d7efdd33ab04f079812f5505","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-MoreOOP to update code for branch-A-OOP","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"6152c357d64538e9e09799c8b3a72bcfc51f7de8","isMergeCommit":false,"messageTitle":"Implemented UI class that handles text UI of the chatbot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":8},"java":{"insertions":94,"deletions":77}}},{"hash":"e71b9fe9c71646b775c558e34a2f6874c1b5ed63","isMergeCommit":false,"messageTitle":"Implement Storage and TaskList Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":183,"deletions":122}}},{"hash":"f0bca7b4ea6126815a581ebdac26fac76ac90327","isMergeCommit":false,"messageTitle":"Bug fixes for some ui messages not printing Further OOP for TaskList to handle mark/unmark delete methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":56}}},{"hash":"ae3f70ff30563318d17c9493f6f39ad1d6bf69cc","isMergeCommit":false,"messageTitle":"Implement Parser Class, Command Class and its child classes, main logic refactor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":160,"deletions":60}}},{"hash":"253ecb5b33b414789ab38aef5635e86334b11dd7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"67c92cdbb761f953f54666abb68dd39c0054142b","isMergeCommit":false,"messageTitle":"Change bot name to Oreo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":11}}},{"hash":"923ea098947c314018d013050bb2e3bb6a95e4bb","isMergeCommit":false,"messageTitle":"Package and import packages accordingly","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":31}}},{"hash":"3610e8e4a6de9a9a0a6caf2cbae3ed337cf418e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"dc2e3dd1fe504c7df21d838de3860e32db767211","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"6f2010dfafcc3eddd3dc5073ebd60afcd8858375","isMergeCommit":false,"messageTitle":"Add unit test for AddCommand Class to test for valid and invalid inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"14cc70052378d8a2736d914eb66cff7f5004d542","isMergeCommit":false,"messageTitle":"JUnit test on Task generateTask method for valid and invalid inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":1}}},{"hash":"bf1eccf1bd455f969b513d0161163f12ee2ac22c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Junit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"17974bf3f506bffacde8ef96cc6d5658566e3b8a","isMergeCommit":false,"messageTitle":"Change acrchiveBaseName to \u0027oreo\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"9fee636c3faede4388bf2da6323d98907da17830","isMergeCommit":false,"messageTitle":"Implement find command for oreo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":0}}},{"hash":"4d590c384cb8a38bf17c7441a08cdb6ce28f4ffb","isMergeCommit":false,"messageTitle":"change boolean variable name to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"11bfea162ff9f31be09826edb856de4856e750ad","isMergeCommit":false,"messageTitle":"Finish coding standard correction","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":61}}},{"hash":"86a169097cf25edba8b6b53a3196888f139e7e3a","isMergeCommit":false,"messageTitle":"Add Javadocs to important classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":299,"deletions":12}}},{"hash":"935e6524427671b4f36ae8d16ec1b331bca53dfc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"d628746add70c484330328b93889456ea2a5d85a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/oreo/task/Task.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ad96d07739851a2cc9e338d146bedcf7747f4fda","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/oreo/task/Task.java\n#\tsrc/main/java/oreo/task/TaskList.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"43323b6d6268e828da8a50bc4a415519d1f1aa20","isMergeCommit":false,"messageTitle":"Add javadocs to find methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"c0409a0db8b6d3fe3d94f203270b3e22cdd268f2","isMergeCommit":false,"messageTitle":"Minor change to message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"fa41a42f7145a05d8a04db5692a77379c7d1f4b1","isMergeCommit":false,"messageTitle":"Implement checkstyle build with gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0}}},{"hash":"f7c17e72731334ffda349f141c2da8bdcbe8367b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"633ad8ff1708dddc956dd50e3e1ed443f7abe4e7","isMergeCommit":false,"messageTitle":"Implment GUI and integrated logic with GUI (basic)","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":52,"deletions":0},"java":{"insertions":261,"deletions":80}}}]},{"date":"2023-09-12","commitResults":[{"hash":"5a89997959e2a2e410b0bfbe54554884ef7702c8","isMergeCommit":false,"messageTitle":"Improve GUI for Oreo","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":33,"deletions":19}}},{"hash":"650a0aa24cd8e311fe8ca616ae4a23422d2f5824","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"dloh2236":{"java":1533,"md":0,"fxml":66,"sh":0,"bat":0,"gradle":21,"txt":30}},"authorContributionVariance":{"dloh2236":56975.973},"authorDisplayNameMap":{"dloh2236":"CS2103T-W09-2 LOH ..NIEL"}} +{"authorDailyContributionsMap":{"dloh2236":[{"date":"2023-08-23","commitResults":[{"hash":"4f153951d45587415f6053aba0f8c3b377a726d7","isMergeCommit":false,"messageTitle":"Changed chatbot name, greet and exit message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"9686c9389e4c4f6ed5666cbd1f75159e9654890f","isMergeCommit":false,"messageTitle":"Changed the greet message to include a doggy","messageBody":"","tags":["Level-0.1"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":2}}},{"hash":"3561c0b9e9f53308c7a6bbded418d43118f47a7a","isMergeCommit":false,"messageTitle":"Oreo now echoes back command, exit message when \u0027bye\u0027 command input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}},{"hash":"011248689e2f5a60b3085268b4a492a78f9d1308","isMergeCommit":false,"messageTitle":"Added ability to add text and display back when requested","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":3}}}]},{"date":"2023-08-24","commitResults":[{"hash":"4fcc49bbbde441ef4e489e1b42e777cf5df8adc4","isMergeCommit":false,"messageTitle":"Added a textformat class to clean up reply formatting by auto indenting and adding of horizontal lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":30}}},{"hash":"194deb7d4f5b3c0fda199259867a6e85e83f8c97","isMergeCommit":false,"messageTitle":"Created Task Class that handles Task methods and attributes Re-did Duke file to declaring attributes and methods and main function just runs an instance of Duke","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":38}}},{"hash":"a9149ff35080b00def19cc30403bf45d1fbd6f32","isMergeCommit":false,"messageTitle":"Checks if Task being marked is marked or unmarked already outputs a different message If all task completes, send all complete message Checks if mark/unmark is valid Allow for adding of tasks called mark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":18}}},{"hash":"0ce41b84f7ec4f6224b55cdede46afd845c1b120","isMergeCommit":false,"messageTitle":"Added Deadline, Event, ToDo classes that are child classes of Task Implemented a way to set deadline event and to when given the appropriate command Also able to be manipulated like a task like before","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":43}}},{"hash":"4cb07895c94489944ff745de83b870dca8d645ee","isMergeCommit":false,"messageTitle":"Implemented delete function, changed taskList to ArrayList","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":9}}}]},{"date":"2023-08-25","commitResults":[{"hash":"067f94769f68a788a0612762a1df4cd672e252ff","isMergeCommit":false,"messageTitle":"Added Exception catching of illegal commands","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":9}}}]},{"date":"2023-08-26","commitResults":[{"hash":"23768ee8005dd128809ba30d771ac1be1fcf7fb3","isMergeCommit":false,"messageTitle":"Enhanced the erroneous command to handle more errors. Should cover all wrong input of commands including the lack of commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":24}}},{"hash":"6e223a9bb3753a87e04dae3022fa492fee0bbdd9","isMergeCommit":false,"messageTitle":"minor change to empty list message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"349db5e2db95fbecea5da655c27a8bc2937387d4","isMergeCommit":false,"messageTitle":"Fixed several logic errors for error input, improved readability of some messages and changed handling of certain errors to more relevant methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":17}}},{"hash":"c0cd980724d32630b06bd0231fa02bbf769845e4","isMergeCommit":false,"messageTitle":"wrote text-ui-test, program passes test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":31,"deletions":0},"bat":{"insertions":0,"deletions":21}}}]},{"date":"2023-08-29","commitResults":[{"hash":"99f5a64d106127755bc47d7de2dbb558f7dbfd84","isMergeCommit":false,"messageTitle":"Implement a save function that writes a .txt file onto the hardisk with items on list reads a duke.txt if exist, if not creates one. when bye command is inputted, duke write the task onto duke.txt file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":0}}},{"hash":"18dac4f4eb682394cf337b81b36da7c1c9b559de","isMergeCommit":false,"messageTitle":"Custom greet message based on if saved task exist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f6d0748013babcaa383e4eadf3c7323d42a776e5","isMergeCommit":false,"messageTitle":"Comment run method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"d0e65fbcd83fdcf45e2983dd58f583ecefde81f7","isMergeCommit":false,"messageTitle":"debugging merge issue for git","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":0}}},{"hash":"9f2246fa8e1d887f48a3144732dd0510279c9694","isMergeCommit":false,"messageTitle":"add Duke.java to commit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"6c3120c19ba75239a9c74670ea148f2cc421c7a2","isMergeCommit":false,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":44}}},{"hash":"a05809b73071967aa75abe3d3edc52abdd2a25c7","isMergeCommit":false,"messageTitle":"Merge conflict resolve in master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"38c4bdef12ed98ea7833446f873d1d435b9c88f1","isMergeCommit":true,"messageTitle":"Resolve conflict again","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"681cab1fb8621b3f74a6df6e2a9850c94953b3f1","isMergeCommit":true,"messageTitle":"Resolve conflict for pull","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"3b48c61d111bbb8a66aa15a509ad6dfd3ba36c79","isMergeCommit":false,"messageTitle":"Fix filepath to work for with TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"6f90c37067d0e66a5bfcb7a14675f56b0e5498eb","isMergeCommit":false,"messageTitle":"Implement basic date time parser when adding new tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":9}}}]},{"date":"2023-08-31","commitResults":[{"hash":"377e17c337fdebe4b5dfdda4c5b41a6ec8d76f20","isMergeCommit":false,"messageTitle":"Fixed file writing and file reader to read new time format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":42}}},{"hash":"546f70700c59a7db7fc6b098c05d5c871714ca0c","isMergeCommit":false,"messageTitle":"Change date format input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"7e0127383785436dc62ca2a7382afd0cf194a403","isMergeCommit":false,"messageTitle":"Catch all invalid time inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":11}}},{"hash":"6b545079c79764bf86fdf58bca47a5c5e9dc4334","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 to master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"70733d66ed90aa1c15e218e70122003c07826ac1","isMergeCommit":false,"messageTitle":"Clean up import list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"692f79e40168fe04e8a069385cabf3f419f470cb","isMergeCommit":false,"messageTitle":"Minor bug fix for list() and Text UI output","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":4}}}]},{"date":"2023-09-01","commitResults":[{"hash":"b7f6d17ee43b0bd2d7efdd33ab04f079812f5505","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-MoreOOP to update code for branch-A-OOP","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"6152c357d64538e9e09799c8b3a72bcfc51f7de8","isMergeCommit":false,"messageTitle":"Implemented UI class that handles text UI of the chatbot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":8},"java":{"insertions":94,"deletions":77}}},{"hash":"e71b9fe9c71646b775c558e34a2f6874c1b5ed63","isMergeCommit":false,"messageTitle":"Implement Storage and TaskList Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":183,"deletions":122}}},{"hash":"f0bca7b4ea6126815a581ebdac26fac76ac90327","isMergeCommit":false,"messageTitle":"Bug fixes for some ui messages not printing Further OOP for TaskList to handle mark/unmark delete methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":56}}},{"hash":"ae3f70ff30563318d17c9493f6f39ad1d6bf69cc","isMergeCommit":false,"messageTitle":"Implement Parser Class, Command Class and its child classes, main logic refactor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":160,"deletions":60}}},{"hash":"253ecb5b33b414789ab38aef5635e86334b11dd7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"67c92cdbb761f953f54666abb68dd39c0054142b","isMergeCommit":false,"messageTitle":"Change bot name to Oreo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":11}}},{"hash":"923ea098947c314018d013050bb2e3bb6a95e4bb","isMergeCommit":false,"messageTitle":"Package and import packages accordingly","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":31}}},{"hash":"3610e8e4a6de9a9a0a6caf2cbae3ed337cf418e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"dc2e3dd1fe504c7df21d838de3860e32db767211","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"6f2010dfafcc3eddd3dc5073ebd60afcd8858375","isMergeCommit":false,"messageTitle":"Add unit test for AddCommand Class to test for valid and invalid inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"14cc70052378d8a2736d914eb66cff7f5004d542","isMergeCommit":false,"messageTitle":"JUnit test on Task generateTask method for valid and invalid inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":1}}},{"hash":"bf1eccf1bd455f969b513d0161163f12ee2ac22c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Junit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"17974bf3f506bffacde8ef96cc6d5658566e3b8a","isMergeCommit":false,"messageTitle":"Change acrchiveBaseName to \u0027oreo\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"9fee636c3faede4388bf2da6323d98907da17830","isMergeCommit":false,"messageTitle":"Implement find command for oreo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":0}}},{"hash":"4d590c384cb8a38bf17c7441a08cdb6ce28f4ffb","isMergeCommit":false,"messageTitle":"change boolean variable name to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"11bfea162ff9f31be09826edb856de4856e750ad","isMergeCommit":false,"messageTitle":"Finish coding standard correction","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":61}}},{"hash":"86a169097cf25edba8b6b53a3196888f139e7e3a","isMergeCommit":false,"messageTitle":"Add Javadocs to important classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":299,"deletions":12}}},{"hash":"935e6524427671b4f36ae8d16ec1b331bca53dfc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"d628746add70c484330328b93889456ea2a5d85a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/oreo/task/Task.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ad96d07739851a2cc9e338d146bedcf7747f4fda","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/oreo/task/Task.java\n#\tsrc/main/java/oreo/task/TaskList.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"43323b6d6268e828da8a50bc4a415519d1f1aa20","isMergeCommit":false,"messageTitle":"Add javadocs to find methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"c0409a0db8b6d3fe3d94f203270b3e22cdd268f2","isMergeCommit":false,"messageTitle":"Minor change to message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"fa41a42f7145a05d8a04db5692a77379c7d1f4b1","isMergeCommit":false,"messageTitle":"Implement checkstyle build with gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0}}},{"hash":"f7c17e72731334ffda349f141c2da8bdcbe8367b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"633ad8ff1708dddc956dd50e3e1ed443f7abe4e7","isMergeCommit":false,"messageTitle":"Implment GUI and integrated logic with GUI (basic)","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":52,"deletions":0},"java":{"insertions":261,"deletions":80}}}]},{"date":"2023-09-12","commitResults":[{"hash":"5a89997959e2a2e410b0bfbe54554884ef7702c8","isMergeCommit":false,"messageTitle":"Improve GUI for Oreo","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":33,"deletions":19}}},{"hash":"650a0aa24cd8e311fe8ca616ae4a23422d2f5824","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"eddcf6352fa359177fcc03f8593540335ce34ee3","isMergeCommit":false,"messageTitle":"Build gradle file: change mainClass set to new .java file after GUI integration","messageBody":"Change as now Launcher.java is the main file that starts the application\n\nSimple change in file name for main file\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"9b020209a7dbf7d1e9d77ec805161a5e9c348106","isMergeCommit":false,"messageTitle":"Parser Class: pass invalid command to a AddCommand instance where exceptions are further manage","messageBody":"Parser Class and Task Class: This cause clutter in the Task File as it has to handle invalid commands which is not relevant to that Class\n\nCreate a new Command Subclass called InvalidCommand that throws the exception when execute() is called. Parser Class now returns a InvalidCommand Exception as its default case\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":12}}},{"hash":"db5b0aebed6c4e89bbea7ed70029cb502359281c","isMergeCommit":false,"messageTitle":"Add assertions to document important assumptions that should hold","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}},{"hash":"464d05fc4ef79c229e828e81475c25472dcc126e","isMergeCommit":true,"messageTitle":"Merge pull request #1 from dloh2236/branch-A-Assertions","messageBody":"Add assertions to document important assumptions that should hold","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"dloh2236":{"java":1549,"md":0,"fxml":66,"sh":0,"bat":0,"gradle":21,"txt":30}},"authorContributionVariance":{"dloh2236":51170.203},"authorDisplayNameMap":{"dloh2236":"CS2103T-W09-2 LOH ..NIEL"}} diff --git a/et-irl_ip_master/authorship.json b/et-irl_ip_master/authorship.json index f672ee40..fafb01e0 100644 --- a/et-irl_ip_master/authorship.json +++ b/et-irl_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"# BauBauBot","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"BauBauBot is a Java-based chatbot that helps you keep track of your to-dos, deadlines, and events. With BauBauBot, you can easily manage your tasks and stay organized. 🤖","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"## User Guide","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"You can access the user guide [here](https://et-irl.github.io/ip/)!","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"## Getting Started","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"To use BauBauBot, follow these simple steps:","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"1. **Download the JAR File**: You can download the JAR file for BauBauBot from the latest releases on our [GitHub page](https://github.com/et-irl/ip/releases).","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":"2. **Run the JAR File**: After downloading the JAR file, open your command terminal and navigate to the directory where the JAR file is located. Use the following command to run BauBauBot:","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" java -jar taskbot.jar","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" This will launch BauBauBot, and you can start interacting with it right away. 🚀","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":"## Commands","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"BauBauBot understands a variety of commands to help you manage your tasks. Here are some of the key commands:","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"- 📅 **Add a Deadline**: You can add a deadline task using the following command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" deadline [NAME] /by [TIME]","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" Alias: `d` ","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":"- 📆 **Add an Event**: To add an event task, use the following command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" event [NAME] /from [START TIME] /to [END TIME]","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" Alias: `e`","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":"- ✅ **Add a To-Do**: Add a simple to-do task with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" todo [NAME]","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" Alias: `t`","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":"- 🗑️ **Delete a Task**: Remove a task from your list using this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" delete [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" Alias: `rm`","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":"- 🔍 **Find Tasks**: To search for tasks that match a partial search term in their names, use this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":" find [PARTIAL SEARCH TERM]","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":" Alias: `f`","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":"- 📋 **List Tasks**: View all your tasks with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":" list","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":72,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"et-irl"},"content":" Alias: `ls`","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"et-irl"},"content":"- ✅ **Mark Task as Done**: Mark a task as completed with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"et-irl"},"content":" mark [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"et-irl"},"content":" Alias: `m`","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"et-irl"},"content":"- ❌ **Mark Task as Undone**: Reverse a completed task to its undone status with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"et-irl"},"content":" unmark [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":88,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"et-irl"},"content":" Alias: `um`","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"et-irl"},"content":"## Development","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"et-irl"},"content":"If you\u0027re interested in contributing to BauBauBot or exploring its code, here\u0027s how you can get started:","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"et-irl"},"content":"- **Clone the Repository**: You can clone the BauBauBot repository from GitHub using the following command:","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"et-irl"},"content":" git clone https://github.com/et-irl/ip.git","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"et-irl"},"content":"- **Install Java 11**: Ensure that you have Java 11 or higher installed on your system. You can download Java 11 for Windows or Linux from the official Oracle website or use your preferred package manager. ☕","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"et-irl"},"content":"- **Build and Run**: Use the following Gradle commands to build, run, clean, and test the project:","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"et-irl"},"content":" - To build the project:","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"et-irl"},"content":" ./gradlew build","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"et-irl"},"content":" - To run the project:","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"et-irl"},"content":" ./gradlew run","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"et-irl"},"content":" - To clean the project:","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"et-irl"},"content":" ./gradlew clean","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"et-irl"},"content":" - To run tests:","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"et-irl"},"content":" ./gradlew test","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"et-irl"},"content":"We welcome pull requests and issue reports from the community. Feel free to contribute and help improve BauBauBot. 🙌","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"et-irl":119,"-":10}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"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":"et-irl"},"content":" // Junit","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" // javaFx","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"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":"et-irl"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":24,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"# [BauBauBot Guide](https://github.com/et-irl/ip)","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"BauBauBot is a Java-based chatbot designed to help you manage your tasks effectively. This user guide will walk you through its features and how to use them.","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"### 📅 Add a Deadline","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"You can add a deadline task using the following command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"deadline [NAME] /by [TIME]","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":"Alias: `d`","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":"### 📆 Add an Event","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":"To add an event task, use the following command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"event [NAME] /from [START TIME] /to [END TIME]","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"Alias: `e`","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"### ✅ Add a To-Do","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":"Add a simple to-do task with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"todo [NAME]","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":"Alias: `t`","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":"### 🗑️ Delete a Task","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":"Remove a task from your list using this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":"delete [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":"Alias: `rm`","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":"### 🔍 Find Tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":"To search for tasks that match a partial search term in their names, use this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":"find [PARTIAL SEARCH TERM]","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":"Alias: `f`","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":"### 📋 List Tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":"View all your tasks with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":"list","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":"Alias: `ls`","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":"### ✅ Mark Task as Done","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":"Mark a task as completed with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"et-irl"},"content":"mark [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":75,"author":{"gitId":"et-irl"},"content":"Alias: `m`","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":77,"author":{"gitId":"et-irl"},"content":"### ❌ Mark Task as Undone","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"et-irl"},"content":"Reverse a completed task to its undone status with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"et-irl"},"content":"unmark [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"et-irl"},"content":"Alias: `um`","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"et-irl"},"content":"## Usage","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"et-irl"},"content":"Each feature has a specific command associated with it. You can use these commands to interact with BauBauBot and manage your tasks efficiently.","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":91,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":93,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"et-irl"},"content":"deadline Finish Report /by 2023-12-31","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"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":"et-irl"},"content":"BauBauBot will add a new deadline task named \"Finish Report\" with the due date of December 31, 2023.","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":101,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":102,"author":{"gitId":"et-irl"},"content":"Expected output:","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"et-irl"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"et-irl"},"content":"[D][ ] Finish Report (by: Dec 31, 2023)","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"et-irl"},"content":"Now you have X tasks in the list.","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":107,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"et-irl"},"content":"Follow similar patterns for other commands, and BauBauBot will help you organize your tasks seamlessly.","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"et-irl"},"content":"This user guide should help you get started with BauBauBot, making task management a breeze!","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"et-irl":87,"-":23}},{"path":"src/main/java/duke/DateFormatter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" * A utility class for formatting date strings.","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"public class DateFormatter {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * Formats the input date string based on the specified format.","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * @param input The date string to be formatted.","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" * @param format The desired format pattern for the output.","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * @return The formatted date string if input is a valid date, otherwise returns the original input.","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" public static String format(String input, String format) {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" LocalDate date \u003d LocalDate.parse(input);","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" return date.format(DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" return input;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"et-irl":27}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents a task with a specified deadline.","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private String endTime;","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * Constructs a deadline task with the given name and end time.","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param endTime The end time of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" public Deadline(String name, String endTime) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.endTime \u003d DateFormatter.format(endTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" * Generates a formatted string representation of the deadline task.","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" * @return A formatted string representing the deadline task.","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), this.endTime);","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"et-irl":29}},{"path":"src/main/java/duke/DeadlineAdder.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents a class for adding a deadline task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" * This class implements the Executable interface to define the behavior","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":" * of adding a deadline task when executed.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"public class DeadlineAdder implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" private String name;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" private String endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * Constructs a DeadlineAdder with the specified task list, task name, and end time.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list to which the deadline task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * @param name The name of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" * @param endTime The end time of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" public DeadlineAdder(TaskList tasks, String name, String endTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" * Executes the DeadlineAdder to add a deadline task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" * @return A message indicating the successful addition of the task and the updated task count.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" Task task \u003d new Deadline(name, endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" return String.format(\"Got it! I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" \"%s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" \"Now you have %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" task.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":43}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"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":"et-irl"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" private void flip() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" db.flip();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" return db;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"et-irl":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Duke is a simple task management program that allows users to add, delete, mark, and list tasks.","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Duke {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private static Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a Duke instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" * Initializes the task list and parser.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" public Duke() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" final String dataDirectory \u003d \"data\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" String projectRoot \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" String dataFilePath \u003d projectRoot + \"/\" + dataDirectory + \"/tasks.ser\";","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" taskList \u003d new TaskList(dataFilePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" parser \u003d new Parser(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * Gets a response based on the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" * @param input The user input to process.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" * @return A response message based on the input.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" Executable executable \u003d parser.parseCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" return executable.execute();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" } catch (IndexOutOfBoundsException | IllegalArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"et-irl":35,"-":2}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an event task that occurs within a specified time frame.","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private String startTime;","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private String endTime;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs an event task with the given name, start time, and end time.","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param name The name of the event.","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param startTime The start time of the event.","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * @param endTime The end time of the event.","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" public Event(String name, String startTime, String endTime) {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" this.startTime \u003d DateFormatter.format(startTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" this.endTime \u003d DateFormatter.format(endTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * Generates a formatted string representation of the event.","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" * @return A formatted string representing the event.","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), this.startTime, this.endTime);","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"et-irl":32}},{"path":"src/main/java/duke/EventAdder.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable task for adding an event.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class EventAdder implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private String name;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private String startTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" private String endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * Constructs an EventAdder instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list to add the event to.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" * @param name The name of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * @param startTime The start time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" * @param endTime The end time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" public EventAdder(TaskList tasks, String name, String startTime, String endTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" * Executes the task of adding an event.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" * @return A response message indicating the task has been added and the updated number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" Task task \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" return String.format(\"Got it! I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" \"%s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" \"Now you have %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" task.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":44}},{"path":"src/main/java/duke/Executable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable task that can be executed to perform an action.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public interface Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" * Executes the task and returns a response message.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * @return A response message indicating the result of executing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" String execute();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":13}},{"path":"src/main/java/duke/Finder.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents a task finder that can filter and retrieve tasks based on a regular expression.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Finder implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private String regex;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a Finder with the specified regular expression and TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param tasks The TaskList containing the tasks to filter.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param regex The regular expression used for filtering tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" public Finder(TaskList tasks, String regex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.regex \u003d regex;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * Executes the task finder and returns a string representation of filtered tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * @return A string representing the tasks that match the provided regular expression.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" return tasks.filteredToString(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":30}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"public class Launcher {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"et-irl":12}},{"path":"src/main/java/duke/Lister.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents a task lister that can retrieve and display all tasks in a TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Lister implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * Constructs a Lister with the specified TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" * @param tasks The TaskList containing the tasks to list.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" public Lister(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" * Executes the task lister and returns a string representation of all tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" * @return A string representing all tasks in the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":27}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" stage.setTitle(\"BauBauBot\");","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" private Duke duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/duke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"et-irl"},"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":40,"author":{"gitId":"et-irl"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":52}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents the parser of the chatbot.","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Parser {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" public Parser(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * Parses the user input and returns an executable command based on the input.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" * @param input The user\u0027s input string to be parsed.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * @return An Executable representing the parsed command.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" * @throws IllegalArgumentException If the input is not a valid command or is missing required parameters.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" public Executable parseCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" // Split into command and restOfCommand","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" String[] words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" final String command \u003d words[0];","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" final String restOfCommand \u003d words.length \u003e 1 ? words[1] : \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" switch (command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" case \"d\":","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" case \"deadline\": {","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" final String[] deadlineParts \u003d restOfCommand.split(\" /by \", 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" final String name \u003d deadlineParts[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" final String endTime \u003d deadlineParts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" return new DeadlineAdder(tasks, name, endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Invalid format. Usage: deadline \u003cname\u003e /by \u003ctime\u003e\");","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" case \"rm\":","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" case \"delete\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" if (restOfCommand.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Task index is missing.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" int index \u003d Integer.parseInt(restOfCommand);","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" return new TaskDeleter(tasks, index);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" case \"e\":","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" case \"event\": {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" final String[] deadlineParts \u003d restOfCommand.split(\" /from \", 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" final String name \u003d deadlineParts[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" final String deadline \u003d deadlineParts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" final String[] startAndEndParts \u003d deadline.split(\" /to \", 2);","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" final String startTime \u003d startAndEndParts[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" final String endTime \u003d startAndEndParts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" return new EventAdder(tasks, name, startTime, endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Invalid format. Usage: event \u003cname\u003e /from \u003ctime\u003e /to \u003ctime\u003e\");","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":" case \"f\":","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":" case \"find\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":" return new Finder(tasks, restOfCommand);","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"et-irl"},"content":" case \"ls\":","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"et-irl"},"content":" case \"list\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"et-irl"},"content":" return new Lister(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"et-irl"},"content":" case \"m\":","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"et-irl"},"content":" case \"mark\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"et-irl"},"content":" if (restOfCommand.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Task index is missing.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"et-irl"},"content":" int index \u003d Integer.parseInt(restOfCommand);","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"et-irl"},"content":" assert index \u003e\u003d 0 : \"Parsing failed; value is not a non-negative integer.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"et-irl"},"content":" return new TaskMarker(tasks, index);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"et-irl"},"content":" case \"t\":","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"et-irl"},"content":" case \"todo\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"et-irl"},"content":" return new ToDoAdder(tasks, restOfCommand);","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"et-irl"},"content":" case \"um\":","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"et-irl"},"content":" case \"unmark\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"et-irl"},"content":" if (restOfCommand.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Task index is missing.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"et-irl"},"content":" int index \u003d Integer.parseInt(restOfCommand);","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"et-irl"},"content":" assert index \u003e\u003d 0 : \"Parsing failed; value is not a non-negative integer.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"et-irl"},"content":" return new TaskUnmarker(tasks, index);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"et-irl"},"content":" default: {","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Unknown command.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"et-irl":106}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.io.EOFException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * This class handles the storage and retrieval of task data using serialization.","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * It provides methods to save and load ArrayList of Task objects to/from a file on the hard disk.","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":"public class Storage {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" private String filePath;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * @param filePath The path to the file where task data will be stored and retrieved.","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" * If the file path does not exist, the necessary directories will be created.","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" if (!parentDirectory.exists()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" parentDirectory.mkdirs();","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" System.out.println(\"Error creating file: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" * Saves the list of tasks to a file on the hard disk using serialization.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" * @throws IOException If there\u0027s an error while writing to the file.","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" ObjectOutputStream outputStream \u003d null;","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":" outputStream \u003d new ObjectOutputStream(new FileOutputStream(filePath));","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" outputStream.writeObject(tasks);","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" } finally {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" if (outputStream !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" outputStream.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":" * Loads the list of tasks from a file on the hard disk using deserialization.","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":" * @return The loaded list of tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":" * @throws IOException If there\u0027s an error while reading from the file.","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":" * @throws ClassNotFoundException If the class of the serialized object cannot be found.","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"et-irl"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws IOException, ClassNotFoundException {","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"et-irl"},"content":" ObjectInputStream inputStream \u003d null;","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"et-irl"},"content":" inputStream \u003d new ObjectInputStream(new FileInputStream(filePath));","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"et-irl"},"content":" // Suppressing unchecked cast warning because we know the deserialized object is an ArrayList\u003cTask\u003e.","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"et-irl"},"content":" @SuppressWarnings(\"unchecked\")","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"et-irl"},"content":" ArrayList\u003cTask\u003e tasks \u003d (ArrayList\u003cTask\u003e) inputStream.readObject();","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"et-irl"},"content":" return tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"et-irl"},"content":" } catch (EOFException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"et-irl"},"content":" // The file is empty: There are no tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"et-irl"},"content":" return new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"et-irl"},"content":" } finally {","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"et-irl"},"content":" if (inputStream !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"et-irl"},"content":" inputStream.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"et-irl":88}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":" * Represents a generic task.","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" * This class implements Serializable to allow tasks to be serialized and deserialized,","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" * enabling them to be stored and retrieved from external sources, such as files.","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"public abstract class Task implements Serializable {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" private String name;","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * Constructs a task with the given name.","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public void markDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" * Checks if the task is done.","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" * @return {@code true} if the task is done, {@code false} otherwise.","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" return this.isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" * Gets the name of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" * @return The name of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" public String getName() {","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" return this.name;","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" * Generates a formatted string representation of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":" return \"[\"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":" + (","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":" isDone ? \"X\" : \" \")","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":" \"] \"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":" this.name;","lastModifiedDate":"2023-08-19"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"et-irl":71}},{"path":"src/main/java/duke/TaskDeleter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable command for deleting a task from the task list by its index.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class TaskDeleter implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a TaskDeleter with the specified task list and index.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list from which the task will be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" public TaskDeleter(TaskList tasks, int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * Deletes the task from the task list and returns a confirmation message.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * @return A message confirming the deletion of the task and the updated task list size.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" tasks.delete(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" \"%s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" \"Now you have %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" task.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":38}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" * Represents a TaskList that holds tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"public class TaskList {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" private Storage dataStorage;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" public TaskList(String dataFilePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" dataStorage \u003d new Storage(dataFilePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" load();","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" * Saves the list of tasks to the data file.","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" private void save() {","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" dataStorage.saveTasks(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" * Loads the list of tasks from the data file.","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" private void load() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d dataStorage.loadTasks();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" tasks \u003d loadedTasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" } catch (IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" save();","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" * Deletes a task at the specified index.","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-19"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-19"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":" assert tasks.size() \u003e 0 : \"You should only delete on a task list with at least 1 element\";","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-19"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":" save();","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":72,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":73,"author":{"gitId":"et-irl"},"content":" * Marks a task at the specified index as done.","lastModifiedDate":"2023-08-19"},{"lineNumber":74,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":75,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-19"},{"lineNumber":76,"author":{"gitId":"et-irl"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-19"},{"lineNumber":77,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":78,"author":{"gitId":"et-irl"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-19"},{"lineNumber":79,"author":{"gitId":"et-irl"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c tasks.size() : \"Task should be in the task list\";","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"et-irl"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"et-irl"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-19"},{"lineNumber":82,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":83,"author":{"gitId":"et-irl"},"content":" tasks.get(index - 1).markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"et-irl"},"content":" save();","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":86,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":87,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":88,"author":{"gitId":"et-irl"},"content":" * Marks a task at the specified index as undone.","lastModifiedDate":"2023-08-19"},{"lineNumber":89,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":90,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be marked as undone.","lastModifiedDate":"2023-08-19"},{"lineNumber":91,"author":{"gitId":"et-irl"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-19"},{"lineNumber":92,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":93,"author":{"gitId":"et-irl"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-08-19"},{"lineNumber":94,"author":{"gitId":"et-irl"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c tasks.size() : \"Task should be in the task list\";","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"et-irl"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"et-irl"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-19"},{"lineNumber":97,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":98,"author":{"gitId":"et-irl"},"content":" tasks.get(index - 1).markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"et-irl"},"content":" save();","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":101,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":102,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":103,"author":{"gitId":"et-irl"},"content":" * Retrieves a task at the specified index.","lastModifiedDate":"2023-08-19"},{"lineNumber":104,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":105,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-08-19"},{"lineNumber":106,"author":{"gitId":"et-irl"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-19"},{"lineNumber":107,"author":{"gitId":"et-irl"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-19"},{"lineNumber":108,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":109,"author":{"gitId":"et-irl"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-19"},{"lineNumber":110,"author":{"gitId":"et-irl"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c tasks.size() : \"Task should be in the task list\";","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"et-irl"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"et-irl"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-19"},{"lineNumber":113,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":114,"author":{"gitId":"et-irl"},"content":" return tasks.get(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":116,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":117,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":118,"author":{"gitId":"et-irl"},"content":" * Returns the number of tasks in the TaskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":120,"author":{"gitId":"et-irl"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-08-19"},{"lineNumber":121,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":122,"author":{"gitId":"et-irl"},"content":" public int size() {","lastModifiedDate":"2023-08-19"},{"lineNumber":123,"author":{"gitId":"et-irl"},"content":" return tasks.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":125,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":126,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"et-irl"},"content":" * Generates a string representation of the tasks in the TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"et-irl"},"content":" * that match the specified regular expression (regex).","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"et-irl"},"content":" * @param regex The regular expression used to filter tasks by their string representation.","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"et-irl"},"content":" * @return A formatted string containing tasks that match the given regex, along with their index in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"et-irl"},"content":" public String filteredToString(String regex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"et-irl"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-19"},{"lineNumber":135,"author":{"gitId":"et-irl"},"content":" Pattern pattern \u003d Pattern.compile(regex, Pattern.CASE_INSENSITIVE); // Compiles the regex pattern","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"et-irl"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"et-irl"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"et-irl"},"content":" Matcher matcher \u003d pattern.matcher(task.toString()); // Match the task\u0027s string representation with the regex","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"et-irl"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"et-irl"},"content":" continue;","lastModifiedDate":"2023-09-07"},{"lineNumber":142,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"et-irl"},"content":" result.append((i + 1) + \". \" + task);","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"et-irl"},"content":" if (i + 1 \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"et-irl"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-08-19"},{"lineNumber":147,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":148,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":149,"author":{"gitId":"et-irl"},"content":" return result.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":150,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":151,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"et-irl"},"content":" * Generates a string representation of the TaskList.","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"et-irl"},"content":" * @return A formatted string of tasks in the TaskList.","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"et-irl"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"et-irl"},"content":" return filteredToString(\".*\");","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"et-irl":161}},{"path":"src/main/java/duke/TaskMarker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable command for marking a task as done in the task list by its index.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class TaskMarker implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a TaskMarker with the specified task list and index.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list in which the task will be marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" public TaskMarker(TaskList tasks, int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * Marks the specified task as done and returns a confirmation message.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * @return A message confirming the task has been marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" tasks.mark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":32}},{"path":"src/main/java/duke/TaskUnmarker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable command for marking a task as not done in the task list by its index.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class TaskUnmarker implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a TaskUnmarker with the specified task list and index.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list in which the task will be marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" public TaskUnmarker(TaskList tasks, int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * Marks the specified task as not done and returns a confirmation message.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * @return A message confirming the task has been marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":32}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" * Constructs a ToDo task with the given name.","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * @param name The name of the ToDo task.","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * Generates a formatted string representation of the ToDo task.","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" * @return A formatted string representing the ToDo task.","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"et-irl":25}},{"path":"src/main/java/duke/ToDoAdder.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable command for adding a new ToDo task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class ToDoAdder implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private String name;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a ToDoAdder with the specified task list and task name.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list in which the task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param name The name of the ToDo task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" public ToDoAdder(TaskList tasks, String name) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * Adds a new ToDo task to the task list and returns a confirmation message.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * @return A message confirming the task has been added to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" Task task \u003d new ToDo(name);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" return String.format(\"Got it! I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" \"%s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" \"Now you have %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" task.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":38}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"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":"et-irl"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"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":"et-irl"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"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":"et-irl"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"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-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"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":"et-irl"},"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":"et-irl"},"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":"et-irl"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":19}},{"path":"src/test/java/duke/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * Test cases for the {@link Deadline} class.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * Test the {@link Deadline#toString()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" public void testToString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", \"2023-08-15\");","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[D][ ] Submit report (by: Aug 15 2023)\", deadline.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * Test the {@link Deadline#markDone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", \"2023-08-15\");","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" deadline.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" assertTrue(deadline.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" * Test the {@link Deadline#markUndone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" public void testMarkUndone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", \"2023-08-15\");","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" deadline.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" deadline.markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" assertFalse(deadline.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" * Test the {@link Deadline#getName()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" public void testGetName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", \"2023-08-15\");","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" assertEquals(\"Submit report\", deadline.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" * Test the {@link Deadline#toString()} method with an invalid deadline.","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" public void testToStringWithInvalidDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", \"invalid-date\");","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[D][ ] Submit report (by: invalid-date)\", deadline.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"et-irl":61}},{"path":"src/test/java/duke/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * Test cases for the {@link Event} class.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"public class EventTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * Test the {@link Event#toString()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" public void testToString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" Event event \u003d new Event(\"Meeting\", \"2023-08-15\", \"2023-08-16\");","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[E][ ] Meeting (from: Aug 15 2023 to: Aug 16 2023)\", event.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" * Test the {@link Event#markDone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" Event event \u003d new Event(\"Party\", \"2023-08-20\", \"2023-08-21\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" assertFalse(event.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" event.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" assertTrue(event.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" * Test the {@link Event#markUndone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" public void testMarkUndone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" Event event \u003d new Event(\"Conference\", \"2023-08-25\", \"2023-08-26\");","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" event.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" assertTrue(event.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" event.markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" assertFalse(event.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" * Test the {@link Event#getName()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" public void testGetName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" Event event \u003d new Event(\"Gathering\", \"2023-08-30\", \"2023-08-31\");","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" assertEquals(\"Gathering\", event.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":" * Test the {@link Event#toString()} method with invalid dates.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" public void testToStringWithInvalidDates() {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" Event event \u003d new Event(\"Invalid Event\", \"invalid-start\", \"invalid-end\");","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[E][ ] Invalid Event (from: invalid-start to: invalid-end)\", event.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"et-irl":62}},{"path":"src/test/java/duke/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * Test cases for the {@link ToDo} class.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * Test the {@link ToDo#markDone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" assertFalse(todo.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" todo.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" assertTrue(todo.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" * Test the {@link ToDo#markUndone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" public void testMarkUndone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" todo.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" assertTrue(todo.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" todo.markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" assertFalse(todo.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" * Test the {@link ToDo#getName()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" public void testGetName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" assertEquals(\"Buy groceries\", todo.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" * Test the {@link ToDo#toString()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" public void testToString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" ToDo todoUndone \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[T][ ] Buy groceries\", todoUndone.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" ToDo todoDone \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" todoDone.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[T][X] Buy groceries\", todoDone.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"et-irl":60}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"# BauBauBot","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"BauBauBot is a Java-based chatbot that helps you keep track of your to-dos, deadlines, and events. With BauBauBot, you can easily manage your tasks and stay organized. 🤖","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"## User Guide","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"You can access the user guide [here](https://et-irl.github.io/ip/)!","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"## Getting Started","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"To use BauBauBot, follow these simple steps:","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"1. **Download the JAR File**: You can download the JAR file for BauBauBot from the latest releases from [here](https://github.com/et-irl/ip/releases).","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":"2. **Run the JAR File**: After downloading the JAR file, open your command terminal and navigate to the directory where the JAR file is located. Use the following command to run BauBauBot:","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" java -jar taskbot.jar","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" This will launch BauBauBot, and you can start interacting with it right away. 🚀","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":"## Commands","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"BauBauBot understands a variety of commands to help you manage your tasks. Here are some of the key commands:","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"- 📅 **Add a Deadline**: You can add a deadline task using the following command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" deadline [NAME] /by [TIME]","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" Alias: `d` ","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":"- 📆 **Add an Event**: To add an event task, use the following command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" event [NAME] /from [START TIME] /to [END TIME]","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" Alias: `e`","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":"- ✅ **Add a To-Do**: Add a simple to-do task with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" todo [NAME]","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" Alias: `t`","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":"- 🗑️ **Delete a Task**: Remove a task from your list using this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" delete [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" Alias: `rm`","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":"- 🔍 **Find Tasks**: To search for tasks that match a partial search term in their names, use this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":" find [PARTIAL SEARCH TERM]","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":" Alias: `f`","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":"- 📋 **List Tasks**: View all your tasks with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":" list","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":72,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"et-irl"},"content":" Alias: `ls`","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"et-irl"},"content":"- ✅ **Mark Task as Done**: Mark a task as completed with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"et-irl"},"content":" mark [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"et-irl"},"content":" Alias: `m`","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"et-irl"},"content":"- ❌ **Mark Task as Undone**: Reverse a completed task to its undone status with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"et-irl"},"content":" ","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"et-irl"},"content":" unmark [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":88,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"et-irl"},"content":" Alias: `um`","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"et-irl"},"content":"## Development","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"et-irl"},"content":"If you\u0027re interested in contributing to BauBauBot or exploring its code, here\u0027s how you can get started:","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"et-irl"},"content":"- **Clone the Repository**: You can clone the BauBauBot repository from GitHub using the following command:","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"et-irl"},"content":" git clone https://github.com/et-irl/ip.git","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"et-irl"},"content":"- **Install Java 11**: Ensure that you have Java 11 or higher installed on your system. You can download Java 11 for Windows or Linux from the official Oracle website or use your preferred package manager. ☕","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"et-irl"},"content":"- **Build and Run**: Use the following Gradle commands to build, run, clean, and test the project:","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"et-irl"},"content":" - To build the project:","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"et-irl"},"content":" ./gradlew build","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"et-irl"},"content":" - To run the project:","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"et-irl"},"content":" ./gradlew run","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"et-irl"},"content":" - To clean the project:","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"et-irl"},"content":" ./gradlew clean","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"et-irl"},"content":" - To run tests:","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"et-irl"},"content":" ./gradlew test","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"et-irl"},"content":" ```","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"et-irl"},"content":"We welcome pull requests and issue reports from the community. Feel free to contribute and help improve BauBauBot. 🙌","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"et-irl":119,"-":10}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"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":"et-irl"},"content":" // Junit","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" // javaFx","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"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":"et-irl"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":24,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"# [BauBauBot Guide](https://github.com/et-irl/ip)","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"BauBauBot is a Java-based chatbot designed to help you manage your tasks effectively. This user guide will walk you through its features and how to use them.","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"### 📅 Add a Deadline","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"You can add a deadline task using the following command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"deadline [NAME] /by [TIME]","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":"Alias: `d`","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":"### 📆 Add an Event","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":"To add an event task, use the following command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"event [NAME] /from [START TIME] /to [END TIME]","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"Alias: `e`","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"### ✅ Add a To-Do","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":"Add a simple to-do task with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"todo [NAME]","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":"Alias: `t`","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":"### 🗑️ Delete a Task","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":"Remove a task from your list using this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":"delete [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":"Alias: `rm`","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":"### 🔍 Find Tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":"To search for tasks that match a partial search term in their names, use this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":"find [PARTIAL SEARCH TERM]","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":"Alias: `f`","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":"### 📋 List Tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":"View all your tasks with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":"list","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":"Alias: `ls`","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":"### ✅ Mark Task as Done","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":"Mark a task as completed with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"et-irl"},"content":"mark [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":75,"author":{"gitId":"et-irl"},"content":"Alias: `m`","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":77,"author":{"gitId":"et-irl"},"content":"### ❌ Mark Task as Undone","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"et-irl"},"content":"Reverse a completed task to its undone status with this command or its alias:","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"et-irl"},"content":"unmark [TASK NUMBER]","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"et-irl"},"content":"Alias: `um`","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"et-irl"},"content":"## Usage","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"et-irl"},"content":"Each feature has a specific command associated with it. You can use these commands to interact with BauBauBot and manage your tasks efficiently.","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":91,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":93,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"et-irl"},"content":"deadline Finish Report /by 2023-12-31","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"et-irl"},"content":"```","lastModifiedDate":"2023-09-11"},{"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":"et-irl"},"content":"BauBauBot will add a new deadline task named \"Finish Report\" with the due date of December 31, 2023.","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":101,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":102,"author":{"gitId":"et-irl"},"content":"Expected output:","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"et-irl"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"et-irl"},"content":"[D][ ] Finish Report (by: Dec 31, 2023)","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"et-irl"},"content":"Now you have X tasks in the list.","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":107,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"et-irl"},"content":"Follow similar patterns for other commands, and BauBauBot will help you organize your tasks seamlessly.","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"et-irl"},"content":"This user guide should help you get started with BauBauBot, making task management a breeze!","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"et-irl":87,"-":23}},{"path":"src/main/java/duke/DateFormatter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" * A utility class for formatting date strings.","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"public class DateFormatter {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * Formats the input date string based on the specified format.","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * @param input The date string to be formatted.","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" * @param format The desired format pattern for the output.","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * @return The formatted date string if input is a valid date, otherwise returns the original input.","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" public static String format(String input, String format) {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" LocalDate date \u003d LocalDate.parse(input);","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" return date.format(DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" return input;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"et-irl":27}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents a task with a specified deadline.","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private String endTime;","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * Constructs a deadline task with the given name and end time.","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param endTime The end time of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" public Deadline(String name, String endTime) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.endTime \u003d DateFormatter.format(endTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" * Generates a formatted string representation of the deadline task.","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" * @return A formatted string representing the deadline task.","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), this.endTime);","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"et-irl":29}},{"path":"src/main/java/duke/DeadlineAdder.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents a class for adding a deadline task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" * This class implements the Executable interface to define the behavior","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":" * of adding a deadline task when executed.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"public class DeadlineAdder implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" private String name;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" private String endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * Constructs a DeadlineAdder with the specified task list, task name, and end time.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list to which the deadline task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * @param name The name of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" * @param endTime The end time of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" public DeadlineAdder(TaskList tasks, String name, String endTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" * Executes the DeadlineAdder to add a deadline task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" * @return A message indicating the successful addition of the task and the updated task count.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" Task task \u003d new Deadline(name, endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" return String.format(\"Got it! I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" \"%s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" \"Now you have %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" task.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":43}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"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":"et-irl"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" private void flip() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" db.flip();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" return db;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"et-irl":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Duke is a simple task management program that allows users to add, delete, mark, and list tasks.","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Duke {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private static Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a Duke instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" * Initializes the task list and parser.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" public Duke() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" final String dataDirectory \u003d \"data\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" String projectRoot \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" String dataFilePath \u003d projectRoot + \"/\" + dataDirectory + \"/tasks.ser\";","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" taskList \u003d new TaskList(dataFilePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" parser \u003d new Parser(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * Gets a response based on the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" * @param input The user input to process.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" * @return A response message based on the input.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" Executable executable \u003d parser.parseCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" return executable.execute();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" } catch (IndexOutOfBoundsException | IllegalArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"et-irl":35,"-":2}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an event task that occurs within a specified time frame.","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private String startTime;","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private String endTime;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs an event task with the given name, start time, and end time.","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param name The name of the event.","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param startTime The start time of the event.","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * @param endTime The end time of the event.","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" public Event(String name, String startTime, String endTime) {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" this.startTime \u003d DateFormatter.format(startTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" this.endTime \u003d DateFormatter.format(endTime, \"MMM d yyyy\");","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * Generates a formatted string representation of the event.","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" * @return A formatted string representing the event.","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), this.startTime, this.endTime);","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"et-irl":32}},{"path":"src/main/java/duke/EventAdder.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable task for adding an event.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class EventAdder implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private String name;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private String startTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" private String endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * Constructs an EventAdder instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list to add the event to.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" * @param name The name of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * @param startTime The start time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" * @param endTime The end time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" public EventAdder(TaskList tasks, String name, String startTime, String endTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" * Executes the task of adding an event.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" * @return A response message indicating the task has been added and the updated number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" Task task \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" return String.format(\"Got it! I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" \"%s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" \"Now you have %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" task.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":44}},{"path":"src/main/java/duke/Executable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable task that can be executed to perform an action.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public interface Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" * Executes the task and returns a response message.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * @return A response message indicating the result of executing the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" String execute();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":13}},{"path":"src/main/java/duke/Finder.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents a task finder that can filter and retrieve tasks based on a regular expression.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Finder implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private String regex;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a Finder with the specified regular expression and TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param tasks The TaskList containing the tasks to filter.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param regex The regular expression used for filtering tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" public Finder(TaskList tasks, String regex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.regex \u003d regex;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * Executes the task finder and returns a string representation of filtered tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * @return A string representing the tasks that match the provided regular expression.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" return tasks.filteredToString(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":30}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"public class Launcher {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"et-irl":12}},{"path":"src/main/java/duke/Lister.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents a task lister that can retrieve and display all tasks in a TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Lister implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * Constructs a Lister with the specified TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" * @param tasks The TaskList containing the tasks to list.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" public Lister(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" * Executes the task lister and returns a string representation of all tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" * @return A string representing all tasks in the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":27}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" stage.setTitle(\"BauBauBot\");","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" private Duke duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/duke.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"et-irl"},"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":40,"author":{"gitId":"et-irl"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":52}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents the parser of the chatbot.","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class Parser {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" public Parser(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * Parses the user input and returns an executable command based on the input.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" * @param input The user\u0027s input string to be parsed.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * @return An Executable representing the parsed command.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" * @throws IllegalArgumentException If the input is not a valid command or is missing required parameters.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" public Executable parseCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" // Split into command and restOfCommand","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" String[] words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" final String command \u003d words[0];","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" final String restOfCommand \u003d words.length \u003e 1 ? words[1] : \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" switch (command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" case \"d\":","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" case \"deadline\": {","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" final String[] deadlineParts \u003d restOfCommand.split(\" /by \", 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" final String name \u003d deadlineParts[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" final String endTime \u003d deadlineParts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" return new DeadlineAdder(tasks, name, endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Invalid format. Usage: deadline \u003cname\u003e /by \u003ctime\u003e\");","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" case \"rm\":","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" case \"delete\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" if (restOfCommand.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Task index is missing.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" int index \u003d Integer.parseInt(restOfCommand);","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" return new TaskDeleter(tasks, index);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" case \"e\":","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" case \"event\": {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" final String[] deadlineParts \u003d restOfCommand.split(\" /from \", 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" final String name \u003d deadlineParts[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" final String deadline \u003d deadlineParts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" final String[] startAndEndParts \u003d deadline.split(\" /to \", 2);","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" final String startTime \u003d startAndEndParts[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" final String endTime \u003d startAndEndParts[1];","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" return new EventAdder(tasks, name, startTime, endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Invalid format. Usage: event \u003cname\u003e /from \u003ctime\u003e /to \u003ctime\u003e\");","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":" case \"f\":","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":" case \"find\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":" return new Finder(tasks, restOfCommand);","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"et-irl"},"content":" case \"ls\":","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"et-irl"},"content":" case \"list\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"et-irl"},"content":" return new Lister(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"et-irl"},"content":" case \"m\":","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"et-irl"},"content":" case \"mark\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"et-irl"},"content":" if (restOfCommand.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Task index is missing.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"et-irl"},"content":" int index \u003d Integer.parseInt(restOfCommand);","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"et-irl"},"content":" assert index \u003e\u003d 0 : \"Parsing failed; value is not a non-negative integer.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"et-irl"},"content":" return new TaskMarker(tasks, index);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"et-irl"},"content":" case \"t\":","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"et-irl"},"content":" case \"todo\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"et-irl"},"content":" return new ToDoAdder(tasks, restOfCommand);","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"et-irl"},"content":" case \"um\":","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"et-irl"},"content":" case \"unmark\": {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"et-irl"},"content":" if (restOfCommand.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Task index is missing.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"et-irl"},"content":" int index \u003d Integer.parseInt(restOfCommand);","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"et-irl"},"content":" assert index \u003e\u003d 0 : \"Parsing failed; value is not a non-negative integer.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"et-irl"},"content":" return new TaskUnmarker(tasks, index);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"et-irl"},"content":" default: {","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"et-irl"},"content":" throw new IllegalArgumentException(\"Unknown command.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"et-irl":106}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.io.EOFException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * This class handles the storage and retrieval of task data using serialization.","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * It provides methods to save and load ArrayList of Task objects to/from a file on the hard disk.","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":"public class Storage {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" private String filePath;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * @param filePath The path to the file where task data will be stored and retrieved.","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" * If the file path does not exist, the necessary directories will be created.","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" File parentDirectory \u003d file.getParentFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" if (!parentDirectory.exists()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" parentDirectory.mkdirs();","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" System.out.println(\"Error creating file: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" * Saves the list of tasks to a file on the hard disk using serialization.","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" * @throws IOException If there\u0027s an error while writing to the file.","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" ObjectOutputStream outputStream \u003d null;","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":" outputStream \u003d new ObjectOutputStream(new FileOutputStream(filePath));","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" outputStream.writeObject(tasks);","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" } finally {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" if (outputStream !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" outputStream.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":" * Loads the list of tasks from a file on the hard disk using deserialization.","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":" * @return The loaded list of tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":" * @throws IOException If there\u0027s an error while reading from the file.","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":" * @throws ClassNotFoundException If the class of the serialized object cannot be found.","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"et-irl"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws IOException, ClassNotFoundException {","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"et-irl"},"content":" ObjectInputStream inputStream \u003d null;","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"et-irl"},"content":" inputStream \u003d new ObjectInputStream(new FileInputStream(filePath));","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"et-irl"},"content":" // Suppressing unchecked cast warning because we know the deserialized object is an ArrayList\u003cTask\u003e.","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"et-irl"},"content":" @SuppressWarnings(\"unchecked\")","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"et-irl"},"content":" ArrayList\u003cTask\u003e tasks \u003d (ArrayList\u003cTask\u003e) inputStream.readObject();","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"et-irl"},"content":" return tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"et-irl"},"content":" } catch (EOFException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"et-irl"},"content":" // The file is empty: There are no tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"et-irl"},"content":" return new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"et-irl"},"content":" } finally {","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"et-irl"},"content":" if (inputStream !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"et-irl"},"content":" inputStream.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"et-irl":88}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":" * Represents a generic task.","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" * This class implements Serializable to allow tasks to be serialized and deserialized,","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" * enabling them to be stored and retrieved from external sources, such as files.","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":"public abstract class Task implements Serializable {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" private String name;","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * Constructs a task with the given name.","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public void markDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" * Checks if the task is done.","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" * @return {@code true} if the task is done, {@code false} otherwise.","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" return this.isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" * Gets the name of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" * @return The name of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" public String getName() {","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" return this.name;","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" * Generates a formatted string representation of the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":" return \"[\"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":" + (","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":" isDone ? \"X\" : \" \")","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":" \"] \"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":" this.name;","lastModifiedDate":"2023-08-19"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"et-irl":71}},{"path":"src/main/java/duke/TaskDeleter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable command for deleting a task from the task list by its index.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class TaskDeleter implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a TaskDeleter with the specified task list and index.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list from which the task will be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" public TaskDeleter(TaskList tasks, int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * Deletes the task from the task list and returns a confirmation message.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * @return A message confirming the deletion of the task and the updated task list size.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" tasks.delete(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" \"%s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" \"Now you have %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" task.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":38}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" * Represents a TaskList that holds tasks.","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":"public class TaskList {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" private Storage dataStorage;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" public TaskList(String dataFilePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" dataStorage \u003d new Storage(dataFilePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" load();","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" * Saves the list of tasks to the data file.","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" private void save() {","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" dataStorage.saveTasks(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" * Loads the list of tasks from the data file.","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" private void load() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" ArrayList\u003cTask\u003e loadedTasks \u003d dataStorage.loadTasks();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" tasks \u003d loadedTasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" } catch (IOException | ClassNotFoundException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" save();","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" * Deletes a task at the specified index.","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-19"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"et-irl"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-19"},{"lineNumber":64,"author":{"gitId":"et-irl"},"content":" assert tasks.size() \u003e 0 : \"You should only delete on a task list with at least 1 element\";","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"et-irl"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"et-irl"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-19"},{"lineNumber":67,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"et-irl"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"et-irl"},"content":" save();","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":72,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":73,"author":{"gitId":"et-irl"},"content":" * Marks a task at the specified index as done.","lastModifiedDate":"2023-08-19"},{"lineNumber":74,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":75,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-19"},{"lineNumber":76,"author":{"gitId":"et-irl"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-19"},{"lineNumber":77,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":78,"author":{"gitId":"et-irl"},"content":" public void mark(int index) {","lastModifiedDate":"2023-08-19"},{"lineNumber":79,"author":{"gitId":"et-irl"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c tasks.size() : \"Task should be in the task list\";","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"et-irl"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"et-irl"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-19"},{"lineNumber":82,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":83,"author":{"gitId":"et-irl"},"content":" tasks.get(index - 1).markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"et-irl"},"content":" save();","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":86,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":87,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":88,"author":{"gitId":"et-irl"},"content":" * Marks a task at the specified index as undone.","lastModifiedDate":"2023-08-19"},{"lineNumber":89,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":90,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be marked as undone.","lastModifiedDate":"2023-08-19"},{"lineNumber":91,"author":{"gitId":"et-irl"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-19"},{"lineNumber":92,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":93,"author":{"gitId":"et-irl"},"content":" public void unmark(int index) {","lastModifiedDate":"2023-08-19"},{"lineNumber":94,"author":{"gitId":"et-irl"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c tasks.size() : \"Task should be in the task list\";","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"et-irl"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"et-irl"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-19"},{"lineNumber":97,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":98,"author":{"gitId":"et-irl"},"content":" tasks.get(index - 1).markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"et-irl"},"content":" save();","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":101,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":102,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":103,"author":{"gitId":"et-irl"},"content":" * Retrieves a task at the specified index.","lastModifiedDate":"2023-08-19"},{"lineNumber":104,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":105,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-08-19"},{"lineNumber":106,"author":{"gitId":"et-irl"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-19"},{"lineNumber":107,"author":{"gitId":"et-irl"},"content":" * @throws IndexOutOfBoundsException If the index is out of range.","lastModifiedDate":"2023-08-19"},{"lineNumber":108,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":109,"author":{"gitId":"et-irl"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-19"},{"lineNumber":110,"author":{"gitId":"et-irl"},"content":" assert 0 \u003c\u003d index \u0026\u0026 index \u003c tasks.size() : \"Task should be in the task list\";","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"et-irl"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"et-irl"},"content":" throw new IndexOutOfBoundsException(\"Task index is out of range.\");","lastModifiedDate":"2023-08-19"},{"lineNumber":113,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":114,"author":{"gitId":"et-irl"},"content":" return tasks.get(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":116,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":117,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":118,"author":{"gitId":"et-irl"},"content":" * Returns the number of tasks in the TaskList.","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":120,"author":{"gitId":"et-irl"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-08-19"},{"lineNumber":121,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":122,"author":{"gitId":"et-irl"},"content":" public int size() {","lastModifiedDate":"2023-08-19"},{"lineNumber":123,"author":{"gitId":"et-irl"},"content":" return tasks.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":125,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":126,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"et-irl"},"content":" * Generates a string representation of the tasks in the TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"et-irl"},"content":" * that match the specified regular expression (regex).","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"et-irl"},"content":" * @param regex The regular expression used to filter tasks by their string representation.","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"et-irl"},"content":" * @return A formatted string containing tasks that match the given regex, along with their index in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"et-irl"},"content":" public String filteredToString(String regex) {","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"et-irl"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-19"},{"lineNumber":135,"author":{"gitId":"et-irl"},"content":" Pattern pattern \u003d Pattern.compile(regex, Pattern.CASE_INSENSITIVE); // Compiles the regex pattern","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"et-irl"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"et-irl"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"et-irl"},"content":" Matcher matcher \u003d pattern.matcher(task.toString()); // Match the task\u0027s string representation with the regex","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"et-irl"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"et-irl"},"content":" continue;","lastModifiedDate":"2023-09-07"},{"lineNumber":142,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"et-irl"},"content":" result.append((i + 1) + \". \" + task);","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"et-irl"},"content":" if (i + 1 \u003c tasks.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"et-irl"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-08-19"},{"lineNumber":147,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":148,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":149,"author":{"gitId":"et-irl"},"content":" return result.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":150,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":151,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"et-irl"},"content":" * Generates a string representation of the TaskList.","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"et-irl"},"content":" * @return A formatted string of tasks in the TaskList.","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"et-irl"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"et-irl"},"content":" return filteredToString(\".*\");","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"et-irl":161}},{"path":"src/main/java/duke/TaskMarker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable command for marking a task as done in the task list by its index.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class TaskMarker implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a TaskMarker with the specified task list and index.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list in which the task will be marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" public TaskMarker(TaskList tasks, int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * Marks the specified task as done and returns a confirmation message.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * @return A message confirming the task has been marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" tasks.mark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":32}},{"path":"src/main/java/duke/TaskUnmarker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable command for marking a task as not done in the task list by its index.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class TaskUnmarker implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a TaskUnmarker with the specified task list and index.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list in which the task will be marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" public TaskUnmarker(TaskList tasks, int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * Marks the specified task as not done and returns a confirmation message.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * @return A message confirming the task has been marked as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":32}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" * Constructs a ToDo task with the given name.","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * @param name The name of the ToDo task.","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" super(name);","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" * Generates a formatted string representation of the ToDo task.","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" * @return A formatted string representing the ToDo task.","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"et-irl":25}},{"path":"src/main/java/duke/ToDoAdder.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":" * Represents an executable command for adding a new ToDo task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"public class ToDoAdder implements Executable {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":" private String name;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" * Constructs a ToDoAdder with the specified task list and task name.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" * @param tasks The task list in which the task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * @param name The name of the ToDo task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" public ToDoAdder(TaskList tasks, String name) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" * Adds a new ToDo task to the task list and returns a confirmation message.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * @return A message confirming the task has been added to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public String execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" Task task \u003d new ToDo(name);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" return String.format(\"Got it! I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" \"%s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" +","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" \"Now you have %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" task.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":38}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"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":"et-irl"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"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":"et-irl"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"et-irl"},"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":"et-irl"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"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-02"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"et-irl"},"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":"et-irl"},"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":"et-irl"},"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":"et-irl"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"et-irl":19}},{"path":"src/test/java/duke/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * Test cases for the {@link Deadline} class.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * Test the {@link Deadline#toString()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" public void testToString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", \"2023-08-15\");","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[D][ ] Submit report (by: Aug 15 2023)\", deadline.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" * Test the {@link Deadline#markDone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", \"2023-08-15\");","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" deadline.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" assertTrue(deadline.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" * Test the {@link Deadline#markUndone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" public void testMarkUndone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", \"2023-08-15\");","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" deadline.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" deadline.markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" assertFalse(deadline.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" * Test the {@link Deadline#getName()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" public void testGetName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", \"2023-08-15\");","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" assertEquals(\"Submit report\", deadline.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" * Test the {@link Deadline#toString()} method with an invalid deadline.","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" public void testToStringWithInvalidDeadline() {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", \"invalid-date\");","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[D][ ] Submit report (by: invalid-date)\", deadline.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"et-irl":61}},{"path":"src/test/java/duke/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * Test cases for the {@link Event} class.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"public class EventTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" * Test the {@link Event#toString()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" public void testToString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" Event event \u003d new Event(\"Meeting\", \"2023-08-15\", \"2023-08-16\");","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[E][ ] Meeting (from: Aug 15 2023 to: Aug 16 2023)\", event.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" * Test the {@link Event#markDone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" Event event \u003d new Event(\"Party\", \"2023-08-20\", \"2023-08-21\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" assertFalse(event.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" event.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" assertTrue(event.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":" * Test the {@link Event#markUndone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" public void testMarkUndone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":" Event event \u003d new Event(\"Conference\", \"2023-08-25\", \"2023-08-26\");","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" event.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" assertTrue(event.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" event.markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" assertFalse(event.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" * Test the {@link Event#getName()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" public void testGetName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" Event event \u003d new Event(\"Gathering\", \"2023-08-30\", \"2023-08-31\");","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" assertEquals(\"Gathering\", event.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":" * Test the {@link Event#toString()} method with invalid dates.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" public void testToStringWithInvalidDates() {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" Event event \u003d new Event(\"Invalid Event\", \"invalid-start\", \"invalid-end\");","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[E][ ] Invalid Event (from: invalid-start to: invalid-end)\", event.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"et-irl":62}},{"path":"src/test/java/duke/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"et-irl"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"et-irl"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"et-irl"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"et-irl"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"et-irl"},"content":" * Test cases for the {@link ToDo} class.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"et-irl"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"et-irl"},"content":" * Test the {@link ToDo#markDone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"et-irl"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"et-irl"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"et-irl"},"content":" assertFalse(todo.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"et-irl"},"content":" todo.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"et-irl"},"content":" assertTrue(todo.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"et-irl"},"content":" * Test the {@link ToDo#markUndone()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"et-irl"},"content":" public void testMarkUndone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"et-irl"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"et-irl"},"content":" todo.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"et-irl"},"content":" assertTrue(todo.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"et-irl"},"content":" todo.markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"et-irl"},"content":" assertFalse(todo.isDone());","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"et-irl"},"content":" * Test the {@link ToDo#getName()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"et-irl"},"content":" public void testGetName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"et-irl"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"et-irl"},"content":" assertEquals(\"Buy groceries\", todo.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"et-irl"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"et-irl"},"content":" * Test the {@link ToDo#toString()} method.","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"et-irl"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"et-irl"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"et-irl"},"content":" public void testToString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"et-irl"},"content":" ToDo todoUndone \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[T][ ] Buy groceries\", todoUndone.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"et-irl"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"et-irl"},"content":" ToDo todoDone \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"et-irl"},"content":" todoDone.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"et-irl"},"content":" assertEquals(\"[T][X] Buy groceries\", todoDone.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"et-irl"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"et-irl"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"et-irl":60}}] diff --git a/et-irl_ip_master/commits.json b/et-irl_ip_master/commits.json index 05d58586..3a2743e2 100644 --- a/et-irl_ip_master/commits.json +++ b/et-irl_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"et-irl":[{"date":"2023-08-21","commitResults":[{"hash":"f68bff492afddf69ddc11a940215b492c90b9d72","isMergeCommit":false,"messageTitle":"Rename chatbot and make initial skeletion","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"487992491afee162ad34394e90c73612a2e94fd1","isMergeCommit":false,"messageTitle":"Add echo feature and bye to quit","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"dccd90ec6a761537910015ca3eedbc08e600e9c3","isMergeCommit":false,"messageTitle":"Add ability to store text entered by user \u0026 list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":6}}},{"hash":"4e935f1bf80dde0030776ef4a4bd76fbd28552cd","isMergeCommit":false,"messageTitle":"Add ability to mark tasks as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":10}}},{"hash":"ec83cf4c9f6b4b4bccbe68907ae60f6c4576c075","isMergeCommit":false,"messageTitle":"Bump gradle and lib version","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":4}}},{"hash":"07714a5c5034a4f04f5c8503f79889f282a3f0f9","isMergeCommit":false,"messageTitle":"Add support for tracking ToDos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":10}}},{"hash":"ba2eadd6a5cc84346335706e9067867a3e3c3202","isMergeCommit":false,"messageTitle":"Semi-automate the testing of chatbot","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"72ecd1857acf3b9be19e3018d3b1281319abff12","isMergeCommit":false,"messageTitle":"Add error handling to the chatbot","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":17}}},{"hash":"1d82310791d28990b18a5afa66a2e90217a43310","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":3}}},{"hash":"6732dad999695a7c8f00843b738f56fe881bd920","isMergeCommit":false,"messageTitle":"Add documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":4}}},{"hash":"8dca766486a83cb5b75f357d38a6de4b260ae5c9","isMergeCommit":false,"messageTitle":"Add more comprehensive tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"e8d34cffaa734a8a50b104dd63fe82c63f82d6ba","isMergeCommit":false,"messageTitle":"Add functionality to persist tasks over runs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":3}}},{"hash":"afd9e74efd4c3aebe764da2dba9d015c939cdd7d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1ad26ed5c81419cb3a0edcd75094be89a3f3f710","isMergeCommit":false,"messageTitle":"Add date and time parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":3}}},{"hash":"4724f240c954ed131dcc35a69fbcaf7c0c5f6301","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"f084d46a5791ad1d5dca564d40e528a536e0035e","isMergeCommit":false,"messageTitle":"Add parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":119}}},{"hash":"45ad412f3704825507532e89a87d14d1814c35e2","isMergeCommit":false,"messageTitle":"Add Ui to handle interactions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":14}}},{"hash":"730522d8cecab3a3a9bece5194d17231d744e6ff","isMergeCommit":false,"messageTitle":"Rename TaskDataStorage to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"b7c9b4d0baf3d2f38955036043100063ed767c4a","isMergeCommit":false,"messageTitle":"Rename ToDoList to TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":23}}},{"hash":"82447956417309d1b1cc8404f12e6ae8cadad665","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"2bab79d664f422bb74160fa6f6d6064bb27389b2","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"2dbf59dbf86816cfc014a49202c93a57b80c2853","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"c6481ca5e8bcc3ae5ebe7d622f47bf4d5f4378d7","isMergeCommit":false,"messageTitle":"Use gradle to automate build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"6ff2a213b1f2ebf9278b3c0ff0c4b6d13aa49354","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"fa421c850d09cb4bc7bc64cbaf30d4a471c82126","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":0}}},{"hash":"743862b54e80cf382af6ed3085503fcf785cd40f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"0b03ffe8a215087f79934ce8bf6e9bda1a5a3aa1","isMergeCommit":false,"messageTitle":"Change data directory","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"01022dbf315ae779d712223a0b540c83af5704dd","isMergeCommit":false,"messageTitle":"Follow the coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":98}}},{"hash":"0785121561d4de80a60a2ad7c95e229a1d4e3103","isMergeCommit":false,"messageTitle":"Add finding feature with regex","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":9}}},{"hash":"e241b859ecd7ef450cf235b8569c759037a703da","isMergeCommit":false,"messageTitle":"Add documentation for JUnit tests","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":3}}},{"hash":"306e82ac7b6081efee6cdc38f2172247d2de027e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6df2ad3bbb89bbe7b78dff639a2bb386c33eb5e4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f782cbebf7c32233a83e8a644c2e9306ceeb355d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"78c82d31ee5c83d2c36fac4555ad8b69b42943dd","isMergeCommit":false,"messageTitle":"Reorder commands lexicographically","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":32}}}]},{"date":"2023-09-01","commitResults":[{"hash":"6496d2e93583081a43ca61fe2d4b54657a198bc2","isMergeCommit":false,"messageTitle":"Add JavaFx and Launcher for GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":1},"java":{"insertions":28,"deletions":1}}},{"hash":"91797797e20cce9ebc028a2e2bdbc0f2b6729f1a","isMergeCommit":false,"messageTitle":"Add textbox and send button","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":5}}},{"hash":"1b0229a988e7073cebf29e0d613054dc808d4b55","isMergeCommit":false,"messageTitle":"Style the controls","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}},{"hash":"cbe08bc7a0e57cffdc60f8a6e74500fa398ca899","isMergeCommit":false,"messageTitle":"Add echoing feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":1}}},{"hash":"e6cf07fd08ae814217aa0d9ed75236e378088273","isMergeCommit":false,"messageTitle":"Add dialog box and images","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":15}}},{"hash":"ee6b6123d1b0c59f1366bb0204fabefce7559a11","isMergeCommit":false,"messageTitle":"Add flipping for bot output","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"128ee5af88ded05ed5145713cceefcebdddef8e8","isMergeCommit":false,"messageTitle":"Use FXML and complete JavaFX tutorial setup","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":122,"deletions":24}}},{"hash":"4065c33975bcfeee0174f0b114ad8bdec68af7ca","isMergeCommit":false,"messageTitle":"Refactor minimally to make GUI act like the CLI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":126}}},{"hash":"643d674a47ce74c100e3b44b3429b533105b30e8","isMergeCommit":false,"messageTitle":"Refactor into commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":136}}},{"hash":"8719622713abbe56459b308def072f79db795e0a","isMergeCommit":false,"messageTitle":"Remove superfluous UI from Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":104}}},{"hash":"e625249809fe6c7365edbd23221d42b3652b4ade","isMergeCommit":false,"messageTitle":"Change images and filename","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"84d9b2d736dabcf292d706e0f2edec533a39c38b","isMergeCommit":false,"messageTitle":"Make error message conciser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"17cfd26c1faca74177d874ebbb472b652ebd0fd7","isMergeCommit":false,"messageTitle":"Remove I/O redirection style testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":23},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"cf572a82eb5b2ff2732bbefe195d34225a1d850a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"346056e70e96f27ef10e52c4c0f2b7cb5bb5c639","isMergeCommit":false,"messageTitle":"Add checkstyle to gradle build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1}}},{"hash":"895315a0cf632a01487b4ae16f0517807a13a786","isMergeCommit":false,"messageTitle":"Conform to checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":186,"deletions":20}}},{"hash":"7edb4a31c086e3a36e0b041ef56fbd260245431c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"dc192b5c6baf62a608e2db4cb44ba2f69c8eb6fd","isMergeCommit":false,"messageTitle":"Flip the if statemement to keep indentation level low","messageBody":"There are several points in the code where indentation gets a bit\nunwieldy. This is because the code is wrapped inside an if statement.\n\nFlipping the clause of the `if` to a guard clause design pattern will\nallow the indentation level to stay low.\n\nThis will improve maintainability and readability for the future.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":11}}},{"hash":"e8fc3f4292b2ec477496822f4a414cd8b15e142b","isMergeCommit":false,"messageTitle":"Clarify variable names","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":14}}},{"hash":"4781167dac806957d9d98c7f8b3eaeae3c0ae4c5","isMergeCommit":false,"messageTitle":"Add assertions to check the task list commands\u0027 validity","messageBody":"To ensure no regressions are introduced in the software, we must\nadd assertions on invariants we believe to be true.\n\nAdd assertions to ensure the tasks referred to in the task\nlist exist.\n\nThis will ensure better maintainability and extensibility of the\ncodebase in the future.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"345119a02dfac26df611b96c8cac1c83fe109740","isMergeCommit":false,"messageTitle":"Add assertions to check the integer argument","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"9cb9d27c1c22404303e74ba4d92a1c388d40fa57","isMergeCommit":true,"messageTitle":"Merge pull request #1 from et-irl/branch-A-CodeQuality","messageBody":"Merge Code Quality branch","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"23767dd0d6f82ff017d5fa63b152ca979ed0c4e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bc7d8eda89f8b0b7535081174c907f6339c3a6ac","isMergeCommit":true,"messageTitle":"Merge pull request #2 from et-irl/branch-A-Assertions","messageBody":"Merge Assertions branch","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"2315450efef4356c64068c1915f257e43201e675","isMergeCommit":false,"messageTitle":"Add friendlier syntax for commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"09d8ab74ee212a5d3d80db4402badf036f5d6e5f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","tags":["C-FriendlierSyntax","BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"6c965f09a64c180f935434b61cd7ea970868fdc6","isMergeCommit":false,"messageTitle":"Use less lines in string concatenation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":5}}}]},{"date":"2023-09-11","commitResults":[{"hash":"771441cb9338137c2c7c569e199aa0cd414a4ea0","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":119,"deletions":18}}},{"hash":"46076a455b5f4aa1257f46f5656978f6238bfcb7","isMergeCommit":false,"messageTitle":"Add representative screenshot of the product","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"f5be241f3eee97f0fbb3049b54e76e7fa670c236","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":94,"deletions":13}}},{"hash":"d04197ba8ed8e09b0878c63579a911e696105fb7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c7f3b9525856760b93a5ad5ba8d0a257eec0de36","isMergeCommit":false,"messageTitle":"Update links in README","messageBody":"","tags":["A-UserGuide","A-Release"],"fileTypesAndContributionMap":{"md":{"insertions":5,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"et-irl":{"java":1211,"md":206,"fxml":35,"sh":0,"bat":0,"gradle":24,"txt":0}},"authorContributionVariance":{"et-irl":71451.46},"authorDisplayNameMap":{"et-irl":"CS2103T-T12-1 TAN ..LUNA"}} +{"authorDailyContributionsMap":{"et-irl":[{"date":"2023-08-21","commitResults":[{"hash":"f68bff492afddf69ddc11a940215b492c90b9d72","isMergeCommit":false,"messageTitle":"Rename chatbot and make initial skeletion","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"487992491afee162ad34394e90c73612a2e94fd1","isMergeCommit":false,"messageTitle":"Add echo feature and bye to quit","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"dccd90ec6a761537910015ca3eedbc08e600e9c3","isMergeCommit":false,"messageTitle":"Add ability to store text entered by user \u0026 list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":6}}},{"hash":"4e935f1bf80dde0030776ef4a4bd76fbd28552cd","isMergeCommit":false,"messageTitle":"Add ability to mark tasks as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":10}}},{"hash":"ec83cf4c9f6b4b4bccbe68907ae60f6c4576c075","isMergeCommit":false,"messageTitle":"Bump gradle and lib version","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":4}}},{"hash":"07714a5c5034a4f04f5c8503f79889f282a3f0f9","isMergeCommit":false,"messageTitle":"Add support for tracking ToDos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":10}}},{"hash":"ba2eadd6a5cc84346335706e9067867a3e3c3202","isMergeCommit":false,"messageTitle":"Semi-automate the testing of chatbot","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"72ecd1857acf3b9be19e3018d3b1281319abff12","isMergeCommit":false,"messageTitle":"Add error handling to the chatbot","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":17}}},{"hash":"1d82310791d28990b18a5afa66a2e90217a43310","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":3}}},{"hash":"6732dad999695a7c8f00843b738f56fe881bd920","isMergeCommit":false,"messageTitle":"Add documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":4}}},{"hash":"8dca766486a83cb5b75f357d38a6de4b260ae5c9","isMergeCommit":false,"messageTitle":"Add more comprehensive tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"e8d34cffaa734a8a50b104dd63fe82c63f82d6ba","isMergeCommit":false,"messageTitle":"Add functionality to persist tasks over runs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":3}}},{"hash":"afd9e74efd4c3aebe764da2dba9d015c939cdd7d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1ad26ed5c81419cb3a0edcd75094be89a3f3f710","isMergeCommit":false,"messageTitle":"Add date and time parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":3}}},{"hash":"4724f240c954ed131dcc35a69fbcaf7c0c5f6301","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"f084d46a5791ad1d5dca564d40e528a536e0035e","isMergeCommit":false,"messageTitle":"Add parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":119}}},{"hash":"45ad412f3704825507532e89a87d14d1814c35e2","isMergeCommit":false,"messageTitle":"Add Ui to handle interactions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":14}}},{"hash":"730522d8cecab3a3a9bece5194d17231d744e6ff","isMergeCommit":false,"messageTitle":"Rename TaskDataStorage to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"b7c9b4d0baf3d2f38955036043100063ed767c4a","isMergeCommit":false,"messageTitle":"Rename ToDoList to TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":23}}},{"hash":"82447956417309d1b1cc8404f12e6ae8cadad665","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"2bab79d664f422bb74160fa6f6d6064bb27389b2","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"2dbf59dbf86816cfc014a49202c93a57b80c2853","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"c6481ca5e8bcc3ae5ebe7d622f47bf4d5f4378d7","isMergeCommit":false,"messageTitle":"Use gradle to automate build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"6ff2a213b1f2ebf9278b3c0ff0c4b6d13aa49354","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"fa421c850d09cb4bc7bc64cbaf30d4a471c82126","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":0}}},{"hash":"743862b54e80cf382af6ed3085503fcf785cd40f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"0b03ffe8a215087f79934ce8bf6e9bda1a5a3aa1","isMergeCommit":false,"messageTitle":"Change data directory","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"01022dbf315ae779d712223a0b540c83af5704dd","isMergeCommit":false,"messageTitle":"Follow the coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":98}}},{"hash":"0785121561d4de80a60a2ad7c95e229a1d4e3103","isMergeCommit":false,"messageTitle":"Add finding feature with regex","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":9}}},{"hash":"e241b859ecd7ef450cf235b8569c759037a703da","isMergeCommit":false,"messageTitle":"Add documentation for JUnit tests","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":3}}},{"hash":"306e82ac7b6081efee6cdc38f2172247d2de027e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6df2ad3bbb89bbe7b78dff639a2bb386c33eb5e4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f782cbebf7c32233a83e8a644c2e9306ceeb355d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"78c82d31ee5c83d2c36fac4555ad8b69b42943dd","isMergeCommit":false,"messageTitle":"Reorder commands lexicographically","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":32}}}]},{"date":"2023-09-01","commitResults":[{"hash":"6496d2e93583081a43ca61fe2d4b54657a198bc2","isMergeCommit":false,"messageTitle":"Add JavaFx and Launcher for GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":1},"java":{"insertions":28,"deletions":1}}},{"hash":"91797797e20cce9ebc028a2e2bdbc0f2b6729f1a","isMergeCommit":false,"messageTitle":"Add textbox and send button","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":5}}},{"hash":"1b0229a988e7073cebf29e0d613054dc808d4b55","isMergeCommit":false,"messageTitle":"Style the controls","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}},{"hash":"cbe08bc7a0e57cffdc60f8a6e74500fa398ca899","isMergeCommit":false,"messageTitle":"Add echoing feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":1}}},{"hash":"e6cf07fd08ae814217aa0d9ed75236e378088273","isMergeCommit":false,"messageTitle":"Add dialog box and images","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":15}}},{"hash":"ee6b6123d1b0c59f1366bb0204fabefce7559a11","isMergeCommit":false,"messageTitle":"Add flipping for bot output","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"128ee5af88ded05ed5145713cceefcebdddef8e8","isMergeCommit":false,"messageTitle":"Use FXML and complete JavaFX tutorial setup","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":122,"deletions":24}}},{"hash":"4065c33975bcfeee0174f0b114ad8bdec68af7ca","isMergeCommit":false,"messageTitle":"Refactor minimally to make GUI act like the CLI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":126}}},{"hash":"643d674a47ce74c100e3b44b3429b533105b30e8","isMergeCommit":false,"messageTitle":"Refactor into commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":136}}},{"hash":"8719622713abbe56459b308def072f79db795e0a","isMergeCommit":false,"messageTitle":"Remove superfluous UI from Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":104}}},{"hash":"e625249809fe6c7365edbd23221d42b3652b4ade","isMergeCommit":false,"messageTitle":"Change images and filename","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"84d9b2d736dabcf292d706e0f2edec533a39c38b","isMergeCommit":false,"messageTitle":"Make error message conciser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"17cfd26c1faca74177d874ebbb472b652ebd0fd7","isMergeCommit":false,"messageTitle":"Remove I/O redirection style testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":23},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"cf572a82eb5b2ff2732bbefe195d34225a1d850a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"346056e70e96f27ef10e52c4c0f2b7cb5bb5c639","isMergeCommit":false,"messageTitle":"Add checkstyle to gradle build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1}}},{"hash":"895315a0cf632a01487b4ae16f0517807a13a786","isMergeCommit":false,"messageTitle":"Conform to checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":186,"deletions":20}}},{"hash":"7edb4a31c086e3a36e0b041ef56fbd260245431c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"dc192b5c6baf62a608e2db4cb44ba2f69c8eb6fd","isMergeCommit":false,"messageTitle":"Flip the if statemement to keep indentation level low","messageBody":"There are several points in the code where indentation gets a bit\nunwieldy. This is because the code is wrapped inside an if statement.\n\nFlipping the clause of the `if` to a guard clause design pattern will\nallow the indentation level to stay low.\n\nThis will improve maintainability and readability for the future.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":11}}},{"hash":"e8fc3f4292b2ec477496822f4a414cd8b15e142b","isMergeCommit":false,"messageTitle":"Clarify variable names","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":14}}},{"hash":"4781167dac806957d9d98c7f8b3eaeae3c0ae4c5","isMergeCommit":false,"messageTitle":"Add assertions to check the task list commands\u0027 validity","messageBody":"To ensure no regressions are introduced in the software, we must\nadd assertions on invariants we believe to be true.\n\nAdd assertions to ensure the tasks referred to in the task\nlist exist.\n\nThis will ensure better maintainability and extensibility of the\ncodebase in the future.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"345119a02dfac26df611b96c8cac1c83fe109740","isMergeCommit":false,"messageTitle":"Add assertions to check the integer argument","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"9cb9d27c1c22404303e74ba4d92a1c388d40fa57","isMergeCommit":true,"messageTitle":"Merge pull request #1 from et-irl/branch-A-CodeQuality","messageBody":"Merge Code Quality branch","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"23767dd0d6f82ff017d5fa63b152ca979ed0c4e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bc7d8eda89f8b0b7535081174c907f6339c3a6ac","isMergeCommit":true,"messageTitle":"Merge pull request #2 from et-irl/branch-A-Assertions","messageBody":"Merge Assertions branch","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"2315450efef4356c64068c1915f257e43201e675","isMergeCommit":false,"messageTitle":"Add friendlier syntax for commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"09d8ab74ee212a5d3d80db4402badf036f5d6e5f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","tags":["C-FriendlierSyntax","BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"6c965f09a64c180f935434b61cd7ea970868fdc6","isMergeCommit":false,"messageTitle":"Use less lines in string concatenation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":5}}}]},{"date":"2023-09-11","commitResults":[{"hash":"771441cb9338137c2c7c569e199aa0cd414a4ea0","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":119,"deletions":18}}},{"hash":"46076a455b5f4aa1257f46f5656978f6238bfcb7","isMergeCommit":false,"messageTitle":"Add representative screenshot of the product","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"f5be241f3eee97f0fbb3049b54e76e7fa670c236","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":94,"deletions":13}}},{"hash":"d04197ba8ed8e09b0878c63579a911e696105fb7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c7f3b9525856760b93a5ad5ba8d0a257eec0de36","isMergeCommit":false,"messageTitle":"Update links in README","messageBody":"","tags":["A-UserGuide","A-Release"],"fileTypesAndContributionMap":{"md":{"insertions":5,"deletions":1}}}]},{"date":"2023-09-16","commitResults":[{"hash":"f94a83c58d5e0781f83f85ee0db765206b261b71","isMergeCommit":false,"messageTitle":"Tweak README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"et-irl":{"java":1211,"md":206,"fxml":35,"sh":0,"bat":0,"gradle":24,"txt":0}},"authorContributionVariance":{"et-irl":61964.434},"authorDisplayNameMap":{"et-irl":"CS2103T-T12-1 TAN ..LUNA"}} diff --git a/euchangxian_ip_master/commits.json b/euchangxian_ip_master/commits.json index 22992ecc..e6defa02 100644 --- a/euchangxian_ip_master/commits.json +++ b/euchangxian_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"euchangxian":[{"date":"2023-08-24","commitResults":[{"hash":"4b0f9731aad74b8c37317707bed6663e66d6804a","isMergeCommit":false,"messageTitle":"Rename chatbot to Changoose and add dividers","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"4d0555f398fc94ef4cafdac1b894a19d811fa996","isMergeCommit":false,"messageTitle":"Add Duke::startParse and Duke::echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"6cb6190c3033c7b8049fda6559d21d761c90e464","isMergeCommit":false,"messageTitle":"Replace usage of System.out.println with echo()","messageBody":"This reduces repeated code.\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}}]},{"date":"2023-08-27","commitResults":[{"hash":"dc4d576002a4e249da34fadffd6c4595be94d52f","isMergeCommit":false,"messageTitle":"Add indentLeft() and indent echo\u0027s output","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"8fc0b5c0d035d423e02ad71356ee0be829c5a42c","isMergeCommit":false,"messageTitle":"Add botName and scanner as Duke instance variables","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"19b3d6d84d9af91aad528e641f804f01c7937ca8","isMergeCommit":false,"messageTitle":"Add getter for Duke botName","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"8a29887e4ca8a9fd585b46198a817ab6074f3438","isMergeCommit":false,"messageTitle":"Change startParse() and echo() to instance methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"81011597647b91ce06acd3448ceb5f4f0f0b6c6e","isMergeCommit":false,"messageTitle":"Add taskList field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"6acaa3f495a41c0f954c3b382167dd34fd66380c","isMergeCommit":false,"messageTitle":"Update startParse() to add input into taskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"a7c17e381404706a77aac66cfa08bc3d4c640ed5","isMergeCommit":false,"messageTitle":"Update echo() output text","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"d85ffb31afd0c864c832683348b1ecf709052394","isMergeCommit":false,"messageTitle":"Update echo() to take in a prefix","messageBody":"This is done by adding an overloaded echo() method to maintain the\nfunctionality of existing code.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":2}}},{"hash":"7647a568427a1ce5d5f6229e8e7a05c9ed3ffe1e","isMergeCommit":false,"messageTitle":"Add printTasks() method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"5122a407c617d2459c54b8a82c0d35b58bf6ad75","isMergeCommit":false,"messageTitle":"Add line breaks in between methods","messageBody":"For improved readablity\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"4e7bd855eb372ec353fa52e42e2ea201e0ca5358","isMergeCommit":false,"messageTitle":"Update echo() to handle a list of strings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"da290a212e55d6e0997e304d7c7ced4d9f3b824d","isMergeCommit":false,"messageTitle":"Fix printing of dividers between every task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"87fd0f161d15ae170efdf232d057bfc45e55336c","isMergeCommit":false,"messageTitle":"Add switch case to handle list command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"2071d570f150460fd2ecd66a3b20369aa8eec4d7","isMergeCommit":false,"messageTitle":"Add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"d60dcc2146d15835f9b156dbdb80394c77f0f409","isMergeCommit":false,"messageTitle":"Update fields and methods to use Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"82ce6a119c2d1273e8721e41d64e13a042d054a9","isMergeCommit":false,"messageTitle":"Remove useless scanner field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"a882d8980f8d5a80bbf1d07e2b09c4377476f726","isMergeCommit":false,"messageTitle":"Add markTask() and unmarkTask()","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}},{"hash":"c78a6b4bc6de05d0d2a9d3ecfc465f47c0f799be","isMergeCommit":false,"messageTitle":"Add cases for mark and unmark","messageBody":"Update startParse() to first split by spaces to handle commands with\nmultiple words, like mark x or unmark x, where x is the index of the\ncommand.\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"6804017b079a9ef35a754250868bf3901eec115b","isMergeCommit":false,"messageTitle":"Add getters for taskName and isDone in Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"28ee5f59a77fe46c097cb63ebe824a9c4644ef59","isMergeCommit":false,"messageTitle":"Extract print methods to OutputService","messageBody":"This is to prevent Duke class from getting too bloated.\n","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":47}}},{"hash":"814e1e1357bab6c1437784393ee82d50268a9523","isMergeCommit":false,"messageTitle":"Remove Duke field in OutputService","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":11}}},{"hash":"4623a32b7630542fb3797aff0a4303e5e80010bc","isMergeCommit":false,"messageTitle":"Change entry point of program to CliParserService","messageBody":"This is to prevent bloating of Duke class\n","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":56}}},{"hash":"cc457e32b0fe6c606a5e8b26ea51750e27a2b85c","isMergeCommit":false,"messageTitle":"Add custom Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"612ae9a9afb48bae59c0f0ae487a179301a853c9","isMergeCommit":false,"messageTitle":"Add TaskType enum","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"7a2e15b7f80c3550d91ad3ecc9829aef7b1e4ecb","isMergeCommit":false,"messageTitle":"Add variants of Tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":2}}},{"hash":"c4bd9225cbe9f91ac5a92a2dfd293b054affa8cc","isMergeCommit":false,"messageTitle":"Add cases for variants of Task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":11}}},{"hash":"98972ec1fc9c95a504c1bc7c3da59aeabfdd268d","isMergeCommit":false,"messageTitle":"Move main method back to Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":12}}},{"hash":"54dba6856c7d4316a0dc345a5a0f2e4e93789375","isMergeCommit":false,"messageTitle":"Update text-ui-test test case","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"d3d7e5dc40fd24f5b43a62c73513d35b7c18040b","isMergeCommit":false,"messageTitle":"Personalize error messages","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"01e88b34c8ebd42ba453e3ec8371b2069e98006e","isMergeCommit":false,"messageTitle":"Add delete functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c27798705e213ee48e428398cb73494b99ed1755","isMergeCommit":false,"messageTitle":"Add getNumberOfTasks()","messageBody":"Also removed usage of `this` where relevant to maintain consistency.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":2}}},{"hash":"987d9422ab5e409ce9b258d2ddda62b6369caa8d","isMergeCommit":false,"messageTitle":"Change Task to abstract class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"20db7ec82f93c5bbe92820e06743996754d842e6","isMergeCommit":false,"messageTitle":"Change certain Duke methods to return an Optional","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":42}}},{"hash":"e72c0b9d224fdefa67434568134a1ff685a85530","isMergeCommit":false,"messageTitle":"Add handleDelete()","messageBody":"This is to handle the printing of extra information for the delete\ncommand.\n","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":11}}},{"hash":"ff58386f9574dfe500b5fa1553174d52d48abc32","isMergeCommit":false,"messageTitle":"Refactor createTask()","messageBody":"Move printing of error message to CliParserService\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":8}}},{"hash":"aab8095ad848681b7be16fe19ca1a3ad887a319d","isMergeCommit":false,"messageTitle":"Fix dependency injection","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":9}}}]},{"date":"2023-08-31","commitResults":[{"hash":"736608e9ee987dbda6bd40086261d8db4f476be7","isMergeCommit":false,"messageTitle":"Change DukeException to a Checked Exception","messageBody":"Update method signature of relevant methods.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"58ece4e869927d44b6140d15a1eb865709ce6d13","isMergeCommit":false,"messageTitle":"Update display message when there are no tasks left","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"461913cf99bb4aa8e1be371661f11c9b8b228e88","isMergeCommit":false,"messageTitle":"Implement Serializable interface for Task","messageBody":"This allows object persistence for Task by making it serializable.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"73574252f47204bc2bb8cc2338de6b5934ecfc96","isMergeCommit":false,"messageTitle":"Change DukeException to a Checked Exception","messageBody":"Update method signature of relevant methods.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"90a9d62a5711372c04d64e65f9119f6af8d9693a","isMergeCommit":false,"messageTitle":"Add FileCorruptedException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"6f4deae12f792adbbad21537d9f7e0bf57976258","isMergeCommit":false,"messageTitle":"Add StorageService class","messageBody":"This class handles the read/write to files for object persistence,\nspecifically taskList.\n","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":0}}},{"hash":"3bb72351701b76ff4a603a468c4c27a7d2ee29d7","isMergeCommit":false,"messageTitle":"Update StorageService thrown exceptions","messageBody":"StorageService now throws DukeStorageException instead of DukeException\nfor more specificity and different erorr handling.\n","fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":64}}},{"hash":"4df571b2e56cd67aa1a05735d6e736c6fbf1e055","isMergeCommit":false,"messageTitle":"Remove caching of taskList","messageBody":"The added complexity is not worth it for the increase in performance,\nbecause the assumption was that the taskList would contain at most 100\nTasks only.\n","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":66}}},{"hash":"ecafb5bb5a8dfb61278bffd6ab4bf9ac16654be6","isMergeCommit":false,"messageTitle":"Fix taskList not loading from storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":8}}},{"hash":"64f6c6a092ca65d8b3b09b0b5108c8bc91ef5675","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Add Tasks List persistence ability to Duke.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"543c90edda40fa00dd8828c0cc3dda42d13952e8","isMergeCommit":false,"messageTitle":"Rework parseTaskCommand() and createTask()","messageBody":"deadline commands must have an end date as argument, prefixed with \u0027by\u0027,\nwhile event commands must have a start date prefixed with \u0027from\u0027, end\ndate prefixed with \u0027to\u0027 as arguments.\n","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":21}}},{"hash":"b02026cc97a4555007941069752058e8039262ee","isMergeCommit":false,"messageTitle":"Add TimeUtilException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"84e404b4d8994be45083e4e40e9cbec605fba0e8","isMergeCommit":false,"messageTitle":"Add TimeUtil class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":0}}},{"hash":"a3c1d94db8333fae4f93e44a1844d8181ba329b2","isMergeCommit":false,"messageTitle":"Update Tasks to take in LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":11}}}]},{"date":"2023-09-02","commitResults":[{"hash":"98aeb3d21034db00748fcc7f7ab992174a8c8963","isMergeCommit":false,"messageTitle":"Update LocalDateTime display format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"cd71218a135e3852f153bfd2fb29f0ccf69d89b7","isMergeCommit":false,"messageTitle":"Improve error message for invalid date inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"28fe2e26d5fbbd7800189915ab3c7da0d7cceb7d","isMergeCommit":false,"messageTitle":"Fix TimeUtil::parseDateTimeString","messageBody":"Fix parseDateTimeString() wrongly parsing yyyy-mm-dd, or inputs\ncontaining Date only, as invalid inputs.\n","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"9e7beb171a7441b45bcaf545e7010f92038b548a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"Update Duke to parse date inputs.\n","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"eba9ed264840be6f378e747f0e6da4acd94d207a","isMergeCommit":false,"messageTitle":"Add UiService class.","messageBody":"This class is responsible for the printing of messages to the console\noutput, and uses OutputService to handle the formatting and indentation\nof Strings.\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":0}}},{"hash":"dc2ac5bb376cbfe4b204c69342fda7e513ad9f79","isMergeCommit":false,"messageTitle":"Replace usage of OutputService to UiService","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":64}}},{"hash":"245be67ad089478f270e399a29eb595162671a37","isMergeCommit":false,"messageTitle":"Add TaskList class","messageBody":"Operations on the TaskList like add, delete, mark etc will be handled by\nTaskList.\n","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":29}}},{"hash":"bd76b79bb4417c4c83d8d585f45a90cf879a420b","isMergeCommit":false,"messageTitle":"Move Task and related subclasses to package tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":2}}},{"hash":"690a5eb90f0c8e899292dbdd9781bee0aafbc635","isMergeCommit":false,"messageTitle":"Update parsing of special strings into dates","messageBody":"\"today\" and \"tomorrow\" both return the end of their respective days.\nDisplay formatting is updated to display minutes too.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"3a2a64be450a831b6ac129bcc4818794747931be","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"Abstract methods and responsibilities into separate classes for\nseparation of concern.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"bda2ff29e909d0e7887284ed102e7ce5dbdda608","isMergeCommit":false,"messageTitle":"Separate classes into respective packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":44}}},{"hash":"31592e96217b822c626a40f215ab08fa37933f93","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"This is to provide a logical grouping for different classes and their\nresponsibilities, improving readability.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"354828732e83a535e7040922e6f87e93664068bf","isMergeCommit":false,"messageTitle":"Fix wrong display strings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":9}}},{"hash":"3fffbefded2c9891a3e6f5824f849ea65dde9040","isMergeCommit":false,"messageTitle":"Remove support for yyyy MM date formats","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"3f07d63b4eb250c7c615db789d904213cfad9e2f","isMergeCommit":false,"messageTitle":"Add more specific Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"ebdbb39e35fe4eb5be93b2b6b078a20c2fdaba7b","isMergeCommit":false,"messageTitle":"Add abstract Command and subclasses","messageBody":"Abstracts logic of inputs into individual Commands subclasses.\n","fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":1}}},{"hash":"3119228801fc8b9db855baf473ac9a76a4d8ced6","isMergeCommit":false,"messageTitle":"Update parsing logic to support Command Pattern","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":66}}},{"hash":"69ded70e9fbbcfd05e99e9b101271d21bf463817","isMergeCommit":false,"messageTitle":"Remove unused fields and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":78}}},{"hash":"3372a29e58d6a7ee0c69291a1c034cfb2b7f2ffa","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1457f3a68eef1f96d46e762a104ce8677f80393f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"Add Gradle support to Duke project.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"ef8d5fc8cac2e32278c7b51906bd5c3b7a6b44f4","isMergeCommit":false,"messageTitle":"Add TimeUtil tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":0}}},{"hash":"ea799b38088dd0a9625728776d1b51f3e2d8fca7","isMergeCommit":false,"messageTitle":"Extract out parsing of input to its own method","messageBody":"This is to allow for a more straightforward unit testing of\nCliParserService.\n","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":18}}},{"hash":"8c67cdc721fa25edf2583badd642d062030826f2","isMergeCommit":false,"messageTitle":"Move responsiblity of trimming input","messageBody":"Move from parse() to parseCommandAndArguments(). This is to allow for\nbetter unit testing as well\n","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"b3962bbbc1ce3ec415535a7ea8138dc8734576f6","isMergeCommit":false,"messageTitle":"Convert parsed commandType to lower case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"30f3268d864711947c06c060188cd538022686f6","isMergeCommit":false,"messageTitle":"Add CliParserServiceTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":0}}},{"hash":"d90de50c5f9e477651e4f80feb0dd06657c13bd2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"Add JUnit tests for CliParserService and TimeUtil, as these are critical\nservice/util classes.\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"78de08920f9b762a74cffde358860441832c9044","isMergeCommit":false,"messageTitle":"Add JavaDocs to methods and classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":618,"deletions":38}}},{"hash":"65374d2c5574c096d1831c3bbe4ad536f53eb349","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"Adds JavaDocs to classes and methods. This improves maintainability.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"b65918e0a1b9969746d8f714f5f753718a70c365","isMergeCommit":false,"messageTitle":"Add checkstyle to Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"50b44b058e2d2f9a35e03d4c796770a440f52f98","isMergeCommit":false,"messageTitle":"Reformat code based on checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"6949e33493b26e68c9872254f8ee3a07677b6a0f","isMergeCommit":false,"messageTitle":"Fix checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":148}}},{"hash":"1abc3bcd04fac793c0a145d921e1b1b518ae67e2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"Implement checkstyle and fix checkstyle violations.\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"bc6cae40ac1093579c03649fc7832cf53f1edecd","isMergeCommit":false,"messageTitle":"Add printFoundTasks in UiService","messageBody":"Refactor printTask in OutputService to formatTaskList for increased\nflexibility.\n","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":5}}},{"hash":"670cd85bc1663796cc45f4fbfd439586892d4645","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"find searches the taskList for taskNames containing the given keyword,\nthen prints the matching tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":0}}},{"hash":"0c5578c4e0309dfc7ca4950b7f164f0deae47d93","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"Add find command which allows users to search for tasks based on a\nkeyword.\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"61ae94ee739168c438dbb20ba417d31fb447c43e","isMergeCommit":false,"messageTitle":"Add JavaDocs for methods invoked by find command","messageBody":"Fixes CheckStyle violations\n","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"3c89a10cf73097817197310f0ddf328a39869695","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"55ea565354c1c23695dc5db56f5010ec7bb9c89a","isMergeCommit":false,"messageTitle":"Extract main method from Duke to Main class","messageBody":"This is in preparation to integrate JavaFX with Duke, preventing the\nDuke class from becoming too bloated.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":58,"deletions":27}}}]},{"date":"2023-09-06","commitResults":[{"hash":"877ec1035f852cf22bbff596b442e5d90ae0aa32","isMergeCommit":false,"messageTitle":"Refactor Duke class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":52}}},{"hash":"f0ad6c2fa7360418e8c00fcdbd529b5538909430","isMergeCommit":false,"messageTitle":"Add JavaFX GUI","messageBody":"Refactor existing classes, mainly changing the return type of UiService\nto return a String which is displayed in the GUI window.\n","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":2},"fxml":{"insertions":42,"deletions":0},"java":{"insertions":349,"deletions":124}}},{"hash":"2ab685383950a7db9db8d3d0ce00fb9c45a6ad70","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"Add a GUI to Duke.\n","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"3aa9508b8cbeadf1fd9ca85f4e7b317794d5cda3","isMergeCommit":false,"messageTitle":"Add assert statements to TaskList","messageBody":"TaskFactory is responsible for the creation of new Tasks, and in no\ncases does it return a null task.\nSince there should only be one way of adding a task to TaskList, by\ncalling TaskList::add, there should be no null tasks added to the\nTaskList. Neither should there by any null task retrieved by any\nexposed methods.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"dbfbd5c79392f708aab78027082f37f177f2f3f3","isMergeCommit":false,"messageTitle":"Add final modifier to ParseResult fields","messageBody":"This is to better reflect immutability.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"44f797d2b05b5afbaa2f7246d251a7d3fdc5ca95","isMergeCommit":false,"messageTitle":"Fix UnmarkTaskCommand calling wrong UiService method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"4178a857782da0a88b3909ac71921963f51c2dc4","isMergeCommit":false,"messageTitle":"Change formatTaskList to use Streams","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"86a595eff2e887a334b6786cc179aea4f680b5f9","isMergeCommit":false,"messageTitle":"Add unit test for formatTaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"e2f88dd10076cd1ad4ea31c4cefd10d234cf9240","isMergeCommit":false,"messageTitle":"Remove unused import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"e135e8ebfa00df34df5cb999102f40ceb37395cf","isMergeCommit":false,"messageTitle":"Reorganize imports in OutputServiceTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"a9d312fc4ca903791828709fe462ef06f74fa89f","isMergeCommit":true,"messageTitle":"Merge pull request #3 from euchangxian/branch-A-Assertions","messageBody":"Add assert statements to TaskList","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"418fb96eb0792df00714a2e28c6f203d497d32eb","isMergeCommit":true,"messageTitle":"Merge pull request #2 from euchangxian/branch-A-Streams","messageBody":"Branch-A-Streams","tags":["A-Streams"],"fileTypesAndContributionMap":{}},{"hash":"ac9b0fda05cd0749abc54e0f958fb46ed4e110e2","isMergeCommit":true,"messageTitle":"Merge pull request #1 from euchangxian/branch-A-CI","messageBody":"Add java_ci.yml file to ensure code quality","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"8382d843fecedcde72f9242f88123573e3465adb","isMergeCommit":false,"messageTitle":"Fix checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"64a92fb73e332b27f95a7b39c906468420176b3b","isMergeCommit":true,"messageTitle":"Merge pull request #5 from euchangxian/branch-A-CodeQuality","messageBody":"Improve Code Quality","tags":["A-CodingQuality"],"fileTypesAndContributionMap":{}},{"hash":"60f35f817b7033085d5c429f7d3ee1ab4bd4a9a3","isMergeCommit":false,"messageTitle":"Add more strings that can be understood as dates","messageBody":"Duke can now parse dates like \"monday\", \"tuesday\",..., etc\nand understands it as the next Monday, Tuesday etc.\n","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":9}}},{"hash":"ef21747a71ffa2e95ae8ddafde20dca63b7b8b3b","isMergeCommit":false,"messageTitle":"Add test for days of week string input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"40867438f8cbb7c19061bf91ad3f58cb1274c60a","isMergeCommit":true,"messageTitle":"Merge pull request #6 from euchangxian/branch-C-NaturalDates","messageBody":"Add more special date inputs","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"euchangxian":{"java":2280,"md":0,"fxml":42,"sh":0,"bat":0,"gradle":12,"txt":9}},"authorContributionVariance":{"euchangxian":203922.9},"authorDisplayNameMap":{"euchangxian":"CS2103T-F08-3 EU C..XIAN"}} +{"authorDailyContributionsMap":{"euchangxian":[{"date":"2023-08-24","commitResults":[{"hash":"4b0f9731aad74b8c37317707bed6663e66d6804a","isMergeCommit":false,"messageTitle":"Rename chatbot to Changoose and add dividers","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"4d0555f398fc94ef4cafdac1b894a19d811fa996","isMergeCommit":false,"messageTitle":"Add Duke::startParse and Duke::echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"6cb6190c3033c7b8049fda6559d21d761c90e464","isMergeCommit":false,"messageTitle":"Replace usage of System.out.println with echo()","messageBody":"This reduces repeated code.\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}}]},{"date":"2023-08-27","commitResults":[{"hash":"dc4d576002a4e249da34fadffd6c4595be94d52f","isMergeCommit":false,"messageTitle":"Add indentLeft() and indent echo\u0027s output","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"8fc0b5c0d035d423e02ad71356ee0be829c5a42c","isMergeCommit":false,"messageTitle":"Add botName and scanner as Duke instance variables","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"19b3d6d84d9af91aad528e641f804f01c7937ca8","isMergeCommit":false,"messageTitle":"Add getter for Duke botName","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"8a29887e4ca8a9fd585b46198a817ab6074f3438","isMergeCommit":false,"messageTitle":"Change startParse() and echo() to instance methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"81011597647b91ce06acd3448ceb5f4f0f0b6c6e","isMergeCommit":false,"messageTitle":"Add taskList field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"6acaa3f495a41c0f954c3b382167dd34fd66380c","isMergeCommit":false,"messageTitle":"Update startParse() to add input into taskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"a7c17e381404706a77aac66cfa08bc3d4c640ed5","isMergeCommit":false,"messageTitle":"Update echo() output text","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"d85ffb31afd0c864c832683348b1ecf709052394","isMergeCommit":false,"messageTitle":"Update echo() to take in a prefix","messageBody":"This is done by adding an overloaded echo() method to maintain the\nfunctionality of existing code.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":2}}},{"hash":"7647a568427a1ce5d5f6229e8e7a05c9ed3ffe1e","isMergeCommit":false,"messageTitle":"Add printTasks() method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"5122a407c617d2459c54b8a82c0d35b58bf6ad75","isMergeCommit":false,"messageTitle":"Add line breaks in between methods","messageBody":"For improved readablity\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"4e7bd855eb372ec353fa52e42e2ea201e0ca5358","isMergeCommit":false,"messageTitle":"Update echo() to handle a list of strings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"da290a212e55d6e0997e304d7c7ced4d9f3b824d","isMergeCommit":false,"messageTitle":"Fix printing of dividers between every task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"87fd0f161d15ae170efdf232d057bfc45e55336c","isMergeCommit":false,"messageTitle":"Add switch case to handle list command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"2071d570f150460fd2ecd66a3b20369aa8eec4d7","isMergeCommit":false,"messageTitle":"Add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"d60dcc2146d15835f9b156dbdb80394c77f0f409","isMergeCommit":false,"messageTitle":"Update fields and methods to use Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"82ce6a119c2d1273e8721e41d64e13a042d054a9","isMergeCommit":false,"messageTitle":"Remove useless scanner field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"a882d8980f8d5a80bbf1d07e2b09c4377476f726","isMergeCommit":false,"messageTitle":"Add markTask() and unmarkTask()","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}},{"hash":"c78a6b4bc6de05d0d2a9d3ecfc465f47c0f799be","isMergeCommit":false,"messageTitle":"Add cases for mark and unmark","messageBody":"Update startParse() to first split by spaces to handle commands with\nmultiple words, like mark x or unmark x, where x is the index of the\ncommand.\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"6804017b079a9ef35a754250868bf3901eec115b","isMergeCommit":false,"messageTitle":"Add getters for taskName and isDone in Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"28ee5f59a77fe46c097cb63ebe824a9c4644ef59","isMergeCommit":false,"messageTitle":"Extract print methods to OutputService","messageBody":"This is to prevent Duke class from getting too bloated.\n","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":47}}},{"hash":"814e1e1357bab6c1437784393ee82d50268a9523","isMergeCommit":false,"messageTitle":"Remove Duke field in OutputService","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":11}}},{"hash":"4623a32b7630542fb3797aff0a4303e5e80010bc","isMergeCommit":false,"messageTitle":"Change entry point of program to CliParserService","messageBody":"This is to prevent bloating of Duke class\n","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":56}}},{"hash":"cc457e32b0fe6c606a5e8b26ea51750e27a2b85c","isMergeCommit":false,"messageTitle":"Add custom Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"612ae9a9afb48bae59c0f0ae487a179301a853c9","isMergeCommit":false,"messageTitle":"Add TaskType enum","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"7a2e15b7f80c3550d91ad3ecc9829aef7b1e4ecb","isMergeCommit":false,"messageTitle":"Add variants of Tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":2}}},{"hash":"c4bd9225cbe9f91ac5a92a2dfd293b054affa8cc","isMergeCommit":false,"messageTitle":"Add cases for variants of Task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":11}}},{"hash":"98972ec1fc9c95a504c1bc7c3da59aeabfdd268d","isMergeCommit":false,"messageTitle":"Move main method back to Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":12}}},{"hash":"54dba6856c7d4316a0dc345a5a0f2e4e93789375","isMergeCommit":false,"messageTitle":"Update text-ui-test test case","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"d3d7e5dc40fd24f5b43a62c73513d35b7c18040b","isMergeCommit":false,"messageTitle":"Personalize error messages","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"01e88b34c8ebd42ba453e3ec8371b2069e98006e","isMergeCommit":false,"messageTitle":"Add delete functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c27798705e213ee48e428398cb73494b99ed1755","isMergeCommit":false,"messageTitle":"Add getNumberOfTasks()","messageBody":"Also removed usage of `this` where relevant to maintain consistency.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":2}}},{"hash":"987d9422ab5e409ce9b258d2ddda62b6369caa8d","isMergeCommit":false,"messageTitle":"Change Task to abstract class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"20db7ec82f93c5bbe92820e06743996754d842e6","isMergeCommit":false,"messageTitle":"Change certain Duke methods to return an Optional","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":42}}},{"hash":"e72c0b9d224fdefa67434568134a1ff685a85530","isMergeCommit":false,"messageTitle":"Add handleDelete()","messageBody":"This is to handle the printing of extra information for the delete\ncommand.\n","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":11}}},{"hash":"ff58386f9574dfe500b5fa1553174d52d48abc32","isMergeCommit":false,"messageTitle":"Refactor createTask()","messageBody":"Move printing of error message to CliParserService\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":8}}},{"hash":"aab8095ad848681b7be16fe19ca1a3ad887a319d","isMergeCommit":false,"messageTitle":"Fix dependency injection","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":9}}}]},{"date":"2023-08-31","commitResults":[{"hash":"736608e9ee987dbda6bd40086261d8db4f476be7","isMergeCommit":false,"messageTitle":"Change DukeException to a Checked Exception","messageBody":"Update method signature of relevant methods.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"58ece4e869927d44b6140d15a1eb865709ce6d13","isMergeCommit":false,"messageTitle":"Update display message when there are no tasks left","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"461913cf99bb4aa8e1be371661f11c9b8b228e88","isMergeCommit":false,"messageTitle":"Implement Serializable interface for Task","messageBody":"This allows object persistence for Task by making it serializable.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"73574252f47204bc2bb8cc2338de6b5934ecfc96","isMergeCommit":false,"messageTitle":"Change DukeException to a Checked Exception","messageBody":"Update method signature of relevant methods.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"90a9d62a5711372c04d64e65f9119f6af8d9693a","isMergeCommit":false,"messageTitle":"Add FileCorruptedException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"6f4deae12f792adbbad21537d9f7e0bf57976258","isMergeCommit":false,"messageTitle":"Add StorageService class","messageBody":"This class handles the read/write to files for object persistence,\nspecifically taskList.\n","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":0}}},{"hash":"3bb72351701b76ff4a603a468c4c27a7d2ee29d7","isMergeCommit":false,"messageTitle":"Update StorageService thrown exceptions","messageBody":"StorageService now throws DukeStorageException instead of DukeException\nfor more specificity and different erorr handling.\n","fileTypesAndContributionMap":{"java":{"insertions":135,"deletions":64}}},{"hash":"4df571b2e56cd67aa1a05735d6e736c6fbf1e055","isMergeCommit":false,"messageTitle":"Remove caching of taskList","messageBody":"The added complexity is not worth it for the increase in performance,\nbecause the assumption was that the taskList would contain at most 100\nTasks only.\n","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":66}}},{"hash":"ecafb5bb5a8dfb61278bffd6ab4bf9ac16654be6","isMergeCommit":false,"messageTitle":"Fix taskList not loading from storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":8}}},{"hash":"64f6c6a092ca65d8b3b09b0b5108c8bc91ef5675","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Add Tasks List persistence ability to Duke.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"543c90edda40fa00dd8828c0cc3dda42d13952e8","isMergeCommit":false,"messageTitle":"Rework parseTaskCommand() and createTask()","messageBody":"deadline commands must have an end date as argument, prefixed with \u0027by\u0027,\nwhile event commands must have a start date prefixed with \u0027from\u0027, end\ndate prefixed with \u0027to\u0027 as arguments.\n","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":21}}},{"hash":"b02026cc97a4555007941069752058e8039262ee","isMergeCommit":false,"messageTitle":"Add TimeUtilException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"84e404b4d8994be45083e4e40e9cbec605fba0e8","isMergeCommit":false,"messageTitle":"Add TimeUtil class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":0}}},{"hash":"a3c1d94db8333fae4f93e44a1844d8181ba329b2","isMergeCommit":false,"messageTitle":"Update Tasks to take in LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":11}}}]},{"date":"2023-09-02","commitResults":[{"hash":"98aeb3d21034db00748fcc7f7ab992174a8c8963","isMergeCommit":false,"messageTitle":"Update LocalDateTime display format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"cd71218a135e3852f153bfd2fb29f0ccf69d89b7","isMergeCommit":false,"messageTitle":"Improve error message for invalid date inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"28fe2e26d5fbbd7800189915ab3c7da0d7cceb7d","isMergeCommit":false,"messageTitle":"Fix TimeUtil::parseDateTimeString","messageBody":"Fix parseDateTimeString() wrongly parsing yyyy-mm-dd, or inputs\ncontaining Date only, as invalid inputs.\n","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"9e7beb171a7441b45bcaf545e7010f92038b548a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"Update Duke to parse date inputs.\n","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"eba9ed264840be6f378e747f0e6da4acd94d207a","isMergeCommit":false,"messageTitle":"Add UiService class.","messageBody":"This class is responsible for the printing of messages to the console\noutput, and uses OutputService to handle the formatting and indentation\nof Strings.\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":0}}},{"hash":"dc2ac5bb376cbfe4b204c69342fda7e513ad9f79","isMergeCommit":false,"messageTitle":"Replace usage of OutputService to UiService","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":64}}},{"hash":"245be67ad089478f270e399a29eb595162671a37","isMergeCommit":false,"messageTitle":"Add TaskList class","messageBody":"Operations on the TaskList like add, delete, mark etc will be handled by\nTaskList.\n","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":29}}},{"hash":"bd76b79bb4417c4c83d8d585f45a90cf879a420b","isMergeCommit":false,"messageTitle":"Move Task and related subclasses to package tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":2}}},{"hash":"690a5eb90f0c8e899292dbdd9781bee0aafbc635","isMergeCommit":false,"messageTitle":"Update parsing of special strings into dates","messageBody":"\"today\" and \"tomorrow\" both return the end of their respective days.\nDisplay formatting is updated to display minutes too.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"3a2a64be450a831b6ac129bcc4818794747931be","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"Abstract methods and responsibilities into separate classes for\nseparation of concern.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"bda2ff29e909d0e7887284ed102e7ce5dbdda608","isMergeCommit":false,"messageTitle":"Separate classes into respective packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":44}}},{"hash":"31592e96217b822c626a40f215ab08fa37933f93","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"This is to provide a logical grouping for different classes and their\nresponsibilities, improving readability.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"354828732e83a535e7040922e6f87e93664068bf","isMergeCommit":false,"messageTitle":"Fix wrong display strings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":9}}},{"hash":"3fffbefded2c9891a3e6f5824f849ea65dde9040","isMergeCommit":false,"messageTitle":"Remove support for yyyy MM date formats","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"3f07d63b4eb250c7c615db789d904213cfad9e2f","isMergeCommit":false,"messageTitle":"Add more specific Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"ebdbb39e35fe4eb5be93b2b6b078a20c2fdaba7b","isMergeCommit":false,"messageTitle":"Add abstract Command and subclasses","messageBody":"Abstracts logic of inputs into individual Commands subclasses.\n","fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":1}}},{"hash":"3119228801fc8b9db855baf473ac9a76a4d8ced6","isMergeCommit":false,"messageTitle":"Update parsing logic to support Command Pattern","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":66}}},{"hash":"69ded70e9fbbcfd05e99e9b101271d21bf463817","isMergeCommit":false,"messageTitle":"Remove unused fields and methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":78}}},{"hash":"3372a29e58d6a7ee0c69291a1c034cfb2b7f2ffa","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1457f3a68eef1f96d46e762a104ce8677f80393f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"Add Gradle support to Duke project.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"ef8d5fc8cac2e32278c7b51906bd5c3b7a6b44f4","isMergeCommit":false,"messageTitle":"Add TimeUtil tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":0}}},{"hash":"ea799b38088dd0a9625728776d1b51f3e2d8fca7","isMergeCommit":false,"messageTitle":"Extract out parsing of input to its own method","messageBody":"This is to allow for a more straightforward unit testing of\nCliParserService.\n","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":18}}},{"hash":"8c67cdc721fa25edf2583badd642d062030826f2","isMergeCommit":false,"messageTitle":"Move responsiblity of trimming input","messageBody":"Move from parse() to parseCommandAndArguments(). This is to allow for\nbetter unit testing as well\n","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"b3962bbbc1ce3ec415535a7ea8138dc8734576f6","isMergeCommit":false,"messageTitle":"Convert parsed commandType to lower case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"30f3268d864711947c06c060188cd538022686f6","isMergeCommit":false,"messageTitle":"Add CliParserServiceTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":0}}},{"hash":"d90de50c5f9e477651e4f80feb0dd06657c13bd2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"Add JUnit tests for CliParserService and TimeUtil, as these are critical\nservice/util classes.\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"78de08920f9b762a74cffde358860441832c9044","isMergeCommit":false,"messageTitle":"Add JavaDocs to methods and classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":618,"deletions":38}}},{"hash":"65374d2c5574c096d1831c3bbe4ad536f53eb349","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"Adds JavaDocs to classes and methods. This improves maintainability.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"b65918e0a1b9969746d8f714f5f753718a70c365","isMergeCommit":false,"messageTitle":"Add checkstyle to Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"50b44b058e2d2f9a35e03d4c796770a440f52f98","isMergeCommit":false,"messageTitle":"Reformat code based on checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"6949e33493b26e68c9872254f8ee3a07677b6a0f","isMergeCommit":false,"messageTitle":"Fix checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":171,"deletions":148}}},{"hash":"1abc3bcd04fac793c0a145d921e1b1b518ae67e2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"Implement checkstyle and fix checkstyle violations.\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"bc6cae40ac1093579c03649fc7832cf53f1edecd","isMergeCommit":false,"messageTitle":"Add printFoundTasks in UiService","messageBody":"Refactor printTask in OutputService to formatTaskList for increased\nflexibility.\n","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":5}}},{"hash":"670cd85bc1663796cc45f4fbfd439586892d4645","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"find searches the taskList for taskNames containing the given keyword,\nthen prints the matching tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":0}}},{"hash":"0c5578c4e0309dfc7ca4950b7f164f0deae47d93","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"Add find command which allows users to search for tasks based on a\nkeyword.\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"61ae94ee739168c438dbb20ba417d31fb447c43e","isMergeCommit":false,"messageTitle":"Add JavaDocs for methods invoked by find command","messageBody":"Fixes CheckStyle violations\n","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"3c89a10cf73097817197310f0ddf328a39869695","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"55ea565354c1c23695dc5db56f5010ec7bb9c89a","isMergeCommit":false,"messageTitle":"Extract main method from Duke to Main class","messageBody":"This is in preparation to integrate JavaFX with Duke, preventing the\nDuke class from becoming too bloated.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":58,"deletions":27}}}]},{"date":"2023-09-06","commitResults":[{"hash":"877ec1035f852cf22bbff596b442e5d90ae0aa32","isMergeCommit":false,"messageTitle":"Refactor Duke class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":52}}},{"hash":"f0ad6c2fa7360418e8c00fcdbd529b5538909430","isMergeCommit":false,"messageTitle":"Add JavaFX GUI","messageBody":"Refactor existing classes, mainly changing the return type of UiService\nto return a String which is displayed in the GUI window.\n","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":2},"fxml":{"insertions":42,"deletions":0},"java":{"insertions":349,"deletions":124}}},{"hash":"2ab685383950a7db9db8d3d0ce00fb9c45a6ad70","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"Add a GUI to Duke.\n","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"3aa9508b8cbeadf1fd9ca85f4e7b317794d5cda3","isMergeCommit":false,"messageTitle":"Add assert statements to TaskList","messageBody":"TaskFactory is responsible for the creation of new Tasks, and in no\ncases does it return a null task.\nSince there should only be one way of adding a task to TaskList, by\ncalling TaskList::add, there should be no null tasks added to the\nTaskList. Neither should there by any null task retrieved by any\nexposed methods.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"dbfbd5c79392f708aab78027082f37f177f2f3f3","isMergeCommit":false,"messageTitle":"Add final modifier to ParseResult fields","messageBody":"This is to better reflect immutability.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"44f797d2b05b5afbaa2f7246d251a7d3fdc5ca95","isMergeCommit":false,"messageTitle":"Fix UnmarkTaskCommand calling wrong UiService method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"4178a857782da0a88b3909ac71921963f51c2dc4","isMergeCommit":false,"messageTitle":"Change formatTaskList to use Streams","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"86a595eff2e887a334b6786cc179aea4f680b5f9","isMergeCommit":false,"messageTitle":"Add unit test for formatTaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"e2f88dd10076cd1ad4ea31c4cefd10d234cf9240","isMergeCommit":false,"messageTitle":"Remove unused import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"e135e8ebfa00df34df5cb999102f40ceb37395cf","isMergeCommit":false,"messageTitle":"Reorganize imports in OutputServiceTest","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"a9d312fc4ca903791828709fe462ef06f74fa89f","isMergeCommit":true,"messageTitle":"Merge pull request #3 from euchangxian/branch-A-Assertions","messageBody":"Add assert statements to TaskList","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"418fb96eb0792df00714a2e28c6f203d497d32eb","isMergeCommit":true,"messageTitle":"Merge pull request #2 from euchangxian/branch-A-Streams","messageBody":"Branch-A-Streams","tags":["A-Streams"],"fileTypesAndContributionMap":{}},{"hash":"ac9b0fda05cd0749abc54e0f958fb46ed4e110e2","isMergeCommit":true,"messageTitle":"Merge pull request #1 from euchangxian/branch-A-CI","messageBody":"Add java_ci.yml file to ensure code quality","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"8382d843fecedcde72f9242f88123573e3465adb","isMergeCommit":false,"messageTitle":"Fix checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"64a92fb73e332b27f95a7b39c906468420176b3b","isMergeCommit":true,"messageTitle":"Merge pull request #5 from euchangxian/branch-A-CodeQuality","messageBody":"Improve Code Quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"60f35f817b7033085d5c429f7d3ee1ab4bd4a9a3","isMergeCommit":false,"messageTitle":"Add more strings that can be understood as dates","messageBody":"Duke can now parse dates like \"monday\", \"tuesday\",..., etc\nand understands it as the next Monday, Tuesday etc.\n","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":9}}},{"hash":"ef21747a71ffa2e95ae8ddafde20dca63b7b8b3b","isMergeCommit":false,"messageTitle":"Add test for days of week string input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"40867438f8cbb7c19061bf91ad3f58cb1274c60a","isMergeCommit":true,"messageTitle":"Merge pull request #6 from euchangxian/branch-C-NaturalDates","messageBody":"Add more special date inputs","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"euchangxian":{"java":2280,"md":0,"fxml":42,"sh":0,"bat":0,"gradle":12,"txt":9}},"authorContributionVariance":{"euchangxian":203922.9},"authorDisplayNameMap":{"euchangxian":"CS2103T-F08-3 EU C..XIAN"}} diff --git a/flexibo_ip_master/authorship.json b/flexibo_ip_master/authorship.json index 214dbb08..2573080b 100644 --- a/flexibo_ip_master/authorship.json +++ b/flexibo_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"# duke.main.Duke project template","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"3. After that, locate the `src/main/java/duke.main.Duke.java` file, right-click it, and choose `Run duke.main.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"flexibo":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":"flexibo"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-core\u0027, version: \u00272.15.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-annotations\u0027, version: \u00272.2.1\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-databind\u0027, version: \u00272.12.7.1\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.datatype\u0027, name: \u0027jackson-datatype-jsr310\u0027, version: \u00272.9.8\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" mainClassName \u003d \u0027duke.main.Duke\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" mainClass.set(\"duke.main.Duke\")","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"flexibo":27,"-":41}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to add task into TaskList **/","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class AddCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initializes Add Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Adds a task to TaskList and saves list into file.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" // ui.showMessage(\"Task \" + task.getTask() + \" successfully added\");","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" output.append(\"Task \").append(task.getTask()).append(\" successfully added\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" output.append(taskList.printSize());","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":36}},{"path":"src/main/java/duke/command/ChangeMarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to change whether the task from mark to unmark (or vice versa) */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class ChangeMarkCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final String indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" private final boolean isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * Initializes change mark command.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param indexString String that contains the index of TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @param isMark Boolean to indicate if the task should be marked or not.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" public ChangeMarkCommand(String indexString, boolean isMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" this.indexString \u003d indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" this.isMark \u003d isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * Marks or Unmarks task based on given index. Attempts to parse index from String to integer.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException Throws error if unable to parse from String to Integer successfully.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" int index \u003d Integer.parseInt(indexString) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" if (isMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" taskList.mark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" //ui.showMessage(\"Task at index \" + (index + 1) + \"has been successfully marked\");","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" output.append(\"Task at index \").append(index + 1).append(\"has been successfully marked\");","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" taskList.unmark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" //ui.showMessage(\"Task at index \" + (index + 1) + \"has been successfully unmarked\");","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" output.append(\"Task at index \").append(index + 1).append(\"has been successfully unmarked\");","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" taskList.print();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" throw new InvalidParametersException(\"Insert an integer from the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":53}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command interface **/","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public interface Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Executes code related to the nature of command.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException If command has parameters, then it can throw an InvalidParameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" * Checks whether the application is configured to exit.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * By default, it will always return false unless stated otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @return Command","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" default boolean isExit() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" };","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" default String getString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" String outputString \u003d output.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" output.delete(0, output.length());","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" return outputString;","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" };","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":37}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to delete task at specified index. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final String indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initialize delete command with specified index of task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param indexString Index to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public DeleteCommand(String indexString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" this.indexString \u003d indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Deletes task at specified index. Attempts to parse index from String to integer.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException Throws error if unable to parse from String to Integer successfully.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" int index \u003d Integer.parseInt(indexString) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" //ui.showMessage(\"Task at index \" + (index + 1) + \"removed successfully.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" output.append(\"Task at index \").append(index + 1).append(\"removed successfully.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" taskList.printSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" output.append(taskList.print());","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" throw new InvalidParametersException(\"Insert an integer from the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":44}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to exit the app */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * Prints exit statement.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" // ui.showMessage(\"BYE!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" output.append(\"No.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" * Set isExit to true to exit the app.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @return True.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":31}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to find tasks based on search string */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" private final String stringToSearch;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" public FindCommand(String stringToSearch) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" this.stringToSearch \u003d stringToSearch;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * Finds and prints tasks based on search string.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" String[] splitString \u003d stringToSearch.split(\" \");","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" output.append(taskList.print(splitString));","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":27}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to print list of tasks */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * Prints task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" output.append(taskList.print());","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":21}},{"path":"src/main/java/duke/controller/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.controller;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":62}},{"path":"src/main/java/duke/controller/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.controller;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":9}},{"path":"src/main/java/duke/controller/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.controller;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" private Duke duke \u003d new Duke(\"tasks.json\");","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":28}},{"path":"src/main/java/duke/controller/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.controller;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" private Duke duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" private final Image userImage \u003d new Image(Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaUser.png\")));","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" private final Image dukeImage \u003d new Image(Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaDuke.png\")));","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":47}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** General Exception created for the Duke Application */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize General Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid command */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initializes Invalid Command Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid date format */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid Date Format Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidDateFormatException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid file */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidFileException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid File Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidFileException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidParametersException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid parameters */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidParametersException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid Parameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidParametersException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/MissingCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for missing sub command */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class MissingCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Missing Command Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public MissingCommandException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/MissingParametersException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for missing parameters */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class MissingParametersException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Missing Parameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public MissingParametersException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.exception.*;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" * Main entry point for application to run.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * Duke is a to-do list CLI app, with different kind of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" * Able to store task data.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"public class Duke {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * Initializes Duke class. Initializes filepath to load and save data,","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * loads data from filepath.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * @param filePath Filepath to load and save data to.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" } catch (InvalidFileException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" * Runs application.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" ui.showCommands();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" new Duke(\"tasks.json\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" return c.getString();","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" return \"Error: \" + e.getMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":68}},{"path":"src/main/java/duke/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import duke.command.ChangeMarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidDateFormatException;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"import duke.exception.MissingCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"import duke.exception.MissingParametersException;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"/** Deals with making sense of user command, manages error handling based on user input */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" private static String[] splitText;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * Interprets user input, returns Command class if found.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * The format for this parser is \"[main command] [task] /[sub command] [parameters for sub command]\".","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Order of multiple sub commands are ignored, and not case-sensitive.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @param inputString Input String to be interpreted.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" * @return Command class to run.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" * @throws InvalidCommandException When command is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException When there are missing parameters for either main or sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException When there are invalid parameters for sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" * @throws InvalidDateFormatException When there are invalid date formats for sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" * @throws MissingCommandException When sub command for main command is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" public static Command parse(String inputString) throws InvalidCommandException, MissingParametersException,","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" InvalidParametersException, InvalidDateFormatException, MissingCommandException {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" // Split text into two.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" // With index 0 be the first word of user input, and index 1 containing the rest of the string.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" inputString \u003d inputString.toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" splitText \u003d inputString.split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" String command \u003d splitText[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" String task;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" switch (command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" return new DeleteCommand(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new ToDo(splitText[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" LocalDate from \u003d getDateWithCommand(splitText[1], \"from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" LocalDate to \u003d getDateWithCommand(splitText[1], \"to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" task \u003d getTask(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new Event(task, from, to));","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" LocalDate by \u003d getDateWithCommand(splitText[1], \"by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" task \u003d getTask(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new Deadline(task, by));","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" return new ChangeMarkCommand(splitText[1], true);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":" return new ChangeMarkCommand(splitText[1], false);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"flexibo"},"content":" case \"find\":","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"flexibo"},"content":" return new FindCommand(splitText[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"flexibo"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"flexibo"},"content":" throw new InvalidCommandException(\"I don\u0027t understand.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"flexibo"},"content":" * Gets LocalDate parameter based on String sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"flexibo"},"content":" * @param str String to search in.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"flexibo"},"content":" * @param command Sub Command to search for.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"flexibo"},"content":" * @return LocalDate parameter based on Sub Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"flexibo"},"content":" * @throws MissingCommandException When Sub Command cannot be found.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException When there are no parameters for Sub Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"flexibo"},"content":" * @throws InvalidDateFormatException When the parameter does not have a proper LocalDate format.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"flexibo"},"content":" private static LocalDate getDateWithCommand(String str, String command) throws MissingCommandException,","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"flexibo"},"content":" MissingParametersException, InvalidDateFormatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"flexibo"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"flexibo"},"content":" LocalDate date \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"flexibo"},"content":" String[] splitStr \u003d str.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"flexibo"},"content":" for (String word : splitStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"flexibo"},"content":" if (!isFound) {","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"flexibo"},"content":" if (word.equals(\"/\" + command)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"flexibo"},"content":" isFound \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"flexibo"},"content":" date \u003d LocalDate.parse(word);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"flexibo"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"flexibo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"flexibo"},"content":" throw new InvalidDateFormatException(\"Add a date in the foll0wing format: yyyyy-mm-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"flexibo"},"content":" if (!isFound) {","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"flexibo"},"content":" throw new MissingCommandException(\"Command \" + command + \"could not be isFound\");","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"flexibo"},"content":" } else if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"Command \" + command + \" does not contain any parameters\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"flexibo"},"content":" return date;","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"flexibo"},"content":" * Gets task based on string, under the assumption that the task will be after the main command,","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"flexibo"},"content":" * and before the first slash command.","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"flexibo"},"content":" * @param str String to interpret.","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"flexibo"},"content":" * @return Task name.","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException In the event where there are no task found.","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"flexibo"},"content":" private static String getTask(String str) throws MissingParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"flexibo"},"content":" StringBuilder task \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"flexibo"},"content":" String[] splitStr \u003d str.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"flexibo"},"content":" for (String word : splitStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"flexibo"},"content":" if (!word.isEmpty() \u0026\u0026 word.charAt(0) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"flexibo"},"content":" task.append(\" \").append(word);","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"flexibo"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"flexibo"},"content":" if (task.length() \u003e 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"flexibo"},"content":" return task.substring(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"Task not found, please type a task \u003e:(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"flexibo"},"content":" * Checks length of user input. User input with length less than 2 implies","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"flexibo"},"content":" * there are no parameters.","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException Throws if there are no parameters found after the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"flexibo"},"content":" private static void checkLength() throws MissingParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"flexibo"},"content":" if (splitText.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"You need to add something after the command LOL\");","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":164}},{"path":"src/main/java/duke/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.core.type.TypeReference;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.databind.ObjectMapper;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.databind.SerializationFeature;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidFileException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"import java.io.File;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"import java.nio.charset.StandardCharsets;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * Storage to store tasks to a specified filepath.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" private final String filepath;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" // Mapper to map from Object to JSON format.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" private static final ObjectMapper MAPPER \u003d new ObjectMapper();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" // Setting Mapper to serialize LocalDate to JSON.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" static {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" MAPPER.registerModule(new JavaTimeModule());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" * Initializes storage with filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" * @param filepath Filepath to save and load tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" public Storage (String filepath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" * Loads tasks from filepath (preferably JSON).","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" * If the file is not found or corrupted, throws InvalidFileException.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" * @return Tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" public ArrayList\u003cTask\u003e load() throws InvalidFileException {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" return MAPPER.readValue(new File(filepath), new TypeReference\u003c\u003e() {});","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" throw new InvalidFileException(\"File not found, will generate file on the next save...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" throw new InvalidFileException(\"Uh oh, file is corrupted, can\u0027t be loaded, \"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" + \"will generate a new file on the next save...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" * Saves tasks given by the caller to the filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" * @param tasks Tasks to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" public void save(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" String jsonString \u003d MAPPER.writerFor(new TypeReference\u003cArrayList\u003cTask\u003e\u003e() {})","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" .writeValueAsString(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" Files.writeString(Path.of(filepath), jsonString, StandardCharsets.UTF_8);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":74}},{"path":"src/main/java/duke/main/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Contains a list of tasks, used for manipulating or displaying the list of tasks */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initializes tasks list.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * Initialize TaskList with an array of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * @param tasks Tasks to be initialized with.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Add task to back of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" * Removes task by index.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" * @param i index to remove.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" public void remove(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" tasks.remove(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" * Prints out the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" public String print() {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" return \"You have no tasks added yet :(\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" output.append((i + 1)).append(\". \").append(tasks.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" return output.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" * Prints out the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" * @param stringToSearch String to search with.","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" public String print(String... stringToSearch) {","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" return \"You have no tasks added yet :(\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":" // TODO: Fix arrowhead coding","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"flexibo"},"content":" for (String s : stringToSearch) {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"flexibo"},"content":" if (tasks.get(i).getTask().contains(s)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"flexibo"},"content":" output.append((i + 1)).append(\". \").append(tasks.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"flexibo"},"content":" isFound \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"flexibo"},"content":" if (!isFound) {","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"flexibo"},"content":" return \"No tasks found with given string(s).\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"flexibo"},"content":" return output.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"flexibo"},"content":" * Prints number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"flexibo"},"content":" public String printSize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"flexibo"},"content":" return \"Now you have \" + tasks.size() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"flexibo"},"content":" * Marks task at index i.","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"flexibo"},"content":" * @param i Index of tasks to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"flexibo"},"content":" public void mark(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"flexibo"},"content":" tasks.get(i).mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"flexibo"},"content":" * Unmarks task at index i.","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"flexibo"},"content":" * @param i Index of tasks to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"flexibo"},"content":" public void unmark(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"flexibo"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"flexibo"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"flexibo"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":120}},{"path":"src/main/java/duke/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Ui deals with interactions with the user","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * Initializes Ui object.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * Prints welcome message.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" System.out.println(\" GREETINGS HUMAN! I AM QLATZ! □ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" + \" I AM NOW A LISTMAKER\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Prints out message with string wrapper.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @param message Message to be printed.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" System.out.println(\" \" + message);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" * Prints out error message with string wrapper.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" * @param error Error message to be printed.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" public void showError(String error) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" System.err.println(\" \" + error);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" * Prints out a line.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" System.out.println(\" ----------------------\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" * Prints out loading error.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" System.out.println(\"Error loading file, creating an empty list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" * Prints out list of commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" public void showCommands() {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" showMessage(\"Commands: \");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" showMessage(\"bye, list, find, mark, unmark, todo, deadline, event\");","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" * Reads command from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" * @return User input.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":76}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Task class with a deadline date (by) */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final LocalDate dateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initialize Deadline class.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param dateTime Deadline for task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" public Deadline(@JsonProperty(\"task\") String task, @JsonProperty(\"dateTime\") LocalDate dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" public LocalDate getDateTime() {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" return dateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" + dateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":32}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Task class contains an Event with from and to dates */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * Initialize Event class.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @param from Date when the event starts.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * @param to Date when the event ends.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" public Event(@JsonProperty(\"task\") String task, @JsonProperty(\"from\") LocalDate from,","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" @JsonProperty(\"to\") LocalDate to) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * Converts LocalDate to String.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" * @param localDate LocalDate to convert to.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @return String in the form of \"MMM dd yyyy\"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" private String getDate(LocalDate localDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" return localDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" public LocalDate getFrom() {","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" return from;","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" public LocalDate getTo() {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" return to;","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" return \"[E]\" + super.toString() + \" (from: \" + getDate(from) + \" to: \" + getDate(to) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":49}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonSubTypes;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonTypeInfo;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"/** Task class that contains a task string */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"@JsonTypeInfo(","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" use \u003d JsonTypeInfo.Id.NAME","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":")","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"@JsonSubTypes({","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d ToDo.class, name \u003d \"ToDo\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d Event.class, name \u003d \"Event\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d Deadline.class, name \u003d \"Deadline\")","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"})","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" private final String task;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * Initialize Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Sets boolean done to true.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" * Sets boolean done to false;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" public String getTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" return task;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" return \"[\" + ((isDone) ? \"X\" : \" \") + \"] \" + task;","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":50}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"/** Classic to-do task that only contains the task string */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" * Initialize To-Do class.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" public ToDo(@JsonProperty(\"task\") String task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":20}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"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.controller.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":19}},{"path":"src/test/java/duke/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":18}},{"path":"src/test/java/duke/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":" GREETINGS HUMAN! I AM QLATZ! □ ","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":" I AM NOW A LISTMAKER","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" I can only understand the following commands: ","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" bye, list, mark, unmark, todo, deadline, event","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" You have no tasks added yet","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" Now you have 1 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" Now you have 2 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" Now you have 3 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" 1. [T][ ] borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" 2. [D][ ] return book(by: sunday)","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" 3. [E][ ] project meeting(from: mon 2pm to: tues 000pm)","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":50}},{"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":"flexibo"},"content":"java -classpath ..\\bin duke.main.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"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":{"flexibo":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"# duke.main.Duke project template","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"3. After that, locate the `src/main/java/duke.main.Duke.java` file, right-click it, and choose `Run duke.main.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"flexibo":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":"flexibo"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-core\u0027, version: \u00272.15.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-annotations\u0027, version: \u00272.2.1\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-databind\u0027, version: \u00272.12.7.1\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027com.fasterxml.jackson.datatype\u0027, name: \u0027jackson-datatype-jsr310\u0027, version: \u00272.9.8\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":"checkstyle {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" mainClassName \u003d \u0027duke.main.Duke\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" mainClass.set(\"duke.main.Duke\")","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"flexibo":27,"-":41}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to add task into TaskList **/","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class AddCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initializes Add Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Adds a task to TaskList and saves list into file.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" setOutput(\"Task \" + task.getTask() + \"successfully added \\n\" + taskList.printSize());","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" * Replaces existing string in Output with a new string.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" * @param string String to be replaced.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" private void setOutput(String string) {","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" output.delete(0, output.length());","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" output.append(string);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":44}},{"path":"src/main/java/duke/command/ChangeMarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to change whether the task from mark to unmark (or vice versa) */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class ChangeMarkCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final String indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" private final boolean isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * Initializes change mark command.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param indexString String that contains the index of TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @param isMark Boolean to indicate if the task should be marked or not.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" public ChangeMarkCommand(String indexString, boolean isMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" this.indexString \u003d indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" this.isMark \u003d isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * Marks or Unmarks task based on given index. Attempts to parse index from String to integer.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException Throws error if unable to parse from String to Integer successfully.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" int index \u003d Integer.parseInt(indexString) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" if (isMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" taskList.mark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" setOutput(\"Task at index \" + (index + 1) + \" has been successfully marked.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" taskList.unmark(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" setOutput(\"Task at index \" + (index + 1) + \" has been successfully unmarked.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" taskList.print();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" throw new InvalidParametersException(\"Insert an integer from the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" * Replaces existing string in Output with a new string.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" * @param string String to be replaced.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" private void setOutput(String string) {","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" output.delete(0, output.length());","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" output.append(string);","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":61}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command interface **/","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public interface Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Executes code related to the nature of command.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException If command has parameters, then it can throw an InvalidParameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" * Checks whether the application is configured to exit.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * By default, it will always return false unless stated otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @return False (no exit).","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" default boolean isExit() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" default String getOutput () {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" return output.toString();","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":35}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Command to delete task at specified index. */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final String indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initialize delete command with specified index of task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param indexString Index to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public DeleteCommand(String indexString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" this.indexString \u003d indexString;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * Deletes task at specified index. Attempts to parse index from String to integer.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException Throws error if unable to parse from String to Integer successfully.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws InvalidParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" int index \u003d Integer.parseInt(indexString) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" storage.save(taskList.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" setOutput(\"Task at index \" + (index + 1) + \" removed successfully.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" taskList.printSize();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" setOutput(taskList.print());","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" throw new InvalidParametersException(\"Insert an integer from the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" * Replaces existing string in Output with a new string.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" * @param string String to be replaced.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" private void setOutput(String string) {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" output.delete(0, output.length());","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" output.append(string);","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":53}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to exit the app */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * Prints exit statement.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" output.delete(0, output.length());","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" output.append(\"No.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" * Set isExit to true to exit the app.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" * @return True.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":31}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to find tasks based on search string */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" private final String stringToSearch;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" public FindCommand(String stringToSearch) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" this.stringToSearch \u003d stringToSearch;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * Finds and prints tasks based on search string.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" String[] splitString \u003d stringToSearch.split(\" \");","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" output.delete(0, output.length());","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" output.append(taskList.print(splitString));","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":28}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"/** Command to print list of tasks */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * Prints task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * @param taskList TaskList containing the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * @param ui UI that interacts between the app and the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * @param storage Storage to save or load data from file.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" output.delete(0, output.length());","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" output.append(taskList.print());","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":22}},{"path":"src/main/java/duke/controller/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.controller;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":62}},{"path":"src/main/java/duke/controller/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.controller;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":9}},{"path":"src/main/java/duke/controller/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.controller;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.main.Duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" private Duke duke \u003d new Duke(\"tasks.json\");","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":28}},{"path":"src/main/java/duke/controller/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.controller;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.main.Duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" private Duke duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" private final Image userImage \u003d new Image(Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaUser.png\")));","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" private final Image dukeImage \u003d new Image(Objects.requireNonNull(this.getClass().getResourceAsStream(\"/images/DaDuke.png\")));","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":47}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** General Exception created for the Duke Application */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize General Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid command */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initializes Invalid Command Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid date format */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid Date Format Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidDateFormatException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid file */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidFileException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid File Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidFileException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/InvalidParametersException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for invalid parameters */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class InvalidParametersException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Invalid Parameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public InvalidParametersException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/MissingCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for missing sub command */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class MissingCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Missing Command Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public MissingCommandException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/exception/MissingParametersException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"/** Exception for missing parameters */","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"public class MissingParametersException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Initialize Missing Parameters Exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * @param message Error message to print out.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" public MissingParametersException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":13}},{"path":"src/main/java/duke/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import duke.exception.*;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" * Main entry point for application to run.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" * Duke is a to-do list CLI app, with different kind of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" * Able to store task data.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"public class Duke {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * Initializes Duke class. Initializes filepath to load and save data,","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * loads data from filepath.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * @param filePath Filepath to load and save data to.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" } catch (InvalidFileException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" * Runs application.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" ui.showCommands();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" new Duke(\"tasks.json\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" return c.getOutput();","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" return \"Error: \" + e.getMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":68}},{"path":"src/main/java/duke/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"import duke.command.ChangeMarkCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidDateFormatException;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidParametersException;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"import duke.exception.MissingCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"import duke.exception.MissingParametersException;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"/** Deals with making sense of user command, manages error handling based on user input */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" private static String[] splitText;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" * Interprets user input, returns Command class if found.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * The format for this parser is \"[main command] [task] /[sub command] [parameters for sub command]\".","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Order of multiple sub commands are ignored, and not case-sensitive.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @param inputString Input String to be interpreted.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" * @return Command class to run.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" * @throws InvalidCommandException When command is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException When there are missing parameters for either main or sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" * @throws InvalidParametersException When there are invalid parameters for sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" * @throws InvalidDateFormatException When there are invalid date formats for sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" * @throws MissingCommandException When sub command for main command is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" public static Command parse(String inputString) throws InvalidCommandException, MissingParametersException,","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" InvalidParametersException, InvalidDateFormatException, MissingCommandException {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" // Split text into two.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" // With index 0 be the first word of user input, and index 1 containing the rest of the string.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" inputString \u003d inputString.toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" splitText \u003d inputString.split(\" \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" String command \u003d splitText[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" String task;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" switch (command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" return new DeleteCommand(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new ToDo(splitText[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" LocalDate from \u003d getDateWithCommand(splitText[1], \"from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" LocalDate to \u003d getDateWithCommand(splitText[1], \"to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" task \u003d getTask(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new Event(task, from, to));","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" LocalDate by \u003d getDateWithCommand(splitText[1], \"by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" task \u003d getTask(splitText[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" return new AddCommand(new Deadline(task, by));","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" return new ChangeMarkCommand(splitText[1], true);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":" return new ChangeMarkCommand(splitText[1], false);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"flexibo"},"content":" case \"find\":","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"flexibo"},"content":" checkLength();","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"flexibo"},"content":" return new FindCommand(splitText[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"flexibo"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"flexibo"},"content":" throw new InvalidCommandException(\"I don\u0027t understand.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"flexibo"},"content":" * Gets LocalDate parameter based on String sub commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"flexibo"},"content":" * @param str String to search in.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"flexibo"},"content":" * @param command Sub Command to search for.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"flexibo"},"content":" * @return LocalDate parameter based on Sub Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"flexibo"},"content":" * @throws MissingCommandException When Sub Command cannot be found.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException When there are no parameters for Sub Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"flexibo"},"content":" * @throws InvalidDateFormatException When the parameter does not have a proper LocalDate format.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"flexibo"},"content":" private static LocalDate getDateWithCommand(String str, String command) throws MissingCommandException,","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"flexibo"},"content":" MissingParametersException, InvalidDateFormatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"flexibo"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"flexibo"},"content":" LocalDate date \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"flexibo"},"content":" String[] splitStr \u003d str.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"flexibo"},"content":" for (String word : splitStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"flexibo"},"content":" if (!isFound) {","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"flexibo"},"content":" if (word.equals(\"/\" + command)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"flexibo"},"content":" isFound \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"flexibo"},"content":" continue;","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"flexibo"},"content":" date \u003d LocalDate.parse(word);","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"flexibo"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"flexibo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"flexibo"},"content":" throw new InvalidDateFormatException(\"Add a date in the foll0wing format: yyyyy-mm-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"flexibo"},"content":" if (!isFound) {","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"flexibo"},"content":" throw new MissingCommandException(\"Command \" + command + \"could not be isFound\");","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"flexibo"},"content":" } else if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"Command \" + command + \" does not contain any parameters\");","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"flexibo"},"content":" return date;","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"flexibo"},"content":" * Gets task based on string, under the assumption that the task will be after the main command,","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"flexibo"},"content":" * and before the first slash command.","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"flexibo"},"content":" * @param str String to interpret.","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"flexibo"},"content":" * @return Task name.","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException In the event where there are no task found.","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"flexibo"},"content":" private static String getTask(String str) throws MissingParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"flexibo"},"content":" StringBuilder task \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"flexibo"},"content":" String[] splitStr \u003d str.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"flexibo"},"content":" for (String word : splitStr) {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"flexibo"},"content":" if (word.isEmpty() || word.charAt(0) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"flexibo"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"flexibo"},"content":" task.append(\" \").append(word);","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"flexibo"},"content":" if (task.length() \u003c 1) {","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"Task not found, please type a task \u003e:(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"flexibo"},"content":" return task.substring(1);","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"flexibo"},"content":" * Checks length of user input. User input with length less than 2 implies","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"flexibo"},"content":" * there are no parameters.","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"flexibo"},"content":" * @throws MissingParametersException Throws if there are no parameters found after the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"flexibo"},"content":" private static void checkLength() throws MissingParametersException {","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"flexibo"},"content":" if (splitText.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"flexibo"},"content":" throw new MissingParametersException(\"You need to add something after the command LOL\");","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":161}},{"path":"src/main/java/duke/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.core.type.TypeReference;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.databind.ObjectMapper;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.databind.SerializationFeature;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"import duke.exception.InvalidFileException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"import java.io.File;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"import java.nio.charset.StandardCharsets;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * Storage to store tasks to a specified filepath.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" private final String filepath;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" // Mapper to map from Object to JSON format.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" private static final ObjectMapper MAPPER \u003d new ObjectMapper();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" // Setting Mapper to serialize LocalDate to JSON.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" static {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" MAPPER.registerModule(new JavaTimeModule());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" * Initializes storage with filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" * @param filepath Filepath to save and load tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" public Storage (String filepath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" * Loads tasks from filepath (preferably JSON).","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" * If the file is not found or corrupted, throws InvalidFileException.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" * @return Tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" public ArrayList\u003cTask\u003e load() throws InvalidFileException {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" return MAPPER.readValue(new File(filepath), new TypeReference\u003c\u003e() {});","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" throw new InvalidFileException(\"File not found, will generate file on the next save...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" throw new InvalidFileException(\"Uh oh, file is corrupted, can\u0027t be loaded, \"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" + \"will generate a new file on the next save...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" * Saves tasks given by the caller to the filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" * @param tasks Tasks to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" public void save(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" String jsonString \u003d MAPPER.writerFor(new TypeReference\u003cArrayList\u003cTask\u003e\u003e() {})","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" .writeValueAsString(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" Files.writeString(Path.of(filepath), jsonString, StandardCharsets.UTF_8);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":74}},{"path":"src/main/java/duke/main/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"/** Contains a list of tasks, used for manipulating or displaying the list of tasks */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * Initializes tasks list.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" * Initialize TaskList with an array of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" * @param tasks Tasks to be initialized with.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" * Add task to back of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" assert task \u003d\u003d tasks.get(tasks.size() - 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" * Removes task by index.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" * @param i index to remove.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" public void remove(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" tasks.remove(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" * Prints out the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" public String print() {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" return \"You have no tasks added yet :(\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" output.append((i + 1)).append(\". \").append(tasks.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" return output.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" * Prints out the list of tasks using a search string.","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":" * @param stringToSearch String to search with.","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" public String print(String... stringToSearch) {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" return \"You have no tasks added yet :(\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":" tasks.stream()","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"flexibo"},"content":" .filter(task -\u003e Arrays.stream(stringToSearch).anyMatch(s -\u003e task.getTask().contains(s)))","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"flexibo"},"content":" .forEachOrdered(task -\u003e output.append((tasks.indexOf(task) + 1))","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"flexibo"},"content":" .append(\". \").append(task).append(\"\\n\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"flexibo"},"content":" if (output.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"flexibo"},"content":" return \"No tasks found with given string(s).\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"flexibo"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"flexibo"},"content":" return output.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"flexibo"},"content":" * Prints number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"flexibo"},"content":" public String printSize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"flexibo"},"content":" return \"Now you have \" + tasks.size() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"flexibo"},"content":" * Marks task at index i.","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"flexibo"},"content":" * @param i Index of tasks to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"flexibo"},"content":" public void mark(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"flexibo"},"content":" tasks.get(i).mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"flexibo"},"content":" * Unmarks task at index i.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"flexibo"},"content":" * @param i Index of tasks to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"flexibo"},"content":" public void unmark(int i) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"flexibo"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"flexibo"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"flexibo"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":116}},{"path":"src/main/java/duke/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":" * Ui deals with interactions with the user","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" * Initializes Ui object.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" * Prints welcome message.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" System.out.println(\" GREETINGS HUMAN! I AM QLATZ! □ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" + \" I AM NOW A LISTMAKER\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Prints out message with string wrapper.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @param message Message to be printed.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" System.out.println(\" \" + message);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" * Prints out error message with string wrapper.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" * @param error Error message to be printed.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" public void showError(String error) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" System.err.println(\" \" + error);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" * Prints out a line.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":" System.out.println(\" ----------------------\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"flexibo"},"content":" * Prints out loading error.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"flexibo"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"flexibo"},"content":" System.out.println(\"Error loading file, creating an empty list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"flexibo"},"content":" * Prints out list of commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"flexibo"},"content":" public void showCommands() {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"flexibo"},"content":" showMessage(\"Commands: \");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"flexibo"},"content":" showMessage(\"bye, list, find, mark, unmark, todo, deadline, event\");","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"flexibo"},"content":" * Reads command from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"flexibo"},"content":" * @return User input.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"flexibo"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"flexibo"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"flexibo":76}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Task class with a deadline date (by) */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final LocalDate dateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" * Initialize Deadline class.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param dateTime Deadline for task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" public Deadline(@JsonProperty(\"task\") String task, @JsonProperty(\"dateTime\") LocalDate dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" public LocalDate getDateTime() {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" return dateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" + dateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":32}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"/** Task class contains an Event with from and to dates */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" * Initialize Event class.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" * @param from Date when the event starts.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" * @param to Date when the event ends.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" public Event(@JsonProperty(\"task\") String task, @JsonProperty(\"from\") LocalDate from,","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" @JsonProperty(\"to\") LocalDate to) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" * Converts LocalDate to String.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" * @param localDate LocalDate to convert to.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" * @return String in the form of \"MMM dd yyyy\"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" private String getDate(LocalDate localDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":" return localDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" public LocalDate getFrom() {","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" return from;","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":" public LocalDate getTo() {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" return to;","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" return \"[E]\" + super.toString() + \" (from: \" + getDate(from) + \" to: \" + getDate(to) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":49}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonSubTypes;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonTypeInfo;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"/** Task class that contains a task string */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"@JsonTypeInfo(","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" use \u003d JsonTypeInfo.Id.NAME","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":")","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"@JsonSubTypes({","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d ToDo.class, name \u003d \"ToDo\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d Event.class, name \u003d \"Event\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" @JsonSubTypes.Type(value \u003d Deadline.class, name \u003d \"Deadline\")","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"})","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" private final String task;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":" * Initialize Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" public Task(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" * Sets boolean done to true.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" * Sets boolean done to false;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":" public String getTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" return task;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":" return \"[\" + ((isDone) ? \"X\" : \" \") + \"] \" + task;","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":50}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"/** Classic to-do task that only contains the task string */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" * Initialize To-Do class.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" * @param task Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" public ToDo(@JsonProperty(\"task\") String task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":20}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"flexibo"},"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.controller.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"flexibo":19}},{"path":"src/test/java/duke/command/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" public void dummyTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":18}},{"path":"src/test/java/duke/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"flexibo":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"flexibo"},"content":" GREETINGS HUMAN! I AM QLATZ! □ ","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"flexibo"},"content":" I AM NOW A LISTMAKER","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"flexibo"},"content":" I can only understand the following commands: ","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"flexibo"},"content":" bye, list, mark, unmark, todo, deadline, event","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"flexibo"},"content":" You have no tasks added yet","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"flexibo"},"content":" Now you have 1 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"flexibo"},"content":" Now you have 2 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"flexibo"},"content":" Now you have 3 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"flexibo"},"content":" 1. [T][ ] borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"flexibo"},"content":" 2. [D][ ] return book(by: sunday)","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"flexibo"},"content":" 3. [E][ ] project meeting(from: mon 2pm to: tues 000pm)","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"flexibo"},"content":" ------------------------","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"flexibo"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"flexibo":50}},{"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":"flexibo"},"content":"java -classpath ..\\bin duke.main.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"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":{"flexibo":1,"-":20}}] diff --git a/flexibo_ip_master/commits.json b/flexibo_ip_master/commits.json index 57d6fbe5..ad608ec2 100644 --- a/flexibo_ip_master/commits.json +++ b/flexibo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"flexibo":[{"date":"2023-08-23","commitResults":[{"hash":"8e7c9173ea98cd1ab93702d9391bc65ff19c89bd","isMergeCommit":false,"messageTitle":"Level-0 created greetings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b1072be813e2b3069535f3eac7d4ff08f3d0b650","isMergeCommit":false,"messageTitle":"Level-0 created greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":9}}},{"hash":"c799dda454b500e319a672c41f0d2f7baa800090","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":4}}},{"hash":"a0753cdeed3dc2fc8b4973c61d9764df5196c44f","isMergeCommit":false,"messageTitle":"Level-2 Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"44ea01f12e9b96138ce201d79bd42e6a943dad52","isMergeCommit":false,"messageTitle":"Level-3 Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":16}}},{"hash":"f9f98b612c05b7784679a0c40e314a782e3c0812","isMergeCommit":false,"messageTitle":"Level 4 - ToDos, Events, Deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":25}}},{"hash":"41f13a0909c0f5b7e1f55911b867cac579b5cb4a","isMergeCommit":false,"messageTitle":"Level 4 - ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":7}}},{"hash":"67533c9e095d1a5736370af0efeaa31dee16873d","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":50,"deletions":0}}},{"hash":"dd35770df9a087ba1ea3dfdbc37a5c722cc620b9","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":34}}},{"hash":"dcb0041ca8d55754809f0e272c1d04eb19be2ef3","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"9dc42180fecddefb577dde1a8e50f2c1d7649287","isMergeCommit":false,"messageTitle":"Level 6 - Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"3bdfe2291b8192a74265e6152e470c8755674ca7","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"e2b7f0a0715ba8ec777b91937ff533d7be1af6d8","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b9951deeab6f842968684657d746899f6952a4a2","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d204e81596e3dff8d43ddcb63fd6b8114c79fe2c","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":13}}},{"hash":"09a6407f428cf993fd456f25c72120d224c7f92d","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"be629557dea16fba063a4068232f423a1c483fb8","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5cc8ee4e031aab460a3c17b9d43836e025ca2051","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"82c616ad5001c9927f0b2c503e542373893256b8","isMergeCommit":false,"messageTitle":"lelve 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":11}}},{"hash":"15268083424dbb70b7bb160e68c26c4971cb97e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"6ec5229a330ee974199ec12108781101635b8ae7","isMergeCommit":false,"messageTitle":"Change code format to be more OOP friendly.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":606,"deletions":247},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"162101aba35f1448ec2185e42b48785d929aba47","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-moreoop\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9954fe8dcdc827c2d4bdaae3d23c8c896ed6c7dc","isMergeCommit":false,"messageTitle":"Organized files to standard packages.","messageBody":"Created new packages for \"exception\", \"task\", and \"command\" for enhanced readability.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"2228b037873c37f466419c4a3f21bfae18aa183d","isMergeCommit":false,"messageTitle":"Removed Duke Welcome.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"7ebc8d745479e15a7cc7429fdc7e480254e90d1f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7052b53c6963e1d0082291aeca1680335ce906e4","isMergeCommit":false,"messageTitle":"Fixed file not creating on corruption bug.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":25}}}]},{"date":"2023-09-03","commitResults":[{"hash":"66f4484ba3b6639556dcfc390c2e622ab01e2231","isMergeCommit":false,"messageTitle":"Add test cases for Add and Delete Command classes.","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"750bd871cc983fb8e8980669cd80621f8cb656ef","isMergeCommit":false,"messageTitle":"Created JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"java":{"insertions":1,"deletions":0}}},{"hash":"3886a3627e2605764cf8a207b6224f29c7c5975a","isMergeCommit":false,"messageTitle":"Added JavaDocs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":216,"deletions":24}}},{"hash":"f0df945b11247e209f79c7688af0db8f6a521058","isMergeCommit":false,"messageTitle":"Added JavaDocs.","messageBody":"Added for the rest of the files except for the test files.\n","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":30}}},{"hash":"231c3b2e7ee29fe295038c946b25eae205e9ee49","isMergeCommit":false,"messageTitle":"Minor edit to follow coding standard.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"e60f954203c7543bed101770c06a2d0ea6710f82","isMergeCommit":false,"messageTitle":"Added Find command and function.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}},{"hash":"6864e2d7d0f5681aabd400707a7c071c7a24882e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-codingstandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"102dc0897f4a00a9ef133e1f753646d220ae03b1","isMergeCommit":false,"messageTitle":"Minor edit to fit coding standard.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"443daba68306d325b4868389968a7de11eda9514","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-codingstandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"8eecf1776d30b558edf7936083499655f7c99b56","isMergeCommit":false,"messageTitle":"Minor comment change to JavaDocs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9b41ee654ece9871f3afd06c5407a0677e1f8f69","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-javadoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2a8510868e565272b105320ce9cb04c078e7c8d0","isMergeCommit":true,"messageTitle":"Minor comment change to JavaDocs.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"429eb9b37540cd8a4b8ede368ce24c00467159c4","isMergeCommit":false,"messageTitle":"Implement checkstyle, edit import statements order.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":2},"java":{"insertions":47,"deletions":32}}},{"hash":"4f78a24c9f5ab0330d90e5f72d0736635870a3d9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-checkstyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"9d3ffe46daf65dde944ff25c8c81efb001213b79","isMergeCommit":false,"messageTitle":"Update TaskList.java change found variable.","messageBody":"Change boolean from \"found\" to \"isFound\" according to suggestion.\n\nCo-authored-by: Victor Lai \u003c75977350+victorlaiyeeteng@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"a952b37567520be052643abe7de43f7d2f3e6540","isMergeCommit":false,"messageTitle":"Implement GUI, Fix JSON bug from prev commit.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":227,"deletions":65}}},{"hash":"285dead11039f6b8c22130420c78f169b21d1e8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"c3e22a4509ea31e364e5bd0ffc644832bf856859","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/main/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"124190ee4d5c2d47c1c3a679dd11da6b5401755c","isMergeCommit":false,"messageTitle":"Implement VarArgs for find command.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":22}}},{"hash":"bd7df099d4f2372ad8464184d49f821407d62ec9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-varargs\u0027","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"flexibo":{"java":1161,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":27,"txt":50}},"authorContributionVariance":{"flexibo":53471.473},"authorDisplayNameMap":{"flexibo":"CS2103T-W09-2 DEBB..NXIN"}} +{"authorDailyContributionsMap":{"flexibo":[{"date":"2023-08-23","commitResults":[{"hash":"8e7c9173ea98cd1ab93702d9391bc65ff19c89bd","isMergeCommit":false,"messageTitle":"Level-0 created greetings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b1072be813e2b3069535f3eac7d4ff08f3d0b650","isMergeCommit":false,"messageTitle":"Level-0 created greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":9}}},{"hash":"c799dda454b500e319a672c41f0d2f7baa800090","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":4}}},{"hash":"a0753cdeed3dc2fc8b4973c61d9764df5196c44f","isMergeCommit":false,"messageTitle":"Level-2 Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"44ea01f12e9b96138ce201d79bd42e6a943dad52","isMergeCommit":false,"messageTitle":"Level-3 Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":16}}},{"hash":"f9f98b612c05b7784679a0c40e314a782e3c0812","isMergeCommit":false,"messageTitle":"Level 4 - ToDos, Events, Deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":150,"deletions":25}}},{"hash":"41f13a0909c0f5b7e1f55911b867cac579b5cb4a","isMergeCommit":false,"messageTitle":"Level 4 - ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":7}}},{"hash":"67533c9e095d1a5736370af0efeaa31dee16873d","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":50,"deletions":0}}},{"hash":"dd35770df9a087ba1ea3dfdbc37a5c722cc620b9","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":34}}},{"hash":"dcb0041ca8d55754809f0e272c1d04eb19be2ef3","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"9dc42180fecddefb577dde1a8e50f2c1d7649287","isMergeCommit":false,"messageTitle":"Level 6 - Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"3bdfe2291b8192a74265e6152e470c8755674ca7","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"e2b7f0a0715ba8ec777b91937ff533d7be1af6d8","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b9951deeab6f842968684657d746899f6952a4a2","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d204e81596e3dff8d43ddcb63fd6b8114c79fe2c","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":13}}},{"hash":"09a6407f428cf993fd456f25c72120d224c7f92d","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"be629557dea16fba063a4068232f423a1c483fb8","isMergeCommit":false,"messageTitle":"Level 7 Save, add to brranch levl 77777777777777777777777","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5cc8ee4e031aab460a3c17b9d43836e025ca2051","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"82c616ad5001c9927f0b2c503e542373893256b8","isMergeCommit":false,"messageTitle":"lelve 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":11}}},{"hash":"15268083424dbb70b7bb160e68c26c4971cb97e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"6ec5229a330ee974199ec12108781101635b8ae7","isMergeCommit":false,"messageTitle":"Change code format to be more OOP friendly.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":606,"deletions":247},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"162101aba35f1448ec2185e42b48785d929aba47","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-moreoop\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9954fe8dcdc827c2d4bdaae3d23c8c896ed6c7dc","isMergeCommit":false,"messageTitle":"Organized files to standard packages.","messageBody":"Created new packages for \"exception\", \"task\", and \"command\" for enhanced readability.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"2228b037873c37f466419c4a3f21bfae18aa183d","isMergeCommit":false,"messageTitle":"Removed Duke Welcome.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"7ebc8d745479e15a7cc7429fdc7e480254e90d1f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7052b53c6963e1d0082291aeca1680335ce906e4","isMergeCommit":false,"messageTitle":"Fixed file not creating on corruption bug.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":25}}}]},{"date":"2023-09-03","commitResults":[{"hash":"66f4484ba3b6639556dcfc390c2e622ab01e2231","isMergeCommit":false,"messageTitle":"Add test cases for Add and Delete Command classes.","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"750bd871cc983fb8e8980669cd80621f8cb656ef","isMergeCommit":false,"messageTitle":"Created JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"java":{"insertions":1,"deletions":0}}},{"hash":"3886a3627e2605764cf8a207b6224f29c7c5975a","isMergeCommit":false,"messageTitle":"Added JavaDocs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":216,"deletions":24}}},{"hash":"f0df945b11247e209f79c7688af0db8f6a521058","isMergeCommit":false,"messageTitle":"Added JavaDocs.","messageBody":"Added for the rest of the files except for the test files.\n","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":30}}},{"hash":"231c3b2e7ee29fe295038c946b25eae205e9ee49","isMergeCommit":false,"messageTitle":"Minor edit to follow coding standard.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"e60f954203c7543bed101770c06a2d0ea6710f82","isMergeCommit":false,"messageTitle":"Added Find command and function.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}},{"hash":"6864e2d7d0f5681aabd400707a7c071c7a24882e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-codingstandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"102dc0897f4a00a9ef133e1f753646d220ae03b1","isMergeCommit":false,"messageTitle":"Minor edit to fit coding standard.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"443daba68306d325b4868389968a7de11eda9514","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-codingstandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"8eecf1776d30b558edf7936083499655f7c99b56","isMergeCommit":false,"messageTitle":"Minor comment change to JavaDocs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9b41ee654ece9871f3afd06c5407a0677e1f8f69","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-javadoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2a8510868e565272b105320ce9cb04c078e7c8d0","isMergeCommit":true,"messageTitle":"Minor comment change to JavaDocs.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"429eb9b37540cd8a4b8ede368ce24c00467159c4","isMergeCommit":false,"messageTitle":"Implement checkstyle, edit import statements order.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":2},"java":{"insertions":47,"deletions":32}}},{"hash":"4f78a24c9f5ab0330d90e5f72d0736635870a3d9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-checkstyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"9d3ffe46daf65dde944ff25c8c81efb001213b79","isMergeCommit":false,"messageTitle":"Update TaskList.java change found variable.","messageBody":"Change boolean from \"found\" to \"isFound\" according to suggestion.\n\nCo-authored-by: Victor Lai \u003c75977350+victorlaiyeeteng@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"a952b37567520be052643abe7de43f7d2f3e6540","isMergeCommit":false,"messageTitle":"Implement GUI, Fix JSON bug from prev commit.","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":227,"deletions":65}}},{"hash":"285dead11039f6b8c22130420c78f169b21d1e8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"c3e22a4509ea31e364e5bd0ffc644832bf856859","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/main/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"124190ee4d5c2d47c1c3a679dd11da6b5401755c","isMergeCommit":false,"messageTitle":"Implement VarArgs for find command.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":22}}},{"hash":"bd7df099d4f2372ad8464184d49f821407d62ec9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-a-varargs\u0027","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"9c3e810939f785f993b074c3e03dec5edc3d15c4","isMergeCommit":false,"messageTitle":"TaskList: Add assertion for adding task","messageBody":"Check if the task being added is added to the back of the list as stated\nin the JavaDocs.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"aa3a041d4dfc640a2c95a264b9e213c96d3f750b","isMergeCommit":false,"messageTitle":"Find command: Change search method to use streams","messageBody":"Search method use streams instead of a nested for loop.\n\nMake it faster to find and filter tasks with large number of tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":12}}},{"hash":"72795588a10c435217fc671c7ccd71e1138b9422","isMergeCommit":false,"messageTitle":"Main classes: Update to follow code quality","messageBody":"Increase readability of code.\n\nChange the ordering of if statements to make happy path more obvious,\nand adjust code to avoid arrowhead.\n\nRefer to this for more info on code quality\nhttps://nus-cs2103-ay2324s1.github.io/website/se-book-adapted/chapters/codeQuality.html#code-quality\n","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":38}}},{"hash":"0d2b8efa0187b8546020a48fb9f6ae43269ec82b","isMergeCommit":false,"messageTitle":"Command interface: Remove semicolon","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c8c7f608173105dde52cb0a6b77f2801106aa1ed","isMergeCommit":true,"messageTitle":"Merge pull request #2 from flexibo/branch-A-Streams","messageBody":"Find command: Change search method to use streams","tags":["A-Streams"],"fileTypesAndContributionMap":{}},{"hash":"c549d6f3704e69f94a7a64a8b406a9441030a3fe","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bbd54700b8f86ed3bb11c3368a5611bee64a3286","isMergeCommit":true,"messageTitle":"Merge pull request #3 from flexibo/branch-A-CodeQuality","messageBody":"Branch a code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"320b8963c088512444e9ad4b8be4b5c898a1fe1a","isMergeCommit":true,"messageTitle":"Merge pull request #4 from flexibo/branch-A-Assertions","messageBody":"TaskList: Add assertion for adding task","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"flexibo":{"java":1179,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":27,"txt":50}},"authorContributionVariance":{"flexibo":41462.043},"authorDisplayNameMap":{"flexibo":"CS2103T-W09-2 DEBB..NXIN"}} diff --git a/freddychenyouren2_ip_master/authorship.json b/freddychenyouren2_ip_master/authorship.json index 8f4eb5d6..46ece935 100644 --- a/freddychenyouren2_ip_master/authorship.json +++ b/freddychenyouren2_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"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":{"-":22,"freddychenyouren2":2}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"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":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":43,"freddychenyouren2":20}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"D | 1 | test dates correct deadline | 2023-10-21 | null","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"E | 1 | correct event timings | 2222-11-11 | 2222-11-13","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"T | 1 | Packaged stuff | null | null","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"D | 1 | Dead Package bruh | 1111-11-11 | null","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"T | 1 | From Gradle | null | null","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"T | 0 | GUI Version of SeeWhyAre | null | null","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"T | 0 | demo todo | null | null","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"E | 0 | GUI Version | 2022-12-03 | 2023-01-12","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"T | 0 | After Checkstyle | null | null","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"freddychenyouren2":9}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"T | 1 | new new new todo | null | null","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"D | 0 | test dates correct deadline | 2023-10-21 | null","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"E | 0 | correct event timings | 2222-11-11 | 2222-11-13","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"T | 0 | yes todo | null | null","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"E | 1 | lalalalla | 2020-10-10 | 2019-02-01","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":5}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Dialog Box in the Graphic User Interface (GUI) Version of SeeWhyAre bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" // Need standardised photos to make better circle clips","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" // dialog.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" // Circle circleClip \u003d new Circle(30,60,50);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" // displayPicture.setClip(circleClip);","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" * Gets the dialog box for SeeWhyAre\u0027s response to user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" * @param text SeeWhyAre\u0027s response","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" * @param img SeeWhyAre\u0027s image","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" * @return SeeWhyAre\u0027s dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" public static DialogBox getSeeWhyAreDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":69}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * Represents the bot SeeWhyAre.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"public class Duke {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" private static boolean isFinished \u003d false;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" private static Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" private static TaskList listOfTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" * Constructs a new instance of the chat bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" listOfTasks \u003d new TaskList(storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" parser \u003d new Parser(listOfTasks, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" storage.loadTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" //start();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" System.err.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" } catch (InvalidDateException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" * Gets the response from SeeWhyAre bot after parsing the user input.","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" public static String getResponse(String userInput) {","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" return parser.parseInput(userInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" public static void setIsFinishedToTrue() {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" isFinished \u003d true;","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" * Driver method for CLI version of Duke.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" * @param args not used.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" ui.greet();","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" String userInput \u003d ui.getUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" while (!isFinished) {","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(getResponse(userInput));","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":1,"freddychenyouren2":71}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" stage.setTitle(\"SeeWhyAre Bot\");","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" private final Image userImage \u003d new Image(Objects.requireNonNull(","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" this.getClass().getResourceAsStream(\"/images/ElonMusk.jpeg\")));","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" private final Image dukeImage \u003d new Image(Objects.requireNonNull(","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" this.getClass().getResourceAsStream(\"/images/BillGates.jpeg\")));","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" DialogBox.getSeeWhyAreDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":56}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":" * Represents an Empty Description Exception","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * Prints the exception message, giving us the reason for the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" public String printExceptionMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" return \"OOPS!!! \" + this.getMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"freddychenyouren2":24}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * Represents an Invalid Command Exception","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" * Prints the exception message, giving us the reason for the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" * Includes the list of commands that the current version of SeeWhyAre bot supports.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" public String printExceptionMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder(String.format(\"OOPS!!! %s\\n\", this.getMessage()));","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Please input valid commands. Currently SeeWhyAre bot supports:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" for (Parser.Command c : Parser.Command.values()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" message.append(c + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":32}},{"path":"src/main/java/duke/exception/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":" * Represents an Invalid Date Exception","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"public class InvalidDateException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * Overrides the exception object\u0027s toString method and contains an error message.","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * @return The error message String with a correction of date input format.","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" return \"Yoho! The date provided is invalid. \"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" + \"Ensure all dates are of the format YYYY-MM-DD. Thanks!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":23}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a deadline task with the given description and deadline date.","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" * @param by The deadline date.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" private LocalDate getDeadlineDate() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" return this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" getDeadlineDate().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" public LocalDate getDueDate() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" return this.by;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" * Handles the creation of a Deadline task based on user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" * @param userInput A valid user input for a Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an error with the storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" public static String handleDeadlineTask(String userInput) throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" String[] details \u003d userInput.split(\"/by\");","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" // details[0] contains \"deadline\" and task description, need to erase \"deadline\".","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" // details[1] contains deadline timing","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" if (details.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" String taskDescription \u003d details[0].trim().replaceFirst(\"deadline\", \"\").trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" String deadline \u003d details[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" // Check if input date is valid.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" if (TaskList.isValidDate(deadline)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" Deadline deadlineTask \u003d new Deadline(taskDescription, LocalDate.parse(deadline));","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" Storage.saveTask(deadlineTask, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" Storage.listOfTasks.add(deadlineTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Got it, I\u0027ve added this Task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\" %s\\n\", deadlineTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Now you have %d task(s) in the list.\\n\", Storage.listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"freddychenyouren2"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"freddychenyouren2"},"content":" } catch (InvalidDateException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"freddychenyouren2"},"content":" message.append(e);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Invalid Deadline Task input.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"freddychenyouren2"},"content":" + \"Please input in the following format:\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"freddychenyouren2"},"content":" + \"deadline \u003cTask Description\u003e /by \u003cdeadline timing\u003e\");","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"freddychenyouren2":89}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * Represents an Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" //60 underscores.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" protected static final String HORIZONTAL_LINE \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" protected LocalDate startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" protected LocalDate endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates an event task with the given description, start date and end date.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" * @param description The description of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" * @param startTime The starting date of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" * @param endTime The end date of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" public Event(String description, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" protected static void printHorizontalLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" getStartTime().format(DateTimeFormatter.ofPattern(\"MMM d yyy\")),","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" getEndTime().format(DateTimeFormatter.ofPattern(\"MMM d yyy\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" public LocalDate getStartTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" return this.startTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" public LocalDate getEndTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" return this.endTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" * Handles the creation of an event task based on user input.","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" * @param userInput A valid user input for an event task.","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an error with the storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" public static String handleEventTask(String userInput) throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" String[] details \u003d userInput.split(\"/from | /to\");","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" // details[0] contains \"event\" and task description, need to erase \"event\".","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" // details[1] contains String event timing","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" if (details.length \u003d\u003d 3) {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":" String taskDescription \u003d details[0].trim().replaceFirst(\"event\", \"\").trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" String startTime \u003d details[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":" String endTime \u003d details[2].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"freddychenyouren2"},"content":" //Check if input date is valid.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"freddychenyouren2"},"content":" if (TaskList.isValidDate(startTime)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"freddychenyouren2"},"content":" Event eventTask \u003d new Event(taskDescription,","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(startTime),","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(endTime));","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"freddychenyouren2"},"content":" Storage.saveTask(eventTask, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"freddychenyouren2"},"content":" Storage.listOfTasks.add(eventTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Got it, I\u0027ve added this Task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\" %s\\n\", eventTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Now you have %d task(s) in the list.\\n\", Storage.listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"freddychenyouren2"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"freddychenyouren2"},"content":" } catch (InvalidDateException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"freddychenyouren2"},"content":" message.append(e);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Invalid Event Task input.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"freddychenyouren2"},"content":" + \"Please input in the following format:\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"freddychenyouren2"},"content":" + \"event \u003cTask Description\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":105,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"freddychenyouren2":105}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Task in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" public boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" protected String description;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a task with the given description.","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" return this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" * Gets the status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" public boolean getStatus() {","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" return this.isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" * @return A string with the status icon and description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.getDescription());","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" * Gets the status icon of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" * @return The status icon as a String (\"X\" if done, \" \" if not done).","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freddychenyouren2":66}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a todo task with the given description.","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" * Handles the creation of a todo task based on user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" * @param userInput A valid user input for a todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" * @throws EmptyDescriptionException If the description of the todo task is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an issue with saving the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" public static String handleTodoTask(String userInput) throws EmptyDescriptionException, IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" String taskDescription \u003d userInput.trim().replaceFirst(\"todo\", \"\").trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" throw new EmptyDescriptionException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" Todo todoTask \u003d new Todo(taskDescription);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" Storage.saveTask(todoTask, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" Storage.listOfTasks.add(todoTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\" %s\\n\", todoTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Now you have %d task(s) in the list.\\n\", Storage.listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"freddychenyouren2":58}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Parser that parses user input for SeeWhyAre bot to perform corresponding actions.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" //60 underscores.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" private static final String HORIZONTAL_LINE \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" * Represents the supported command keywords in SeeWhyAre bot.","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" * They are stored as an enumeration.","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" public enum Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" BYE, LIST, MARK, UNMARK, DELETE, FIND, DEADLINE, TODO, EVENT, UNKNOWN","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a parser with the specified task list and user interface.","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" * @param taskList The task list to work with.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" public Parser(TaskList taskList, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" * Retrieves the command keyword from the user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" * The command keyword is the first word from the user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" * @param line The user input to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" * @return The command keyword extracted from the user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" private String getCommand(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" return line.trim().split(\"\\\\s+\")[0].toUpperCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" * Parses user input and performs the corresponding action.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" * Available commands:","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" * - bye: to end the programme.","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" * - list: to list down user\u0027s current task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" * - mark {number}: to mark the task with the specified task index as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" * - unmark {number}: to mark the task with the specified task index as not done yet.","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" * - delete {number}: to delete the task with the specified task index in the task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" * - find (keyword}: to find the list of tasks that contains the corresponding keyword.","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" * - deadline {taskname} /by {time}: to add a new task as a deadline task.","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" * - todo {taskname}: to add a new task as a to-do item. (No need to provide time).","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" * - event {taskname} /from {starttime} /to {endtime}: to add a new task as an event task (with given start time and end time).","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":" * Note that the commands are not case-sensitive. For instance: \"BYE\", \"ByE\", \"bYe\" will all be treated as the \"bye\" command.","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":" * @param userInput The user\u0027s input to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":" public String parseInput(String userInput) {","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"freddychenyouren2"},"content":" String firstWord \u003d getCommand(userInput);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"freddychenyouren2"},"content":" String[] words \u003d userInput.split(\"\\\\s+\"); // Split input by space, put into array","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"freddychenyouren2"},"content":" Command command;","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"freddychenyouren2"},"content":" command \u003d Command.valueOf(firstWord);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"freddychenyouren2"},"content":" command \u003d Command.UNKNOWN;","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"freddychenyouren2"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"freddychenyouren2"},"content":" case BYE:","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"freddychenyouren2"},"content":" Duke.setIsFinishedToTrue();","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"freddychenyouren2"},"content":" return ui.farewell();","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"freddychenyouren2"},"content":" case LIST:","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.listAllTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"freddychenyouren2"},"content":" case MARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"freddychenyouren2"},"content":" int taskIndex \u003d Integer.parseInt(words[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.markTask(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"freddychenyouren2"},"content":" case UNMARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"freddychenyouren2"},"content":" taskIndex \u003d Integer.parseInt(words[1]) - 1;","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.unmarkTask(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"freddychenyouren2"},"content":" case DELETE:","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.deleteTask(userInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"freddychenyouren2"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"freddychenyouren2"},"content":" String keyword \u003d userInput.trim().replaceFirst(\"find\", \"\").trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.findTask(keyword);","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"freddychenyouren2"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"freddychenyouren2"},"content":" return Deadline.handleDeadlineTask(userInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"freddychenyouren2"},"content":" case TODO:","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"freddychenyouren2"},"content":" return Todo.handleTodoTask(userInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"freddychenyouren2"},"content":" case EVENT:","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"freddychenyouren2"},"content":" return Event.handleEventTask(userInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"freddychenyouren2"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"freddychenyouren2"},"content":" throw new InvalidCommandException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"freddychenyouren2"},"content":" System.err.println(HORIZONTAL_LINE + \"\\n\" + e + HORIZONTAL_LINE);","lastModifiedDate":"2023-09-13"},{"lineNumber":113,"author":{"gitId":"freddychenyouren2"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"freddychenyouren2"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"freddychenyouren2"},"content":" return e.printExceptionMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"freddychenyouren2"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"freddychenyouren2"},"content":" return e.printExceptionMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"freddychenyouren2"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"freddychenyouren2"},"content":" return \"Please enter valid Integer index!\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"freddychenyouren2"},"content":" + String.format(\"You currently have %d task(s)\", taskList.listOfTasks.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"freddychenyouren2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"freddychenyouren2"},"content":" return \"Very Invalid command! Please enter valid commands\";","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":126}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.InputStreamReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.OutputStreamWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Storage to store the list of tasks of a user into a file in hard disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" public static ArrayList\u003cTask\u003e listOfTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" protected static String filePath;","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a storage with the specified file path.","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" * @param filePath The file path to create a file to store user data.","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" Storage.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" listOfTasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" * Saves a task into hard disk after it has been successfully inputted by user.","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" * @param task The task that is to be saved.","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" * @param isAppend A boolean to determine if we should add a new line in the saved text file.","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there are errors while saving the file.","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" public static void saveTask(Task task, boolean isAppend) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" FileOutputStream outputStream \u003d new FileOutputStream(filePath, isAppend);","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(new OutputStreamWriter(outputStream));","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" String[] saved \u003d new String[5]; // Cannot be more than 5 separate parts. 5th part is only for Event.","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" saved[0] \u003d \"D\";","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" saved[3] \u003d ((Deadline) task).getDueDate().toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" saved[0] \u003d \"E\";","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" saved[3] \u003d ((Event) task).getStartTime().toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" saved[4] \u003d ((Event) task).getEndTime().toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" // default: Todo task.","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" saved[0] \u003d \"T\";","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":" saved[1] \u003d task.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" saved[2] \u003d task.getDescription();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" if (isAppend) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"freddychenyouren2"},"content":" bufferedWriter.write(String.join(\" | \", saved));","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"freddychenyouren2"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"freddychenyouren2"},"content":" * Checks if the directory of storage data exists in the local computer running the programme.","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"freddychenyouren2"},"content":" * If there is no such directory, alert the user and create one for the user.","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"freddychenyouren2"},"content":" public void checkDirectory() {","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"freddychenyouren2"},"content":" Path directory \u003d Path.of(\"./data\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"freddychenyouren2"},"content":" if (!Files.exists(directory)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"System Message: Directory \u0027data\u0027 does not exist. Creating one...\"","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"freddychenyouren2"},"content":" + \"You can view it under root directory after exiting the program this time.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"freddychenyouren2"},"content":" Files.createDirectories(directory);","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"System Message: Directory \u0027data\u0027 exists!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Error while creating directory: %s\", e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"freddychenyouren2"},"content":" * Checks if the file of storage data exists in the local computer running the programme.","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"freddychenyouren2"},"content":" * If there is no such file, alert the user and create one for the user.","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"freddychenyouren2"},"content":" public void checkFile() {","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"freddychenyouren2"},"content":" Path file \u003d Path.of(\"./data/duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"freddychenyouren2"},"content":" if (!Files.exists(file)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"System Message: File \u0027duke.txt\u0027 does not exist. Creating one...\"","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"freddychenyouren2"},"content":" + \"You can view it under \u0027data\u0027 directory after exiting the program this time.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"freddychenyouren2"},"content":" Files.createFile(file);","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"System Message: File \u0027duke.txt\u0027 exists! Loading past data...\");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Error while creating directory: %s\", e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":116,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":117,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"freddychenyouren2"},"content":" * Loads tasks saved previously from hard disk.","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If the file is corrupted or invalid.","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"freddychenyouren2"},"content":" * @throws InvalidDateException If the date format or content in the file is corrupted or invalid.","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"freddychenyouren2"},"content":" public void loadTasks() throws IOException, InvalidDateException {","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"freddychenyouren2"},"content":" // Use FileInputStream and BufferedReader, opposite of saveTask().","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"freddychenyouren2"},"content":" // Use try-catch to check if file exists or if file is correct format.","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"freddychenyouren2"},"content":" checkDirectory();","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"freddychenyouren2"},"content":" checkFile();","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"freddychenyouren2"},"content":" FileInputStream inputStream \u003d new FileInputStream(filePath);","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"freddychenyouren2"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(new InputStreamReader((inputStream)));","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"freddychenyouren2"},"content":" String currentLine;","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"freddychenyouren2"},"content":" while ((currentLine \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"freddychenyouren2"},"content":" if (!TaskList.isValidTaskLine(currentLine)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Skipping corrupted line: %s\\n\", currentLine);","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"freddychenyouren2"},"content":" // Parse the line and create tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"freddychenyouren2"},"content":" String[] content \u003d currentLine.split(\" \\\\| \");","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"freddychenyouren2"},"content":" String taskDescription \u003d content[2];","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"freddychenyouren2"},"content":" Task taskFromHardDisk;","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"freddychenyouren2"},"content":" // Check which type of task it belongs to.","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"freddychenyouren2"},"content":" // Create the task and add task to list of tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"freddychenyouren2"},"content":" switch(content[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"freddychenyouren2"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"freddychenyouren2"},"content":" if (!TaskList.isValidDate(content[3]) || !TaskList.isValidDate(content[4])) {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Skipping line with invalid date: %s\\n\", currentLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"freddychenyouren2"},"content":" taskFromHardDisk \u003d new Event(taskDescription, LocalDate.parse(content[3]),","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(content[4]));","lastModifiedDate":"2023-09-07"},{"lineNumber":154,"author":{"gitId":"freddychenyouren2"},"content":" checkCompletionStatus(taskFromHardDisk, content[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"freddychenyouren2"},"content":" listOfTasks.add(taskFromHardDisk);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"freddychenyouren2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"freddychenyouren2"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"freddychenyouren2"},"content":" if (!TaskList.isValidDate(content[3])) {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Skipping line with invalid date: %s\\n\", currentLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"freddychenyouren2"},"content":" taskFromHardDisk \u003d new Deadline(taskDescription, LocalDate.parse(content[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"freddychenyouren2"},"content":" checkCompletionStatus(taskFromHardDisk, content[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"freddychenyouren2"},"content":" listOfTasks.add(taskFromHardDisk);","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"freddychenyouren2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"freddychenyouren2"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"freddychenyouren2"},"content":" taskFromHardDisk \u003d new Todo(taskDescription);","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"freddychenyouren2"},"content":" checkCompletionStatus(taskFromHardDisk, content[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"freddychenyouren2"},"content":" listOfTasks.add(taskFromHardDisk);","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"freddychenyouren2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Error while reading file: %s\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"freddychenyouren2"},"content":" bufferedReader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"freddychenyouren2"},"content":" * Checks whether a task has already been done.","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"freddychenyouren2"},"content":" * @param task The task whose completion status is to be checked.","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"freddychenyouren2"},"content":" * @param completionStatus The completion status read from memory. 0 means not done, 1 means done.","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"freddychenyouren2"},"content":" protected void checkCompletionStatus(Task task, String completionStatus) {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"freddychenyouren2"},"content":" if (completionStatus.equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"freddychenyouren2"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"freddychenyouren2"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"freddychenyouren2"},"content":" * Clears lines of task in hard disk.","lastModifiedDate":"2023-09-13"},{"lineNumber":196,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If file format is invalid or corrupted.","lastModifiedDate":"2023-09-13"},{"lineNumber":198,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"freddychenyouren2"},"content":" protected void clearAllData() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"freddychenyouren2"},"content":" FileOutputStream outputStream \u003d new FileOutputStream(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"freddychenyouren2"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(new OutputStreamWriter((outputStream)));","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"freddychenyouren2"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"freddychenyouren2"},"content":" * Updates all lines of task status in hard disk.","lastModifiedDate":"2023-09-13"},{"lineNumber":207,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If file format is invalid or corrupted.","lastModifiedDate":"2023-09-13"},{"lineNumber":209,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"freddychenyouren2"},"content":" protected void updateData() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"freddychenyouren2"},"content":" for (int i \u003d 0; i \u003c listOfTasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"freddychenyouren2"},"content":" saveTask(listOfTasks.get(i), i !\u003d 0);","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":215}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Task List which is just a list of Tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" //60 underscores.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" protected static String HORIZONTAL_LINE \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" protected Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" protected ArrayList\u003cTask\u003e listOfTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a TaskList with the given storage.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" * @param storage The storage from which the list of tasks is to be created.","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" this.listOfTasks \u003d storage.listOfTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" protected void printHorizontalLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" * Lists out all tasks available for the user.","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" protected String listAllTasks() {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" if (listOfTasks.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" No tasks for now!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" return \"No tasks for now!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"You have %d tasks now. Here is your task list:\\n\", listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" You have %d tasks now. Here is your task list:\\n\", listOfTasks.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" for (int i \u003d 0; i \u003c listOfTasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" %d.%s\\n\", i + 1, listOfTasks.get(i).toString());","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"\\t\").append(i + 1).append(\".\").append(listOfTasks.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" * Deletes a task when given valid task index.","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" public String deleteTask(String deleteInput)","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" throws EmptyDescriptionException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" String[] words \u003d deleteInput.split(\"\\\\s+\"); // Split input by space, put into array","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" //Check for valid length","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":" if (words.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" throw new EmptyDescriptionException(\"Please provide the ask index to be deleted.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":" //Try parsing into integer to get deleteIndex","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"freddychenyouren2"},"content":" int deleteIndex \u003d Integer.parseInt(words[1]) - 1;","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"freddychenyouren2"},"content":" if (deleteIndex \u003e\u003d 0 \u0026\u0026 deleteIndex \u003c listOfTasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"freddychenyouren2"},"content":" Task removedTask \u003d listOfTasks.remove(deleteIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"freddychenyouren2"},"content":" storage.clearAllData();","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"freddychenyouren2"},"content":" storage.updateData();","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"freddychenyouren2"},"content":" assert !listOfTasks.contains(removedTask) : \"Task should have been removed!\";","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":84,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"%s\\n\", removedTask.toString()));","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Now you have %d task(s) in the list.\\n\", listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" Noted. I\u0027ve removed this Task:\");","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" %s\\n\", removedTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" Now you have %d task(s) in the list.\\n\", listOfTasks.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"OOPS!!! The task index is invalid.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"You currently have %d task(s).\\n\", listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" You currently have %d task(s).\\n\", listOfTasks.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"freddychenyouren2"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"OOPS!!! Please enter the index after \u0027delete\u0027 command.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"For example: delete 5\");","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"This will remove Task 5 from your Task List, assuming you have at least 5 tasks.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"freddychenyouren2"},"content":" * Marks a given task as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"freddychenyouren2"},"content":" * Updates the list of tasks in the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"freddychenyouren2"},"content":" * Prints out an error message if index of the task given is out of range or invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"freddychenyouren2"},"content":" * @param taskIndex The index of the Task to be marked as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an issue with updating the data in the storage file.","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"freddychenyouren2"},"content":" protected String markTask(int taskIndex) throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"freddychenyouren2"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d listOfTasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Invalid Index of Task. You currently have %d Task(s)\\n\", listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"freddychenyouren2"},"content":" Task task \u003d listOfTasks.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"freddychenyouren2"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"freddychenyouren2"},"content":" assert listOfTasks.get(taskIndex).getStatus() : \"Task must be marked done.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"freddychenyouren2"},"content":" storage.clearAllData();","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"freddychenyouren2"},"content":" storage.updateData();","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Nice! I\u0027ve marked this Task as done:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"\\t[%s] %s\\n\", task.getStatusIcon(), task.getDescription()));","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" Nice! I\u0027ve marked this Task as done:\");","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" [%s] %s\\n\", task.getStatusIcon(), task.getDescription());","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"freddychenyouren2"},"content":" * Marks a given task as not done.","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"freddychenyouren2"},"content":" * Updates the list of tasks in the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"freddychenyouren2"},"content":" * Prints out an error message if index of the task given is out of range or invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"freddychenyouren2"},"content":" * @param taskIndex The index of the Task to be marked as not done yet.","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an issue with updating the data in the storage file.","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"freddychenyouren2"},"content":" protected String unmarkTask(int taskIndex) throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":143,"author":{"gitId":"freddychenyouren2"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d listOfTasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Invalid Index of Task. You currently have %d Task(s)\\n\", listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":145,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"freddychenyouren2"},"content":" Task task \u003d listOfTasks.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"freddychenyouren2"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"freddychenyouren2"},"content":" assert !listOfTasks.get(taskIndex).getStatus() : \"Task must be marked NOT done yet.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"freddychenyouren2"},"content":" storage.clearAllData();","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"freddychenyouren2"},"content":" storage.updateData();","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Ok. I\u0027ve marked this Task as NOT done yet:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":155,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"\\t[%s] %s\\n\", task.getStatusIcon(), task.getDescription()));","lastModifiedDate":"2023-09-06"},{"lineNumber":156,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" Nice! I\u0027ve marked this Task as done:\");","lastModifiedDate":"2023-09-07"},{"lineNumber":157,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" [%s] %s\\n\", task.getStatusIcon(), task.getDescription());","lastModifiedDate":"2023-09-07"},{"lineNumber":158,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":159,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":160,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"freddychenyouren2"},"content":" * Checks if the line representing task details saved in memory is valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"freddychenyouren2"},"content":" * This is used when we are loading the list of tasks from user\u0027s past data.","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"freddychenyouren2"},"content":" * @param line The string representing one task that we are checking.","lastModifiedDate":"2023-09-13"},{"lineNumber":167,"author":{"gitId":"freddychenyouren2"},"content":" * @return True if this line is a valid task, False otherwise.","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"freddychenyouren2"},"content":" protected static boolean isValidTaskLine(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"freddychenyouren2"},"content":" String[] tokens \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"freddychenyouren2"},"content":" if (tokens.length \u003e\u003d 3 \u0026\u0026 tokens.length \u003c\u003d 5) { // Valid number of segments: 3-5 (Todo-Event)","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"freddychenyouren2"},"content":" String taskType \u003d tokens[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"freddychenyouren2"},"content":" String completionStatus \u003d tokens[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"freddychenyouren2"},"content":" String description \u003d tokens[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"freddychenyouren2"},"content":" // Line matches expected format","lastModifiedDate":"2023-09-07"},{"lineNumber":178,"author":{"gitId":"freddychenyouren2"},"content":" return taskType.matches(\"[TDE]\") \u0026\u0026 completionStatus.matches(\"[01]\") \u0026\u0026 !description.isEmpty();","lastModifiedDate":"2023-09-07"},{"lineNumber":179,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"freddychenyouren2"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"freddychenyouren2"},"content":" * Checks if the date provided is a valid date and in the correct date format.","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"freddychenyouren2"},"content":" * This is used during task creation and task loading from storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"freddychenyouren2"},"content":" * @param testDate The date from a task that we are checking","lastModifiedDate":"2023-09-13"},{"lineNumber":189,"author":{"gitId":"freddychenyouren2"},"content":" * @return True if this date is a valid Date with the correct date Format \"yyyy-MM-dd\", False otherwise.","lastModifiedDate":"2023-09-13"},{"lineNumber":190,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"freddychenyouren2"},"content":" public static boolean isValidDate(String testDate) {","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"freddychenyouren2"},"content":" SimpleDateFormat simpleDate \u003d new SimpleDateFormat(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"freddychenyouren2"},"content":" simpleDate.setLenient(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"freddychenyouren2"},"content":" simpleDate.parse(testDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"freddychenyouren2"},"content":" } catch (ParseException pe) {","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"freddychenyouren2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"freddychenyouren2"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"freddychenyouren2"},"content":" * Finds all tasks that contain a given keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"freddychenyouren2"},"content":" * @param matchingKeyword The keyword given by the user to find all tasks containing it.","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"freddychenyouren2"},"content":" protected String findTask(String matchingKeyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":208,"author":{"gitId":"freddychenyouren2"},"content":" if (listOfTasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"\\t You currently have no tasks so I can\u0027t find any matching tasks :/.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"freddychenyouren2"},"content":" return \"\\t You currently have no tasks so I can\u0027t find any matching tasks :/.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":211,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"freddychenyouren2"},"content":" assert !listOfTasks.isEmpty() : \"There is no tasks to find.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":213,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"freddychenyouren2"},"content":" int taskCount \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder matchingTasks \u003d new StringBuilder(String.format(","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"freddychenyouren2"},"content":" \"\\t Here are your tasks that contains \u0027%s\u0027:\", matchingKeyword));","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"freddychenyouren2"},"content":" for (Task listOfTask : listOfTasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":218,"author":{"gitId":"freddychenyouren2"},"content":" if (listOfTask.getDescription().contains(matchingKeyword)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":219,"author":{"gitId":"freddychenyouren2"},"content":" matchingTasks.append(\"\\n\\t \").append(listOfTask);","lastModifiedDate":"2023-09-06"},{"lineNumber":220,"author":{"gitId":"freddychenyouren2"},"content":" taskCount++;","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"freddychenyouren2"},"content":" //Output matching tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"freddychenyouren2"},"content":" if (taskCount \u003e 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"freddychenyouren2"},"content":" return matchingTasks.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":227,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"freddychenyouren2"},"content":" assert (taskCount \u003d\u003d 0) : \"There should be 0 matching tasks\";","lastModifiedDate":"2023-09-13"},{"lineNumber":229,"author":{"gitId":"freddychenyouren2"},"content":" return String.format(\"\\t Hm there are no matching tasks with \u0027%s\u0027. \"","lastModifiedDate":"2023-09-07"},{"lineNumber":230,"author":{"gitId":"freddychenyouren2"},"content":" + \"Try with another keyword.\", matchingKeyword);","lastModifiedDate":"2023-09-07"},{"lineNumber":231,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":233}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a user interface for SeeWhyAre bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" //60 underscores.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" protected static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a new Ui instance and initializes the scanner for user input.","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" protected String printHorizontalLine() {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" return HORIZONTAL_LINE;","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" * Displays a greeting message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" public String greet() {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder(\"\\nStarting SeeWhyAre Bot...\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" message.append(printHorizontalLine()).append(\"\\nHello! I\u0027m SeeWhyAre Bot!\")","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" .append(\"\\nWhat can I do for you?\")","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" .append(printHorizontalLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"\\nStarting SeeWhyAre Bot...\");","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" Hello! I\u0027m SeeWhyAre Bot!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" * Retrieves user input from the console.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" * @return The user\u0027s input command.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" public String getUserInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"Enter your Command:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" * Displays a farewell message to the user and closes the scanner.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" protected String farewell() {","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder(printHorizontalLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"\\nYou are closing the SeeWhyAre chat bot.\")","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" .append(\"\\nBye bye. Please use me again soon!\\n\")","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" .append(printHorizontalLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" You are closing the SeeWhyAre chat bot.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" Bye bye. Please use me again soon!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":74}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" minHeight\u003d\"-Infinity\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"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-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"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":"freddychenyouren2"},"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":"freddychenyouren2"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":21}},{"path":"src/test/java/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"freddychenyouren2":2}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" void testGetDueDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" Deadline deadline \u003d new Deadline(\"test deadline getting date\", LocalDate.parse(\"2023-08-30\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(deadline.getDueDate(), LocalDate.parse(\"2023-08-30\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" Deadline deadline \u003d new Deadline(\"test deadline\", LocalDate.parse(\"2023-08-30\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(deadline.toString(), \"[D][ ] test deadline (by: Aug 30 2023)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":"// @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":"// void handleDeadlineTask_excessInputs_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":"//","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":"// }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":"// @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":"// void handleDeadlineTask_invalidDateInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":"//","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":"// }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"freddychenyouren2":31}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" void testGetStartTime() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" Event event \u003d new Event(\"test event getting start time\", LocalDate.parse(\"2023-08-30\"),","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(\"2023-08-31\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(event.getStartTime(), LocalDate.parse(\"2023-08-30\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" void testGetEndTime() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" Event event \u003d new Event(\"test event getting start time\", LocalDate.parse(\"2023-08-30\"),","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(\"2023-08-31\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(event.getEndTime(), LocalDate.parse(\"2023-08-31\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" Event event \u003d new Event(\"test event\", LocalDate.parse(\"2023-08-30\"),","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(\"2023-08-31\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(event.toString(), \"[E][ ] test event (from: Aug 30 2023 to: Aug 31 2023)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":"// @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":"// void handleEventTask_excessInputs_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":"//","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":"// }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":"// @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":"// void handleEventTask_invalidDateInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":"//","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":"// }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"freddychenyouren2":41}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" private Task testTask \u003d new Task(\"Task Description\");","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" void testGetDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(testTask.getDescription(), \"Task Description\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" Task task \u003d new Task(\"To test description\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(task.toString(), \"[ ] To test description\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" void testGetStatusIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(testTask.getStatusIcon(), \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" testTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(testTask.getStatusIcon(), \"X\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" testTask.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(testTask.getStatusIcon(), \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" void markAsDone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" Task task \u003d new Task(\"Second Task Description\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" assertFalse(task.isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" assertTrue(task.isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"freddychenyouren2":39}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" Todo todo \u003d new Todo(\"test todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(todo.getDescription(), \"test todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"freddychenyouren2":13}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"T | 1 | borrow book | null | null","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"T | 0 | finish CS2103T ip ASAP BRUH | null | null","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"E | 0 | ip discussion | 2023-09-05 | 2023-09-06","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"D | 0 | Deadline Task 2 | 2022-01-01 | null","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"deadline URGENT TASK wrong date format! /by Saturday","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"event NUSCO Welcome Tea /from 2022-08-31 /to 2022-08-31","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"unmark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"deadline erroneous deadline by now","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"event wrong event input from 6pm to 8pm","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"invalid input","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"todo finish CS2103T ip ASAP BRUH","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":"event ip discussion /from 2023-09-05 /to 2023-09-06","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"deadline Deadline Task 2 /by 2022-01-01","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"dElEte non-Number and case-insensitive","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"delete 1234.98765","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":"delete 2","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"find ip","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":"liST","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"bYE","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":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":"freddychenyouren2"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-09-05"},{"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":"freddychenyouren2"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-09-05"},{"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":"freddychenyouren2"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT, use -Dfile.encoding\u003dUTF-8 to account for the OOPS icon","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"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":{"-":17,"freddychenyouren2":4}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"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":{"-":22,"freddychenyouren2":2}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"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":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":43,"freddychenyouren2":20}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"D | 1 | test dates correct deadline | 2023-10-21 | null","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"E | 1 | correct event timings | 2222-11-11 | 2222-11-13","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"D | 1 | Dead Package bruh | 1111-11-11 | null","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"T | 0 | After Checkstyle | null | null","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"D | 0 | VIEWSCHEDULE BRO | 2023-09-14 | null","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"E | 0 | MUGGING SESSION | 2023-09-10 | 2023-09-30","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"D | 0 | CS2100 assignment debug | 2023-09-17 | null","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"freddychenyouren2":7}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"T | 1 | new new new todo | null | null","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"D | 0 | test dates correct deadline | 2023-10-21 | null","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"E | 0 | correct event timings | 2222-11-11 | 2222-11-13","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"T | 0 | yes todo | null | null","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"E | 1 | lalalalla | 2020-10-10 | 2019-02-01","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":5}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Dialog Box in the Graphic User Interface (GUI) Version of SeeWhyAre bot.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" // Need standardised photos to make better circle clips","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" // dialog.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" // Circle circleClip \u003d new Circle(30,60,50);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" // displayPicture.setClip(circleClip);","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" * Gets the dialog box for SeeWhyAre\u0027s response to user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" * @param text SeeWhyAre\u0027s response","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" * @param img SeeWhyAre\u0027s image","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" * @return SeeWhyAre\u0027s dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" public static DialogBox getSeeWhyAreDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":69}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * Represents the bot SeeWhyAre.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"public class Duke {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" private static boolean isFinished \u003d false;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" private static Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" private static TaskList listOfTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" * Constructs a new instance of the chat bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" listOfTasks \u003d new TaskList(storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" parser \u003d new Parser(listOfTasks, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" storage.loadTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" //start();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" System.err.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" } catch (InvalidDateException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" * Gets the response from SeeWhyAre bot after parsing the user input.","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" public static String getResponse(String userInput) {","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" return parser.parseInput(userInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" public static void setIsFinishedToTrue() {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" isFinished \u003d true;","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" * Driver method for CLI version of Duke.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" * @param args not used.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" ui.greet();","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" String userInput \u003d ui.getUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" while (!isFinished) {","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(getResponse(userInput));","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":1,"freddychenyouren2":71}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" stage.setTitle(\"SeeWhyAre Bot\");","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" private final Image userImage \u003d new Image(Objects.requireNonNull(","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" this.getClass().getResourceAsStream(\"/images/User.png\")));","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" private final Image dukeImage \u003d new Image(Objects.requireNonNull(","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" this.getClass().getResourceAsStream(\"/images/Duke.png\")));","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" DialogBox.getSeeWhyAreDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":56}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":" * Represents an Empty Description Exception","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * Prints the exception message, giving us the reason for the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" public String printExceptionMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" return \"OOPS!!! \" + this.getMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"freddychenyouren2":24}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * Represents an Invalid Command Exception","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" * Prints the exception message, giving us the reason for the error.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" * Includes the list of commands that the current version of SeeWhyAre bot supports.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" public String printExceptionMessage() {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder(String.format(\"OOPS!!! %s\\n\", this.getMessage()));","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Please input valid commands. Currently SeeWhyAre bot supports:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" for (Parser.Command c : Parser.Command.values()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" message.append(c + \"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":32}},{"path":"src/main/java/duke/exception/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.exception;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":" * Represents an Invalid Date Exception","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"public class InvalidDateException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * Overrides the exception object\u0027s toString method and contains an error message.","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * @return The error message String with a correction of date input format.","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" return \"Yoho! The date provided is invalid. \"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" + \"Ensure all dates are of the format YYYY-MM-DD. Thanks!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":23}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a deadline task with the given description and deadline date.","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" * @param by The deadline date.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" private LocalDate getDeadlineDate() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" return this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" getDeadlineDate().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" public LocalDate getDueDate() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" return this.by;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" * Handles the creation of a Deadline task based on user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" * @param userInput A valid user input for a Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an error with the storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" public static String handleDeadlineTask(String userInput) throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" String[] details \u003d userInput.split(\"/by\");","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" // details[0] contains \"deadline\" and task description, need to erase \"deadline\".","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" // details[1] contains deadline timing","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" if (details.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" String taskDescription \u003d details[0].trim().replaceFirst(\"deadline\", \"\").trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" String deadline \u003d details[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" // Check if input date is valid.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" if (TaskList.isValidDate(deadline)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" Deadline deadlineTask \u003d new Deadline(taskDescription, LocalDate.parse(deadline));","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" Storage.saveTask(deadlineTask, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" Storage.listOfTasks.add(deadlineTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Got it, I\u0027ve added this Task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\" %s\\n\", deadlineTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Now you have %d task(s) in the list.\\n\", Storage.listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"freddychenyouren2"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"freddychenyouren2"},"content":" } catch (InvalidDateException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"freddychenyouren2"},"content":" message.append(e);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":83,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Invalid Deadline Task input.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"freddychenyouren2"},"content":" + \"Please input in the following format:\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"freddychenyouren2"},"content":" + \"deadline \u003cTask Description\u003e /by \u003cdeadline timing\u003e\");","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":87,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"freddychenyouren2":89}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * Represents an Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" //60 underscores.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" protected static final String HORIZONTAL_LINE \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" protected LocalDate startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" protected LocalDate endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates an event task with the given description, start date and end date.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" * @param description The description of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" * @param startTime The starting date of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" * @param endTime The end date of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" public Event(String description, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" protected static void printHorizontalLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" getStartTime().format(DateTimeFormatter.ofPattern(\"MMM d yyy\")),","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" getEndTime().format(DateTimeFormatter.ofPattern(\"MMM d yyy\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" public LocalDate getStartTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" return this.startTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" public LocalDate getEndTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" return this.endTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" * Handles the creation of an event task based on user input.","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" * @param userInput A valid user input for an event task.","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an error with the storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" public static String handleEventTask(String userInput) throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" String[] details \u003d userInput.split(\"/from | /to\");","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" // details[0] contains \"event\" and task description, need to erase \"event\".","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" // details[1] contains String event timing","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" if (details.length \u003d\u003d 3) {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":" String taskDescription \u003d details[0].trim().replaceFirst(\"event\", \"\").trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" String startTime \u003d details[1].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":" String endTime \u003d details[2].trim();","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"freddychenyouren2"},"content":" //Check if input date is valid.","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"freddychenyouren2"},"content":" if (TaskList.isValidDate(startTime)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"freddychenyouren2"},"content":" Event eventTask \u003d new Event(taskDescription,","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(startTime),","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(endTime));","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"freddychenyouren2"},"content":" Storage.saveTask(eventTask, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"freddychenyouren2"},"content":" Storage.listOfTasks.add(eventTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Got it, I\u0027ve added this Task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\" %s\\n\", eventTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Now you have %d task(s) in the list.\\n\", Storage.listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"freddychenyouren2"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"freddychenyouren2"},"content":" } catch (InvalidDateException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"freddychenyouren2"},"content":" message.append(e);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Invalid Event Task input.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"freddychenyouren2"},"content":" + \"Please input in the following format:\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"freddychenyouren2"},"content":" + \"event \u003cTask Description\u003e /from \u003cstart time\u003e /to \u003cend time\u003e\");","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":105,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"freddychenyouren2":105}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Task in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" public boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" protected String description;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a task with the given description.","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" return this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" * Gets the status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" * @return True if the task is done, false otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" public boolean getStatus() {","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" return this.isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" * @return A string with the status icon and description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.getDescription());","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" * Gets the status icon of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" * @return The status icon as a String (\"X\" if done, \" \" if not done).","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"freddychenyouren2":66}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a todo task with the given description.","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" * Handles the creation of a todo task based on user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" * @param userInput A valid user input for a todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" * @throws EmptyDescriptionException If the description of the todo task is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an issue with saving the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" public static String handleTodoTask(String userInput) throws EmptyDescriptionException, IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" String taskDescription \u003d userInput.trim().replaceFirst(\"todo\", \"\").trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" throw new EmptyDescriptionException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" Todo todoTask \u003d new Todo(taskDescription);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" Storage.saveTask(todoTask, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" Storage.listOfTasks.add(todoTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\" %s\\n\", todoTask));","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Now you have %d task(s) in the list.\\n\", Storage.listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"freddychenyouren2":58}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Parser that parses user input for SeeWhyAre bot to perform corresponding actions.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" //60 underscores.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" private static final String HORIZONTAL_LINE \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" * Represents the supported command keywords in SeeWhyAre bot.","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" * They are stored as an enumeration.","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" public enum Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" BYE, LIST, MARK, UNMARK, DELETE, FIND, DEADLINE, TODO, EVENT, VIEW, UNKNOWN","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a parser with the specified task list and user interface.","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" * @param taskList The task list to work with.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" public Parser(TaskList taskList, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" * Retrieves the command keyword from the user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" * The command keyword is the first word from the user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" * @param line The user input to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" * @return The command keyword extracted from the user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" private String getCommand(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" return line.trim().split(\"\\\\s+\")[0].toUpperCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" * Parses user input and performs the corresponding action.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" * Available commands:","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" * - bye: to end the programme.","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" * - list: to list down user\u0027s current task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" * - mark {number}: to mark the task with the specified task index as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" * - unmark {number}: to mark the task with the specified task index as not done yet.","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" * - delete {number}: to delete the task with the specified task index in the task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" * - find (keyword}: to find the list of tasks that contains the corresponding keyword.","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" * - deadline {taskname} /by {time}: to add a new task as a deadline task.","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":" * - todo {taskname}: to add a new task as a to-do item. (No need to provide time).","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" * - event {taskname} /from {starttime} /to {endtime}: to add a new task as an event task (with given start time and end time).","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":" * - view {date}: list down the tasks that are to be done on that day.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" * Note that the commands are not case-sensitive. For instance: \"BYE\", \"ByE\", \"bYe\" will all be treated as the \"bye\" command.","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"freddychenyouren2"},"content":" * @param userInput The user\u0027s input to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"freddychenyouren2"},"content":" public String parseInput(String userInput) {","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"freddychenyouren2"},"content":" String firstWord \u003d getCommand(userInput);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"freddychenyouren2"},"content":" String[] words \u003d userInput.split(\"\\\\s+\"); // Split input by space, put into array","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"freddychenyouren2"},"content":" Command command;","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"freddychenyouren2"},"content":" command \u003d Command.valueOf(firstWord);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"freddychenyouren2"},"content":" command \u003d Command.UNKNOWN;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"freddychenyouren2"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"freddychenyouren2"},"content":" case BYE:","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"freddychenyouren2"},"content":" Duke.setIsFinishedToTrue();","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"freddychenyouren2"},"content":" return ui.farewell();","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"freddychenyouren2"},"content":" case LIST:","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.listAllTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"freddychenyouren2"},"content":" case MARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"freddychenyouren2"},"content":" int taskIndex \u003d Integer.parseInt(words[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.markTask(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"freddychenyouren2"},"content":" case UNMARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"freddychenyouren2"},"content":" taskIndex \u003d Integer.parseInt(words[1]) - 1;","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.unmarkTask(taskIndex);","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"freddychenyouren2"},"content":" case DELETE:","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.deleteTask(userInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"freddychenyouren2"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"freddychenyouren2"},"content":" String keyword \u003d userInput.trim().replaceFirst(\"find\", \"\").trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.findTask(keyword);","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"freddychenyouren2"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"freddychenyouren2"},"content":" return Deadline.handleDeadlineTask(userInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"freddychenyouren2"},"content":" case TODO:","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"freddychenyouren2"},"content":" return Todo.handleTodoTask(userInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"freddychenyouren2"},"content":" case EVENT:","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"freddychenyouren2"},"content":" return Event.handleEventTask(userInput);","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"freddychenyouren2"},"content":" case VIEW:","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"freddychenyouren2"},"content":" return taskList.viewSchedule(userInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"freddychenyouren2"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"freddychenyouren2"},"content":" throw new InvalidCommandException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"freddychenyouren2"},"content":" System.err.println(HORIZONTAL_LINE + \"\\n\" + e + HORIZONTAL_LINE);","lastModifiedDate":"2023-09-13"},{"lineNumber":118,"author":{"gitId":"freddychenyouren2"},"content":" return e.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"freddychenyouren2"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"freddychenyouren2"},"content":" return e.printExceptionMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"freddychenyouren2"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"freddychenyouren2"},"content":" return e.printExceptionMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"freddychenyouren2"},"content":" } catch (InvalidDateException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"freddychenyouren2"},"content":" return e.toString();","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"freddychenyouren2"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"freddychenyouren2"},"content":" return \"Please enter valid Integer index!\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"freddychenyouren2"},"content":" + String.format(\"You currently have %d task(s)\", taskList.listOfTasks.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"freddychenyouren2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"freddychenyouren2"},"content":" return \"Very Invalid command! Please enter valid commands\";","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":133}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.InputStreamReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.OutputStreamWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Storage to store the list of tasks of a user into a file in hard disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" public static ArrayList\u003cTask\u003e listOfTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" protected static String filePath;","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a storage with the specified file path.","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" * @param filePath The file path to create a file to store user data.","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" Storage.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" listOfTasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" * Saves a task into hard disk after it has been successfully inputted by user.","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" * @param task The task that is to be saved.","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" * @param isAppend A boolean to determine if we should add a new line in the saved text file.","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there are errors while saving the file.","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" public static void saveTask(Task task, boolean isAppend) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" FileOutputStream outputStream \u003d new FileOutputStream(filePath, isAppend);","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(new OutputStreamWriter(outputStream));","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" String[] saved \u003d new String[5]; // Cannot be more than 5 separate parts. 5th part is only for Event.","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" saved[0] \u003d \"D\";","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" saved[3] \u003d ((Deadline) task).getDueDate().toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" saved[0] \u003d \"E\";","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" saved[3] \u003d ((Event) task).getStartTime().toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" saved[4] \u003d ((Event) task).getEndTime().toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" // default: Todo task.","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" saved[0] \u003d \"T\";","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":" saved[1] \u003d task.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" saved[2] \u003d task.getDescription();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" if (isAppend) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"freddychenyouren2"},"content":" bufferedWriter.write(String.join(\" | \", saved));","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"freddychenyouren2"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"freddychenyouren2"},"content":" * Checks if the directory of storage data exists in the local computer running the programme.","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"freddychenyouren2"},"content":" * If there is no such directory, alert the user and create one for the user.","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"freddychenyouren2"},"content":" public void checkDirectory() {","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"freddychenyouren2"},"content":" Path directory \u003d Path.of(\"./data\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"freddychenyouren2"},"content":" if (!Files.exists(directory)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"System Message: Directory \u0027data\u0027 does not exist. Creating one...\"","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"freddychenyouren2"},"content":" + \"You can view it under root directory after exiting the program this time.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"freddychenyouren2"},"content":" Files.createDirectories(directory);","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"System Message: Directory \u0027data\u0027 exists!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Error while creating directory: %s\", e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"freddychenyouren2"},"content":" * Checks if the file of storage data exists in the local computer running the programme.","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"freddychenyouren2"},"content":" * If there is no such file, alert the user and create one for the user.","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"freddychenyouren2"},"content":" public void checkFile() {","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"freddychenyouren2"},"content":" Path file \u003d Path.of(\"./data/duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"freddychenyouren2"},"content":" if (!Files.exists(file)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"System Message: File \u0027duke.txt\u0027 does not exist. Creating one...\"","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"freddychenyouren2"},"content":" + \"You can view it under \u0027data\u0027 directory after exiting the program this time.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"freddychenyouren2"},"content":" Files.createFile(file);","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"System Message: File \u0027duke.txt\u0027 exists! Loading past data...\");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Error while creating directory: %s\", e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":116,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":117,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"freddychenyouren2"},"content":" * Loads tasks saved previously from hard disk.","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If the file is corrupted or invalid.","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"freddychenyouren2"},"content":" * @throws InvalidDateException If the date format or content in the file is corrupted or invalid.","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"freddychenyouren2"},"content":" public void loadTasks() throws IOException, InvalidDateException {","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"freddychenyouren2"},"content":" // Use FileInputStream and BufferedReader, opposite of saveTask().","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"freddychenyouren2"},"content":" // Use try-catch to check if file exists or if file is correct format.","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"freddychenyouren2"},"content":" checkDirectory();","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"freddychenyouren2"},"content":" checkFile();","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"freddychenyouren2"},"content":" FileInputStream inputStream \u003d new FileInputStream(filePath);","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"freddychenyouren2"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(new InputStreamReader((inputStream)));","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"freddychenyouren2"},"content":" String currentLine;","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"freddychenyouren2"},"content":" while ((currentLine \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"freddychenyouren2"},"content":" if (!TaskList.isValidTaskLine(currentLine)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Skipping corrupted line: %s\\n\", currentLine);","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"freddychenyouren2"},"content":" // Parse the line and create tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"freddychenyouren2"},"content":" String[] content \u003d currentLine.split(\" \\\\| \");","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"freddychenyouren2"},"content":" String taskDescription \u003d content[2];","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"freddychenyouren2"},"content":" Task taskFromHardDisk;","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"freddychenyouren2"},"content":" // Check which type of task it belongs to.","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"freddychenyouren2"},"content":" // Create the task and add task to list of tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"freddychenyouren2"},"content":" switch(content[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"freddychenyouren2"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"freddychenyouren2"},"content":" if (!TaskList.isValidDate(content[3]) || !TaskList.isValidDate(content[4])) {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Skipping line with invalid date: %s\\n\", currentLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"freddychenyouren2"},"content":" taskFromHardDisk \u003d new Event(taskDescription, LocalDate.parse(content[3]),","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(content[4]));","lastModifiedDate":"2023-09-07"},{"lineNumber":154,"author":{"gitId":"freddychenyouren2"},"content":" checkCompletionStatus(taskFromHardDisk, content[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"freddychenyouren2"},"content":" listOfTasks.add(taskFromHardDisk);","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"freddychenyouren2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"freddychenyouren2"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"freddychenyouren2"},"content":" if (!TaskList.isValidDate(content[3])) {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Skipping line with invalid date: %s\\n\", currentLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"freddychenyouren2"},"content":" taskFromHardDisk \u003d new Deadline(taskDescription, LocalDate.parse(content[3]));","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"freddychenyouren2"},"content":" checkCompletionStatus(taskFromHardDisk, content[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"freddychenyouren2"},"content":" listOfTasks.add(taskFromHardDisk);","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"freddychenyouren2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"freddychenyouren2"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"freddychenyouren2"},"content":" taskFromHardDisk \u003d new Todo(taskDescription);","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"freddychenyouren2"},"content":" checkCompletionStatus(taskFromHardDisk, content[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"freddychenyouren2"},"content":" listOfTasks.add(taskFromHardDisk);","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"freddychenyouren2"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"freddychenyouren2"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\"Error while reading file: %s\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"freddychenyouren2"},"content":" bufferedReader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"freddychenyouren2"},"content":" * Checks whether a task has already been done.","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"freddychenyouren2"},"content":" * @param task The task whose completion status is to be checked.","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"freddychenyouren2"},"content":" * @param completionStatus The completion status read from memory. 0 means not done, 1 means done.","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"freddychenyouren2"},"content":" protected void checkCompletionStatus(Task task, String completionStatus) {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"freddychenyouren2"},"content":" if (completionStatus.equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"freddychenyouren2"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"freddychenyouren2"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"freddychenyouren2"},"content":" * Clears lines of task in hard disk.","lastModifiedDate":"2023-09-13"},{"lineNumber":196,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If file format is invalid or corrupted.","lastModifiedDate":"2023-09-13"},{"lineNumber":198,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"freddychenyouren2"},"content":" protected void clearAllData() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"freddychenyouren2"},"content":" FileOutputStream outputStream \u003d new FileOutputStream(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"freddychenyouren2"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(new OutputStreamWriter((outputStream)));","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"freddychenyouren2"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"freddychenyouren2"},"content":" * Updates all lines of task status in hard disk.","lastModifiedDate":"2023-09-13"},{"lineNumber":207,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If file format is invalid or corrupted.","lastModifiedDate":"2023-09-13"},{"lineNumber":209,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"freddychenyouren2"},"content":" protected void updateData() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"freddychenyouren2"},"content":" for (int i \u003d 0; i \u003c listOfTasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"freddychenyouren2"},"content":" saveTask(listOfTasks.get(i), i !\u003d 0);","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":215}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a Task List which is just a list of Tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" //60 underscores.","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" protected static String HORIZONTAL_LINE \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" protected Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" protected ArrayList\u003cTask\u003e listOfTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a TaskList with the given storage.","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" * @param storage The storage from which the list of tasks is to be created.","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" this.listOfTasks \u003d storage.listOfTasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" protected void printHorizontalLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":" * Lists out all tasks available for the user.","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" * @return The string representation of the list of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" protected String listAllTasks() {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" if (listOfTasks.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" No tasks for now!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" return \"No tasks for now!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"You have %d tasks now. Here is your task list:\\n\", listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" You have %d tasks now. Here is your task list:\\n\", listOfTasks.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" for (int i \u003d 0; i \u003c listOfTasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" %d.%s\\n\", i + 1, listOfTasks.get(i).toString());","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"\\t\").append(i + 1).append(\".\").append(listOfTasks.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" * Deletes a task when given valid task index.","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" * @param deleteInput The input representing the delete command.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":" * It should contain task index to be deleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" * @throws EmptyDescriptionException If there is no task index provided.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an error updating the data file.","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"freddychenyouren2"},"content":" * @return The message to indicate which task has been deleted after successful deletion.","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"freddychenyouren2"},"content":" public String deleteTask(String deleteInput)","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"freddychenyouren2"},"content":" throws EmptyDescriptionException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"freddychenyouren2"},"content":" String[] words \u003d deleteInput.split(\"\\\\s+\"); // Split input by space, put into array","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"freddychenyouren2"},"content":" //Check for valid length","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"freddychenyouren2"},"content":" if (words.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"freddychenyouren2"},"content":" throw new EmptyDescriptionException(\"Please provide the task index to be deleted.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"freddychenyouren2"},"content":" //Try parsing into integer to get deleteIndex","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"freddychenyouren2"},"content":" int deleteIndex \u003d Integer.parseInt(words[1]) - 1;","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"freddychenyouren2"},"content":" if (deleteIndex \u003e\u003d 0 \u0026\u0026 deleteIndex \u003c listOfTasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"freddychenyouren2"},"content":" Task removedTask \u003d listOfTasks.remove(deleteIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"freddychenyouren2"},"content":" storage.clearAllData();","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"freddychenyouren2"},"content":" storage.updateData();","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"freddychenyouren2"},"content":" assert !listOfTasks.contains(removedTask) : \"Task should have been removed!\";","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"%s\\n\", removedTask.toString()));","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Now you have %d task(s) in the list.\\n\", listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" Noted. I\u0027ve removed this Task:\");","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" %s\\n\", removedTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" Now you have %d task(s) in the list.\\n\", listOfTasks.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"OOPS!!! The task index is invalid.\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"You currently have %d task(s).\\n\", listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" You currently have %d task(s).\\n\", listOfTasks.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"freddychenyouren2"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"OOPS!!! Please enter the index after \u0027delete\u0027 command.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"For example: delete 5\");","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"This will remove Task 5 from your Task List, assuming you have at least 5 tasks.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"freddychenyouren2"},"content":" * Marks a given task as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"freddychenyouren2"},"content":" * Updates the list of tasks in the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"freddychenyouren2"},"content":" * Prints out an error message if index of the task given is out of range or invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"freddychenyouren2"},"content":" * @param taskIndex The index of the Task to be marked as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an issue with updating the data in the storage file.","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"freddychenyouren2"},"content":" * @return The message to indicate that the task is marked as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"freddychenyouren2"},"content":" protected String markTask(int taskIndex) throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"freddychenyouren2"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d listOfTasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Invalid Index of Task. You currently have %d Task(s)\\n\", listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"freddychenyouren2"},"content":" Task task \u003d listOfTasks.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"freddychenyouren2"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"freddychenyouren2"},"content":" assert listOfTasks.get(taskIndex).getStatus() : \"Task must be marked done.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"freddychenyouren2"},"content":" storage.clearAllData();","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"freddychenyouren2"},"content":" storage.updateData();","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Nice! I\u0027ve marked this Task as done:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"\\t[%s] %s\\n\", task.getStatusIcon(), task.getDescription()));","lastModifiedDate":"2023-09-06"},{"lineNumber":141,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" Nice! I\u0027ve marked this Task as done:\");","lastModifiedDate":"2023-09-07"},{"lineNumber":142,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" [%s] %s\\n\", task.getStatusIcon(), task.getDescription());","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":144,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":145,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"freddychenyouren2"},"content":" * Marks a given task as not done.","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"freddychenyouren2"},"content":" * Updates the list of tasks in the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"freddychenyouren2"},"content":" * Prints out an error message if index of the task given is out of range or invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"freddychenyouren2"},"content":" * @param taskIndex The index of the Task to be marked as not done yet.","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"freddychenyouren2"},"content":" * @throws IOException If there is an issue with updating the data in the storage file.","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"freddychenyouren2"},"content":" * @return The message to indicate that the task is marked as not done yet.","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"freddychenyouren2"},"content":" protected String unmarkTask(int taskIndex) throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":157,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-06"},{"lineNumber":158,"author":{"gitId":"freddychenyouren2"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d listOfTasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"Invalid Index of Task. You currently have %d Task(s)\\n\", listOfTasks.size()));","lastModifiedDate":"2023-09-06"},{"lineNumber":160,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"freddychenyouren2"},"content":" Task task \u003d listOfTasks.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"freddychenyouren2"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"freddychenyouren2"},"content":" assert !listOfTasks.get(taskIndex).getStatus() : \"Task must be marked NOT done yet.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-13"},{"lineNumber":166,"author":{"gitId":"freddychenyouren2"},"content":" storage.clearAllData();","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"freddychenyouren2"},"content":" storage.updateData();","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"Ok. I\u0027ve marked this Task as NOT done yet:\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":170,"author":{"gitId":"freddychenyouren2"},"content":" message.append(String.format(\"\\t[%s] %s\\n\", task.getStatusIcon(), task.getDescription()));","lastModifiedDate":"2023-09-06"},{"lineNumber":171,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" Nice! I\u0027ve marked this Task as done:\");","lastModifiedDate":"2023-09-07"},{"lineNumber":172,"author":{"gitId":"freddychenyouren2"},"content":" System.out.printf(\" [%s] %s\\n\", task.getStatusIcon(), task.getDescription());","lastModifiedDate":"2023-09-07"},{"lineNumber":173,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":174,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":175,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"freddychenyouren2"},"content":" * Checks if the line representing task details saved in memory is valid.","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"freddychenyouren2"},"content":" * This is used when we are loading the list of tasks from user\u0027s past data.","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"freddychenyouren2"},"content":" * @param line The string representing one task that we are checking.","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"freddychenyouren2"},"content":" * @return True if this line is a valid task, False otherwise.","lastModifiedDate":"2023-09-13"},{"lineNumber":183,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"freddychenyouren2"},"content":" protected static boolean isValidTaskLine(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"freddychenyouren2"},"content":" String[] tokens \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"freddychenyouren2"},"content":" if (tokens.length \u003e\u003d 3 \u0026\u0026 tokens.length \u003c\u003d 5) { // Valid number of segments: 3-5 (Todo-Event)","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"freddychenyouren2"},"content":" String taskType \u003d tokens[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"freddychenyouren2"},"content":" String completionStatus \u003d tokens[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"freddychenyouren2"},"content":" String description \u003d tokens[2].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"freddychenyouren2"},"content":" // Line matches expected format","lastModifiedDate":"2023-09-07"},{"lineNumber":193,"author":{"gitId":"freddychenyouren2"},"content":" return taskType.matches(\"[TDE]\") \u0026\u0026 completionStatus.matches(\"[01]\") \u0026\u0026 !description.isEmpty();","lastModifiedDate":"2023-09-07"},{"lineNumber":194,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"freddychenyouren2"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":197,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"freddychenyouren2"},"content":" * Checks if the date provided is a valid date and in the correct date format.","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"freddychenyouren2"},"content":" * This is used during task creation and task loading from storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"freddychenyouren2"},"content":" * @param testDate The date from a task that we are checking","lastModifiedDate":"2023-09-13"},{"lineNumber":204,"author":{"gitId":"freddychenyouren2"},"content":" * @return True if this date is a valid Date with the correct date Format \"yyyy-MM-dd\", False otherwise.","lastModifiedDate":"2023-09-13"},{"lineNumber":205,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"freddychenyouren2"},"content":" public static boolean isValidDate(String testDate) {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"freddychenyouren2"},"content":" SimpleDateFormat simpleDate \u003d new SimpleDateFormat(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"freddychenyouren2"},"content":" simpleDate.setLenient(false);","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"freddychenyouren2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"freddychenyouren2"},"content":" simpleDate.parse(testDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"freddychenyouren2"},"content":" } catch (ParseException pe) {","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"freddychenyouren2"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"freddychenyouren2"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"freddychenyouren2"},"content":" * Finds all tasks that contain a given keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"freddychenyouren2"},"content":" * The keyword provided is case-sensitive.","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"freddychenyouren2"},"content":" * @param matchingKeyword The keyword given by the user to find all tasks containing it.","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"freddychenyouren2"},"content":" * @return The message representing the tasks found using the keyword provided.","lastModifiedDate":"2023-09-16"},{"lineNumber":223,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"freddychenyouren2"},"content":" protected String findTask(String matchingKeyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":225,"author":{"gitId":"freddychenyouren2"},"content":" if (listOfTasks.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"\\t You currently have no tasks so I can\u0027t find any matching tasks :/.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"freddychenyouren2"},"content":" return \"\\t You currently have no tasks so I can\u0027t find any matching tasks :/.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":228,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"freddychenyouren2"},"content":" assert !listOfTasks.isEmpty() : \"There is no tasks to find.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":230,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"freddychenyouren2"},"content":" int taskCount \u003d 0;","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder matchingTasks \u003d new StringBuilder(String.format(","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"freddychenyouren2"},"content":" \"\\t Here are your tasks that contains \u0027%s\u0027:\", matchingKeyword));","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"freddychenyouren2"},"content":" for (Task task : listOfTasks) {","lastModifiedDate":"2023-09-16"},{"lineNumber":235,"author":{"gitId":"freddychenyouren2"},"content":" if (task.getDescription().contains(matchingKeyword)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":236,"author":{"gitId":"freddychenyouren2"},"content":" matchingTasks.append(\"\\n\\t \").append(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":237,"author":{"gitId":"freddychenyouren2"},"content":" taskCount++;","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"freddychenyouren2"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"freddychenyouren2"},"content":" //Output matching tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"freddychenyouren2"},"content":" if (taskCount \u003e 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"freddychenyouren2"},"content":" return matchingTasks.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":244,"author":{"gitId":"freddychenyouren2"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"freddychenyouren2"},"content":" assert (taskCount \u003d\u003d 0) : \"There should be 0 matching tasks\";","lastModifiedDate":"2023-09-13"},{"lineNumber":246,"author":{"gitId":"freddychenyouren2"},"content":" return String.format(\"\\t Hm there are no matching tasks with \u0027%s\u0027. \"","lastModifiedDate":"2023-09-07"},{"lineNumber":247,"author":{"gitId":"freddychenyouren2"},"content":" + \"Try with another keyword.\", matchingKeyword);","lastModifiedDate":"2023-09-07"},{"lineNumber":248,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":251,"author":{"gitId":"freddychenyouren2"},"content":" protected String viewSchedule(String userInput) throws InvalidDateException {","lastModifiedDate":"2023-09-16"},{"lineNumber":252,"author":{"gitId":"freddychenyouren2"},"content":" String[] details \u003d userInput.split(\"\\\\s+\"); // Split by space","lastModifiedDate":"2023-09-16"},{"lineNumber":253,"author":{"gitId":"freddychenyouren2"},"content":" String requestedDate \u003d details[1].trim(); // Get requested date","lastModifiedDate":"2023-09-16"},{"lineNumber":254,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":255,"author":{"gitId":"freddychenyouren2"},"content":" if (!isValidDate(requestedDate)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":256,"author":{"gitId":"freddychenyouren2"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-09-16"},{"lineNumber":257,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":258,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":259,"author":{"gitId":"freddychenyouren2"},"content":" String requestedDateString \u003d LocalDate.parse(requestedDate).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":260,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":261,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder(","lastModifiedDate":"2023-09-16"},{"lineNumber":262,"author":{"gitId":"freddychenyouren2"},"content":" String.format(\"Here are your scheduled tasks happening on %s :\", requestedDateString));","lastModifiedDate":"2023-09-16"},{"lineNumber":263,"author":{"gitId":"freddychenyouren2"},"content":" ArrayList\u003cTask\u003e scheduledTasks \u003d printSchedule(LocalDate.parse(requestedDate));","lastModifiedDate":"2023-09-16"},{"lineNumber":264,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":265,"author":{"gitId":"freddychenyouren2"},"content":" for (Task task : scheduledTasks) {","lastModifiedDate":"2023-09-16"},{"lineNumber":266,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"\\n\\t \").append(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":267,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":268,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-16"},{"lineNumber":269,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":270,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":271,"author":{"gitId":"freddychenyouren2"},"content":" protected ArrayList\u003cTask\u003e printSchedule(LocalDate requestedDate) {","lastModifiedDate":"2023-09-16"},{"lineNumber":272,"author":{"gitId":"freddychenyouren2"},"content":" ArrayList\u003cTask\u003e scheduledTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-16"},{"lineNumber":273,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":274,"author":{"gitId":"freddychenyouren2"},"content":" for (Task task : listOfTasks) {","lastModifiedDate":"2023-09-16"},{"lineNumber":275,"author":{"gitId":"freddychenyouren2"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-09-16"},{"lineNumber":276,"author":{"gitId":"freddychenyouren2"},"content":" Deadline deadlineTask \u003d (Deadline) task;","lastModifiedDate":"2023-09-16"},{"lineNumber":277,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate dueDate \u003d deadlineTask.getDueDate();","lastModifiedDate":"2023-09-16"},{"lineNumber":278,"author":{"gitId":"freddychenyouren2"},"content":" if (requestedDate.equals(dueDate)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":279,"author":{"gitId":"freddychenyouren2"},"content":" scheduledTasks.add(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":280,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":281,"author":{"gitId":"freddychenyouren2"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-16"},{"lineNumber":282,"author":{"gitId":"freddychenyouren2"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2023-09-16"},{"lineNumber":283,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate startDate \u003d eventTask.getStartTime();","lastModifiedDate":"2023-09-16"},{"lineNumber":284,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate endDate \u003d eventTask.getEndTime();","lastModifiedDate":"2023-09-16"},{"lineNumber":285,"author":{"gitId":"freddychenyouren2"},"content":" if (!requestedDate.isBefore(startDate) \u0026\u0026 !requestedDate.isAfter(endDate)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":286,"author":{"gitId":"freddychenyouren2"},"content":" scheduledTasks.add(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":287,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":288,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":289,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":290,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":291,"author":{"gitId":"freddychenyouren2"},"content":" return scheduledTasks;","lastModifiedDate":"2023-09-16"},{"lineNumber":292,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":293,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":293}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.util;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":" * Represents a user interface for SeeWhyAre bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" * \u003cp\u003eCS2103T AY23/24 Semester 1","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" * Individual Project","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" * SeeWhyAre Bot","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" * 31 Aug 2023","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" * @author Freddy Chen You Ren","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" //60 underscores.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" protected static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" * Instantiates a new Ui instance and initializes the scanner for user input.","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" protected String printHorizontalLine() {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" return HORIZONTAL_LINE;","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" * Displays a greeting message to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" public String greet() {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder(\"\\nStarting SeeWhyAre Bot...\\n\");","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" message.append(printHorizontalLine()).append(\"\\nHello! I\u0027m SeeWhyAre Bot!\")","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" .append(\"\\nWhat can I do for you?\")","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":" .append(printHorizontalLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"\\nStarting SeeWhyAre Bot...\");","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" Hello! I\u0027m SeeWhyAre Bot!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"freddychenyouren2"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"freddychenyouren2"},"content":" * Retrieves user input from the console.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"freddychenyouren2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"freddychenyouren2"},"content":" * @return The user\u0027s input command.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"freddychenyouren2"},"content":" public String getUserInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\"Enter your Command:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"freddychenyouren2"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"freddychenyouren2"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"freddychenyouren2"},"content":" * Displays a farewell message to the user and closes the scanner.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"freddychenyouren2"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"freddychenyouren2"},"content":" protected String farewell() {","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"freddychenyouren2"},"content":" StringBuilder message \u003d new StringBuilder(printHorizontalLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"freddychenyouren2"},"content":" message.append(\"\\nYou are closing the SeeWhyAre chat bot.\")","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"freddychenyouren2"},"content":" .append(\"\\nBye bye. Please use me again soon!\\n\")","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"freddychenyouren2"},"content":" .append(printHorizontalLine());","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"freddychenyouren2"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" You are closing the SeeWhyAre chat bot.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"freddychenyouren2"},"content":" System.out.println(\" Bye bye. Please use me again soon!\");","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"freddychenyouren2"},"content":" printHorizontalLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"freddychenyouren2"},"content":" scanner.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"freddychenyouren2"},"content":" return message.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"freddychenyouren2":74}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" minHeight\u003d\"-Infinity\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"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":"freddychenyouren2"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"500.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-16"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"424.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"424.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":"freddychenyouren2"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"500.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"488.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":21}},{"path":"src/test/java/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"freddychenyouren2":2}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" void testGetDueDate() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" Deadline deadline \u003d new Deadline(\"test deadline getting date\", LocalDate.parse(\"2023-08-30\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(deadline.getDueDate(), LocalDate.parse(\"2023-08-30\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" Deadline deadline \u003d new Deadline(\"test deadline\", LocalDate.parse(\"2023-08-30\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(deadline.toString(), \"[D][ ] test deadline (by: Aug 30 2023)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":"// @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":"// void handleDeadlineTask_excessInputs_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":"//","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":"// }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":"// @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":"// void handleDeadlineTask_invalidDateInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":"//","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":"// }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"freddychenyouren2":31}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" void testGetStartTime() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" Event event \u003d new Event(\"test event getting start time\", LocalDate.parse(\"2023-08-30\"),","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(\"2023-08-31\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(event.getStartTime(), LocalDate.parse(\"2023-08-30\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" void testGetEndTime() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" Event event \u003d new Event(\"test event getting start time\", LocalDate.parse(\"2023-08-30\"),","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(\"2023-08-31\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(event.getEndTime(), LocalDate.parse(\"2023-08-31\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" Event event \u003d new Event(\"test event\", LocalDate.parse(\"2023-08-30\"),","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" LocalDate.parse(\"2023-08-31\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(event.toString(), \"[E][ ] test event (from: Aug 30 2023 to: Aug 31 2023)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":"// @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":"// void handleEventTask_excessInputs_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":"//","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":"// }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":"// @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":"// void handleEventTask_invalidDateInput_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":"//","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"freddychenyouren2"},"content":"// }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"freddychenyouren2":41}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" private Task testTask \u003d new Task(\"Task Description\");","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":" void testGetDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(testTask.getDescription(), \"Task Description\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":" void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":" Task task \u003d new Task(\"To test description\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(task.toString(), \"[ ] To test description\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"freddychenyouren2"},"content":" void testGetStatusIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(testTask.getStatusIcon(), \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"freddychenyouren2"},"content":" testTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(testTask.getStatusIcon(), \"X\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"freddychenyouren2"},"content":" testTask.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(testTask.getStatusIcon(), \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"freddychenyouren2"},"content":" void markAsDone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"freddychenyouren2"},"content":" Task task \u003d new Task(\"Second Task Description\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"freddychenyouren2"},"content":" assertFalse(task.isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"freddychenyouren2"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"freddychenyouren2"},"content":" assertTrue(task.isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"freddychenyouren2":39}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":" void testToString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":" Todo todo \u003d new Todo(\"test todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":" assertEquals(todo.getDescription(), \"test todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"freddychenyouren2":13}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"T | 1 | borrow book | null | null","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"T | 0 | finish CS2103T ip ASAP BRUH | null | null","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"E | 0 | ip discussion | 2023-09-05 | 2023-09-06","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"D | 0 | Deadline Task 2 | 2022-01-01 | null","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"freddychenyouren2"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"freddychenyouren2"},"content":"deadline URGENT TASK wrong date format! /by Saturday","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"freddychenyouren2"},"content":"event NUSCO Welcome Tea /from 2022-08-31 /to 2022-08-31","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"freddychenyouren2"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"freddychenyouren2"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"freddychenyouren2"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"freddychenyouren2"},"content":"unmark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"freddychenyouren2"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"freddychenyouren2"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"freddychenyouren2"},"content":"deadline erroneous deadline by now","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"freddychenyouren2"},"content":"event wrong event input from 6pm to 8pm","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"freddychenyouren2"},"content":"invalid input","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"freddychenyouren2"},"content":"todo finish CS2103T ip ASAP BRUH","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"freddychenyouren2"},"content":"event ip discussion /from 2023-09-05 /to 2023-09-06","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"freddychenyouren2"},"content":"deadline Deadline Task 2 /by 2022-01-01","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"freddychenyouren2"},"content":"dElEte non-Number and case-insensitive","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"freddychenyouren2"},"content":"delete 1234.98765","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"content":"delete 2","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"freddychenyouren2"},"content":"find ip","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"freddychenyouren2"},"content":"liST","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"freddychenyouren2"},"content":"bYE","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"freddychenyouren2":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":"freddychenyouren2"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-09-05"},{"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":"freddychenyouren2"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-09-05"},{"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":"freddychenyouren2"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT, use -Dfile.encoding\u003dUTF-8 to account for the OOPS icon","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"freddychenyouren2"},"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":{"-":17,"freddychenyouren2":4}}] diff --git a/freddychenyouren2_ip_master/commits.json b/freddychenyouren2_ip_master/commits.json index a497aa14..52814610 100644 --- a/freddychenyouren2_ip_master/commits.json +++ b/freddychenyouren2_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"freddychenyouren2":[{"date":"2023-08-20","commitResults":[{"hash":"39049fcbc177d7038a6a49bbd0824a0b8304777f","isMergeCommit":false,"messageTitle":"Finished Level-0 increment","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":6}}}]},{"date":"2023-08-21","commitResults":[{"hash":"bc05bab3efcfcbcd2984712664d0d87d340b5520","isMergeCommit":false,"messageTitle":"Finished Level-1 increment with some personality modification for my chat bot","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":8}}},{"hash":"810c9c34364c5576e98b0366756fdad4dbb3ab1f","isMergeCommit":false,"messageTitle":"Finished Level-2 Increment: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"f39b2dab1bd3552d3ed76e40d95fdd1e32b4986a","isMergeCommit":false,"messageTitle":"Add a class Task to handle more complex logics involving a Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"df8c52bd50235043704eb78f9010063e74e67f01","isMergeCommit":false,"messageTitle":"Finished Level-3 Incrementing: Mark as Done Handled basic error inputs such as index out of bounds on ArrayList of Tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":5}}}]},{"date":"2023-08-22","commitResults":[{"hash":"226650cdde73a4fd53d00d1333da11bb20f68ee3","isMergeCommit":false,"messageTitle":"Level-4-Part-1: Created a Deadline.java file, handled Deadline task logics. Corrected indentation of console text outputs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":5}}},{"hash":"2918c3047224ca6473db0bf22142d876a407d497","isMergeCommit":false,"messageTitle":"Level-4-part-1-Update: Handle Deadline Task in Deadline.java file instead of Duke.java This is to practice calling Class Methods and writing neater code. Consider if there are 100 different types of tasks. It is not good to implement Task handling modules all in Duke.java file. It is way neater to implement task handling in each of the specific types of Task.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":30}}},{"hash":"767da2843721317d239ba4b21e0502a361edc47f","isMergeCommit":false,"messageTitle":"Level-4-Part-2: Added Todo.java and handling a Todo Task.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":5}}},{"hash":"61f62b4607dcda4d6fdc28607b6aafb0275e52d7","isMergeCommit":false,"messageTitle":"Updated Javadocs for Deadline.java fiile","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"8bdb7f4f01c04b62f1074087d78bdbcda9aa3296","isMergeCommit":false,"messageTitle":"Level-4-Part-3: Added Event.java file and its logics","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"a540500d548522c7852c9a8e2307e1bcbd04cfd2","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Text Formatting correction To prepare for automated testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"edd31773acef882312de356228df4b92a6a31f5b","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Update input.txt and EXPECTED.TEXT\\ To match predetermined results for outputs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}},{"hash":"33a9fe886b784051350fc744133b0aab672c44f1","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Use dos2unix input.txt This is because ACTUAL.TXT and EXPECTED.TXT look the same to naked eye The issue might lie in line-ending differences hence troubleshooting with dos2unix solved the issue. OS: Windows 11","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1}}},{"hash":"768773bc1f14ab118d2baf6c16e924760c1fa6bb","isMergeCommit":false,"messageTitle":"Level-5: Add two classes to handle two types of exceptions Handled basic erroneous inputs of empty todo description and Invalid command. Might be exploring Enumeration to handle Invalid command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"7741333f2dbdc8892a733cd4a8af68b205a83f9d","isMergeCommit":false,"messageTitle":"Level-5-Update-1: Updated Duke.java and Todo.java To throw the two new exceptions appropriately: EmptyDescriptionException and InvalidCommandException","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":22}}},{"hash":"2e45bd01ca5d2fda4d540b32ed3dda98e411e56d","isMergeCommit":false,"messageTitle":"Level-6: Added deleteTask() function in Duke.java Also added exception checkings on user inputs such as empty description, invalid index, or non-integer index. Might explore creating Custom Exception Class in the future.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":2}}},{"hash":"bb69c190423ac9b7b837a5c155c370ed482cd415","isMergeCommit":false,"messageTitle":"Level-6-Update: Small corrections of coding styles","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"986818e2e9971e1638ec3b872cc5f10c665771fd","isMergeCommit":false,"messageTitle":"Bug fix: \"todo todo\" was read as no descriptions because initial implementation wiped out ALL todo\u0027s. Same issue for Deadline and Event objects. Fixed with replaceFirst() instead of replace()","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"efc87481213552297b5fedc594884821b44fb8ab","isMergeCommit":false,"messageTitle":"A-Enum: Applied Enum on available commands and used switch-case instead of if-else. To make code more expandable.","messageBody":"","tags":["A-Enum"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":21}}}]},{"date":"2023-08-26","commitResults":[{"hash":"d8fe66f8010979ed272d9211e205fed1e60305d7","isMergeCommit":false,"messageTitle":"Update Indentation of Switch Case","messageBody":"After Switch, indentation of case is provided by default by IntelliJ\n\nConfigured IntelliJ Settings to fix this indentation issue to follow course Java Coding Style Standard\n","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":29}}}]},{"date":"2023-08-28","commitResults":[{"hash":"1e9041fa28756d164f1f98a2fe4fbdf84eb5af2f","isMergeCommit":false,"messageTitle":"Update text messages in Exceptions","messageBody":"Unicode U+2369 was included in the previous version.\n\nHowever, expected.txt and actual.txt files kept showing errors because the sad face icon\ncould not be recognized correctly. Actual.txt showed \"?\"\n\nRemoved Unicode U+2369 for now\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"89c213548ba2e233510f206ebb9ada81591c4acf","isMergeCommit":false,"messageTitle":"Update test file","messageBody":"Include more commands to test more thoroughly.\n","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"ad05a3586c2fe7faabf14ba17dca6e153cc5757f","isMergeCommit":false,"messageTitle":"Include Data Saving and Data Loading of tasks into hard disk","messageBody":"Level-7 Increment: Created a Data Directory to put duke.txt file for storing and loading user data.\n\nHowever, there is one bug discovered under updateData() where Event type of task kept getting changed to Deadline type.\nThis will be fixed soon.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":162,"deletions":12}}},{"hash":"f214902fb296ff07b46bd883fb1c6395d996baf5","isMergeCommit":false,"messageTitle":"Fix bug on Event tasks being loaded as Deadline tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":3},"java":{"insertions":15,"deletions":1}}},{"hash":"3fd7f856d81070fe6ce92a13381845b20b8e966c","isMergeCommit":false,"messageTitle":"Implement checking of files to load data","messageBody":"Handled basic incorrect formats in the data file to be parsed.\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":88,"deletions":46}}}]},{"date":"2023-08-30","commitResults":[{"hash":"50ef758d8c1752839cf57c254e1b25715457e27c","isMergeCommit":false,"messageTitle":"Implement Level-8 features of Date and Time in tasks","messageBody":"Deadline and Event tasks were initialized with String values for their timings\n\nUsed Java library on Dates and Times to initialize Deadline and Event tasks with YYYY-MM-DD inputs\nAlso handled cases where inputs are invalid dates or invalid formats with InvalidDateException.java\n\nNote: LoadTasks() Function now has poorer OOP Principles used due to optional initialization of tasks read from the hard disk.\nThis will be handled in the future.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":127,"deletions":51}}},{"hash":"22600bdcb7b5c7f93c9acff11e329e098d1f19cc","isMergeCommit":false,"messageTitle":"Add a comment in Todo.java file to test branching mechanism in SourceTree","messageBody":"No changes in any other files. This should not affect the working state of the program.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"77f5a6bc01f2a8631a7ded16d5caff4ee2df8dad","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"0a161c308a5bd17b2992d0b1a69014950fa70716","isMergeCommit":false,"messageTitle":"Add a different comment in Todo.java to test branching for branch-level-7","messageBody":"Branching did not show up previously for branch-level-7.\n\nThis is the second attempt to practice proper branching and merging in git.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e980a37160bb2275db12588b8ba69e10ea00ed34","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Todo.java\n\nSolved by attempting to put the same comment in line 2\n","fileTypesAndContributionMap":{}},{"hash":"5f33a09edca14165848eff20b9a80d271ac88641","isMergeCommit":false,"messageTitle":"Implemented halfway A-OOP with Ui, Storage, Parser, and TaskList Classes","messageBody":"Implementation of program were all under Duke.java\n\nExtracted relevant implementations into separate classes.\nNote: Main refactoring of Duke.java is unfinished. Current state is only the creation of the separate files.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":6},"java":{"insertions":485,"deletions":26}}},{"hash":"8776381f3bcdc74cca4df4e0048d280b05fffe49","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP by using files to separate the program.","messageBody":"The program was getting messy and could be separated into Parser, Ui, TaskList, and Storage files.\nDuke.java file also became short and neat.\n\nAlso squashed bugs related to class method invocations especially when saving tasks or loading tasks\n","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":2},"java":{"insertions":450,"deletions":430}}},{"hash":"61583ec6c3ee199b98491b278837c2c631e1dc76","isMergeCommit":false,"messageTitle":"Clean up code for A-MoreOOP checkpoint","messageBody":"Storage.java contained wildcard java.io.* import statement which violates Java Coding Standard\nDuke.java contained a huge chunck of commented-out codes of previous implementations which have been removed.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":3},"java":{"insertions":17,"deletions":404}}},{"hash":"e65954dd9648894ce04e633b6a1915a1387d7371","isMergeCommit":false,"messageTitle":"Add packages to divide classes more neatly","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":9},"java":{"insertions":125,"deletions":65},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"d485d335ed48f1d7520c67b206e10a50563ce45e","isMergeCommit":false,"messageTitle":"Add dummy comment line to test for Merging for A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"c90d1570afbec5781915e0c3087ed88a32f3cdc9","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f90a7247b554862cf617d4f463934aeb474a0605","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"dccbeee58f209d8e1ed07bd269765eb0065bac5d","isMergeCommit":false,"messageTitle":"Configure build.gradle file to run main method from Duke.java","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"234405eb58e6ba8930e169bf7d3a5ecd9515313c","isMergeCommit":false,"messageTitle":"Add test files","messageBody":"Basic unit testing only. Future updates may see the use of stubs.\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":121,"deletions":0}}},{"hash":"da3200477fe55ecf694af11200cacfa203285123","isMergeCommit":false,"messageTitle":"Refactor code to adhere more closely to Java Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":39}}},{"hash":"f8b9a16d0e82c0a08bd2389aadde51ba64f6edba","isMergeCommit":false,"messageTitle":"Add Header comment and JavaDoc to non-trivial methods in all Java classes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":299,"deletions":63}}}]},{"date":"2023-09-01","commitResults":[{"hash":"93e94471461032fd5427077b5d131282ea051262","isMergeCommit":false,"messageTitle":"Implements findTask() method with a given keyword","messageBody":"Level-9 increment.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":40,"deletions":1}}},{"hash":"e5a604022d7a944b1ce8f2a4d036112d52d5b643","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"815638e87d38379c174ebcce5542da509c37acad","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/task/Event.java\n#\tsrc/main/java/duke/util/Parser.java\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"daf95831497dcecbfca6350829cddf005bba02c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"597d4be1ed377af3ec9c5c3ffd37b1ec5238a409","isMergeCommit":false,"messageTitle":"Refactor variable name taskList to listOfTasks in TaskList.java","messageBody":"This is to adhere more closely to Java Coding Standards.\n","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"e1da581749fff9a86f3d3c47ee45d90c1f0044f3","isMergeCommit":false,"messageTitle":"Add JavaDoc on findTask()","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"ea5b43b09abf2bdf8601975fa326a45972d084be","isMergeCommit":false,"messageTitle":"Update console output of invalid commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}}]},{"date":"2023-09-05","commitResults":[{"hash":"55bc83961957e407741b15a38bcb9b1f8be41904","isMergeCommit":false,"messageTitle":"Update runtest.bat to run on the correct input file for text-ui-testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":5},"java":{"insertions":1,"deletions":1},"bat":{"insertions":2,"deletions":2}}},{"hash":"d93103ebe34ce5e7ff68202846efedf895f56050","isMergeCommit":false,"messageTitle":"Implement GUI partially according to JavaFX tutorial","messageBody":"Will be continuing to Implement GUI for the actual SeeWhyAre bot in subsequent commits.\n","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":37,"deletions":0},"java":{"insertions":322,"deletions":17}}}]},{"date":"2023-09-06","commitResults":[{"hash":"7270879a0f2880eb179875a2bc6ab6317986222f","isMergeCommit":false,"messageTitle":"Update implementations of methods to return String instead of void","messageBody":"SeeWhyAre bot was a CLI app that used System.out.println or System.out.printf\nto show messages to users.\n\nFrom this commit onwawrds, it has a GUI where displaying messages requires a String.\nHence refactoring is done mainly at methods involved in parsing userInput to return a String\nas the response message from SeeWhyAre bot.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":275,"deletions":234}}}]},{"date":"2023-09-07","commitResults":[{"hash":"a9ca6be05b00c21e6e10385cbfb792026afa8fae","isMergeCommit":false,"messageTitle":"Update main storage data file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3}}},{"hash":"69a8f9edc6a0dad3f6a6b58c5527038acb571dcf","isMergeCommit":false,"messageTitle":"Add negligible comment line to test for merging of other branches","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"7edb8d536f2d4832b78fd2eb8cbcfa5b3b467742","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"e6a27b0459d5c9ea5fe54c41ab52e164af182863","isMergeCommit":false,"messageTitle":"Add Java CheckStyle and refactor code to follow Java Coding Standard more","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":3,"deletions":3},"java":{"insertions":137,"deletions":282}}}]},{"date":"2023-09-12","commitResults":[{"hash":"160c93dd118518aa6dd0d1ab8ce2fc963c0bfe97","isMergeCommit":false,"messageTitle":"Update build.gradle for new Jar File","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"9c2e317b2494828344e07b33553d824c36752028","isMergeCommit":false,"messageTitle":"Update build.gradle for new Jar File (Master)","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"007eedefef70e722da280cc1fbde4ce8b42d9d80","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CheckStyle\u0027","messageBody":"# Conflicts:\n#\tbuild.gradle\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"054eefb303e40ed5d87c6c96b28d8d72c61a676c","isMergeCommit":false,"messageTitle":"Add and enable Java assertions","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":1,"deletions":1},"java":{"insertions":6,"deletions":2}}},{"hash":"f42f39e66f9e41cf37d1af25c8798c96485be8cf","isMergeCommit":false,"messageTitle":"Improve on Code Quality","messageBody":"There are a few parts in the code that can be improved for readability\nand adhering to coding standards\n\nThus there are changes that have to be made to the code\n\nHere are the changes:\n* Format Javadoc descriptions and parameters\n* Attempts to break long methods into more but shorter methods\nin Storage class\n* Removing unnecessary code-level comments\n* Removing redundant exception throws in method signatures\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":174,"deletions":197}}},{"hash":"a1d7e3490f1dd6018dc0383375fee6c247de929b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from freddychenyouren2/A-Assertions","messageBody":"Add and enable Java assertions (PR A-Assertion)","fileTypesAndContributionMap":{}},{"hash":"36e3bd015de9299ef04f720fa1e54c520ceef508","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into A-CodingQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3261dc7ab824146bcf443a10a8a2fc2029b4c430","isMergeCommit":true,"messageTitle":"Merge pull request #2 from freddychenyouren2/A-CodingQuality","messageBody":"Improve on Code Quality","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"freddychenyouren2":{"java":1411,"md":2,"fxml":37,"sh":0,"bat":4,"gradle":20,"txt":39}},"authorContributionVariance":{"freddychenyouren2":189903.56},"authorDisplayNameMap":{"freddychenyouren2":"CS2103T-W10-3 FRED.. REN"}} +{"authorDailyContributionsMap":{"freddychenyouren2":[{"date":"2023-08-20","commitResults":[{"hash":"39049fcbc177d7038a6a49bbd0824a0b8304777f","isMergeCommit":false,"messageTitle":"Finished Level-0 increment","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":6}}}]},{"date":"2023-08-21","commitResults":[{"hash":"bc05bab3efcfcbcd2984712664d0d87d340b5520","isMergeCommit":false,"messageTitle":"Finished Level-1 increment with some personality modification for my chat bot","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":8}}},{"hash":"810c9c34364c5576e98b0366756fdad4dbb3ab1f","isMergeCommit":false,"messageTitle":"Finished Level-2 Increment: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"f39b2dab1bd3552d3ed76e40d95fdd1e32b4986a","isMergeCommit":false,"messageTitle":"Add a class Task to handle more complex logics involving a Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"df8c52bd50235043704eb78f9010063e74e67f01","isMergeCommit":false,"messageTitle":"Finished Level-3 Incrementing: Mark as Done Handled basic error inputs such as index out of bounds on ArrayList of Tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":5}}}]},{"date":"2023-08-22","commitResults":[{"hash":"226650cdde73a4fd53d00d1333da11bb20f68ee3","isMergeCommit":false,"messageTitle":"Level-4-Part-1: Created a Deadline.java file, handled Deadline task logics. Corrected indentation of console text outputs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":5}}},{"hash":"2918c3047224ca6473db0bf22142d876a407d497","isMergeCommit":false,"messageTitle":"Level-4-part-1-Update: Handle Deadline Task in Deadline.java file instead of Duke.java This is to practice calling Class Methods and writing neater code. Consider if there are 100 different types of tasks. It is not good to implement Task handling modules all in Duke.java file. It is way neater to implement task handling in each of the specific types of Task.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":30}}},{"hash":"767da2843721317d239ba4b21e0502a361edc47f","isMergeCommit":false,"messageTitle":"Level-4-Part-2: Added Todo.java and handling a Todo Task.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":5}}},{"hash":"61f62b4607dcda4d6fdc28607b6aafb0275e52d7","isMergeCommit":false,"messageTitle":"Updated Javadocs for Deadline.java fiile","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"8bdb7f4f01c04b62f1074087d78bdbcda9aa3296","isMergeCommit":false,"messageTitle":"Level-4-Part-3: Added Event.java file and its logics","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"a540500d548522c7852c9a8e2307e1bcbd04cfd2","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Text Formatting correction To prepare for automated testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"edd31773acef882312de356228df4b92a6a31f5b","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Update input.txt and EXPECTED.TEXT\\ To match predetermined results for outputs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}},{"hash":"33a9fe886b784051350fc744133b0aab672c44f1","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Use dos2unix input.txt This is because ACTUAL.TXT and EXPECTED.TXT look the same to naked eye The issue might lie in line-ending differences hence troubleshooting with dos2unix solved the issue. OS: Windows 11","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1}}},{"hash":"768773bc1f14ab118d2baf6c16e924760c1fa6bb","isMergeCommit":false,"messageTitle":"Level-5: Add two classes to handle two types of exceptions Handled basic erroneous inputs of empty todo description and Invalid command. Might be exploring Enumeration to handle Invalid command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"7741333f2dbdc8892a733cd4a8af68b205a83f9d","isMergeCommit":false,"messageTitle":"Level-5-Update-1: Updated Duke.java and Todo.java To throw the two new exceptions appropriately: EmptyDescriptionException and InvalidCommandException","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":22}}},{"hash":"2e45bd01ca5d2fda4d540b32ed3dda98e411e56d","isMergeCommit":false,"messageTitle":"Level-6: Added deleteTask() function in Duke.java Also added exception checkings on user inputs such as empty description, invalid index, or non-integer index. Might explore creating Custom Exception Class in the future.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":2}}},{"hash":"bb69c190423ac9b7b837a5c155c370ed482cd415","isMergeCommit":false,"messageTitle":"Level-6-Update: Small corrections of coding styles","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}}]},{"date":"2023-08-24","commitResults":[{"hash":"986818e2e9971e1638ec3b872cc5f10c665771fd","isMergeCommit":false,"messageTitle":"Bug fix: \"todo todo\" was read as no descriptions because initial implementation wiped out ALL todo\u0027s. Same issue for Deadline and Event objects. Fixed with replaceFirst() instead of replace()","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"efc87481213552297b5fedc594884821b44fb8ab","isMergeCommit":false,"messageTitle":"A-Enum: Applied Enum on available commands and used switch-case instead of if-else. To make code more expandable.","messageBody":"","tags":["A-Enum"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":21}}}]},{"date":"2023-08-26","commitResults":[{"hash":"d8fe66f8010979ed272d9211e205fed1e60305d7","isMergeCommit":false,"messageTitle":"Update Indentation of Switch Case","messageBody":"After Switch, indentation of case is provided by default by IntelliJ\n\nConfigured IntelliJ Settings to fix this indentation issue to follow course Java Coding Style Standard\n","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":29}}}]},{"date":"2023-08-28","commitResults":[{"hash":"1e9041fa28756d164f1f98a2fe4fbdf84eb5af2f","isMergeCommit":false,"messageTitle":"Update text messages in Exceptions","messageBody":"Unicode U+2369 was included in the previous version.\n\nHowever, expected.txt and actual.txt files kept showing errors because the sad face icon\ncould not be recognized correctly. Actual.txt showed \"?\"\n\nRemoved Unicode U+2369 for now\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"89c213548ba2e233510f206ebb9ada81591c4acf","isMergeCommit":false,"messageTitle":"Update test file","messageBody":"Include more commands to test more thoroughly.\n","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"ad05a3586c2fe7faabf14ba17dca6e153cc5757f","isMergeCommit":false,"messageTitle":"Include Data Saving and Data Loading of tasks into hard disk","messageBody":"Level-7 Increment: Created a Data Directory to put duke.txt file for storing and loading user data.\n\nHowever, there is one bug discovered under updateData() where Event type of task kept getting changed to Deadline type.\nThis will be fixed soon.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":162,"deletions":12}}},{"hash":"f214902fb296ff07b46bd883fb1c6395d996baf5","isMergeCommit":false,"messageTitle":"Fix bug on Event tasks being loaded as Deadline tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":3},"java":{"insertions":15,"deletions":1}}},{"hash":"3fd7f856d81070fe6ce92a13381845b20b8e966c","isMergeCommit":false,"messageTitle":"Implement checking of files to load data","messageBody":"Handled basic incorrect formats in the data file to be parsed.\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":88,"deletions":46}}}]},{"date":"2023-08-30","commitResults":[{"hash":"50ef758d8c1752839cf57c254e1b25715457e27c","isMergeCommit":false,"messageTitle":"Implement Level-8 features of Date and Time in tasks","messageBody":"Deadline and Event tasks were initialized with String values for their timings\n\nUsed Java library on Dates and Times to initialize Deadline and Event tasks with YYYY-MM-DD inputs\nAlso handled cases where inputs are invalid dates or invalid formats with InvalidDateException.java\n\nNote: LoadTasks() Function now has poorer OOP Principles used due to optional initialization of tasks read from the hard disk.\nThis will be handled in the future.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":127,"deletions":51}}},{"hash":"22600bdcb7b5c7f93c9acff11e329e098d1f19cc","isMergeCommit":false,"messageTitle":"Add a comment in Todo.java file to test branching mechanism in SourceTree","messageBody":"No changes in any other files. This should not affect the working state of the program.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"77f5a6bc01f2a8631a7ded16d5caff4ee2df8dad","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"0a161c308a5bd17b2992d0b1a69014950fa70716","isMergeCommit":false,"messageTitle":"Add a different comment in Todo.java to test branching for branch-level-7","messageBody":"Branching did not show up previously for branch-level-7.\n\nThis is the second attempt to practice proper branching and merging in git.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e980a37160bb2275db12588b8ba69e10ea00ed34","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Todo.java\n\nSolved by attempting to put the same comment in line 2\n","fileTypesAndContributionMap":{}},{"hash":"5f33a09edca14165848eff20b9a80d271ac88641","isMergeCommit":false,"messageTitle":"Implemented halfway A-OOP with Ui, Storage, Parser, and TaskList Classes","messageBody":"Implementation of program were all under Duke.java\n\nExtracted relevant implementations into separate classes.\nNote: Main refactoring of Duke.java is unfinished. Current state is only the creation of the separate files.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":6},"java":{"insertions":485,"deletions":26}}},{"hash":"8776381f3bcdc74cca4df4e0048d280b05fffe49","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP by using files to separate the program.","messageBody":"The program was getting messy and could be separated into Parser, Ui, TaskList, and Storage files.\nDuke.java file also became short and neat.\n\nAlso squashed bugs related to class method invocations especially when saving tasks or loading tasks\n","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":2},"java":{"insertions":450,"deletions":430}}},{"hash":"61583ec6c3ee199b98491b278837c2c631e1dc76","isMergeCommit":false,"messageTitle":"Clean up code for A-MoreOOP checkpoint","messageBody":"Storage.java contained wildcard java.io.* import statement which violates Java Coding Standard\nDuke.java contained a huge chunck of commented-out codes of previous implementations which have been removed.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":3},"java":{"insertions":17,"deletions":404}}},{"hash":"e65954dd9648894ce04e633b6a1915a1387d7371","isMergeCommit":false,"messageTitle":"Add packages to divide classes more neatly","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":9},"java":{"insertions":125,"deletions":65},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"d485d335ed48f1d7520c67b206e10a50563ce45e","isMergeCommit":false,"messageTitle":"Add dummy comment line to test for Merging for A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"c90d1570afbec5781915e0c3087ed88a32f3cdc9","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f90a7247b554862cf617d4f463934aeb474a0605","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"dccbeee58f209d8e1ed07bd269765eb0065bac5d","isMergeCommit":false,"messageTitle":"Configure build.gradle file to run main method from Duke.java","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"234405eb58e6ba8930e169bf7d3a5ecd9515313c","isMergeCommit":false,"messageTitle":"Add test files","messageBody":"Basic unit testing only. Future updates may see the use of stubs.\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":121,"deletions":0}}},{"hash":"da3200477fe55ecf694af11200cacfa203285123","isMergeCommit":false,"messageTitle":"Refactor code to adhere more closely to Java Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":39}}},{"hash":"f8b9a16d0e82c0a08bd2389aadde51ba64f6edba","isMergeCommit":false,"messageTitle":"Add Header comment and JavaDoc to non-trivial methods in all Java classes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":299,"deletions":63}}}]},{"date":"2023-09-01","commitResults":[{"hash":"93e94471461032fd5427077b5d131282ea051262","isMergeCommit":false,"messageTitle":"Implements findTask() method with a given keyword","messageBody":"Level-9 increment.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":40,"deletions":1}}},{"hash":"e5a604022d7a944b1ce8f2a4d036112d52d5b643","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"815638e87d38379c174ebcce5542da509c37acad","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/task/Event.java\n#\tsrc/main/java/duke/util/Parser.java\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"daf95831497dcecbfca6350829cddf005bba02c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"597d4be1ed377af3ec9c5c3ffd37b1ec5238a409","isMergeCommit":false,"messageTitle":"Refactor variable name taskList to listOfTasks in TaskList.java","messageBody":"This is to adhere more closely to Java Coding Standards.\n","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"e1da581749fff9a86f3d3c47ee45d90c1f0044f3","isMergeCommit":false,"messageTitle":"Add JavaDoc on findTask()","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"ea5b43b09abf2bdf8601975fa326a45972d084be","isMergeCommit":false,"messageTitle":"Update console output of invalid commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}}]},{"date":"2023-09-05","commitResults":[{"hash":"55bc83961957e407741b15a38bcb9b1f8be41904","isMergeCommit":false,"messageTitle":"Update runtest.bat to run on the correct input file for text-ui-testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":5},"java":{"insertions":1,"deletions":1},"bat":{"insertions":2,"deletions":2}}},{"hash":"d93103ebe34ce5e7ff68202846efedf895f56050","isMergeCommit":false,"messageTitle":"Implement GUI partially according to JavaFX tutorial","messageBody":"Will be continuing to Implement GUI for the actual SeeWhyAre bot in subsequent commits.\n","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":37,"deletions":0},"java":{"insertions":322,"deletions":17}}}]},{"date":"2023-09-06","commitResults":[{"hash":"7270879a0f2880eb179875a2bc6ab6317986222f","isMergeCommit":false,"messageTitle":"Update implementations of methods to return String instead of void","messageBody":"SeeWhyAre bot was a CLI app that used System.out.println or System.out.printf\nto show messages to users.\n\nFrom this commit onwawrds, it has a GUI where displaying messages requires a String.\nHence refactoring is done mainly at methods involved in parsing userInput to return a String\nas the response message from SeeWhyAre bot.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":275,"deletions":234}}}]},{"date":"2023-09-07","commitResults":[{"hash":"a9ca6be05b00c21e6e10385cbfb792026afa8fae","isMergeCommit":false,"messageTitle":"Update main storage data file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3}}},{"hash":"69a8f9edc6a0dad3f6a6b58c5527038acb571dcf","isMergeCommit":false,"messageTitle":"Add negligible comment line to test for merging of other branches","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"7edb8d536f2d4832b78fd2eb8cbcfa5b3b467742","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"e6a27b0459d5c9ea5fe54c41ab52e164af182863","isMergeCommit":false,"messageTitle":"Add Java CheckStyle and refactor code to follow Java Coding Standard more","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":3,"deletions":3},"java":{"insertions":137,"deletions":282}}}]},{"date":"2023-09-12","commitResults":[{"hash":"160c93dd118518aa6dd0d1ab8ce2fc963c0bfe97","isMergeCommit":false,"messageTitle":"Update build.gradle for new Jar File","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"9c2e317b2494828344e07b33553d824c36752028","isMergeCommit":false,"messageTitle":"Update build.gradle for new Jar File (Master)","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"007eedefef70e722da280cc1fbde4ce8b42d9d80","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CheckStyle\u0027","messageBody":"# Conflicts:\n#\tbuild.gradle\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"054eefb303e40ed5d87c6c96b28d8d72c61a676c","isMergeCommit":false,"messageTitle":"Add and enable Java assertions","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":1,"deletions":1},"java":{"insertions":6,"deletions":2}}},{"hash":"f42f39e66f9e41cf37d1af25c8798c96485be8cf","isMergeCommit":false,"messageTitle":"Improve on Code Quality","messageBody":"There are a few parts in the code that can be improved for readability\nand adhering to coding standards\n\nThus there are changes that have to be made to the code\n\nHere are the changes:\n* Format Javadoc descriptions and parameters\n* Attempts to break long methods into more but shorter methods\nin Storage class\n* Removing unnecessary code-level comments\n* Removing redundant exception throws in method signatures\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":174,"deletions":197}}},{"hash":"a1d7e3490f1dd6018dc0383375fee6c247de929b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from freddychenyouren2/A-Assertions","messageBody":"Add and enable Java assertions (PR A-Assertion)","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"36e3bd015de9299ef04f720fa1e54c520ceef508","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into A-CodingQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3261dc7ab824146bcf443a10a8a2fc2029b4c430","isMergeCommit":true,"messageTitle":"Merge pull request #2 from freddychenyouren2/A-CodingQuality","messageBody":"Improve on Code Quality","tags":["A-FullCommitMessage","A-CodingQuality"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"0d00c4372554b885fe850647c5c87554d107ccee","isMergeCommit":false,"messageTitle":"Implement ViewSchedule","messageBody":"When given a date, return the list of tasks that are happening on that day.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":6},"fxml":{"insertions":5,"deletions":5},"java":{"insertions":61,"deletions":6}}},{"hash":"a752141c34814a8f6bbac3a3db2eeba295541298","isMergeCommit":false,"messageTitle":"Update JavaDoc for TaskList file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"7853321b70ba582a5834bc0ff22e399df807b561","isMergeCommit":true,"messageTitle":"Merge pull request #3 from freddychenyouren2/branch-B-ViewSchedule","messageBody":"Implement ViewSchedule","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"freddychenyouren2":{"java":1478,"md":2,"fxml":37,"sh":0,"bat":4,"gradle":20,"txt":37}},"authorContributionVariance":{"freddychenyouren2":173951.17},"authorDisplayNameMap":{"freddychenyouren2":"CS2103T-W10-3 FRED.. REN"}} diff --git a/garylow2001_ip_master/authorship.json b/garylow2001_ip_master/authorship.json index d79fd2b6..fac7c9f0 100644 --- a/garylow2001_ip_master/authorship.json +++ b/garylow2001_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":"garylow2001"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"checkstyle {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-08"},{"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":"garylow2001"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" mainClass.set(\"Launcher\")","lastModifiedDate":"2023-09-12"},{"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":"garylow2001"},"content":" archiveBaseName \u003d \"Chewy\"","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" archiveFileName \u003d \u0027Chewy.jar\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"garylow2001":23,"-":40}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"D | 0 | www | 2023-04-23","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"E | 0 | yyy | 2023-03-02T18:30 | 2023-03-02T19:30","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"T | 0 | something","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"D | 0 | something else | 2023-09-08","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"garylow2001":4}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"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":18,"author":{"gitId":"garylow2001"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/views/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" * Returns the DialogBox of the user on the right side of the Chat.","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" * @param text The message the user has typed.","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" * @param img The image of the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" * @return The DialogBox of the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" * Returns the DialogBox of Chewy on the left side of the Chat.","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" * @param text The message Chewy responded with.","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" * @param img The image of Chewy.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" * @return The DialogBox of Chewy.","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" public static DialogBox getChewyDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":73}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" public static final String DATA_FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" public Duke(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" this.storage \u003d new Storage(filepath);","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" this.ui.showDukeError(e);","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" * Loads the list of tasks from the data file.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" * @return The status of loading the list of tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" public String loadTasks() {","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" return \"Tasks loaded successfully!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" return \"Tasks failed to load\" + this.ui.showDukeError(e);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" return this.ui.showException(e);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" * @return the welcome message.","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" return this.ui.showWelcome();","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" * Returns Chewy\u0027s response to the user\u0027s input.","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" * @return Chewy\u0027s response.","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" return this.ui.displayFarewellMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.equals(\"help\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" return this.ui.displayHelpMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.equals(\"list\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" return this.taskList.listTasks();","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" return this.taskList.markTaskAsDone(userInput)","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" + this.taskList.saveTask(this.storage.filepath);","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" return this.taskList.unmarkTaskAsDone(userInput)","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" + this.taskList.saveTask(this.storage.filepath);","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" return this.taskList.deleteTask(userInput)","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" + this.taskList.saveTask(this.storage.filepath);","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" return this.taskList.findTasks(userInput);","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" return this.taskList.addTask(userInput)","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" + this.taskList.saveTask(this.storage.filepath);","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":" return this.ui.showDukeError(e);","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" return this.ui.showException(e);","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":77,"-":1}},{"path":"src/main/java/Exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Exceptions/FileNotLoadedException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class FileNotLoadedException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public FileNotLoadedException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"No file data. Creating data file and starting new task list...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"Invalid command entered. See \u0027help\u0027 for a list of commands you can enter\");","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Exceptions/InvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class InvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public InvalidDateFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"Invalid Date format. Here are some example dates:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" + \"6/3/2023, 16/12/2024\");","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":8}},{"path":"src/main/java/Exceptions/InvalidDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class InvalidDateTimeFormatException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public InvalidDateTimeFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"Invalid DateTime format. Here are some example dates:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" + \"6/3/2023 5:30 AM, 16/12/2024 6:30PM\");","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":8}},{"path":"src/main/java/Exceptions/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class InvalidTaskException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public InvalidTaskException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"Invalid Task Id entered, see \u0027list\u0027 for the list of tasks\");","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Exceptions/NoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class NoDescriptionException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public NoDescriptionException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"No description found. Please enter a description after your command.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Exceptions/NoTaskFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class NoTaskFoundException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public NoTaskFoundException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"No Task found. Please enter a Task Id after your command\");","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" * The Launcher to launch the JavaFX application.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":10}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" private Duke duke \u003d new Duke(Duke.DATA_FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" * Starts the program as a java application.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" * primary stages.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/views/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" MainWindow mainWindow \u003d fxmlLoader.\u003cMainWindow\u003egetController();","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" mainWindow.setDuke(duke);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" mainWindow.onStart();","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":39}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" private Duke duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/personicon.jpg\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" private Image chewyImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/chewbaccaicon.jpg\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" * Creates the two dialog boxes that are shown at the start of the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" * One of them is the welcome message and the other is the load task status.","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" public void onStart() {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" DialogBox.getChewyDialog(this.duke.showWelcome(), chewyImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" DialogBox.getChewyDialog(this.duke.loadTasks(), chewyImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"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":49,"author":{"gitId":"garylow2001"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" DialogBox.getChewyDialog(response, chewyImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":61}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Exceptions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidCommandException; // warning is shown in javadocs if not imported","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidTaskException; // warning is shown in javadocs if not imported","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import Exceptions.NoDescriptionException; // warning is shown in javadocs if not imported","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import Tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import Tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import Tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import Tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" * Parser that helps with parsing user inputs as Strings to various","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" * Objects and types.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" * Parses the given line from file as a String and","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" * returns a Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" * @param lineFromFile The given line from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" * @return task The Task object created by the line after parsing.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" * @throws IllegalArgumentException If the line is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" public static Task parseTaskFromFileString(String lineFromFile) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" String[] lineParts \u003d lineFromFile.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" String taskType \u003d lineParts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" boolean isDone \u003d lineParts[1].equals(\"X\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" String description \u003d lineParts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" String by;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" if (lineParts.length \u003d\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" by \u003d lineParts[3];","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" task \u003d new Deadline(description, by); // add by","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" task \u003d new Deadline(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" String from;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" String to;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" if (lineParts.length \u003d\u003d 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" from \u003d lineParts[3];","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" to \u003d lineParts[4];","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" task \u003d new Event(description, from, to); // add from and to","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" task \u003d new Event(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" // Line does not start with a task value (T,D,E), file corrupted, throw error","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" throw new IllegalArgumentException(\"Invalid Tasks.Task Type\");","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" if (isDone) task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" * Parses the user input and returns the command specified by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" * @return inputCommand The command that the user has entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" public static String getCommand(String userInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" String[] inputParts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" // Check if a valid addTask command is entered","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":" String inputCommand \u003d inputParts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":" if (!(inputCommand.equals(\"todo\") || inputCommand.equals(\"deadline\") || inputCommand.equals(\"event\"))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"garylow2001"},"content":" return inputCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"garylow2001"},"content":" * Parses the input given by the user and returns the task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"garylow2001"},"content":" * @return The description of the task entered by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"garylow2001"},"content":" * @throws NoDescriptionException If no description is found.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"garylow2001"},"content":" public static String getTaskDesc(String userInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"garylow2001"},"content":" String[] inputParts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"garylow2001"},"content":" // Check if a valid addTask command is entered","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"garylow2001"},"content":" if (inputParts.length \u003c 2) throw new NoDescriptionException();","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"garylow2001"},"content":" // Check if description is empty","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"garylow2001"},"content":" if (inputParts[1].trim().equals(\"\")) throw new NoDescriptionException();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"garylow2001"},"content":" return inputParts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"garylow2001"},"content":" * Parses the input given by the user and returns the task id.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"garylow2001"},"content":" * @param inputString The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"garylow2001"},"content":" * @return The id of the task (1-indexed).","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"garylow2001"},"content":" * @throws InvalidTaskException If the task id is in an invalid format e.g a String.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"garylow2001"},"content":" public static int getTaskId(String inputString) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"garylow2001"},"content":" String[] inputParts \u003d inputString.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"garylow2001"},"content":" if (inputParts.length !\u003d 2) throw new NoTaskFoundException();","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"garylow2001"},"content":" int taskId \u003d Integer.parseInt(inputParts[1].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"garylow2001"},"content":" return taskId - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"garylow2001"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"garylow2001"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":114}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.NoTaskFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import Tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" * Represents the Storage system of the Duke App. A \u003ccode\u003eStorage\u003c/code\u003e object stores","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" * the location where the data is loaded from","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" String filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" * Loads the tasks in the file specified by filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" * @return tasks List of Tasks from the loaded file.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" * @throws NoTaskFoundException If no tasks are found in the filepath or","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" * the filepath is not specified or does not exist.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" public List\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" System.out.println(\"Loading tasks...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(filepath))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" Task task \u003d Parser.parseTaskFromFileString(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" throw new NoTaskFoundException();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":43}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import Tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import Tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import Tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" * Represents the list of tasks in the Duke App. A \u003ccode\u003eTaskList\u003c/code\u003e object contains","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" * the list of tasks and task operations.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" public TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" * Saves all the tasks in TaskList to the output file.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" * @param filepath the path to the file to save tasks in.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" * @return A message that confirms the task as saved.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" public String saveTask(String filepath) {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" System.out.println(\"Saving tasks...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" try (PrintWriter writer \u003d new PrintWriter(filepath)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" writer.println(task.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" return \"Error saving tasks to file\" + e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" return \"[Task saved successfully]\";","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" * Adds a task to TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" * Displays the number of tasks in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" * @return A message that confirms the task as added.","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" * @throws DukeException If the command is not a valid addTask command.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" public String addTask(String userInput) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" String inputCommand \u003d Parser.getCommand(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" String taskDesc \u003d Parser.getTaskDesc(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" switch (inputCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" task \u003d new Todo(taskDesc);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" task \u003d new Deadline(taskDesc);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" task \u003d new Event(taskDesc);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" throw new DukeException(\"Error, see \u0027help\u0027 for a list of commands\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" // Add task to task list","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" return \"Got it. I\u0027ve added this task:\\n\\t\" + task + \"\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" + String.format(\"Now you have %d tasks in the list%n\", taskList.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":" * Removes a task from the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"garylow2001"},"content":" * Displays the number of tasks in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"garylow2001"},"content":" * @return A message that confirms the task as deleted.","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"garylow2001"},"content":" * @throws InvalidTaskException If the task id entered does not correspond to any task","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"garylow2001"},"content":" public String deleteTask(String userInput) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"garylow2001"},"content":" int taskId \u003d Parser.getTaskId(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"garylow2001"},"content":" if (taskId \u003c 0 || taskId \u003e taskList.size() - 1) throw new InvalidTaskException();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"garylow2001"},"content":" Task deletedTask \u003d taskList.remove(taskId);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"garylow2001"},"content":" return \"Noted. I\u0027ve removed this task:\\n\\t\" + deletedTask + \"\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"garylow2001"},"content":" + String.format(\"Now you have %d tasks in the list%n\", taskList.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"garylow2001"},"content":" * Unmarks a task in the TaskList as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"garylow2001"},"content":" * @return A message that confirms the task as unmarked.","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"garylow2001"},"content":" * @throws InvalidTaskException If the task id entered does not correspond to any task","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"garylow2001"},"content":" public String unmarkTaskAsDone(String userInput) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"garylow2001"},"content":" int taskId \u003d Parser.getTaskId(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"garylow2001"},"content":" if (taskId \u003c 0 || taskId \u003e taskList.size() - 1) throw new InvalidTaskException();","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"garylow2001"},"content":" Task selectedTask \u003d taskList.get(taskId);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"garylow2001"},"content":" selectedTask.unmarkAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"garylow2001"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + selectedTask + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"garylow2001"},"content":" * Marks a task in the TaskList as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"garylow2001"},"content":" * @return A message that confirms the task as marked.","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"garylow2001"},"content":" * @throws InvalidTaskException If the task id entered does not correspond to any task","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"garylow2001"},"content":" public String markTaskAsDone(String userInput) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"garylow2001"},"content":" int taskId \u003d Parser.getTaskId(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"garylow2001"},"content":" if (taskId \u003c 0 || taskId \u003e taskList.size() - 1) throw new InvalidTaskException();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"garylow2001"},"content":" // Mark the selected task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"garylow2001"},"content":" Task selectedTask \u003d taskList.get(taskId);","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"garylow2001"},"content":" selectedTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"garylow2001"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + selectedTask + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"garylow2001"},"content":" * Lists all the tasks in the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"garylow2001"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"garylow2001"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"garylow2001"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"garylow2001"},"content":" return \"Chewy detected no task for you!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"garylow2001"},"content":" StringBuilder taskListAsString \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"garylow2001"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"garylow2001"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"garylow2001"},"content":" String taskLine \u003d String.format(\"%d.%s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"garylow2001"},"content":" i + 1,","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"garylow2001"},"content":" task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"garylow2001"},"content":" taskListAsString.append(taskLine).append(\"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"garylow2001"},"content":" return \"Here are the tasks in your list:\\n\" + taskListAsString;","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"garylow2001"},"content":" * Displays all the tasks that matches the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"garylow2001"},"content":" * @param userInput the input String that the user has entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"garylow2001"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":147,"author":{"gitId":"garylow2001"},"content":" * @throws DukeException If an invalid keyword or no keyword is entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"garylow2001"},"content":" public String findTasks(String userInput) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":150,"author":{"gitId":"garylow2001"},"content":" String keyword \u003d Parser.getTaskDesc(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"garylow2001"},"content":" int count \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"garylow2001"},"content":" StringBuilder taskListAsString \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"garylow2001"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"garylow2001"},"content":" if (!task.containsKeyword(keyword)) continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"garylow2001"},"content":" if (task.containsKeyword(keyword) \u0026\u0026 count \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"garylow2001"},"content":" taskListAsString.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":157,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"garylow2001"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"garylow2001"},"content":" taskListAsString.append(count + \".\" + task + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":160,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"garylow2001"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"garylow2001"},"content":" return \"No matching tasks found!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":163,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"garylow2001"},"content":" return taskListAsString.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":165,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":166}},{"path":"src/main/java/Tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" * Represents a task with a deadline. A \u003ccode\u003eDeadline\u003c/code\u003e object","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":" * has a \u003ccode\u003eLocalDate\u003c/code\u003e deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" public Deadline(String description) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" // TODO: Date.now() when \"today\" is entered","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" // Split the input string by \"/by\" to separate description and deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" String[] splitString \u003d description.split(\"/by\", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" // Should throw error if there are multiple \"/by\" or no \"/by\"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" if (splitString.length \u003e\u003d2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" this.description \u003d splitString[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" String deadlineString \u003d splitString[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" this.deadline \u003d super.parseDate(deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" public Deadline(String description, String deadlineString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" // deadline will be in default yyyy-MM-dd format which can be parsed by LocalDate","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" this.deadline \u003d LocalDate.parse(deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" return \"[D]\" + super.getStatusIcon();","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" if (deadline \u003d\u003d null) return super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" return super.toString() + String.format(\" (by: %s)\",deadline.format(formatter));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" return \"D | \" + super.toFileString() + (deadline \u003d\u003d null ? \"\" : \" | \" + deadline.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":47}},{"path":"src/main/java/Tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":" * Represents an Event that will happen. An \u003ccode\u003eEvent\u003c/code\u003e object","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" * has a \u003ccode\u003eLocalDateTime\u003c/code\u003e start and end time.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" public Event(String description) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" // TODO: Check if /from is before /to","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" // TODO: Date.now() when \"today\" is entered","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" String[] fromParts \u003d description.split(\"/from\");","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" String[] toParts \u003d description.split(\"/to\");","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" if (fromParts.length \u003e\u003d 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" this.description \u003d fromParts[0].split(\"/to\")[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" String[] partAfterFrom \u003d fromParts[1].split(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" String startTimeString \u003d partAfterFrom[0].trim(); // it should be in (d/M/yyyy h:m a) eg (15/3/2023 6:40 PM)","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" // Format the string and parse it into startTime","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" this.startTime \u003d super.parseDateTime(startTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" if (partAfterFrom.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" // \u0027/to\u0027 is after \u0027/from\u0027","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" String endTimeString \u003d partAfterFrom[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" // Format the string and parse it into endTime","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" this.endTime \u003d super.parseDateTime(endTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" // \u0027/to\u0027 is before \u0027/from\u0027","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" String endTimeString \u003d fromParts[0].split(\"/to\")[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" // Format the string and parse it into endTime","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" this.endTime \u003d super.parseDateTime(endTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" } else if (toParts.length \u003e\u003d 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" String[] parts \u003d toParts[1].split(\"/from\");","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" this.description \u003d toParts[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" String endTimeString \u003d parts[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" // Format the string and parse it into endTime","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" this.endTime \u003d super.parseDateTime(endTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" if (parts.length \u003e 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" String startTimeString \u003d parts[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" // Format the string and parse it into endTime","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" this.startTime \u003d super.parseDateTime(startTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" public Event(String description, String startTimeString, String endTimeString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" this.startTime \u003d LocalDateTime.parse(startTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" this.endTime \u003d LocalDateTime.parse(endTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" return \"[E]\" + super.getStatusIcon();","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" if (startTime \u003d\u003d null \u0026\u0026 endTime \u003d\u003d null) return super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy h:m a\");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" return super.toString() + String.format(","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" \" (from %s to %s)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" startTime.format(formatter),","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" endTime.format(formatter)","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"garylow2001"},"content":" return \"E | \"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"garylow2001"},"content":" + super.toFileString()","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"garylow2001"},"content":" + (startTime \u003d\u003d null \u0026\u0026 endTime \u003d\u003d null","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"garylow2001"},"content":" ? \"\"","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"garylow2001"},"content":" : String.format(\" | %s | %s\", startTime, endTime));","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":83}},{"path":"src/main/java/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidDateFormatException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidDateTimeFormatException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" * Represents a task the user has created.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" // TODO: Make this class abstract?","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" protected boolean isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" public static final String DATE_FORMAT \u003d\"d/M/yyyy\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" public static final String DATETIME_FORMAT \u003d \"d/M/yyyy h:m a\";","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" * Retrieves the status of the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" * An \"X\" represents that the Task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" * @return The status of the Task as a String.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" return isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" * Marks the Task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" * Unmarks the Task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" * Returns the String representation of the Task to be displayed.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" * It contains the status and description of the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" * @return The String to be displayed.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" return getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" * Returns the String representation of the Task to be saved in a data file.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" * It contains the status and description of the Task with \"|\" as a divider.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" * @return The String to be saved as a line in the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" return isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" ? \"X | \" + description","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" : \"0 | \" + description;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" * Checks if the description contains the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":" * The check is non-case-sensitive.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"garylow2001"},"content":" * @param keyword The keyword that the user has entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"garylow2001"},"content":" * @return Returns true if the description contains the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"garylow2001"},"content":" public boolean containsKeyword(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"garylow2001"},"content":" return this.description.toLowerCase().contains(keyword.toLowerCase());","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"garylow2001"},"content":" public LocalDateTime parseDateTime(String dateTimeString) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"garylow2001"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(DATETIME_FORMAT);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"garylow2001"},"content":" return LocalDateTime.parse(dateTimeString, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"garylow2001"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"garylow2001"},"content":" throw new InvalidDateTimeFormatException();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"garylow2001"},"content":" public LocalDate parseDate(String dateString) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"garylow2001"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(DATE_FORMAT);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"garylow2001"},"content":" return LocalDate.parse(dateString, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"garylow2001"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"garylow2001"},"content":" throw new InvalidDateFormatException(); // Rethrow the exception if needed for higher-level error handling","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":102}},{"path":"src/main/java/Tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" * Represents a task that the user has to do.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" return \"[T]\" + super.getStatusIcon();","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" return \"T | \" + super.toFileString();","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":20}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" * Represents the User Interface of the Duke App.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" * Each \u003cCode\u003eUi\u003c/Code\u003e method displays a message to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" * Shows the welcome message when the user first opens the app.","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" * @return The welcome message.","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" String logo \u003d \"I\u0027m Chewy,\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" \"What can I do for you?\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" return \"Hello!\\n\" + logo;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" * Shows the Duke Error as a message.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" * @param e the DukeException thrown.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" * @return The custom Duke Error message.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" public String showDukeError(DukeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" return \":( Chewy can\u0027t understand! \" + e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" * Shows the list of commands that the user can type.","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" * @return The help message.","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" public String displayHelpMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" return \"List of available commands:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" + \" - todo \u003cdescription\u003e: Add a new todo task\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" + \" - deadline \u003cdescription\u003e /by \u003cdate\u003e: Add a new deadline task\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" + \" - event \u003cdescription\u003e /from \u003cstart\u003e /to \u003cend\u003e: Add a new event task with start and end time\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" + \" - list: Display the list of tasks\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" + \" - mark \u003ctaskNumber\u003e: Mark a task as done\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" + \" - unmark \u003ctaskNumber\u003e: Unmark a task as done\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" + \" - bye: Exit Chewy\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" // Add more commands in the future","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" * Shows the farewell message when the user types \u0027bye\u0027.","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" * @return The farewell message.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" public String displayFarewellMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" * Shows any other exception that is caught by the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" * @param e The Exception thrown.","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" * @return a message that shows the exception.","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" public String showException(Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" return \"Something unexpected happened. try \u0027help\u0027 to see a list of commands\";","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":60}},{"path":"src/main/resources/views/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"-Infinity\" 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-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" maxHeight\u003d\"-Infinity\"/\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"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":12,"author":{"gitId":"garylow2001"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":16}},{"path":"src/main/resources/views/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"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\"MainWindow\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"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":"garylow2001"},"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":"garylow2001"},"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":"garylow2001"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":19}},{"path":"src/test/java/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import Tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" public void printString_markAndUnmark_success() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" Deadline deadline \u003d new Deadline(\"xxx /by 2/4/2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[D][ ] xxx (by: 2 Apr 2023)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[D][X] xxx (by: 2 Apr 2023)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" deadline.unmarkAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[D][ ] xxx (by: 2 Apr 2023)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" public void createDeadline_invalidDeadline_exceptionThrown(){","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" Deadline deadline \u003d new Deadline(\"xxx /by yyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[D][ ] xxx (by: yyy)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"Invalid Date format. Here are some example dates:\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" \"6/3/2023, 16/12/2024\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":30}},{"path":"src/test/java/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import Tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" public void printString_markAndUnmark_success() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" Event event \u003d new Event(\"xxx /from 16/12/2024 6:30 PM /to 16/12/2024 8:30 PM\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[E][ ] xxx (from 16 Dec 2024 6:30 PM to 16 Dec 2024 8:30 PM)\", event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[E][X] xxx (from 16 Dec 2024 6:30 PM to 16 Dec 2024 8:30 PM)\", event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" event.unmarkAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[E][ ] xxx (from 16 Dec 2024 6:30 PM to 16 Dec 2024 8:30 PM)\", event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" public void createEvent_invalidEvent_exceptionThrown(){","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" Event event \u003d new Event(\"xxx /from yy /to zz\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[D][ ] xxx (from yy to zz)\", event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"Invalid DateTime format. Here are some example dates:\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" \"6/3/2023 5:30 AM, 16/12/2024 6:30PM\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":30}},{"path":"src/test/java/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":" public void printString_markAndUnmark_success(){","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" Todo todo \u003d new Todo(\"xxx\");","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[T][ ] xxx\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[T][X] xxx\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" todo.unmarkAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[T][ ] xxx\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":16}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"fakecommand","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"todo run script","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"deadline do something","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"deadline do something /by 24/10/2023","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"event some lecture /from 31/8/2023 6:30 PM 4pm /to 31/8/2023 8:30PM","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"event some recitation /to xx pm /from tomorrow 12pm","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":"delete","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"delete 3","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":17}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"# Chewy.Chewy project template","lastModifiedDate":"2023-09-16"},{"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":"garylow2001"},"content":"3. After that, locate the `src/main/java/Chewy.Chewy.java` file, right-click it, and choose `Run Chewy.Chewy.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":"-"},"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":{"garylow2001":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":"garylow2001"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"checkstyle {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-08"},{"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":"garylow2001"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" mainClass.set(\"Chewy.Chewy\")","lastModifiedDate":"2023-09-16"},{"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":"garylow2001"},"content":" archiveBaseName \u003d \"Chewy\"","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" archiveFileName \u003d \u0027Chewy.jar\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" enableAssertions \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"garylow2001":24,"-":40}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"T | 0 | xx","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"D | 0 | xxx | 2024-12-15","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"E | 0 | yyy | 2023-03-04T18:30 | 2023-03-04T17:30","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"garylow2001":3}},{"path":"src/main/java/Chewy/Chewy.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Chewy;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"public class Chewy {","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" public static final String DATA_FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" public Chewy(String filepath) {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" this.storage \u003d new Storage(filepath);","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" this.ui.showDukeError(e);","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" * Loads the list of tasks from the data file.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" * @return The status of loading the list of tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" public String loadTasks() {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" return \"Tasks loaded successfully!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" return \"Tasks failed to load\" + this.ui.showDukeError(e);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" return this.ui.showException(e);","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" * @return the welcome message.","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" return this.ui.showWelcome();","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" * Returns Chewy\u0027s response to the user\u0027s input.","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" * @return Chewy\u0027s response.","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" return getResponseFromUserInput(userInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" return this.ui.showDukeError(e);","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" return this.ui.showException(e);","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" private String getResponseFromUserInput(String userInput) throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" return this.ui.displayFarewellMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.equals(\"help\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" return this.ui.displayHelpMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.equals(\"list\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" return this.taskList.listTasks();","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" return this.taskList.markTaskAsDone(userInput)","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" + this.taskList.saveTask(this.storage.filepath);","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" return this.taskList.unmarkTaskAsDone(userInput)","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":" + this.taskList.saveTask(this.storage.filepath);","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" return this.taskList.deleteTask(userInput)","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":" + this.taskList.saveTask(this.storage.filepath);","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"garylow2001"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"garylow2001"},"content":" return this.taskList.findTasks(userInput);","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"garylow2001"},"content":" return this.taskList.addTask(userInput)","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"garylow2001"},"content":" + this.taskList.saveTask(this.storage.filepath);","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":84}},{"path":"src/main/java/Chewy/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Chewy;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" * The Launcher to launch the JavaFX application.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":12}},{"path":"src/main/java/Chewy/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Chewy;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import Gui.MainWindow;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" * A GUI for Chewy using FXML.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" private final Chewy chewy \u003d new Chewy(Chewy.DATA_FILE_PATH);","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" * Starts the program as a java application.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" * primary stages.","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/views/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" MainWindow mainWindow \u003d fxmlLoader.\u003cMainWindow\u003egetController();","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" mainWindow.setChewy(chewy);","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" mainWindow.onStart();","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":42}},{"path":"src/main/java/Chewy/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Chewy;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidCommandException; // warning is shown in javadocs if not imported","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidTaskException; // warning is shown in javadocs if not imported","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import Exceptions.NoDescriptionException; // warning is shown in javadocs if not imported","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import Tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import Tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"import Tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"import Tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" * Parser that helps with parsing user inputs as Strings to various","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" * Objects and types.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" * Parses the given line from file as a String and","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" * returns a Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" * @param lineFromFile The given line from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" * @return task The Task object created by the line after parsing.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" * @throws IllegalArgumentException If the line is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" public static Task parseTaskFromFileString(String lineFromFile) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" String[] lineParts \u003d lineFromFile.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" String taskType \u003d lineParts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" boolean isDone \u003d lineParts[1].equals(\"X\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" String description \u003d lineParts[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" String by;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" if (lineParts.length \u003d\u003d 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" by \u003d lineParts[3];","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" task \u003d new Deadline(description, by); // add by","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" task \u003d new Deadline(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" String from;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" String to;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" if (lineParts.length \u003d\u003d 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" from \u003d lineParts[3];","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" to \u003d lineParts[4];","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" task \u003d new Event(description, from, to); // add from and to","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" task \u003d new Event(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" // Line does not start with a task value (T,D,E), file corrupted, throw error","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" throw new IllegalArgumentException(\"Invalid Tasks.Task Type\");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" if (isDone) {","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" * Parses the user input and returns the command specified by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" * @return inputCommand The command that the user has entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":" public static String getCommand(String userInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":" assert !userInput.isBlank() : \"user input should not be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" String[] inputParts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"garylow2001"},"content":" // Check if a valid addTask command is entered","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"garylow2001"},"content":" String inputCommand \u003d inputParts[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"garylow2001"},"content":" if (!(inputCommand.equals(\"todo\") || inputCommand.equals(\"deadline\") || inputCommand.equals(\"event\"))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"garylow2001"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"garylow2001"},"content":" return inputCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"garylow2001"},"content":" * Parses the input given by the user and returns the task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"garylow2001"},"content":" * @return The description of the task entered by the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"garylow2001"},"content":" * @throws NoDescriptionException If no description is found.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"garylow2001"},"content":" public static String getTaskDesc(String userInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"garylow2001"},"content":" String[] inputParts \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"garylow2001"},"content":" // Check if a valid addTask command is entered and if there is a description","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"garylow2001"},"content":" if (inputParts.length \u003c 2) throw new NoDescriptionException();","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"garylow2001"},"content":" if (inputParts[1].trim().equals(\"\")) throw new NoDescriptionException();","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"garylow2001"},"content":" return inputParts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"garylow2001"},"content":" * Parses the input given by the user and returns the task id.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"garylow2001"},"content":" * @param inputString The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"garylow2001"},"content":" * @return The id of the task (1-indexed).","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"garylow2001"},"content":" * @throws InvalidTaskException If the task id is in an invalid format e.g a String.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"garylow2001"},"content":" public static int getTaskId(String inputString) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"garylow2001"},"content":" String[] inputParts \u003d inputString.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"garylow2001"},"content":" if (inputParts.length !\u003d 2) throw new NoTaskFoundException();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"garylow2001"},"content":" int taskId \u003d Integer.parseInt(inputParts[1].trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"garylow2001"},"content":" return taskId - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"garylow2001"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"garylow2001"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":118}},{"path":"src/main/java/Chewy/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Chewy;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import Exceptions.NoTaskFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import Tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" * Represents the Storage system of the Chewy App. A \u003ccode\u003eStorage\u003c/code\u003e object stores","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" * the location where the data is loaded from","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" String filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" * Loads the tasks in the file specified by filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" * @return tasks List of Tasks from the loaded file.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" * @throws NoTaskFoundException If no tasks are found in the filepath or","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" * the filepath is not specified or does not exist.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" public List\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" System.out.println(\"Loading tasks...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(filepath))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" Task task \u003d Parser.parseTaskFromFileString(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" throw new NoTaskFoundException();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":44}},{"path":"src/main/java/Chewy/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Chewy;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import Tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import Tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import Tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import Tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" * Represents the list of tasks in the Chewy App. A \u003ccode\u003eTaskList\u003c/code\u003e object contains","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" * the list of tasks and task operations.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" public TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" this.taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" * Saves all the tasks in TaskList to the output file.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" * @param filepath the path to the file to save tasks in.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" * @return A message that confirms the task as saved.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" public String saveTask(String filepath) {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" assert filepath !\u003d null : \"data filepath should be specified\";","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" System.out.println(\"Saving tasks...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" try (PrintWriter writer \u003d new PrintWriter(filepath)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" writer.println(task.toFileString());","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" return \"Error saving tasks to file\" + e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" return \"[Task saved successfully]\";","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" * Adds a task to TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" * Displays the number of tasks in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" * @return A message that confirms the task as added.","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" * @throws DukeException If the command is not a valid addTask command.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" public String addTask(String userInput) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" assert !userInput.isBlank() : \"user input should not be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" String inputCommand \u003d Parser.getCommand(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" String taskDesc \u003d Parser.getTaskDesc(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" assert !inputCommand.isBlank();","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" assert !taskDesc.isBlank();","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" switch (inputCommand) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" task \u003d new Todo(taskDesc);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" task \u003d new Deadline(taskDesc);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" task \u003d new Event(taskDesc);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":" throw new DukeException(\"Error, see \u0027help\u0027 for a list of commands\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":" return \"Got it. I\u0027ve added this task:\\n\\t\" + task + \"\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"garylow2001"},"content":" + String.format(\"Now you have %d tasks in the list%n\", taskList.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"garylow2001"},"content":" * Removes a task from the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"garylow2001"},"content":" * Displays the number of tasks in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"garylow2001"},"content":" * @return A message that confirms the task as deleted.","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"garylow2001"},"content":" * @throws InvalidTaskException If the task id entered does not correspond to any task","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"garylow2001"},"content":" public String deleteTask(String userInput) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"garylow2001"},"content":" assert !userInput.isBlank() : \"user input should not be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"garylow2001"},"content":" int taskId \u003d Parser.getTaskId(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"garylow2001"},"content":" if (taskId \u003c 0 || taskId \u003e taskList.size() - 1) throw new InvalidTaskException();","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"garylow2001"},"content":" assert taskId \u003e\u003d 0 \u0026\u0026 taskId \u003c\u003d taskList.size() - 1 : \"task Id should be between 0 and total tasks - 1\";","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"garylow2001"},"content":" Task deletedTask \u003d taskList.remove(taskId);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"garylow2001"},"content":" assert !taskList.contains(deletedTask) : \"taskList should not contain the deleted task anymore\";","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"garylow2001"},"content":" return \"Noted. I\u0027ve removed this task:\\n\\t\" + deletedTask + \"\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"garylow2001"},"content":" + String.format(\"Now you have %d tasks in the list%n\", taskList.size());","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"garylow2001"},"content":" * Unmarks a task in the TaskList as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"garylow2001"},"content":" * @return A message that confirms the task as unmarked.","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"garylow2001"},"content":" * @throws InvalidTaskException If the task id entered does not correspond to any task","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"garylow2001"},"content":" public String unmarkTaskAsDone(String userInput) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"garylow2001"},"content":" assert !userInput.isBlank() : \"user input should not be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"garylow2001"},"content":" int taskId \u003d Parser.getTaskId(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"garylow2001"},"content":" if (taskId \u003c 0 || taskId \u003e taskList.size() - 1) throw new InvalidTaskException();","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"garylow2001"},"content":" assert taskId \u003e\u003d 0 \u0026\u0026 taskId \u003c\u003d taskList.size() - 1 : \"task Id should be between 0 and total tasks - 1\";","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"garylow2001"},"content":" Task selectedTask \u003d taskList.get(taskId);","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"garylow2001"},"content":" selectedTask.unmarkAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"garylow2001"},"content":" assert selectedTask.getStatusIcon().equals(\"[ ]\") : \"task should be undone\";","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"garylow2001"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + selectedTask + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"garylow2001"},"content":" * Marks a task in the TaskList as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"garylow2001"},"content":" * @param userInput The String which the user has typed.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"garylow2001"},"content":" * @return A message that confirms the task as marked.","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"garylow2001"},"content":" * @throws InvalidTaskException If the task id entered does not correspond to any task","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"garylow2001"},"content":" public String markTaskAsDone(String userInput) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"garylow2001"},"content":" assert !userInput.isBlank() : \"user input should not be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"garylow2001"},"content":" int taskId \u003d Parser.getTaskId(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"garylow2001"},"content":" if (taskId \u003c 0 || taskId \u003e taskList.size() - 1) throw new InvalidTaskException();","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"garylow2001"},"content":" assert taskId \u003e\u003d 0 \u0026\u0026 taskId \u003c\u003d taskList.size() - 1 : \"task Id should be between 0 and total tasks - 1\";","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"garylow2001"},"content":" Task selectedTask \u003d taskList.get(taskId);","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"garylow2001"},"content":" selectedTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"garylow2001"},"content":" assert selectedTask.getStatusIcon().equals(\"[X]\") : \"task should be done\";","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"garylow2001"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + selectedTask + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"garylow2001"},"content":" * Lists all the tasks in the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"garylow2001"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"garylow2001"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"garylow2001"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"garylow2001"},"content":" return \"Chewy detected no task for you!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":142,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"garylow2001"},"content":" StringBuilder taskListAsString \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":144,"author":{"gitId":"garylow2001"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"garylow2001"},"content":" Task task \u003d taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"garylow2001"},"content":" String taskLine \u003d String.format(\"%d.%s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"garylow2001"},"content":" i + 1,","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"garylow2001"},"content":" task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"garylow2001"},"content":" taskListAsString.append(taskLine).append(\"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":150,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"garylow2001"},"content":" assert !taskListAsString.toString().isEmpty() : \"tasks should not be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":152,"author":{"gitId":"garylow2001"},"content":" return \"Here are the tasks in your list:\\n\" + taskListAsString;","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"garylow2001"},"content":" * Displays all the tasks that matches the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"garylow2001"},"content":" * @param userInput the input String that the user has entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"garylow2001"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-07"},{"lineNumber":161,"author":{"gitId":"garylow2001"},"content":" * @throws DukeException If an invalid keyword or no keyword is entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"garylow2001"},"content":" public String findTasks(String userInput) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":164,"author":{"gitId":"garylow2001"},"content":" String keyword \u003d Parser.getTaskDesc(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"garylow2001"},"content":" int count \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"garylow2001"},"content":" StringBuilder taskListAsString \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":167,"author":{"gitId":"garylow2001"},"content":" for (Task task: taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"garylow2001"},"content":" if (!task.containsKeyword(keyword)) continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"garylow2001"},"content":" if (task.containsKeyword(keyword) \u0026\u0026 count \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"garylow2001"},"content":" taskListAsString.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":171,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"garylow2001"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"garylow2001"},"content":" taskListAsString.append(count).append(\".\").append(task).append(\"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"garylow2001"},"content":" assert count \u003e 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":175,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"garylow2001"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"garylow2001"},"content":" return \"No matching tasks found!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":178,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"garylow2001"},"content":" assert !taskListAsString.toString().isBlank() : \"list of tasks should not be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":180,"author":{"gitId":"garylow2001"},"content":" return taskListAsString.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":181,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":182}},{"path":"src/main/java/Chewy/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Chewy;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" * Represents the User Interface of the Chewy App.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" * Each \u003cCode\u003eUi\u003c/Code\u003e method displays a message to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" * Shows the welcome message when the user first opens the app.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" * @return The welcome message.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" String logo \u003d \"I\u0027m Chewy,\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" \"What can I do for you?\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" return \"Hello!\\n\" + logo;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" * Shows the Duke Error as a message.","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" * @param e the DukeException thrown.","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" * @return The custom Duke Error message.","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" public String showDukeError(DukeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" return \":( Chewy can\u0027t understand! \" + e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" * Shows the list of commands that the user can type.","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" * @return The help message.","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" public String displayHelpMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" return \"List of available commands:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" + \" - todo \u003cdescription\u003e: Add a new todo task\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" + \" - deadline \u003cdescription\u003e /by \u003cdate\u003e: Add a new deadline task\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" + \" - event \u003cdescription\u003e /from \u003cstart\u003e /to \u003cend\u003e: Add a new event task with start and end time\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" + \" - list: Display the list of tasks\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" + \" - mark \u003ctaskNumber\u003e: Mark a task as done\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" + \" - unmark \u003ctaskNumber\u003e: Unmark a task as done\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" + \" - bye: Exit Chewy\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" // Add more commands in the future","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" * Shows the farewell message when the user types \u0027bye\u0027.","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" * @return The farewell message.","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" public String displayFarewellMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" * Shows any other exception that is caught by the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" * @param e The Exception thrown.","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" * @return a message that shows the exception.","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" public String showException(Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" return \"Something unexpected happened. try \u0027help\u0027 to see a list of commands\";","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":62}},{"path":"src/main/java/Exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Exceptions/FileNotLoadedException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class FileNotLoadedException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public FileNotLoadedException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"No file data. Creating data file and starting new task list...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"Invalid command entered. See \u0027help\u0027 for a list of commands you can enter\");","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Exceptions/InvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class InvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public InvalidDateFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"Invalid Date format. Here are some example dates:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" + \"6/3/2023, 16/12/2024\");","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":8}},{"path":"src/main/java/Exceptions/InvalidDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class InvalidDateTimeFormatException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public InvalidDateTimeFormatException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"Invalid DateTime format. Here are some example dates:\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" + \"6/3/2023 5:30 AM, 16/12/2024 6:30PM\");","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":8}},{"path":"src/main/java/Exceptions/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class InvalidTaskException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public InvalidTaskException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"Invalid Task Id entered, see \u0027list\u0027 for the list of tasks\");","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Exceptions/InvalidTaskFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class InvalidTaskFormatException extends DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public InvalidTaskFormatException() {","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"Invalid format entered for the given task. See \u0027help\u0027 for the list of valid task formats.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"garylow2001":8}},{"path":"src/main/java/Exceptions/NoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class NoDescriptionException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public NoDescriptionException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"No description found. Please enter a description after your command.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Exceptions/NoTaskFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"public class NoTaskFoundException extends DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" public NoTaskFoundException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" super(\"No Task found. Please enter a Task Id after your command\");","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":7}},{"path":"src/main/java/Gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Gui;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"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":"garylow2001"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" assert !text.isBlank();","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/views/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" * Returns the DialogBox of the user on the right side of the Chat.","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" * @param text The message the user has typed.","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" * @param img The image of the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" * @return The DialogBox of the user.","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" * Returns the DialogBox of Chewy on the left side of the Chat.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" * @param text The message Chewy responded with.","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" * @param img The image of Chewy.","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" * @return The DialogBox of Chewy.","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" public static DialogBox getChewyDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":76}},{"path":"src/main/java/Gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Gui;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Chewy.Chewy;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" * Controller for Gui.MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" private Chewy chewy;","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/personicon.jpg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" private final Image chewyImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/chewbaccaicon.jpg\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" public void setChewy(Chewy chewy) {","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" this.chewy \u003d chewy;","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" * Creates the two dialog boxes that are shown at the start of the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" * One of them is the welcome message and the other is the load task status.","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" public void onStart() {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" DialogBox.getChewyDialog(this.chewy.showWelcome(), chewyImage),","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" DialogBox.getChewyDialog(this.chewy.loadTasks(), chewyImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Chewy\u0027s reply","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" * and then appends them to the dialog container.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" * Clears the user input after processing.","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" String response \u003d chewy.getResponse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" DialogBox.getChewyDialog(response, chewyImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":64}},{"path":"src/main/java/Tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" * Represents a task with a deadline. A \u003ccode\u003eDeadline\u003c/code\u003e object","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" * has a \u003ccode\u003eLocalDate\u003c/code\u003e deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" public Deadline(String description) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" initializeDeadline();","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" private void initializeDeadline() throws DukeException{","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" String[] splitString \u003d description.split(\"/by\", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" if (splitString.length !\u003d 2) throw new InvalidTaskFormatException();","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" this.description \u003d splitString[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" String deadlineString \u003d splitString[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" this.deadline \u003d super.parseDate(deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" // Should throw error if there are multiple \"/by\" or no \"/by\"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" if (splitString.length \u003e\u003d2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" assert !splitString[0].isBlank() : \"description should not be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" this.description \u003d splitString[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" assert !splitString[1].isBlank() : \"deadline should not be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" String deadlineString \u003d splitString[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" this.deadline \u003d super.parseDate(deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e master","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" public Deadline(String description, String deadlineString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" // deadline will be in default yyyy-MM-dd format which can be parsed by LocalDate","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" this.deadline \u003d LocalDate.parse(deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" return \"[D]\" + super.getStatusIcon();","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" if (deadline \u003d\u003d null) return super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" return super.toString() + String.format(\" (by: %s)\",deadline.format(formatter));","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" return \"D | \" + super.toFileString() + (deadline \u003d\u003d null ? \"\" : \" | \" + deadline.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":62}},{"path":"src/main/java/Tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidTaskFormatException;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" * Represents an Event that will happen. An \u003ccode\u003eEvent\u003c/code\u003e object","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" * has a \u003ccode\u003eLocalDateTime\u003c/code\u003e start and end time.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" public Event(String description) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" initializeEvent();","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" private void initializeEvent() throws DukeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" String[] splitString \u003d description.split(\"/from\");","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" if (splitString.length \u003c 2) throw new InvalidTaskFormatException();","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" this.description \u003d splitString[0].split(\"/to\")[0].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" String[] partFromTo \u003d splitString[1].split(\"/to\");","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" String startTimeString \u003d partFromTo[0].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" this.startTime \u003d super.parseDateTime(startTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" String endTimeString;","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" if (partFromTo.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" // Formats the string if \u0027/to\u0027 comes after \u0027/from\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" endTimeString \u003d partFromTo[1].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" // Formats the string if \u0027/to\u0027 comes before \u0027/from\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" endTimeString \u003d splitString[0].split(\"/to\")[1].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" if (fromParts.length \u003e\u003d 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" assert !fromParts[0].isBlank();","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" this.description \u003d fromParts[0].split(\"/to\")[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":" assert !fromParts[1].isBlank();","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" String[] partAfterFrom \u003d fromParts[1].split(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" String startTimeString \u003d partAfterFrom[0].trim(); // it should be in (d/M/yyyy h:m a) eg (15/3/2023 6:40 PM)","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" // Format the string and parse it into startTime","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" this.startTime \u003d super.parseDateTime(startTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" if (partAfterFrom.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":" // \u0027/to\u0027 is after \u0027/from\u0027","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" assert !partAfterFrom[0].isBlank();","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" assert !partAfterFrom[1].isBlank();","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" String endTimeString \u003d partAfterFrom[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" // Format the string and parse it into endTime","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" this.endTime \u003d super.parseDateTime(endTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" // \u0027/to\u0027 is before \u0027/from\u0027","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" String endTimeString \u003d fromParts[0].split(\"/to\")[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" // Format the string and parse it into endTime","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" this.endTime \u003d super.parseDateTime(endTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" } else if (toParts.length \u003e\u003d 2) {","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" assert !toParts[0].isBlank();","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" assert !toParts[1].isBlank();","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" String[] parts \u003d toParts[1].split(\"/from\");","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" this.description \u003d toParts[0].trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" String endTimeString \u003d parts[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" // Format the string and parse it into endTime","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" this.endTime \u003d super.parseDateTime(endTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" if (parts.length \u003e 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" String startTimeString \u003d parts[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" // Format the string and parse it into endTime","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":" this.startTime \u003d super.parseDateTime(startTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e master","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":" this.endTime \u003d super.parseDateTime(endTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"garylow2001"},"content":" public Event(String description, String startTimeString, String endTimeString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"garylow2001"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"garylow2001"},"content":" assert !startTimeString.isBlank() \u0026\u0026 !endTimeString.isBlank() : \"No start and end time\";","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"garylow2001"},"content":" this.startTime \u003d LocalDateTime.parse(startTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"garylow2001"},"content":" this.endTime \u003d LocalDateTime.parse(endTimeString);","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"garylow2001"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"garylow2001"},"content":" return \"[E]\" + super.getStatusIcon();","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"garylow2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"garylow2001"},"content":" if (startTime \u003d\u003d null \u0026\u0026 endTime \u003d\u003d null) return super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"garylow2001"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy h:m a\");","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"garylow2001"},"content":" return super.toString() + String.format(","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"garylow2001"},"content":" \" (from %s to %s)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"garylow2001"},"content":" startTime.format(formatter),","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"garylow2001"},"content":" endTime.format(formatter)","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"garylow2001"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":101,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"garylow2001"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"garylow2001"},"content":" return \"E | \"","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"garylow2001"},"content":" + super.toFileString()","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"garylow2001"},"content":" + (startTime \u003d\u003d null \u0026\u0026 endTime \u003d\u003d null","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"garylow2001"},"content":" ? \"\"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"garylow2001"},"content":" : String.format(\" | %s | %s\", startTime, endTime));","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":110}},{"path":"src/main/java/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidDateFormatException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import Exceptions.InvalidDateTimeFormatException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" * Represents a task the user has created.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" protected boolean isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" public static final String DATE_FORMAT \u003d\"d/M/yyyy\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" public static final String DATETIME_FORMAT \u003d \"d/M/yyyy h:m a\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" * Retrieves the status of the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" * An \"X\" represents that the Task is done.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":" * @return The status of the Task as a String.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"garylow2001"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"garylow2001"},"content":" return isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"garylow2001"},"content":" * Marks the Task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"garylow2001"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"garylow2001"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"garylow2001"},"content":" * Unmarks the Task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"garylow2001"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"garylow2001"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"garylow2001"},"content":" * Returns the String representation of the Task to be displayed.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"garylow2001"},"content":" * It contains the status and description of the Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"garylow2001"},"content":" * @return The String to be displayed.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"garylow2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"garylow2001"},"content":" return getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"garylow2001"},"content":" * Returns the String representation of the Task to be saved in a data file.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"garylow2001"},"content":" * It contains the status and description of the Task with \"|\" as a divider.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"garylow2001"},"content":" * @return The String to be saved as a line in the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"garylow2001"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"garylow2001"},"content":" return isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"garylow2001"},"content":" ? \"X | \" + description","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"garylow2001"},"content":" : \"0 | \" + description;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"garylow2001"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"garylow2001"},"content":" * Checks if the description contains the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"garylow2001"},"content":" * The check is non-case-sensitive.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"garylow2001"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"garylow2001"},"content":" * @param keyword The keyword that the user has entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"garylow2001"},"content":" * @return Returns true if the description contains the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"garylow2001"},"content":" public boolean containsKeyword(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"garylow2001"},"content":" assert !keyword.isBlank() : \"keyword should not be empty\";","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"garylow2001"},"content":" return this.description.toLowerCase().contains(keyword.toLowerCase());","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"garylow2001"},"content":" public LocalDateTime parseDateTime(String dateTimeString) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"garylow2001"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(DATETIME_FORMAT);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"garylow2001"},"content":" return LocalDateTime.parse(dateTimeString, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"garylow2001"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"garylow2001"},"content":" throw new InvalidDateTimeFormatException();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"garylow2001"},"content":" public LocalDate parseDate(String dateString) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"garylow2001"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(DATE_FORMAT);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"garylow2001"},"content":" return LocalDate.parse(dateString, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"garylow2001"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"garylow2001"},"content":" throw new InvalidDateFormatException(); // Rethrow the exception if needed for higher-level error handling","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":102}},{"path":"src/main/java/Tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"package Tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":" * Represents a task that the user has to do.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" return \"[T]\" + super.getStatusIcon();","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" return \"T | \" + super.toFileString();","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":20}},{"path":"src/main/resources/views/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"-Infinity\" 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-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" maxHeight\u003d\"-Infinity\"/\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"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":12,"author":{"gitId":"garylow2001"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":16}},{"path":"src/main/resources/views/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"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-16"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"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":"garylow2001"},"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":"garylow2001"},"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":"garylow2001"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"garylow2001":19}},{"path":"src/test/java/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import Tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" public void printString_markAndUnmark_success() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" Deadline deadline \u003d new Deadline(\"xxx /by 2/4/2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[D][ ] xxx (by: 2 Apr 2023)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[D][X] xxx (by: 2 Apr 2023)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" deadline.unmarkAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[D][ ] xxx (by: 2 Apr 2023)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" public void createDeadline_invalidDeadline_exceptionThrown(){","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" Deadline deadline \u003d new Deadline(\"xxx /by yyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[D][ ] xxx (by: yyy)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"Invalid Date format. Here are some example dates:\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" \"6/3/2023, 16/12/2024\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":30}},{"path":"src/test/java/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import Tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" public void printString_markAndUnmark_success() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" Event event \u003d new Event(\"xxx /from 16/12/2024 6:30 PM /to 16/12/2024 8:30 PM\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[E][ ] xxx (from 16 Dec 2024 6:30 PM to 16 Dec 2024 8:30 PM)\", event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" event.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[E][X] xxx (from 16 Dec 2024 6:30 PM to 16 Dec 2024 8:30 PM)\", event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" event.unmarkAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[E][ ] xxx (from 16 Dec 2024 6:30 PM to 16 Dec 2024 8:30 PM)\", event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"garylow2001"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"garylow2001"},"content":" public void createEvent_invalidEvent_exceptionThrown(){","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"garylow2001"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"garylow2001"},"content":" Event event \u003d new Event(\"xxx /from yy /to zz\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[D][ ] xxx (from yy to zz)\", event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"garylow2001"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"garylow2001"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"Invalid DateTime format. Here are some example dates:\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"garylow2001"},"content":" \"6/3/2023 5:30 AM, 16/12/2024 6:30PM\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":30}},{"path":"src/test/java/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"import Tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":" public void printString_markAndUnmark_success(){","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":" Todo todo \u003d new Todo(\"xxx\");","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[T][ ] xxx\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[T][X] xxx\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":" todo.unmarkAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":" assertEquals(\"[T][ ] xxx\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"garylow2001":16}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"garylow2001"},"content":"fakecommand","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"garylow2001"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"garylow2001"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"garylow2001"},"content":"todo run script","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"garylow2001"},"content":"deadline do something","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"garylow2001"},"content":"deadline do something /by 24/10/2023","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"garylow2001"},"content":"event some lecture /from 31/8/2023 6:30 PM 4pm /to 31/8/2023 8:30PM","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"garylow2001"},"content":"event some recitation /to xx pm /from tomorrow 12pm","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"garylow2001"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"garylow2001"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"garylow2001"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"garylow2001"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"garylow2001"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"garylow2001"},"content":"delete","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"garylow2001"},"content":"delete 3","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"garylow2001"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"garylow2001"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"garylow2001":17}}] diff --git a/garylow2001_ip_master/commits.json b/garylow2001_ip_master/commits.json index 78578c75..d74c3ad9 100644 --- a/garylow2001_ip_master/commits.json +++ b/garylow2001_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"garylow2001":[{"date":"2023-08-23","commitResults":[{"hash":"567284e90422eca47c68ba86f78136e9fb96c305","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"5e539e0c1c88a331612c53640194bce3e47acf17","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"569255c4f09fb4952726a7f125eea68cc2da7fdf","isMergeCommit":false,"messageTitle":"minor changes to the text","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"4f89c68383946986a3253ba4dec1d09d10e49a76","isMergeCommit":false,"messageTitle":"Added scanner to read input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"7e4689c18928bd1ce48423fe1dff72af5b2d6ea0","isMergeCommit":false,"messageTitle":"Added tasks list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}},{"hash":"d27b6ba194f2291edb7614a89df38f9c6a5a4656","isMergeCommit":false,"messageTitle":"Added marking and unmarking tasks, with error handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"878fd3ac2a64e4acf33928e92a4efe272cb8e692","isMergeCommit":false,"messageTitle":"Added Tasks, mark and unmark tasks, and error handling","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":11}}},{"hash":"95d7d2c9b2af91090367af6802b0ea216c09554f","isMergeCommit":false,"messageTitle":"Added Deadline, Event and Todo. Handle specific commands such as \"/by\" and \"/from\" from each class.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":10}}},{"hash":"75adc39eda40598b1d6cebdf19bf4c77d43af356","isMergeCommit":false,"messageTitle":"\"Show number of tasks after adding each task\"","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"ccbc12118e44a95cab2ca1d7929b81f07df83cba","isMergeCommit":false,"messageTitle":"Added test cases and expected results","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"a9b6b8b30211c38a5cbec0cdce398ca4ae5910b1","isMergeCommit":false,"messageTitle":"Added more tests","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"fb1cc19a65ba85cf73b3de22ac6dd2b8bd81dcd0","isMergeCommit":false,"messageTitle":"Added Duke Exceptions and a help message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":22}}},{"hash":"551150ac5878c3df0f8bb577e59381bb8153ac66","isMergeCommit":false,"messageTitle":"Change placement of throw and catch","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":59}}},{"hash":"454dc66cba125372d4758aa6b43becef0f760648","isMergeCommit":false,"messageTitle":"Added delete command. Added test cases. Added NoTaskFoundException.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":41,"deletions":9}}}]},{"date":"2023-08-29","commitResults":[{"hash":"4da3c4645d211a92c7183a5b3396e99d4524786b","isMergeCommit":false,"messageTitle":"Add save tasks and load tasks function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":109,"deletions":0}}},{"hash":"0f5e99fafcadf0c1a503617e39c69927cd8c0454","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c0e3a0dce1be6a46dcea1cd5d174275d641dc9b0","isMergeCommit":false,"messageTitle":"Add Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":95,"deletions":22}}},{"hash":"d9bd45bd406e3b3c965da4c1dde043b63e33ff52","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"53b225f55cc34b54b9afea333389fd86640a3e71","isMergeCommit":false,"messageTitle":"Refactor code into Parser, Storage, TaskList, Ui","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5},"java":{"insertions":242,"deletions":196}}},{"hash":"38572e8c5e27b4a13dd0e10099a2221f41198e0c","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"92e7c47b8eb683f6363ce9dcc933ed19d267d919","isMergeCommit":false,"messageTitle":"Refactor Exceptions and Tasks into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":57}}},{"hash":"199702abeff2c1fd24db7d0e82ae0560c682d9da","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"82bb767f5a1bb551734cebc21a7d4ce0bfe5481e","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"b711bf8c71caf33c542ccbc8bb145c4e37c37222","isMergeCommit":false,"messageTitle":"Add JUnit testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":4}}},{"hash":"2573a6cd5e9c50e4a89bb1fcac61d318c1467274","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"2317e66dde20838e59677f6a10aaed0256856f5a","isMergeCommit":false,"messageTitle":"Add JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"1abbaf986d8a5634a2254c3426a494317d8214ba","isMergeCommit":false,"messageTitle":"Add JavaDocs to methods and classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":7}}},{"hash":"45cb048e3aac6bf119c708b6668be897f6ac3c75","isMergeCommit":false,"messageTitle":"Refactor Duke, Storage, Task, Event and Todo to eliminate magic literals","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":13}}},{"hash":"f66f4f72c8a987a7765a90a0ddd66b56c29f7ced","isMergeCommit":false,"messageTitle":"Add find operation to find task by keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":1}}},{"hash":"f1fed17e372afa004c458d7708c75ba21bb72b22","isMergeCommit":false,"messageTitle":"Add JavaDocs to new methods created from find operation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"ddca30e26926935252ecc313e2bfc176603f7e8e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Tasks/Task.java\n#\tsrc/main/java/Tasks/Todo.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ed21d350a3d5932c87f7b513a1c65d265539a9cd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"54f1d90eb33fc0aefa859e7282edba05ba8cf276","isMergeCommit":false,"messageTitle":"Add JavaFX and FXML files for UI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":2},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":172,"deletions":28}}},{"hash":"597f7181ffca12b1d75a6cf513406f91724eb0e7","isMergeCommit":false,"messageTitle":"Refactor TaskList, Ui and Duke to return Duke response to user input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"fxml":{"insertions":3,"deletions":3},"java":{"insertions":176,"deletions":90}}},{"hash":"82a3c3f91b799ab6442838ad53bee302c7081304","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"7e740fc56e7dee1c121aae72d495714c3d61a37a","isMergeCommit":false,"messageTitle":"Add Checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":2,"deletions":0}}}]},{"date":"2023-09-12","commitResults":[{"hash":"e41001569c5049258db86fcdbe9cef82393b1a3f","isMergeCommit":false,"messageTitle":"Configure build.gradle to launch new jar file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"garylow2001":{"java":1029,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":23,"txt":21}},"authorContributionVariance":{"garylow2001":36753.273},"authorDisplayNameMap":{"garylow2001":"CS2103T-F08-2 LOW ..GARY"}} +{"authorDailyContributionsMap":{"garylow2001":[{"date":"2023-08-23","commitResults":[{"hash":"567284e90422eca47c68ba86f78136e9fb96c305","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"5e539e0c1c88a331612c53640194bce3e47acf17","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"569255c4f09fb4952726a7f125eea68cc2da7fdf","isMergeCommit":false,"messageTitle":"minor changes to the text","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"4f89c68383946986a3253ba4dec1d09d10e49a76","isMergeCommit":false,"messageTitle":"Added scanner to read input","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"7e4689c18928bd1ce48423fe1dff72af5b2d6ea0","isMergeCommit":false,"messageTitle":"Added tasks list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}},{"hash":"d27b6ba194f2291edb7614a89df38f9c6a5a4656","isMergeCommit":false,"messageTitle":"Added marking and unmarking tasks, with error handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"878fd3ac2a64e4acf33928e92a4efe272cb8e692","isMergeCommit":false,"messageTitle":"Added Tasks, mark and unmark tasks, and error handling","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":11}}},{"hash":"95d7d2c9b2af91090367af6802b0ea216c09554f","isMergeCommit":false,"messageTitle":"Added Deadline, Event and Todo. Handle specific commands such as \"/by\" and \"/from\" from each class.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":10}}},{"hash":"75adc39eda40598b1d6cebdf19bf4c77d43af356","isMergeCommit":false,"messageTitle":"\"Show number of tasks after adding each task\"","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"ccbc12118e44a95cab2ca1d7929b81f07df83cba","isMergeCommit":false,"messageTitle":"Added test cases and expected results","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"a9b6b8b30211c38a5cbec0cdce398ca4ae5910b1","isMergeCommit":false,"messageTitle":"Added more tests","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"fb1cc19a65ba85cf73b3de22ac6dd2b8bd81dcd0","isMergeCommit":false,"messageTitle":"Added Duke Exceptions and a help message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":22}}},{"hash":"551150ac5878c3df0f8bb577e59381bb8153ac66","isMergeCommit":false,"messageTitle":"Change placement of throw and catch","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":59}}},{"hash":"454dc66cba125372d4758aa6b43becef0f760648","isMergeCommit":false,"messageTitle":"Added delete command. Added test cases. Added NoTaskFoundException.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":41,"deletions":9}}}]},{"date":"2023-08-29","commitResults":[{"hash":"4da3c4645d211a92c7183a5b3396e99d4524786b","isMergeCommit":false,"messageTitle":"Add save tasks and load tasks function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":109,"deletions":0}}},{"hash":"0f5e99fafcadf0c1a503617e39c69927cd8c0454","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c0e3a0dce1be6a46dcea1cd5d174275d641dc9b0","isMergeCommit":false,"messageTitle":"Add Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":95,"deletions":22}}},{"hash":"d9bd45bd406e3b3c965da4c1dde043b63e33ff52","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"53b225f55cc34b54b9afea333389fd86640a3e71","isMergeCommit":false,"messageTitle":"Refactor code into Parser, Storage, TaskList, Ui","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5},"java":{"insertions":242,"deletions":196}}},{"hash":"38572e8c5e27b4a13dd0e10099a2221f41198e0c","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"92e7c47b8eb683f6363ce9dcc933ed19d267d919","isMergeCommit":false,"messageTitle":"Refactor Exceptions and Tasks into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":57}}},{"hash":"199702abeff2c1fd24db7d0e82ae0560c682d9da","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"82bb767f5a1bb551734cebc21a7d4ce0bfe5481e","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"b711bf8c71caf33c542ccbc8bb145c4e37c37222","isMergeCommit":false,"messageTitle":"Add JUnit testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":4}}},{"hash":"2573a6cd5e9c50e4a89bb1fcac61d318c1467274","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"2317e66dde20838e59677f6a10aaed0256856f5a","isMergeCommit":false,"messageTitle":"Add JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"1abbaf986d8a5634a2254c3426a494317d8214ba","isMergeCommit":false,"messageTitle":"Add JavaDocs to methods and classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":7}}},{"hash":"45cb048e3aac6bf119c708b6668be897f6ac3c75","isMergeCommit":false,"messageTitle":"Refactor Duke, Storage, Task, Event and Todo to eliminate magic literals","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":13}}},{"hash":"f66f4f72c8a987a7765a90a0ddd66b56c29f7ced","isMergeCommit":false,"messageTitle":"Add find operation to find task by keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":1}}},{"hash":"f1fed17e372afa004c458d7708c75ba21bb72b22","isMergeCommit":false,"messageTitle":"Add JavaDocs to new methods created from find operation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"ddca30e26926935252ecc313e2bfc176603f7e8e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Tasks/Task.java\n#\tsrc/main/java/Tasks/Todo.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ed21d350a3d5932c87f7b513a1c65d265539a9cd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"54f1d90eb33fc0aefa859e7282edba05ba8cf276","isMergeCommit":false,"messageTitle":"Add JavaFX and FXML files for UI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":2},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":172,"deletions":28}}},{"hash":"597f7181ffca12b1d75a6cf513406f91724eb0e7","isMergeCommit":false,"messageTitle":"Refactor TaskList, Ui and Duke to return Duke response to user input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"fxml":{"insertions":3,"deletions":3},"java":{"insertions":176,"deletions":90}}},{"hash":"82a3c3f91b799ab6442838ad53bee302c7081304","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"7e740fc56e7dee1c121aae72d495714c3d61a37a","isMergeCommit":false,"messageTitle":"Add Checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":2,"deletions":0}}}]},{"date":"2023-09-12","commitResults":[{"hash":"e41001569c5049258db86fcdbe9cef82393b1a3f","isMergeCommit":false,"messageTitle":"Configure build.gradle to launch new jar file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3}}},{"hash":"1657a3af1c7bc5c32a4b8537af4b559f4ae54993","isMergeCommit":false,"messageTitle":"Add assertions to DialogBox, Parser, TaskList and Tasks","messageBody":"DialogBox: ensure text is not empty\nParser: ensure userInput is not empty\nTaskList: ensure pre-conditions such as userInput and taskId are of correct values,\nensure post-conditions such as selectedTask (mark and unmark) change correctly\nDeadline, Event, Task: ensure input string parse correctly in constructor\n\nThe classes do not check internal invariants, pre-conditions and post-conditions for correct values\n\nLet\u0027s add assertions to check for that these values are correct.\n","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}}]},{"date":"2023-09-16","commitResults":[{"hash":"8c21597debccc6fc91915cd227b4a4422450cd3e","isMergeCommit":false,"messageTitle":"Refactor files into packages and code for better code quality","messageBody":"Structure of the project is not organized with many files in the \"java\" folder.\nLet\u0027s extract DialogBox and MainWindow into Gui package.\nLet\u0027s extract all other files in \"java\" to \"java.Chewy\" package.\n\nMultiple levels of abstraction in Deadline and Event.\nLet\u0027s extract out long methods to follow SLAP.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"txt":{"insertions":3,"deletions":4},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":112,"deletions":90},"md":{"insertions":2,"deletions":2}}},{"hash":"222a643fa2438622398ababc10a5715c55b4347d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from garylow2001/branch-A-Assertions","messageBody":"Add assertions to DialogBox, Parser, TaskList and Tasks","fileTypesAndContributionMap":{}},{"hash":"28001ce6d8a88bd32dab9c9a6cf1ca817abf6077","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of github.com:garylow2001/ip","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"c489409a01e023d736a345899f38abfa45019fb2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"# Conflicts:\n#\tsrc/main/java/Chewy/TaskList.java\n#\tsrc/main/java/Tasks/Deadline.java\n#\tsrc/main/java/Tasks/Event.java\n","fileTypesAndContributionMap":{}},{"hash":"ca2a7a5131b29b163e343d6a8612a26a730da87b","isMergeCommit":true,"messageTitle":"Merge pull request #3 from garylow2001/branch-A-CodeQuality","messageBody":"Refactor files into packages and code for better code quality","fileTypesAndContributionMap":{}},{"hash":"661392429f29c14d62c649bd12a6b792b7665fa4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of github.com:garylow2001/ip","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"garylow2001":{"java":1120,"md":2,"fxml":35,"sh":0,"bat":0,"gradle":24,"txt":20}},"authorContributionVariance":{"garylow2001":33030.86},"authorDisplayNameMap":{"garylow2001":"CS2103T-F08-2 LOW ..GARY"}} diff --git a/iantsaii_ip_master/commits.json b/iantsaii_ip_master/commits.json index fa64ba89..d66e5bf8 100644 --- a/iantsaii_ip_master/commits.json +++ b/iantsaii_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"iantsaii":[{"date":"2023-08-24","commitResults":[{"hash":"83e64ed96a333c491712ad840377da42424d7d9f","isMergeCommit":false,"messageTitle":"Changed name from Duke to Yello","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"97da718ce546a965553a0eceb1fe83f0c0c920fe","isMergeCommit":false,"messageTitle":"Greet and Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"e25afd7afe6c1ac59faa7a2a89e0d22475c83138","isMergeCommit":false,"messageTitle":"Renamed chatbot from Yello to Rocket","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"f5d3e52b78b2fdc4331c4109e979f8c530844ee1","isMergeCommit":false,"messageTitle":"Echo back one command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":4}}},{"hash":"ef7e52819c52e8d7455751e7adeaaf20ce84f6de","isMergeCommit":false,"messageTitle":"Echo back multiple commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"9fcd4c247c42e6f5b61378e690a39fce3a1c9ede","isMergeCommit":false,"messageTitle":"Edited while loop","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"320a8d46dd37076dc3163b3872ba5d101d10072c","isMergeCommit":false,"messageTitle":"Add and List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}},{"hash":"73865ee61afd76896b4bd49440874aea2a0b4aaf","isMergeCommit":false,"messageTitle":"Add and use Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}},{"hash":"67840425b8a8d8ffab88edc45ca0a9a01ac17612","isMergeCommit":false,"messageTitle":"Display tasks as Strings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"f7c88ed3ead45a957d78fae07004ec9c22f9624b","isMergeCommit":false,"messageTitle":"Add ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":6}}},{"hash":"5aa6d880af3098b800e3b68325f3f242d0c9bf93","isMergeCommit":false,"messageTitle":"Implement Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":17}}},{"hash":"f92e3f5aa7d2da0d0a774b293afaa0d9a65b5ea2","isMergeCommit":false,"messageTitle":"Use switch instead of multiple if statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":50}}},{"hash":"3f792edcc7d8c646d9ca3f5512f59a19b8af82c6","isMergeCommit":false,"messageTitle":"Implement Todo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}},{"hash":"f1c1b1e3930d1f8f27bf9bd2d3bc92cfbbda634b","isMergeCommit":false,"messageTitle":"Implement Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}},{"hash":"8ab871a036ea24190934f9b9f10f5979890bb195","isMergeCommit":false,"messageTitle":"Fix minor problem","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"1fc3f7e3ae99949b1e23f9c4debd2446c8b15d53","isMergeCommit":false,"messageTitle":"Implement testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":1,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"fd7d508b4f9c7a4bfb346e45ab93a16622263edb","isMergeCommit":false,"messageTitle":"Implement Exception Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":82}}},{"hash":"2c05fdcc50ebaaa6d091c432ebcca97e9740703b","isMergeCommit":false,"messageTitle":"Implement delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"2de07cae7ced41bb35623aa55a79f539b3728a99","isMergeCommit":false,"messageTitle":"Write Java Docs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":2}}},{"hash":"e981b6ebe2b9eeb19a05d056246bf64ca973a71e","isMergeCommit":false,"messageTitle":"Fix minor problems","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"da62754697d30fa84e2559d153d9bbd37ea0fdd4","isMergeCommit":false,"messageTitle":"Reformat code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":90}}},{"hash":"fcf87d487d4f8d0bcd5d100e229f2f39b31a04c3","isMergeCommit":false,"messageTitle":"Add test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":30,"deletions":15}}},{"hash":"0de4e9728b17b83b9a862ed6795a82d79cfd4ed6","isMergeCommit":false,"messageTitle":"Add test cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":47}}},{"hash":"818f43f306c2a0af00658b9d32f2ca1cfe7c9fa2","isMergeCommit":false,"messageTitle":"Add ability to save task list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":14}}},{"hash":"b028f9086856b6dd6d7089ebc07760b885ab9444","isMergeCommit":false,"messageTitle":"Add ability to retrieve task list from hard disk","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":70}}},{"hash":"1d4c493f1114bf4169759927e9ac5c9587a553d7","isMergeCommit":false,"messageTitle":"Fix extra brackets added to retrieved events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"0958d64d60350e51833f90b579e82ca84b92ce87","isMergeCommit":false,"messageTitle":"Make function that can convert string to datetime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"d1b21e0af2b79611e831f3a2e2002676a4df957b","isMergeCommit":false,"messageTitle":"Make function that can convert dateTime to nicely formatted string","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"e210346936a823a33ee3fd5647c36b7447163134","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":30}}},{"hash":"64905988c5f0e1135298eec3039f982564154a52","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"5479e1503bb46e7ded5dd66ebdc0d77d5e342d36","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"67baeb1c2753e9921dc75c9145488d7d98466c32","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"51cb196bad814505f931d07731b339e77db93cd2","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","tags":["Complete-Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"8613917ce26a597a9ffe4883e03040e1bba6a383","isMergeCommit":false,"messageTitle":"Implement more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":467,"deletions":356}}},{"hash":"a3f45c0df0e0c067c2d9a73b130ca7776d6d439a","isMergeCommit":false,"messageTitle":"Add all files to package \"rocket\"","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":15}}},{"hash":"7104fbf9bfbb8cb69ec7829c482395dd48dcaa0e","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"95d252535f87c69707fd815590f02aa9a27c9e2b","isMergeCommit":false,"messageTitle":"Use Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":22,"deletions":40}}},{"hash":"369f886290f035a1a19e438cf09b6fe8db2dc4e1","isMergeCommit":false,"messageTitle":"Add Junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":1},"java":{"insertions":76,"deletions":1}}},{"hash":"bec96da2c8e9ae5662625915c86625bbc67076cf","isMergeCommit":false,"messageTitle":"Add Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"java":{"insertions":2,"deletions":1}}},{"hash":"5ba141ecd9489a05214cd9ba0e1bd060c8f48a39","isMergeCommit":false,"messageTitle":"Add Java Docs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":0}}},{"hash":"a6899e5956016cae6e68c46253155d6e52b788ad","isMergeCommit":false,"messageTitle":"Edited code to fit coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"d093addb116c2faa1c4a1e7fcd85bd68bb6eed42","isMergeCommit":false,"messageTitle":"Add Find Command capability","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"1048959541bdb105c695cd126ef3927b01cf8247","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8e4a4613120f574f0ccee9be1d714f9ec22ef60b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"45e165688171d3dee15476468b36e3efb6e2e8f0","isMergeCommit":false,"messageTitle":"Fix FindCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"6415258906e2b28049df50f7c536b5a1cc743c79","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":246,"deletions":21}}}]},{"date":"2023-09-14","commitResults":[{"hash":"3a34aa7c0c5ea3e5f98e547da1fb10873890a7b1","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Unable to ensure that there is a valid file path where the user can save their list of items.\n\nAdd assertion to ensure that the file path cannot be empty.\n\nNo other methods to check if file path is invalid.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"ef81fd8bed3f7f80f5d1caa98cb1db545a9de2f8","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"Code is difficult to read and understand\n\nUse Single Level of Abstraction Principle to abstract functions\n\nSo that code reviewer can understand the code at a high level of abstraction at first.\n","fileTypesAndContributionMap":{"java":{"insertions":194,"deletions":141}}},{"hash":"129a071edb19cd59d91bfd3b9ea97581e7161db2","isMergeCommit":true,"messageTitle":"Merge pull request #1 from iantsaii/branch-A-Assertions","messageBody":"Add assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"cb907ba959457240169ba93d79167e857b525512","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"55a64018ac9cf43d7353de0d48dff3d6fe3d0088","isMergeCommit":true,"messageTitle":"Merge pull request #2 from iantsaii/branch-A-CodeQuality","messageBody":"Improve Code Quality","fileTypesAndContributionMap":{}},{"hash":"cd518c43fbb4f3fd47a28a097211cc349a35b414","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/iantsaii/ip","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"2c44a00aaa64e27554c320a41d4e6564626a5871","isMergeCommit":false,"messageTitle":"Add case-insensitve searching for BetterSearch","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"iantsaii":{"java":1136,"md":0,"fxml":38,"sh":1,"bat":0,"gradle":19,"txt":8}},"authorContributionVariance":{"iantsaii":85049.1},"authorDisplayNameMap":{"iantsaii":"CS2103T-F11-3 TSAI..URRE"}} +{"authorDailyContributionsMap":{"iantsaii":[{"date":"2023-08-24","commitResults":[{"hash":"83e64ed96a333c491712ad840377da42424d7d9f","isMergeCommit":false,"messageTitle":"Changed name from Duke to Yello","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"97da718ce546a965553a0eceb1fe83f0c0c920fe","isMergeCommit":false,"messageTitle":"Greet and Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"e25afd7afe6c1ac59faa7a2a89e0d22475c83138","isMergeCommit":false,"messageTitle":"Renamed chatbot from Yello to Rocket","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"f5d3e52b78b2fdc4331c4109e979f8c530844ee1","isMergeCommit":false,"messageTitle":"Echo back one command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":4}}},{"hash":"ef7e52819c52e8d7455751e7adeaaf20ce84f6de","isMergeCommit":false,"messageTitle":"Echo back multiple commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"9fcd4c247c42e6f5b61378e690a39fce3a1c9ede","isMergeCommit":false,"messageTitle":"Edited while loop","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"320a8d46dd37076dc3163b3872ba5d101d10072c","isMergeCommit":false,"messageTitle":"Add and List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}},{"hash":"73865ee61afd76896b4bd49440874aea2a0b4aaf","isMergeCommit":false,"messageTitle":"Add and use Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}},{"hash":"67840425b8a8d8ffab88edc45ca0a9a01ac17612","isMergeCommit":false,"messageTitle":"Display tasks as Strings","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"f7c88ed3ead45a957d78fae07004ec9c22f9624b","isMergeCommit":false,"messageTitle":"Add ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":6}}},{"hash":"5aa6d880af3098b800e3b68325f3f242d0c9bf93","isMergeCommit":false,"messageTitle":"Implement Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":17}}},{"hash":"f92e3f5aa7d2da0d0a774b293afaa0d9a65b5ea2","isMergeCommit":false,"messageTitle":"Use switch instead of multiple if statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":50}}},{"hash":"3f792edcc7d8c646d9ca3f5512f59a19b8af82c6","isMergeCommit":false,"messageTitle":"Implement Todo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}},{"hash":"f1c1b1e3930d1f8f27bf9bd2d3bc92cfbbda634b","isMergeCommit":false,"messageTitle":"Implement Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}},{"hash":"8ab871a036ea24190934f9b9f10f5979890bb195","isMergeCommit":false,"messageTitle":"Fix minor problem","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"1fc3f7e3ae99949b1e23f9c4debd2446c8b15d53","isMergeCommit":false,"messageTitle":"Implement testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":1,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"fd7d508b4f9c7a4bfb346e45ab93a16622263edb","isMergeCommit":false,"messageTitle":"Implement Exception Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":82}}},{"hash":"2c05fdcc50ebaaa6d091c432ebcca97e9740703b","isMergeCommit":false,"messageTitle":"Implement delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"2de07cae7ced41bb35623aa55a79f539b3728a99","isMergeCommit":false,"messageTitle":"Write Java Docs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":2}}},{"hash":"e981b6ebe2b9eeb19a05d056246bf64ca973a71e","isMergeCommit":false,"messageTitle":"Fix minor problems","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-08-31","commitResults":[{"hash":"da62754697d30fa84e2559d153d9bbd37ea0fdd4","isMergeCommit":false,"messageTitle":"Reformat code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":90}}},{"hash":"fcf87d487d4f8d0bcd5d100e229f2f39b31a04c3","isMergeCommit":false,"messageTitle":"Add test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":30,"deletions":15}}},{"hash":"0de4e9728b17b83b9a862ed6795a82d79cfd4ed6","isMergeCommit":false,"messageTitle":"Add test cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":47}}},{"hash":"818f43f306c2a0af00658b9d32f2ca1cfe7c9fa2","isMergeCommit":false,"messageTitle":"Add ability to save task list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":14}}},{"hash":"b028f9086856b6dd6d7089ebc07760b885ab9444","isMergeCommit":false,"messageTitle":"Add ability to retrieve task list from hard disk","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":70}}},{"hash":"1d4c493f1114bf4169759927e9ac5c9587a553d7","isMergeCommit":false,"messageTitle":"Fix extra brackets added to retrieved events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"0958d64d60350e51833f90b579e82ca84b92ce87","isMergeCommit":false,"messageTitle":"Make function that can convert string to datetime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"d1b21e0af2b79611e831f3a2e2002676a4df957b","isMergeCommit":false,"messageTitle":"Make function that can convert dateTime to nicely formatted string","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"e210346936a823a33ee3fd5647c36b7447163134","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":30}}},{"hash":"64905988c5f0e1135298eec3039f982564154a52","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"5479e1503bb46e7ded5dd66ebdc0d77d5e342d36","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"67baeb1c2753e9921dc75c9145488d7d98466c32","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"51cb196bad814505f931d07731b339e77db93cd2","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","tags":["Complete-Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"8613917ce26a597a9ffe4883e03040e1bba6a383","isMergeCommit":false,"messageTitle":"Implement more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":467,"deletions":356}}},{"hash":"a3f45c0df0e0c067c2d9a73b130ca7776d6d439a","isMergeCommit":false,"messageTitle":"Add all files to package \"rocket\"","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":15}}},{"hash":"7104fbf9bfbb8cb69ec7829c482395dd48dcaa0e","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"95d252535f87c69707fd815590f02aa9a27c9e2b","isMergeCommit":false,"messageTitle":"Use Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":22,"deletions":40}}},{"hash":"369f886290f035a1a19e438cf09b6fe8db2dc4e1","isMergeCommit":false,"messageTitle":"Add Junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":1},"java":{"insertions":76,"deletions":1}}},{"hash":"bec96da2c8e9ae5662625915c86625bbc67076cf","isMergeCommit":false,"messageTitle":"Add Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"java":{"insertions":2,"deletions":1}}},{"hash":"5ba141ecd9489a05214cd9ba0e1bd060c8f48a39","isMergeCommit":false,"messageTitle":"Add Java Docs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":0}}},{"hash":"a6899e5956016cae6e68c46253155d6e52b788ad","isMergeCommit":false,"messageTitle":"Edited code to fit coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"d093addb116c2faa1c4a1e7fcd85bd68bb6eed42","isMergeCommit":false,"messageTitle":"Add Find Command capability","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"1048959541bdb105c695cd126ef3927b01cf8247","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8e4a4613120f574f0ccee9be1d714f9ec22ef60b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"45e165688171d3dee15476468b36e3efb6e2e8f0","isMergeCommit":false,"messageTitle":"Fix FindCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"6415258906e2b28049df50f7c536b5a1cc743c79","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":246,"deletions":21}}}]},{"date":"2023-09-14","commitResults":[{"hash":"3a34aa7c0c5ea3e5f98e547da1fb10873890a7b1","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Unable to ensure that there is a valid file path where the user can save their list of items.\n\nAdd assertion to ensure that the file path cannot be empty.\n\nNo other methods to check if file path is invalid.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"ef81fd8bed3f7f80f5d1caa98cb1db545a9de2f8","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"Code is difficult to read and understand\n\nUse Single Level of Abstraction Principle to abstract functions\n\nSo that code reviewer can understand the code at a high level of abstraction at first.\n","fileTypesAndContributionMap":{"java":{"insertions":194,"deletions":141}}},{"hash":"129a071edb19cd59d91bfd3b9ea97581e7161db2","isMergeCommit":true,"messageTitle":"Merge pull request #1 from iantsaii/branch-A-Assertions","messageBody":"Add assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"cb907ba959457240169ba93d79167e857b525512","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"55a64018ac9cf43d7353de0d48dff3d6fe3d0088","isMergeCommit":true,"messageTitle":"Merge pull request #2 from iantsaii/branch-A-CodeQuality","messageBody":"Improve Code Quality","fileTypesAndContributionMap":{}},{"hash":"cd518c43fbb4f3fd47a28a097211cc349a35b414","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/iantsaii/ip","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"8e2656d72413aa54307b41d61ef65da51295b32f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2c44a00aaa64e27554c320a41d4e6564626a5871","isMergeCommit":false,"messageTitle":"Add case-insensitve searching for BetterSearch","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-16","commitResults":[{"hash":"dd46e228ec8eb663a69871f7bbe11a1bc0895b59","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"iantsaii":{"java":1136,"md":0,"fxml":38,"sh":1,"bat":0,"gradle":19,"txt":8}},"authorContributionVariance":{"iantsaii":82637.47},"authorDisplayNameMap":{"iantsaii":"CS2103T-F11-3 TSAI..URRE"}} diff --git a/imkwokyong_ip_master/authorship.json b/imkwokyong_ip_master/authorship.json index 684f90e4..97b401b7 100644 --- a/imkwokyong_ip_master/authorship.json +++ b/imkwokyong_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"imkwokyong":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"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":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"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":"imkwokyong"},"content":"checkstyle {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"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":"imkwokyong"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"imkwokyong":20,"-":43}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" * The main class of the bot.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" /** Represents the filepath, storage, task list and UI of the bot. */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" private static final String FILEPATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" * Constructs the Duke object.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" public Duke() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" storage \u003d new Storage(FILEPATH);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" taskList \u003d new TaskList(storage.createList());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-18"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * Runs the bot.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" public void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" ui.helloGreeting(); // Prints hello message.","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" * Gets a String response to be displayed on the GUI.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" * @return String response.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException if any error occurs.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" public String getResponseToGui(String input) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" return c.executeGui(taskList, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" new Duke().run();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"imkwokyong":63,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.gui.Main;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" * Launches the GUI.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"imkwokyong":13}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to exit the bot.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" ui.byeGreeting();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" * @return A string message.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" return !super.isExit();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"imkwokyong":40}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" * Represents an abstract command, the basis for specific command implementation","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * like ByeCommand etc.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" * Executes the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" * Executes the command (GUI version).","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" public abstract String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * Checks whether the command is to exit the bot (\"bye\").","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @return Whether the command is \"bye\".","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"imkwokyong":41}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to create a Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Represents a Deadline object. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private Deadline deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructs the DeadlineCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public DeadlineCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" // Empty description.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" } else if (!input.contains(\"/by\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" // No by date.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! By when?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" String[] tokens \u003d input.split(\"/by\");","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" this.deadline \u003d new Deadline(tokens[0].strip(), tokens[1].strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", deadline, taskList.getListSize()));","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", deadline, taskList.getListSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":66}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to delete a Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" /** Index of Task object to be deleted. */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" private int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" * Constructs the DeleteCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" public DeleteCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" // No index.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Which task?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" this.index \u003d Integer.parseInt(input.strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" Task deletedTask \u003d taskList.deleteTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Noted. I\u0027ve removed this task:\\n \"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", deletedTask, taskList.getListSize()));","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" Task deletedTask \u003d taskList.deleteTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", deletedTask, taskList.getListSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":63}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to create an Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Represents an Event object */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private Event event;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructs the EventCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public EventCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" // Empty description.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" } else if (!input.contains(\"/from\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" // No from date.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! From when?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" } else if (!input.contains(\"/to\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" // No to date.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! To when?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" String[] tokens \u003d input.split(\"/from\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" this.event \u003d new Event(tokens[0].strip(), tokens[1].split(\"/to\")[0].strip(),","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" tokens[1].split(\"/to\")[1].strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", event, taskList.getListSize()));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(event);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(event);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", event, taskList.getListSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":70}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" * Represents a command for finding tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" /** Represents a keyword. */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" private String keyword;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * Constructs the FindCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" public FindCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" // No keyword to find.","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! What exactly are you finding?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" this.keyword \u003d input.strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Here are the matching tasks in your list:\"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" + \"%s\", taskList.findTasks(keyword)));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Here are the matching tasks in your list:\"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" + \"%s\", taskList.findTasks(keyword));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"imkwokyong":57}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to show the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(taskList.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" return taskList.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"imkwokyong":36}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to mark a Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Index of command to be marked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructs the MarkCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public MarkCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" // No index.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Which task?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" this.index \u003d Integer.parseInt(input.strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" Task markedTask \u003d taskList.markTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Nice! I\u0027ve marked this task as done:\\n %s\", markedTask));","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" Task markedTask \u003d taskList.markTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Nice! I\u0027ve marked this task as done:\\n %s\", markedTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":60}},{"path":"src/main/java/duke/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to create a ToDo object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Represents a ToDo object. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private ToDo todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructs the ToDoCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public ToDoCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" // No description.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" this.todo \u003d new ToDo(input.strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", todo, taskList.getListSize()));","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(todo);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(todo);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", todo, taskList.getListSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":62}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to unmark a Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Index of Task object to be unmarked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructs the UnmarkCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public UnmarkCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" // No index.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Which task?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" this.index \u003d Integer.parseInt(input.strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" Task unmarkedTask \u003d taskList.unmarkTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"OK, I\u0027ve marked this task as not done yet:\\n %s\", unmarkedTask));","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" Task unmarkedTask \u003d taskList.unmarkTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"OK, I\u0027ve marked this task as not done yet:\\n %s\", unmarkedTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":60}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":" * Self-defined Duke-specific Exception class.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" super(msg);","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"imkwokyong":10}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" * A custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"imkwokyong":62}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" * Main class that connects the GUI to Duke.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" stage.setTitle(\"ForsakenX - An interactive Duke chatbot\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"imkwokyong":34}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" * Initializes the MainWindow.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" DialogBox.getDukeDialog(\"Hello! I\u0027m ForsakenX\\nWhat can I do for you?\", dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException if any error occurs.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" private void handleUserInput() throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" String response;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" response \u003d duke.getResponseToGui(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" // An exception occurs, to replace response with exception message.","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" response \u003d e.getMessage().replace(\"☹\", \":P\"); // JavaFX cannot recognize \"☹\"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" assert (response !\u003d null) : \"Response is empty\";","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" // If \"bye\" command, disable user from continue typing and sending commands.","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":" if (input.strip().equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"imkwokyong"},"content":" userInput.setDisable(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"imkwokyong"},"content":" sendButton.setDisable(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"imkwokyong"},"content":" // Clears user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"imkwokyong"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"imkwokyong":78}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"import duke.command.ToDoCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * Parser class to parse user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * Parses user input strings into meaningful Command objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" * @param userInput The full user input, in a line.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" * @return A Command object.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If user input is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" public static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" String[] tokens \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" String keyword \u003d tokens[0].strip();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" String details \u003d tokens.length \u003e 1 ? tokens[1].strip() : null;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" switch (keyword.toLowerCase()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" case \"bye\":","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" case \"list\":","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" case \"mark\":","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" return new MarkCommand(details);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" return new UnmarkCommand(details);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" case \"delete\":","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" return new DeleteCommand(details);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" case \"todo\":","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" return new ToDoCommand(details);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" return new DeadlineCommand(details);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" case \"event\":","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" return new EventCommand(details);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" return new FindCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ I\u0027m not ChatGPT, cannot understand what you mean.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" // If userInput is null, .split of `userInput` will fail.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ What are you exactly asking me to do?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":59}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * Storage class to load and write data from or to","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" /** The file path for the Storage object. */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" private String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" * Creates a file.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" private void createFile() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" String[] temp \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" createDirectory(temp);","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ I/O Error!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" * Creates directories for the file to be created.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" * @param filePathArray An array of Strings, split via filePath.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" private void createDirectory(String[] filePathArray) {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" String directoryPath \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" for (int i \u003d 0; i \u003c filePathArray.length - 1; i++) {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" directoryPath +\u003d filePathArray[i];","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" File directory \u003d new File(directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" assert !directory.exists();","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" if (!directory.isDirectory()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" directoryPath +\u003d \"/\";","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" * Loads the file.","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" * @return A File object.","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" private File loadFile() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":" createFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"imkwokyong"},"content":" return file;","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"imkwokyong"},"content":" * Writes a String into an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"imkwokyong"},"content":" * Rewrites the content of the file if the file exists.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"imkwokyong"},"content":" * @param msg String to be written.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If I/O Error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"imkwokyong"},"content":" public void writeFile(String msg) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"imkwokyong"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"imkwokyong"},"content":" fw.write(msg);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"imkwokyong"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ I/O Error!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"imkwokyong"},"content":" * Appends a String to the end of an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"imkwokyong"},"content":" * @param task Task object - its String representation to be appended.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If I/O Error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"imkwokyong"},"content":" public void appendFile(Task task) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"imkwokyong"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"imkwokyong"},"content":" fw.write(task.stringToFile() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"imkwokyong"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ I/O Error!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"imkwokyong"},"content":" * Creates an ArrayList of Task objects from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"imkwokyong"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If loading error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"imkwokyong"},"content":" public ArrayList\u003cTask\u003e createList() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"imkwokyong"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"imkwokyong"},"content":" Scanner sc \u003d new Scanner(loadFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"imkwokyong"},"content":" return convertFileToList(sc, taskList);","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Loading error!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"imkwokyong"},"content":" * Converts content in File to an ArrayList of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"imkwokyong"},"content":" * @param sc Scanner with read input.","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"imkwokyong"},"content":" * @param taskList Empty taskList.","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"imkwokyong"},"content":" * @return Filled taskList.","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"imkwokyong"},"content":" private ArrayList\u003cTask\u003e convertFileToList(Scanner sc, ArrayList\u003cTask\u003e taskList) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"imkwokyong"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"imkwokyong"},"content":" String[] temp \u003d sc.nextLine().split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"imkwokyong"},"content":" assert (temp[1].strip().equals(\"0\") | temp[1].strip().equals(\"1\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"imkwokyong"},"content":" switch (temp[0].strip()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"imkwokyong"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"imkwokyong"},"content":" taskList.add(new ToDo(temp[2].strip()));","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"imkwokyong"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"imkwokyong"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"imkwokyong"},"content":" taskList.add(new Deadline(temp[2].strip(), temp[3].strip()));","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"imkwokyong"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"imkwokyong"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"imkwokyong"},"content":" taskList.add(new Event(temp[2].strip(), temp[3].strip(), temp[4].strip()));","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"imkwokyong"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"imkwokyong"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"imkwokyong"},"content":" assert false;","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"imkwokyong"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"imkwokyong"},"content":" if (temp[1].strip().equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"imkwokyong"},"content":" taskList.get(taskList.size() - 1).markIsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"imkwokyong"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":156}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Represents the deadline of the Deadline object */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructor method.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param description Deadline description.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @param by Deadline deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If an error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" public Deadline(String description, String by) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" // If `by` is in wrong format, throws exception and asks user to retype again.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Please enter datetime in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" public String stringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"D | %s | %s\", super.stringToFile(),","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" if (this \u003d\u003d other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" } else if (other instanceof Deadline) {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" Deadline deadline \u003d (Deadline) other;","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" boolean isDescriptionEqual \u003d this.description.equalsIgnoreCase(deadline.description);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" boolean isByEqual \u003d this.by.equals(deadline.by);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" return isDescriptionEqual \u0026\u0026 isByEqual;","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" by.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"imkwokyong":61}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":" * Represents an event.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" /** Represents when the event starts and ends. */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" protected String from;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" protected String to;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" * Constructor method.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" * @param description Event description.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" * @param from Event start datetime.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * @param to Event end datetime.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" public String stringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"E | %s | %s | %s\", super.stringToFile(), from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" if (this \u003d\u003d other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" } else if (other instanceof Event) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" Event event \u003d (Event) other;","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" boolean isDescriptionEqual \u003d this.description.equalsIgnoreCase(event.description);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" boolean isFromEqual \u003d this.from.equals(event.from);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" boolean isToEqual \u003d this.to.equals(event.to);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" return isDescriptionEqual \u0026\u0026 isFromEqual \u0026\u0026 isToEqual;","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), from, to);","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"imkwokyong":51}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":" * Represents a task, the basis for ToDo, Event and Deadline class.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"public class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" /** Represents the description and the status of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" protected String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" * Constructs a Task.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" * @param description Task description.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" * @param isDone Status of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" * Constructs a Task, by default isDone is false.","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" * @param description Task description.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" this(description, false);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" * Represents a string representation to be written to an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @return A String representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" public String stringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"%s | %s\", isDone ? \"1\" : \"0\", description);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" * Checks whether the Task object contains the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" * @param keyword Keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" * @return Whether the Task object contains the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * Converts isDone, a boolean, to a status icon for printing.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" * @return An icon String.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" public void markIsDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":74,"author":{"gitId":"imkwokyong"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":75,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), description);","lastModifiedDate":"2023-08-20"},{"lineNumber":76,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":77,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":78,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"imkwokyong":78}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" * Represents a list for the Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** List of Task objects, encapsulated in the class. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private List\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" this.taskList \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" this(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" * Gets list size.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" * @return List size.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" public int getListSize() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" return taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * Adds a Task object to the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @param task Task object to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" public void addTask(Task task) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" if (containsTask(task)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Duplicate task! You wanna do this task twice?\");","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" * Checks whether taskList contains said task.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * @param task Task to be checked.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @return Whether taskList contains said task.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" private boolean containsTask(Task task) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" for (Task t: taskList) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" if (!t.equals(task)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" continue;","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" * Deletes a Task object from the list based on its index.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" * @param index Index of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" * @return Task object that is deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If index does not exist in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" public Task deleteTask(int index) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":" if (index \u003e taskList.size() || index \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(String.format(\" ☹ OOPS!!! Task %d does not exist.\", index));","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"imkwokyong"},"content":" return taskList.remove(index - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"imkwokyong"},"content":" * Marks the Task object in the list based on its index.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"imkwokyong"},"content":" * @param index Index of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"imkwokyong"},"content":" * @return Task object that is marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If index does not exist in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"imkwokyong"},"content":" public Task markTask(int index) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"imkwokyong"},"content":" if (index \u003e taskList.size() || index \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(String.format(\" ☹ OOPS!!! Task %d does not exist.\", index));","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"imkwokyong"},"content":" Task task \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"imkwokyong"},"content":" task.markIsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"imkwokyong"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"imkwokyong"},"content":" * Unmark the Task object in the list based on its index.","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"imkwokyong"},"content":" * @param index Index of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"imkwokyong"},"content":" * @return Task object that is unmarked.","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If index does not exist in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"imkwokyong"},"content":" public Task unmarkTask(int index) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"imkwokyong"},"content":" if (index \u003e taskList.size() || index \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(String.format(\" ☹ OOPS!!! Task %d does not exist.\", index));","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"imkwokyong"},"content":" Task task \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"imkwokyong"},"content":" task.markNotDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"imkwokyong"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"imkwokyong"},"content":" * Returns a String of all Task objects containing the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"imkwokyong"},"content":" * @param keyword Keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"imkwokyong"},"content":" * @return String.","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"imkwokyong"},"content":" public String findTasks(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"imkwokyong"},"content":" StringBuilder msg \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"imkwokyong"},"content":" int foundCount \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"imkwokyong"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"imkwokyong"},"content":" Task task \u003d taskList.get(i - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"imkwokyong"},"content":" if (!task.contains(keyword)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"imkwokyong"},"content":" continue;","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"imkwokyong"},"content":" foundCount +\u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"imkwokyong"},"content":" msg.append(String.format(\"\\n%d.%s\", foundCount, task));","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"imkwokyong"},"content":" return msg.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"imkwokyong"},"content":" * Represents a String to be written in an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"imkwokyong"},"content":" * @return String representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"imkwokyong"},"content":" public String stringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"imkwokyong"},"content":" StringBuilder msg \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"imkwokyong"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"imkwokyong"},"content":" msg.append(String.format(\"%s\\n\", task.stringToFile()));","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"imkwokyong"},"content":" return msg.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"imkwokyong"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"imkwokyong"},"content":" StringBuilder msg \u003d new StringBuilder(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"imkwokyong"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"imkwokyong"},"content":" msg.append(String.format(\"\\n%d.%s\", i, taskList.get(i - 1)));","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"imkwokyong"},"content":" return msg.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":149}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":" * Represents a todo.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" public String stringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"T | %s\", super.stringToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" if (this \u003d\u003d other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" } else if (other instanceof ToDo) {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" ToDo todo \u003d (ToDo) other;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" return this.description.equalsIgnoreCase(todo.description);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"imkwokyong":34}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":" * Represents the UI for user interaction.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" /** Horizontal line and Scanner used to scan user input. */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" private static final String HORIZONTAL_LINE \u003d \"----------------------------(≧▽≦)----------------------------\";","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" public Ui() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" * Prints a horizontal line as defined beforehand.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" public void showHorizontalLine() {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" * Prints message wrapped between horizontal lines.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" * @param msg Message to be printed.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" public void showMessage(String msg) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" showHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" showHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * Prints a welcome message.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" public void helloGreeting() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" showMessage(\"Hello! I\u0027m ForsakenX\\nWhat can I do for you?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" * Prints a farewell message.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" public void byeGreeting() {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" showMessage(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * Prints a loading error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" showMessage(\" ☹ Loading error! File may be corrupted.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" * Prints an error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" * @param errorMsg Error message to be printed.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" public void showError(String errorMsg) {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" showMessage(errorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" * Reads user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" * @return Scanned user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"imkwokyong"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":73}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"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":10,"author":{"gitId":"imkwokyong"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" \u003cFont name\u003d\"Verdana Bold\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" \u003c/font\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"imkwokyong":20}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"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-05"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Enter your command here...\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" \u003cFont name\u003d\"Verdana\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" \u003c/TextField\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"imkwokyong":24}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" public void stringToFile_correctDateTimeFormat_success() throws Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"D | 0 | CS2103 W3 iP | 2023-08-31 23:59\",","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" new Deadline(\"CS2103 W3 iP\", \"2023-08-31 23:59\")","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"D | 0 | CS2030 Lab 2 | 2022-09-30 23:59\",","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" new Deadline(\"CS2030 Lab 2\", \"2022-09-30 23:59\")","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public void stringToFile_wrongDateTimeFormat_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"D | 0 | CS2103 W3 iP | 2023-08-31 23:59\",","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" new Deadline(\"CS2103 W3 iP\", \"31 Aug 2023 23:59\")","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\" ☹ Please enter datetime in format yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" public void stringToFile_impossibleDateTimeFormat_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"D | 0 | CS2103 W3 iP | 2023-08-32 23:59\",","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" new Deadline(\"CS2103 W3 iP\", \"31 Aug 2023 23:59\")","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\" ☹ Please enter datetime in format yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" public void testStringConversion() throws Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"[D][ ] Homework (by: 28 Aug 2023 16:00)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" new Deadline(\"Homework\", \"2023-08-28 16:00\")","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" .toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"imkwokyong":53}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" public void stringToFile_fullFormat_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"E | 0 | Guitar Practice | 2pm | 6pm\",","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" new Event(\"Guitar Practice\", \"2pm\", \"6pm\")","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"E | 0 | Movie Activity | 7pm | 11pm\",","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" new Event(\"Movie Activity\", \"7pm\", \"11pm\")","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"[E][ ] Hackathon (from: 1/9 to: 3/9)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" new Event(\"Hackathon\", \"1/9\", \"3/9\")","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" .toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"imkwokyong":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"todo borrow book","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"deadline return book /by 2023-08-28 17:00","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"event study session /from 7pm /to 10pm","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"mark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"unmark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"blah","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"todo","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"delete 2","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"mark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"unmark 0","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"delete -1","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":"mark","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":"unmark","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":"delete","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":"deadline a","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":"event a /from B","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"imkwokyong":23}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"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":"imkwokyong"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"imkwokyong":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"imkwokyong":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"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":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"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":"imkwokyong"},"content":"checkstyle {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-29"},{"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":"imkwokyong"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"imkwokyong":20,"-":43}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" * The main class of the bot.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" /** Represents the filepath, storage, task list and UI of the bot. */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" private static final String FILEPATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" * Constructs the Duke object.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" public Duke() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" storage \u003d new Storage(FILEPATH);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" taskList \u003d new TaskList(storage.createList());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-18"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * Runs the bot.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" public void run() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" ui.helloGreeting(); // Prints hello message.","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" * Gets a String response to be displayed on the GUI.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" * @return String response.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException if any error occurs.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" public String getResponseToGui(String input) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" return c.executeGui(taskList, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" new Duke().run();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"imkwokyong":63,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.gui.Main;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" * Launches the GUI.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"imkwokyong":13}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to exit the bot.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" ui.byeGreeting();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" * @return A string message.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" return \"Bye! Not enough sleep, gotta rest (not a program btw)\";","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" return !super.isExit();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"imkwokyong":40}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" * Represents an abstract command, the basis for specific command implementation","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * like ByeCommand etc.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" * Executes the command.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" * Executes the command (GUI version).","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" public abstract String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * Checks whether the command is to exit the bot (\"bye\").","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @return Whether the command is \"bye\".","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"imkwokyong":41}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to create a Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Represents a Deadline object. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private Deadline deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructs the DeadlineCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public DeadlineCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" // Empty description.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" } else if (!input.contains(\"/by\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" // No by date.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! By when?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" String[] tokens \u003d input.split(\"/by\");","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" this.deadline \u003d new Deadline(tokens[0].strip(), tokens[1].strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", deadline, taskList.getListSize()));","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", deadline, taskList.getListSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":66}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to delete a Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" /** Index of Task object to be deleted. */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" private int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" * Constructs the DeleteCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" public DeleteCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" // No index.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Which task?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" this.index \u003d Integer.parseInt(input.strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" Task deletedTask \u003d taskList.deleteTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Noted. I\u0027ve removed this task:\\n \"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", deletedTask, taskList.getListSize()));","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" Task deletedTask \u003d taskList.deleteTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", deletedTask, taskList.getListSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":63}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to create an Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Represents an Event object */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private Event event;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructs the EventCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public EventCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" // Empty description.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" } else if (!input.contains(\"/from\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" // No from date.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! From when?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" } else if (!input.contains(\"/to\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" // No to date.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! To when?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" String[] tokens \u003d input.split(\"/from\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" this.event \u003d new Event(tokens[0].strip(), tokens[1].split(\"/to\")[0].strip(),","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" tokens[1].split(\"/to\")[1].strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", event, taskList.getListSize()));","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(event);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(event);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", event, taskList.getListSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":70}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" * Represents a command for finding tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" /** Represents a keyword. */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" private String keyword;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * Constructs the FindCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" public FindCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" // No keyword to find.","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! What exactly are you finding?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" this.keyword \u003d input.strip();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Here are the matching tasks in your list:\"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" + \"%s\", taskList.findTasks(keyword)));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Here are the matching tasks in your list:\"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" + \"%s\", taskList.findTasks(keyword));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"imkwokyong":57}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to show the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(taskList.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" return taskList.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"imkwokyong":36}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to mark a Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Index of command to be marked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructs the MarkCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public MarkCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" // No index.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Which task?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" this.index \u003d Integer.parseInt(input.strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" Task markedTask \u003d taskList.markTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Nice! I\u0027ve marked this task as done:\\n %s\", markedTask));","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" Task markedTask \u003d taskList.markTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Nice! I\u0027ve marked this task as done:\\n %s\", markedTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":60}},{"path":"src/main/java/duke/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to create a ToDo object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Represents a ToDo object. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private ToDo todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructs the ToDoCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public ToDoCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" // No description.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" this.todo \u003d new ToDo(input.strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", todo, taskList.getListSize()));","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(todo);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" storage.appendFile(todo);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" + \"%s\\nNow you have %d tasks in the list.\", todo, taskList.getListSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":62}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a command to unmark a Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Index of Task object to be unmarked. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private int index;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructs the UnmarkCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param input User input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public UnmarkCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" if (input \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" // No index.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Which task?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" this.index \u003d Integer.parseInt(input.strip());","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" Task unmarkedTask \u003d taskList.unmarkTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" ui.showMessage(String.format(\"OK, I\u0027ve marked this task as not done yet:\\n %s\", unmarkedTask));","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" * @param taskList List of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * @param ui UI that the user interact with.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @param storage Storage to handle data to and from an external file.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * @return A String message.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" public String executeGui(TaskList taskList, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" Task unmarkedTask \u003d taskList.unmarkTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" storage.writeFile(taskList.stringToFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"OK, I\u0027ve marked this task as not done yet:\\n %s\", unmarkedTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":60}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":" * Self-defined Duke-specific Exception class.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" super(msg);","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"imkwokyong":10}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" * A custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"imkwokyong":62}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" * Main class that connects the GUI to Duke.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" stage.setTitle(\"ForsakenX - An interactive Duke chatbot\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"imkwokyong":34}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.gui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" * Initializes the MainWindow.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" DialogBox.getDukeDialog(\"Hello! I\u0027m ForsakenX, your friend uwu\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" + \"What can I do for you?\", dukeImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException if any error occurs.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" private void handleUserInput() throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" String response;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" response \u003d duke.getResponseToGui(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" // An exception occurs, to replace response with exception message.","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" response \u003d e.getMessage().replace(\"☹\", \":P\"); // JavaFX cannot recognize \"☹\"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" assert (response !\u003d null) : \"Response is empty\";","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":" // If \"bye\" command, disable user from continue typing and sending commands.","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"imkwokyong"},"content":" if (input.strip().equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"imkwokyong"},"content":" userInput.setDisable(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"imkwokyong"},"content":" sendButton.setDisable(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"imkwokyong"},"content":" // Clears user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"imkwokyong"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"imkwokyong":79}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"import duke.command.ToDoCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * Parser class to parse user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * Parses user input strings into meaningful Command objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" * @param userInput The full user input, in a line.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" * @return A Command object.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If user input is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" public static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" String[] tokens \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" String keyword \u003d tokens[0].strip();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" String details \u003d tokens.length \u003e 1 ? tokens[1].strip() : null;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" switch (keyword.toLowerCase()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" case \"bye\":","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" case \"list\":","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" case \"mark\":","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" return new MarkCommand(details);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" return new UnmarkCommand(details);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" case \"delete\":","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" return new DeleteCommand(details);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" case \"todo\":","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" return new ToDoCommand(details);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" return new DeadlineCommand(details);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" case \"event\":","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" return new EventCommand(details);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" return new FindCommand(details);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ I\u0027m not ChatGPT, cannot understand what you mean.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" // If userInput is null, .split of `userInput` will fail.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ What are you exactly asking me to do?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":59}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * Storage class to load and write data from or to","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" /** The file path for the Storage object. */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" private String filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" * Creates a file.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" private void createFile() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" String[] temp \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" createDirectory(temp);","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ I/O Error!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" * Creates directories for the file to be created.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" * @param filePathArray An array of Strings, split via filePath.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" private void createDirectory(String[] filePathArray) {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" String directoryPath \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" for (int i \u003d 0; i \u003c filePathArray.length - 1; i++) {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" directoryPath +\u003d filePathArray[i];","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" File directory \u003d new File(directoryPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" assert !directory.exists();","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" if (!directory.isDirectory()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" directoryPath +\u003d \"/\";","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" * Loads the file.","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" * @return A File object.","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" private File loadFile() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":" createFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"imkwokyong"},"content":" return file;","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"imkwokyong"},"content":" * Writes a String into an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"imkwokyong"},"content":" * Rewrites the content of the file if the file exists.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"imkwokyong"},"content":" * @param msg String to be written.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If I/O Error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"imkwokyong"},"content":" public void writeFile(String msg) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"imkwokyong"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"imkwokyong"},"content":" fw.write(msg);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"imkwokyong"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ I/O Error!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"imkwokyong"},"content":" * Appends a String to the end of an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"imkwokyong"},"content":" * @param task Task object - its String representation to be appended.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If I/O Error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"imkwokyong"},"content":" public void appendFile(Task task) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"imkwokyong"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"imkwokyong"},"content":" fw.write(task.stringToFile() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"imkwokyong"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ I/O Error!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"imkwokyong"},"content":" * Creates an ArrayList of Task objects from an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"imkwokyong"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If loading error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"imkwokyong"},"content":" public ArrayList\u003cTask\u003e createList() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"imkwokyong"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"imkwokyong"},"content":" Scanner sc \u003d new Scanner(loadFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"imkwokyong"},"content":" return convertFileToList(sc, taskList);","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"imkwokyong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Loading error!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"imkwokyong"},"content":" * Converts content in File to an ArrayList of Task objects.","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"imkwokyong"},"content":" * @param sc Scanner with read input.","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"imkwokyong"},"content":" * @param taskList Empty taskList.","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"imkwokyong"},"content":" * @return Filled taskList.","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"imkwokyong"},"content":" private ArrayList\u003cTask\u003e convertFileToList(Scanner sc, ArrayList\u003cTask\u003e taskList) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"imkwokyong"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"imkwokyong"},"content":" String[] temp \u003d sc.nextLine().split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"imkwokyong"},"content":" assert (temp[1].strip().equals(\"0\") | temp[1].strip().equals(\"1\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"imkwokyong"},"content":" switch (temp[0].strip()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"imkwokyong"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"imkwokyong"},"content":" taskList.add(new ToDo(temp[2].strip()));","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"imkwokyong"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"imkwokyong"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"imkwokyong"},"content":" taskList.add(new Deadline(temp[2].strip(), temp[3].strip()));","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"imkwokyong"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"imkwokyong"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"imkwokyong"},"content":" taskList.add(new Event(temp[2].strip(), temp[3].strip(), temp[4].strip()));","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"imkwokyong"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"imkwokyong"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"imkwokyong"},"content":" assert false;","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"imkwokyong"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"imkwokyong"},"content":" if (temp[1].strip().equals(\"1\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"imkwokyong"},"content":" taskList.get(taskList.size() - 1).markIsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"imkwokyong"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":156}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** Represents the deadline of the Deadline object */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" * Constructor method.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" * @param description Deadline description.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" * @param by Deadline deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If an error occurs.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" public Deadline(String description, String by) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" // If `by` is in wrong format, throws exception and asks user to retype again.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Please enter datetime in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" public String stringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"D | %s | %s\", super.stringToFile(),","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" if (this \u003d\u003d other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" } else if (other instanceof Deadline) {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" Deadline deadline \u003d (Deadline) other;","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" boolean isDescriptionEqual \u003d this.description.equalsIgnoreCase(deadline.description);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" boolean isByEqual \u003d this.by.equals(deadline.by);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" return isDescriptionEqual \u0026\u0026 isByEqual;","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" by.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"imkwokyong":61}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":" * Represents an event.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" /** Represents when the event starts and ends. */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" protected String from;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" protected String to;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" * Constructor method.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" * @param description Event description.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" * @param from Event start datetime.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" * @param to Event end datetime.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" public String stringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"E | %s | %s | %s\", super.stringToFile(), from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" if (this \u003d\u003d other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" } else if (other instanceof Event) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" Event event \u003d (Event) other;","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" boolean isDescriptionEqual \u003d this.description.equalsIgnoreCase(event.description);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" boolean isFromEqual \u003d this.from.equals(event.from);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" boolean isToEqual \u003d this.to.equals(event.to);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" return isDescriptionEqual \u0026\u0026 isFromEqual \u0026\u0026 isToEqual;","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), from, to);","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"imkwokyong":51}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":" * Represents a task, the basis for ToDo, Event and Deadline class.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"public class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" /** Represents the description and the status of the task. */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" protected String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" * Constructs a Task.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" * @param description Task description.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" * @param isDone Status of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" * Constructs a Task, by default isDone is false.","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" * @param description Task description.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" this(description, false);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" * Represents a string representation to be written to an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * @return A String representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" public String stringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"%s | %s\", isDone ? \"1\" : \"0\", description);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" * Checks whether the Task object contains the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" * @param keyword Keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" * @return Whether the Task object contains the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" * Converts isDone, a boolean, to a status icon for printing.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" * @return An icon String.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" public void markIsDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":72,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":74,"author":{"gitId":"imkwokyong"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":75,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), description);","lastModifiedDate":"2023-08-20"},{"lineNumber":76,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":77,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":78,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"imkwokyong":78}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" * Represents a list for the Task objects.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" /** List of Task objects, encapsulated in the class. */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" private List\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" this.taskList \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" this(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" * Gets list size.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" * @return List size.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" public int getListSize() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" return taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" * Adds a Task object to the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * @param task Task object to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If any error occurs.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" public void addTask(Task task) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" if (containsTask(task)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(\" ☹ Duplicate task! You wanna do this task twice?\");","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" * Checks whether taskList contains said task.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" * @param task Task to be checked.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * @return Whether taskList contains said task.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" private boolean containsTask(Task task) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" for (Task t: taskList) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" if (!t.equals(task)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":" continue;","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" * Deletes a Task object from the list based on its index.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" * @param index Index of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" * @return Task object that is deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If index does not exist in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" public Task deleteTask(int index) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":" if (index \u003e taskList.size() || index \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(String.format(\" ☹ OOPS!!! Task %d does not exist.\", index));","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"imkwokyong"},"content":" return taskList.remove(index - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"imkwokyong"},"content":" * Marks the Task object as done in the list based on its index.","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"imkwokyong"},"content":" * @param index Index of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"imkwokyong"},"content":" * @return Task object that is marked.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If index does not exist in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"imkwokyong"},"content":" public Task markTask(int index) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"imkwokyong"},"content":" if (index \u003e taskList.size() || index \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(String.format(\" ☹ OOPS!!! Task %d does not exist.\", index));","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"imkwokyong"},"content":" Task task \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"imkwokyong"},"content":" task.markIsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"imkwokyong"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"imkwokyong"},"content":" * Marks the Task object as not done in the list based on its index.","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"imkwokyong"},"content":" * @param index Index of the Task object.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"imkwokyong"},"content":" * @return Task object that is unmarked.","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"imkwokyong"},"content":" * @throws DukeException If index does not exist in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"imkwokyong"},"content":" public Task unmarkTask(int index) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"imkwokyong"},"content":" if (index \u003e taskList.size() || index \u003c\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"imkwokyong"},"content":" throw new DukeException(String.format(\" ☹ OOPS!!! Task %d does not exist.\", index));","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"imkwokyong"},"content":" Task task \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"imkwokyong"},"content":" task.markNotDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"imkwokyong"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"imkwokyong"},"content":" * Returns a String of all Task objects containing the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"imkwokyong"},"content":" * @param keyword Keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"imkwokyong"},"content":" * @return String.","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"imkwokyong"},"content":" public String findTasks(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"imkwokyong"},"content":" StringBuilder msg \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"imkwokyong"},"content":" int foundCount \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"imkwokyong"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"imkwokyong"},"content":" Task task \u003d taskList.get(i - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"imkwokyong"},"content":" if (!task.contains(keyword)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"imkwokyong"},"content":" continue;","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"imkwokyong"},"content":" foundCount +\u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"imkwokyong"},"content":" msg.append(String.format(\"\\n%d.%s\", foundCount, task));","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"imkwokyong"},"content":" return msg.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"imkwokyong"},"content":" * Represents a String to be written in an external file.","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"imkwokyong"},"content":" * @return String representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"imkwokyong"},"content":" public String stringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"imkwokyong"},"content":" StringBuilder msg \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"imkwokyong"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"imkwokyong"},"content":" msg.append(String.format(\"%s\\n\", task.stringToFile()));","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"imkwokyong"},"content":" return msg.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"imkwokyong"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"imkwokyong"},"content":" StringBuilder msg \u003d new StringBuilder(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"imkwokyong"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"imkwokyong"},"content":" msg.append(String.format(\"\\n%d.%s\", i, taskList.get(i - 1)));","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"imkwokyong"},"content":" return msg.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":149}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":" * Represents a todo.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" public String stringToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"T | %s\", super.stringToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" if (this \u003d\u003d other) {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" } else if (other instanceof ToDo) {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" ToDo todo \u003d (ToDo) other;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" return this.description.equalsIgnoreCase(todo.description);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"imkwokyong":34}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":" * Represents the UI for user interaction.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" /** Horizontal line and Scanner used to scan user input. */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" private static final String HORIZONTAL_LINE \u003d \"----------------------------(≧▽≦)----------------------------\";","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" public Ui() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" * Prints a horizontal line as defined beforehand.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" public void showHorizontalLine() {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" * Prints message wrapped between horizontal lines.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" * @param msg Message to be printed.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" public void showMessage(String msg) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" showHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" showHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" * Prints a welcome message.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" public void helloGreeting() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" showMessage(\"Hello! I\u0027m ForsakenX\\nWhat can I do for you?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" * Prints a farewell message.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" public void byeGreeting() {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":" showMessage(\"Bye. Not enough sleep, gotta rest (not a program btw)\");","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" * Prints a loading error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":" showMessage(\" ☹ Loading error! File may be corrupted.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"imkwokyong"},"content":" * Prints an error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"imkwokyong"},"content":" * @param errorMsg Error message to be printed.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"imkwokyong"},"content":" public void showError(String errorMsg) {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"imkwokyong"},"content":" showMessage(errorMsg);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"imkwokyong"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"imkwokyong"},"content":" * Reads user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"imkwokyong"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"imkwokyong"},"content":" * @return Scanned user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"imkwokyong"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"imkwokyong"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"imkwokyong"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"imkwokyong":73}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"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":10,"author":{"gitId":"imkwokyong"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" \u003cFont name\u003d\"Verdana Bold\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" \u003c/font\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"imkwokyong":20}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"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-05"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Enter your command here...\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" \u003cFont name\u003d\"Verdana\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" \u003c/TextField\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"imkwokyong":24}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" public void stringToFile_correctDateTimeFormat_success() throws Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"D | 0 | CS2103 W3 iP | 2023-08-31 23:59\",","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" new Deadline(\"CS2103 W3 iP\", \"2023-08-31 23:59\")","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"D | 0 | CS2030 Lab 2 | 2022-09-30 23:59\",","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" new Deadline(\"CS2030 Lab 2\", \"2022-09-30 23:59\")","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" public void stringToFile_wrongDateTimeFormat_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"D | 0 | CS2103 W3 iP | 2023-08-31 23:59\",","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" new Deadline(\"CS2103 W3 iP\", \"31 Aug 2023 23:59\")","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"imkwokyong"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"imkwokyong"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\" ☹ Please enter datetime in format yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"imkwokyong"},"content":" e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"imkwokyong"},"content":" public void stringToFile_impossibleDateTimeFormat_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"imkwokyong"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"D | 0 | CS2103 W3 iP | 2023-08-32 23:59\",","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"imkwokyong"},"content":" new Deadline(\"CS2103 W3 iP\", \"31 Aug 2023 23:59\")","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"imkwokyong"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"imkwokyong"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\" ☹ Please enter datetime in format yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"imkwokyong"},"content":" e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"imkwokyong"},"content":" public void testStringConversion() throws Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"[D][ ] Homework (by: 28 Aug 2023 16:00)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"imkwokyong"},"content":" new Deadline(\"Homework\", \"2023-08-28 16:00\")","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"imkwokyong"},"content":" .toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"imkwokyong":53}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":" public void stringToFile_fullFormat_success() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"E | 0 | Guitar Practice | 2pm | 6pm\",","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":" new Event(\"Guitar Practice\", \"2pm\", \"6pm\")","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"E | 0 | Movie Activity | 7pm | 11pm\",","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":" new Event(\"Movie Activity\", \"7pm\", \"11pm\")","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":" .stringToFile());","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":" assertEquals(\"[E][ ] Hackathon (from: 1/9 to: 3/9)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":" new Event(\"Hackathon\", \"1/9\", \"3/9\")","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"imkwokyong"},"content":" .toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"imkwokyong"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"imkwokyong"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"imkwokyong":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"imkwokyong"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"imkwokyong"},"content":"todo borrow book","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"imkwokyong"},"content":"deadline return book /by 2023-08-28 17:00","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"imkwokyong"},"content":"event study session /from 7pm /to 10pm","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"imkwokyong"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"imkwokyong"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"imkwokyong"},"content":"mark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"imkwokyong"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"imkwokyong"},"content":"unmark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"imkwokyong"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"imkwokyong"},"content":"blah","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"imkwokyong"},"content":"todo","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"imkwokyong"},"content":"delete 2","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"imkwokyong"},"content":"mark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"imkwokyong"},"content":"unmark 0","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"imkwokyong"},"content":"delete -1","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"imkwokyong"},"content":"mark","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"imkwokyong"},"content":"unmark","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"imkwokyong"},"content":"delete","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"imkwokyong"},"content":"deadline a","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"imkwokyong"},"content":"event a /from B","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"imkwokyong"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"imkwokyong"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"imkwokyong":23}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"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":"imkwokyong"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"imkwokyong":1,"-":20}}] diff --git a/imkwokyong_ip_master/commits.json b/imkwokyong_ip_master/commits.json index dee4c5c6..c5323c3c 100644 --- a/imkwokyong_ip_master/commits.json +++ b/imkwokyong_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"imkwokyong":[{"date":"2023-08-18","commitResults":[{"hash":"b0523d726aeba985b468ac205488adcc1bb6e76a","isMergeCommit":false,"messageTitle":"Implement initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"dd3514001a9e7e821dbf7b1eca916616dd7113c8","isMergeCommit":false,"messageTitle":"Add Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"89e8ff0e01b396c3f833d449fa67494484de8333","isMergeCommit":false,"messageTitle":"Add ability to store and display text","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]},{"date":"2023-08-20","commitResults":[{"hash":"7b75c2b83e6f78952e76cfdf7da6867af04adf42","isMergeCommit":false,"messageTitle":"[Level-3] Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":8}}},{"hash":"e725a948804de994801fd56b950e0f2390d2e964","isMergeCommit":false,"messageTitle":"Add Deadline.java, Event.java, ToDo.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"87a5a5e164414be0529f850e6291e19b9c87408d","isMergeCommit":false,"messageTitle":"[Level-4] ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":13}}},{"hash":"80528968fb38b2138cd001d6835e34b672cf3d1a","isMergeCommit":false,"messageTitle":"[A-TextUiTesting] Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"9ec9fdcd5f01459bf02e0ec9fb968db600a0941b","isMergeCommit":false,"messageTitle":"[Level-5] Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":46}}},{"hash":"624c7f7009e1f0fba8eb3914617d936d36d9ac4b","isMergeCommit":false,"messageTitle":"[Level-6] Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"b00dd809cfaff11155064aa5e477e62273c1e57d","isMergeCommit":false,"messageTitle":"Add missing space","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a15018fee81b7fa158e892d8ef40f9537bc30c61","isMergeCommit":false,"messageTitle":"Modify test case to check for exceptions and deletions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"c26dbfc946a3704b529cd135ec97f41636e31505","isMergeCommit":false,"messageTitle":"Modify code for conciseness and add extra exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":38}}},{"hash":"a7b61ebb66d462545b7a34f8187ff46d5fe8be25","isMergeCommit":false,"messageTitle":"Modify test case to account for added exceptions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"171550fdd3739fbe0a6851ac05d81d159fbc2b47","isMergeCommit":false,"messageTitle":"Fix indentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"d7765d363484e6b15781080cd8cac49b88590eaa","isMergeCommit":false,"messageTitle":"Add constructor overloading for Task.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":2}}},{"hash":"95557ca86a053555e8862d3fc6472e14b844aa57","isMergeCommit":false,"messageTitle":"Add string method for easy write access to file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":12}}},{"hash":"05c1586a135d1903d5aec704dbebcd05f4d1fbf4","isMergeCommit":false,"messageTitle":"Add Save function for Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":38}}},{"hash":"6fcba5d6c9b8582aef0526a1843c747f491b9614","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"cabd2fbaa4f6633537a0cb7e72939abad001b81d","isMergeCommit":false,"messageTitle":"Remove unintended debugging print statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"fed068161ae0636ab48580891a52c033f35d924d","isMergeCommit":false,"messageTitle":"Add Dates and Times functionality for Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}},{"hash":"08ef75ae50310717ef706bcb412473256257d164","isMergeCommit":false,"messageTitle":"Update test case","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"53c5af3c38cd63b5f02f5d3b0595c561fb5b8f30","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"4a99d82433cfd481aac338ea162a1c4d1c8b1f89","isMergeCommit":false,"messageTitle":"Add abstract class Command.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"8d5f040e768c96664a9c1d7669ceb19e20c26e9e","isMergeCommit":false,"messageTitle":"Modify createList method in Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":23}}},{"hash":"00c2eaba9ba4503d74a3a7b3736189cf8cb2f3b3","isMergeCommit":false,"messageTitle":"Modify code to be more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":318,"deletions":129}}},{"hash":"2da0ce47d1d61d743fdef868430ecd11d8755aa2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"0132ac167b92df7445a96547d12f585db185e1e8","isMergeCommit":false,"messageTitle":"Organize the classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":90},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"42dc44cbd990f0d0d263391d4e9d17e65354e0ae","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/imkwokyong/ip into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"18fecae250e1a8f146094e246d264f2e0ea7a51f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"18c7038a2acbb252a61507664e4f34a27ccd93e8","isMergeCommit":false,"messageTitle":"Update main class filepath","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"313bd58c12b24ac60654c1817296ab0ecc5bcd50","isMergeCommit":false,"messageTitle":"Fix grammar","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"27d4b597243c63a567e4c12f69c0f869774cfa37","isMergeCommit":false,"messageTitle":"Handle more exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":17}}}]},{"date":"2023-08-29","commitResults":[{"hash":"f2a7ace85dd84a77d4c0a0704a78691899f633d8","isMergeCommit":false,"messageTitle":"Add JUnit tests for Deadline and Event class","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":0}}},{"hash":"a445eadd313c4b94e30bf595d83c6f712a6b409e","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":239,"deletions":5}}},{"hash":"9de97deb08ce350792df874d37f2839a18adf1e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"5b5ff7acb6ce73b2ec1e146addf0ea57321b6084","isMergeCommit":false,"messageTitle":"Add Find functionality for Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":0}}},{"hash":"060bf8830c0e9ffbc13e80033ec03029412c33b3","isMergeCommit":true,"messageTitle":"Merge \u0027branch-Level-9\u0027 to master after fixing merge conflicts","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"55a7c36760765118b50965d9dbdff709171f3891","isMergeCommit":false,"messageTitle":"Fix spacing inconsistencies","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"d91e4b707789c5d037defb15ee75e3c19d4995e0","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to new methods and classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"14a831adccef9f92d337d3ee43a04b1d642d8887","isMergeCommit":false,"messageTitle":"Add checkstyle config","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"7e0d83db1e114fc72836ffec5c4aadb9a591597f","isMergeCommit":false,"messageTitle":"Adhere to checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":31}}},{"hash":"80325ce843aa932a2d3fcd3b815fa453ac3de0ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"5011e5c8161d52f8b1cfe5b61efc6c8bc7f1e31d","isMergeCommit":false,"messageTitle":"Fix minor typos and issues","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-09-02","commitResults":[{"hash":"a19315b1baeda3ef1656533627df1edaaf4734ac","isMergeCommit":false,"messageTitle":"Add JavaFX support in build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"8799e5007b6e8d5289684f9c1c69694888502dcb","isMergeCommit":false,"messageTitle":"Add Launcher.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"e5f46919d156627c8f3c7986e1782bf6b485193e","isMergeCommit":false,"messageTitle":"Add DialogBox and MainWindow FXML files","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0}}},{"hash":"73e3c8b6e37d2b2219295ef08a6eb4bcc053d84b","isMergeCommit":false,"messageTitle":"Add executeGui method to all Commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":0}}},{"hash":"877359a81de7cca0e1f3da83224a4aee083e38c9","isMergeCommit":false,"messageTitle":"Add getResponseToGui method in Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":6}}},{"hash":"8c25f0c5ac1d89837d608176d0a14166558910de","isMergeCommit":false,"messageTitle":"Add DialogBox.java, Main.java, MainWindow.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":1}}},{"hash":"5853f59eb30e484eb4a374b1c3f9793bdc06a184","isMergeCommit":false,"messageTitle":"Modify font style in FXML files","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":13,"deletions":4},"java":{"insertions":5,"deletions":1}}},{"hash":"14f77d5e82647d9cf13ffa19148f7331a9b1acf2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"7fe4c18adcbf474168b62190966d7748958f5c0c","isMergeCommit":false,"messageTitle":"Adhere to checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"6089f02bd9ad1c5229b03b44d514e7fa2118ff6b","isMergeCommit":false,"messageTitle":"Change FXML files version to resolve warnings","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":2,"deletions":2}}},{"hash":"cb88eb5680cbe76617dab480d595bbb1356db0a3","isMergeCommit":false,"messageTitle":"Remove \u0027final\u0027 from non-constants","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":11}}}]},{"date":"2023-09-08","commitResults":[{"hash":"c73af8c929f7d0579e23029d7132f226345b8be8","isMergeCommit":false,"messageTitle":"Change mainClass to include GUI in jar file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"d88b8c011466d47b282b233ac5da7691f937b03c","isMergeCommit":false,"messageTitle":"Enable keyword in Parser.java to be uppercase","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b34ece39396553c2a56171093d5010d4eab5c6ea","isMergeCommit":false,"messageTitle":"Enable assertions in build.gradle","messageBody":"There might be some hidden assumptions in the program where, when\nfailed, will jeopardize the code.\n\nEnabling assertions allows us to check our code against those\nassumptions and catch any errors in runtime.\n\nLet\u0027s enable assertions so that we could indicate some hidden bugs in\nour code as soon as possible.\n","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}},{"hash":"3d95db77c17d2201510759c090bb90b7b672ed30","isMergeCommit":false,"messageTitle":"Add assertions in Storage.java and MainWindow.java","messageBody":"For Storage.java, the external file might be edited or corrupted.\nFor MainWindow.java, we assume that the response that we get from Duke\nis not an empty message / null.\n\nAdding assertions here will prevent those anomalies from happening, by\ndetecting them in runtime and throw AssertionError.\n\nLet\u0027s,\n* add assertion to Storage.java to ensure status is either \"0\" or \"1\".\n* add assertion to Storage.java to ensure task is of \"T\", \"D\" or \"E\".\n* add assertion to MainWindow.java to ensure response is not null.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"68f7c7e637493249175082b5c3d09a4f7f67d48d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from imkwokyong/branch-A-Assertions","messageBody":"Enable and add assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"dc8165a6189682fac02318c3363be99de6f05b10","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":197,"deletions":63}}},{"hash":"27e6b826c414a8d98ea0137a0dc5cfbc7bf9ba64","isMergeCommit":true,"messageTitle":"Merge pull request #2 from imkwokyong/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"e00317cd7600af5b998cd58a4b3cd753a7be29bf","isMergeCommit":false,"messageTitle":"Add overridden equals method for all Task implementation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":0}}},{"hash":"2d0bc05c08312716dc3aec4ce7495367179feccf","isMergeCommit":false,"messageTitle":"Modify addTask method to check for duplicates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":1}}},{"hash":"0abf8ff78fbd6275ed25a66a0ef23e10fa21086c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-DetectDuplicates\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"200242791d6cd1e00181b30ffc5c9ebfaf813ebd","isMergeCommit":false,"messageTitle":"Adhere to checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"imkwokyong":{"java":1555,"md":2,"fxml":44,"sh":0,"bat":1,"gradle":20,"txt":23}},"authorContributionVariance":{"imkwokyong":45904.473},"authorDisplayNameMap":{"imkwokyong":"CS2103-F13-1 KUAN..YONG"}} +{"authorDailyContributionsMap":{"imkwokyong":[{"date":"2023-08-18","commitResults":[{"hash":"b0523d726aeba985b468ac205488adcc1bb6e76a","isMergeCommit":false,"messageTitle":"Implement initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"dd3514001a9e7e821dbf7b1eca916616dd7113c8","isMergeCommit":false,"messageTitle":"Add Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"89e8ff0e01b396c3f833d449fa67494484de8333","isMergeCommit":false,"messageTitle":"Add ability to store and display text","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]},{"date":"2023-08-20","commitResults":[{"hash":"7b75c2b83e6f78952e76cfdf7da6867af04adf42","isMergeCommit":false,"messageTitle":"[Level-3] Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":8}}},{"hash":"e725a948804de994801fd56b950e0f2390d2e964","isMergeCommit":false,"messageTitle":"Add Deadline.java, Event.java, ToDo.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"87a5a5e164414be0529f850e6291e19b9c87408d","isMergeCommit":false,"messageTitle":"[Level-4] ToDo, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":13}}},{"hash":"80528968fb38b2138cd001d6835e34b672cf3d1a","isMergeCommit":false,"messageTitle":"[A-TextUiTesting] Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"9ec9fdcd5f01459bf02e0ec9fb968db600a0941b","isMergeCommit":false,"messageTitle":"[Level-5] Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":46}}},{"hash":"624c7f7009e1f0fba8eb3914617d936d36d9ac4b","isMergeCommit":false,"messageTitle":"[Level-6] Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"b00dd809cfaff11155064aa5e477e62273c1e57d","isMergeCommit":false,"messageTitle":"Add missing space","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a15018fee81b7fa158e892d8ef40f9537bc30c61","isMergeCommit":false,"messageTitle":"Modify test case to check for exceptions and deletions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}},{"hash":"c26dbfc946a3704b529cd135ec97f41636e31505","isMergeCommit":false,"messageTitle":"Modify code for conciseness and add extra exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":38}}},{"hash":"a7b61ebb66d462545b7a34f8187ff46d5fe8be25","isMergeCommit":false,"messageTitle":"Modify test case to account for added exceptions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"171550fdd3739fbe0a6851ac05d81d159fbc2b47","isMergeCommit":false,"messageTitle":"Fix indentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"d7765d363484e6b15781080cd8cac49b88590eaa","isMergeCommit":false,"messageTitle":"Add constructor overloading for Task.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":2}}},{"hash":"95557ca86a053555e8862d3fc6472e14b844aa57","isMergeCommit":false,"messageTitle":"Add string method for easy write access to file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":12}}},{"hash":"05c1586a135d1903d5aec704dbebcd05f4d1fbf4","isMergeCommit":false,"messageTitle":"Add Save function for Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":38}}},{"hash":"6fcba5d6c9b8582aef0526a1843c747f491b9614","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"cabd2fbaa4f6633537a0cb7e72939abad001b81d","isMergeCommit":false,"messageTitle":"Remove unintended debugging print statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"fed068161ae0636ab48580891a52c033f35d924d","isMergeCommit":false,"messageTitle":"Add Dates and Times functionality for Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}},{"hash":"08ef75ae50310717ef706bcb412473256257d164","isMergeCommit":false,"messageTitle":"Update test case","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"53c5af3c38cd63b5f02f5d3b0595c561fb5b8f30","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"4a99d82433cfd481aac338ea162a1c4d1c8b1f89","isMergeCommit":false,"messageTitle":"Add abstract class Command.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"8d5f040e768c96664a9c1d7669ceb19e20c26e9e","isMergeCommit":false,"messageTitle":"Modify createList method in Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":23}}},{"hash":"00c2eaba9ba4503d74a3a7b3736189cf8cb2f3b3","isMergeCommit":false,"messageTitle":"Modify code to be more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":318,"deletions":129}}},{"hash":"2da0ce47d1d61d743fdef868430ecd11d8755aa2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"0132ac167b92df7445a96547d12f585db185e1e8","isMergeCommit":false,"messageTitle":"Organize the classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":90},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"42dc44cbd990f0d0d263391d4e9d17e65354e0ae","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/imkwokyong/ip into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"18fecae250e1a8f146094e246d264f2e0ea7a51f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"18c7038a2acbb252a61507664e4f34a27ccd93e8","isMergeCommit":false,"messageTitle":"Update main class filepath","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"313bd58c12b24ac60654c1817296ab0ecc5bcd50","isMergeCommit":false,"messageTitle":"Fix grammar","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"27d4b597243c63a567e4c12f69c0f869774cfa37","isMergeCommit":false,"messageTitle":"Handle more exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":17}}}]},{"date":"2023-08-29","commitResults":[{"hash":"f2a7ace85dd84a77d4c0a0704a78691899f633d8","isMergeCommit":false,"messageTitle":"Add JUnit tests for Deadline and Event class","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":0}}},{"hash":"a445eadd313c4b94e30bf595d83c6f712a6b409e","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":239,"deletions":5}}},{"hash":"9de97deb08ce350792df874d37f2839a18adf1e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"5b5ff7acb6ce73b2ec1e146addf0ea57321b6084","isMergeCommit":false,"messageTitle":"Add Find functionality for Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":0}}},{"hash":"060bf8830c0e9ffbc13e80033ec03029412c33b3","isMergeCommit":true,"messageTitle":"Merge \u0027branch-Level-9\u0027 to master after fixing merge conflicts","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"55a7c36760765118b50965d9dbdff709171f3891","isMergeCommit":false,"messageTitle":"Fix spacing inconsistencies","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"d91e4b707789c5d037defb15ee75e3c19d4995e0","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to new methods and classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"14a831adccef9f92d337d3ee43a04b1d642d8887","isMergeCommit":false,"messageTitle":"Add checkstyle config","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"7e0d83db1e114fc72836ffec5c4aadb9a591597f","isMergeCommit":false,"messageTitle":"Adhere to checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":31}}},{"hash":"80325ce843aa932a2d3fcd3b815fa453ac3de0ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"5011e5c8161d52f8b1cfe5b61efc6c8bc7f1e31d","isMergeCommit":false,"messageTitle":"Fix minor typos and issues","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-09-02","commitResults":[{"hash":"a19315b1baeda3ef1656533627df1edaaf4734ac","isMergeCommit":false,"messageTitle":"Add JavaFX support in build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"8799e5007b6e8d5289684f9c1c69694888502dcb","isMergeCommit":false,"messageTitle":"Add Launcher.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"e5f46919d156627c8f3c7986e1782bf6b485193e","isMergeCommit":false,"messageTitle":"Add DialogBox and MainWindow FXML files","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0}}},{"hash":"73e3c8b6e37d2b2219295ef08a6eb4bcc053d84b","isMergeCommit":false,"messageTitle":"Add executeGui method to all Commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":0}}},{"hash":"877359a81de7cca0e1f3da83224a4aee083e38c9","isMergeCommit":false,"messageTitle":"Add getResponseToGui method in Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":6}}},{"hash":"8c25f0c5ac1d89837d608176d0a14166558910de","isMergeCommit":false,"messageTitle":"Add DialogBox.java, Main.java, MainWindow.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":1}}},{"hash":"5853f59eb30e484eb4a374b1c3f9793bdc06a184","isMergeCommit":false,"messageTitle":"Modify font style in FXML files","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":13,"deletions":4},"java":{"insertions":5,"deletions":1}}},{"hash":"14f77d5e82647d9cf13ffa19148f7331a9b1acf2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"7fe4c18adcbf474168b62190966d7748958f5c0c","isMergeCommit":false,"messageTitle":"Adhere to checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"6089f02bd9ad1c5229b03b44d514e7fa2118ff6b","isMergeCommit":false,"messageTitle":"Change FXML files version to resolve warnings","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":2,"deletions":2}}},{"hash":"cb88eb5680cbe76617dab480d595bbb1356db0a3","isMergeCommit":false,"messageTitle":"Remove \u0027final\u0027 from non-constants","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":11}}}]},{"date":"2023-09-08","commitResults":[{"hash":"c73af8c929f7d0579e23029d7132f226345b8be8","isMergeCommit":false,"messageTitle":"Change mainClass to include GUI in jar file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"d88b8c011466d47b282b233ac5da7691f937b03c","isMergeCommit":false,"messageTitle":"Enable keyword in Parser.java to be uppercase","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b34ece39396553c2a56171093d5010d4eab5c6ea","isMergeCommit":false,"messageTitle":"Enable assertions in build.gradle","messageBody":"There might be some hidden assumptions in the program where, when\nfailed, will jeopardize the code.\n\nEnabling assertions allows us to check our code against those\nassumptions and catch any errors in runtime.\n\nLet\u0027s enable assertions so that we could indicate some hidden bugs in\nour code as soon as possible.\n","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}},{"hash":"3d95db77c17d2201510759c090bb90b7b672ed30","isMergeCommit":false,"messageTitle":"Add assertions in Storage.java and MainWindow.java","messageBody":"For Storage.java, the external file might be edited or corrupted.\nFor MainWindow.java, we assume that the response that we get from Duke\nis not an empty message / null.\n\nAdding assertions here will prevent those anomalies from happening, by\ndetecting them in runtime and throw AssertionError.\n\nLet\u0027s,\n* add assertion to Storage.java to ensure status is either \"0\" or \"1\".\n* add assertion to Storage.java to ensure task is of \"T\", \"D\" or \"E\".\n* add assertion to MainWindow.java to ensure response is not null.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"68f7c7e637493249175082b5c3d09a4f7f67d48d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from imkwokyong/branch-A-Assertions","messageBody":"Enable and add assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"dc8165a6189682fac02318c3363be99de6f05b10","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":197,"deletions":63}}},{"hash":"27e6b826c414a8d98ea0137a0dc5cfbc7bf9ba64","isMergeCommit":true,"messageTitle":"Merge pull request #2 from imkwokyong/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"e00317cd7600af5b998cd58a4b3cd753a7be29bf","isMergeCommit":false,"messageTitle":"Add overridden equals method for all Task implementation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":0}}},{"hash":"2d0bc05c08312716dc3aec4ce7495367179feccf","isMergeCommit":false,"messageTitle":"Modify addTask method to check for duplicates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":1}}},{"hash":"0abf8ff78fbd6275ed25a66a0ef23e10fa21086c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-DetectDuplicates\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"200242791d6cd1e00181b30ffc5c9ebfaf813ebd","isMergeCommit":false,"messageTitle":"Adhere to checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}}]},{"date":"2023-09-16","commitResults":[{"hash":"54fe1663a46789e0d84161f43da90f50cc8593e4","isMergeCommit":false,"messageTitle":"Add some personality to the chatbot","messageBody":"","tags":["A-Personality"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}}]}]},"authorFileTypeContributionMap":{"imkwokyong":{"java":1556,"md":2,"fxml":44,"sh":0,"bat":1,"gradle":20,"txt":23}},"authorContributionVariance":{"imkwokyong":36759.71},"authorDisplayNameMap":{"imkwokyong":"CS2103-F13-1 KUAN..YONG"}} diff --git a/inezkok_ip_master/authorship.json b/inezkok_ip_master/authorship.json index e6b0c30a..5dbe8448 100644 --- a/inezkok_ip_master/authorship.json +++ b/inezkok_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"inezkok":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":"inezkok"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"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":"inezkok"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"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":"inezkok"},"content":" mainClass.set(\"duke.Main\")","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":"inezkok"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"inezkok":20,"-":43}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"[T] [X] read book","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"[D] [ ] return book (by: Jun 06 2023)","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"[E] [X] orientation week (from: Jul 31 2023 to: Aug 04 2023)","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"[T] [ ] Book driving lesson","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"[D] [ ] complete week 5 iP (by: Sep 15 2023)","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"inezkok":5}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" * The Duke program is a chatbot named Beep Boop Bot that","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * executes commands to create and edit a tasklist.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * @author Inez Kok","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" private static final String FILE_PATH \u003d \"data/tasks.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" * The constructor for a Duke.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" public Duke() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" // Setting up required components","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" this.storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" // Load tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" * Returns the String representation of the Duke response to a given input.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" * @param input The user input given.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" * @return The String representation of the Duke response.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" if (isExit) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" ui.resetOutput();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" Command c \u003d Parser.parse(input, tasks.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" return ui.getOutput();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"inezkok":55,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * Runs the GUI Duke program.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * @param args The collection of String arguments.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":17}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * Starts the GUI program.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" * primary stages.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" stage.setTitle(\"Beep Boop Bot\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":40}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Duke.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" * Initialises Main Window.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" showGreetingMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" * Sets the relevant Duke.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" * @param d The Duke to be set.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" if (response.trim().isBlank()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" DialogBox.getUserDialog(input, userImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":" private void showGreetingMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" DialogBox.getDukeDialog(","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":" Ui.getGreetingMessage(),","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" dukeImage","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":80}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.command.AddDeadlineCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.command.AddEventCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import duke.command.AddToDoCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"import duke.command.MarkDoneCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"import duke.command.SortCategoryCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"import duke.command.UnmarkDoneCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" * The Parser class deals with making sense of the user command.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" * @author Inez Kok","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * Parses through user command and make sense of it.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * @param input This is the user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @param size This is the size of the current task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" * @return Command This returns the respective command based on user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input error.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" public static Command parse(String input, int size) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" assert size \u003e\u003d 0 : \"size of task list should be more than equal to 0\";","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" String number \u003d input.replaceFirst(\"mark\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" checkRange(number, size);","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" int index \u003d Integer.parseInt(number);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" return new MarkDoneCommand(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" String number \u003d input.replaceFirst(\"unmark\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" checkRange(number, size);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" int index \u003d Integer.parseInt(number);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" return new UnmarkDoneCommand(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" String description \u003d input.replaceFirst(\"todo\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" checkToDo(description);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" return new AddToDoCommand(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" String[] deadlineString \u003d input.replaceFirst(\"deadline\", \"\")","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" .split(\"/\", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":" checkDeadline(deadlineString);","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" String deadlineDate \u003d deadlineString[1].replaceFirst(\"by\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" checkDate(deadlineDate);","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" String description \u003d deadlineString[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" LocalDate d \u003d LocalDate.parse(deadlineDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" return new AddDeadlineCommand(description, d);","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" String[] eventString \u003d input.replaceFirst(\"event\", \"\").split(\"/\", 3);","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" checkEvent(eventString);","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" String start \u003d eventString[1].replaceFirst(\"from\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" String end \u003d eventString[2].replaceFirst(\"to\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":" checkDate(start);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" checkDate(end);","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" String description \u003d eventString[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" LocalDate d1 \u003d LocalDate.parse(start);","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":" LocalDate d2 \u003d LocalDate.parse(end);","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":" return new AddEventCommand(description, d1, d2);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"inezkok"},"content":" String number \u003d input.replaceFirst(\"delete\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"inezkok"},"content":" checkRange(number, size);","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"inezkok"},"content":" int index \u003d Integer.parseInt(number);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"inezkok"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"inezkok"},"content":" String keyword \u003d input.replaceFirst(\"find\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"inezkok"},"content":" checkFind(keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"inezkok"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"inezkok"},"content":" } else if (input.equals(\"sort\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"inezkok"},"content":" return new SortCategoryCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! I\u0027m sorry, but I don\u0027t know what that means :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"inezkok"},"content":" * Checks whether the user input for mark,unmark or delete commands is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"inezkok"},"content":" * @param number The string representation of the one-based index of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"inezkok"},"content":" * @param size The size of the current task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input error.","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"inezkok"},"content":" private static void checkRange(String number, int size) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"inezkok"},"content":" assert size \u003e\u003d 0 : \"size of task list should be more than equal to 0\";","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"inezkok"},"content":" if (number.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that the index of the task is not empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"inezkok"},"content":" int numberInt \u003d Integer.parseInt(number);","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"inezkok"},"content":" if (numberInt \u003c\u003d 0 || numberInt \u003e size) {","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that\"","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"inezkok"},"content":" + \" the index of the task is within range.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"inezkok"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that the index of the task is an integer.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"inezkok"},"content":" * Check whethers the user input for creating a todo is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"inezkok"},"content":" * @param description The string representation of the todo description.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input error.","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"inezkok"},"content":" private static void checkToDo(String description) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"inezkok"},"content":" if (description.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"inezkok"},"content":" * Checks whether the user input for creating a deadline is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"inezkok"},"content":" * @param deadlineString The array of string representations of the parameters of a Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input error.","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"inezkok"},"content":" private static void checkDeadline(String[] deadlineString) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"inezkok"},"content":" boolean isNotLengthTwo \u003d deadlineString.length !\u003d 2;","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"inezkok"},"content":" if (isNotLengthTwo) {","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that\"","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"inezkok"},"content":" + \" the description and date of the deadline is not empty.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"inezkok"},"content":" boolean isDescriptionBlank \u003d deadlineString[0].isBlank();","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"inezkok"},"content":" boolean isDateBlank \u003d deadlineString[1].isBlank();","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"inezkok"},"content":" if (isDescriptionBlank || isDateBlank) {","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that\"","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"inezkok"},"content":" + \" the description and date of the deadline is not empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"inezkok"},"content":" * Checks whether the user input for creating a event is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"inezkok"},"content":" * @param eventString The array of string representations of the parameters of an Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input error.","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"inezkok"},"content":" private static void checkEvent(String[] eventString) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"inezkok"},"content":" boolean isNotLengthThree \u003d eventString.length !\u003d 3;","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"inezkok"},"content":" if (isNotLengthThree) {","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that\"","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"inezkok"},"content":" + \" the description and dates of the event is not empty.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"inezkok"},"content":" boolean isDescriptionBlank \u003d eventString[0].isBlank();","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"inezkok"},"content":" boolean isFromDateBlank \u003d eventString[1].isBlank();","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"inezkok"},"content":" boolean isToDateBlank \u003d eventString[2].isBlank();","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"inezkok"},"content":" if (isDescriptionBlank || isFromDateBlank || isToDateBlank) {","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that\"","lastModifiedDate":"2023-08-28"},{"lineNumber":177,"author":{"gitId":"inezkok"},"content":" + \" the description and date of the event is not empty.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"inezkok"},"content":" * Checks whether the user input for a Date is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":185,"author":{"gitId":"inezkok"},"content":" * @param date The string representation of the date.","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On format error of String date.","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":188,"author":{"gitId":"inezkok"},"content":" private static void checkDate(String date) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":189,"author":{"gitId":"inezkok"},"content":" assert !date.isBlank() : \"date should not be blank\";","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":192,"author":{"gitId":"inezkok"},"content":" LocalDate d \u003d LocalDate.parse(date);","lastModifiedDate":"2023-08-28"},{"lineNumber":193,"author":{"gitId":"inezkok"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":194,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please check that the date is in YYYY-MM-DD format.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":195,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":196,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":197,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":199,"author":{"gitId":"inezkok"},"content":" * Checks whether the keyword for the find command is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":200,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":201,"author":{"gitId":"inezkok"},"content":" * @param keyword The keyword to be searched for.","lastModifiedDate":"2023-08-28"},{"lineNumber":202,"author":{"gitId":"inezkok"},"content":" * @throws DukeException When keyword is blank.","lastModifiedDate":"2023-08-28"},{"lineNumber":203,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":204,"author":{"gitId":"inezkok"},"content":" private static void checkFind(String keyword) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":205,"author":{"gitId":"inezkok"},"content":" assert !keyword.isBlank() : \"keyword should not be blank\";","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"inezkok"},"content":" if (keyword.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":208,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please check that you have entered a keyword.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":209,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":210,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":211,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":211}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * The Storage class deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" * @author Inez Kok","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" private String filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * This is the constructor for a Storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @param filePath The string representation of the file path.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" * Checks whether the string representation of a date is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" * @param date The string representation of the date.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On format error.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" private void validateDate(String date) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" LocalDate d \u003d LocalDate.parse(date);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please check that the date is in YYYY-MM-DD format.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" * Formats the string representation of a date YYYY-MM-DD.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" * @param date The string representation of the date MMM DD YYYY.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" * @return Returns the string representation of a date YYYY-MM-DD.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" private String formatDate(String date) {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" String dateString \u003d date;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" String month \u003d dateString.substring(0, 3);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" String day \u003d dateString.substring(4, 6);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" String year \u003d dateString.substring(7, 11);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":" if (month.equals(\"Jan\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" month \u003d \"01\";","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Feb\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":" month \u003d \"02\";","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Mar\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" month \u003d \"03\";","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Apr\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" month \u003d \"04\";","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"May\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" month \u003d \"05\";","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Jun\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":" month \u003d \"06\";","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Jul\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" month \u003d \"07\";","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Aug\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" month \u003d \"08\";","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Sep\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" month \u003d \"09\";","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Oct\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":" month \u003d \"10\";","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Nov\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":" month \u003d \"11\";","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Dec\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"inezkok"},"content":" month \u003d \"12\";","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"inezkok"},"content":" return String.format(\"%s-%s-%s\", year, month, day);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"inezkok"},"content":" * Loads the list of tasks in the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"inezkok"},"content":" * @return Returns an array list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On corrupted values in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"inezkok"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"inezkok"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"inezkok"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"inezkok"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"inezkok"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"inezkok"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"inezkok"},"content":" int i \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"inezkok"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"inezkok"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"inezkok"},"content":" String taskType \u003d line.substring(0, 3);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"inezkok"},"content":" String done \u003d line.substring(4, 7);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"inezkok"},"content":" if (taskType.equals(\"[T]\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"inezkok"},"content":" String description \u003d line.substring(8);","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"inezkok"},"content":" ToDo toDo \u003d new ToDo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"inezkok"},"content":" tasks.add(toDo);","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"inezkok"},"content":" } else if (taskType.equals(\"[D]\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"inezkok"},"content":" String[] fullLine \u003d line.substring(8).split(\":\", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"inezkok"},"content":" String description \u003d fullLine[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"inezkok"},"content":" String date \u003d fullLine[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"inezkok"},"content":" String taskDate \u003d formatDate(date.substring(0, date.length()).trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"inezkok"},"content":" validateDate(taskDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"inezkok"},"content":" String taskDescription \u003d description.substring(0, description.length() - 3).trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"inezkok"},"content":" LocalDate d \u003d LocalDate.parse(taskDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"inezkok"},"content":" Deadline deadline \u003d new Deadline(taskDescription, d);","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"inezkok"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"inezkok"},"content":" } else if (taskType.equals(\"[E]\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"inezkok"},"content":" String[] fullLine \u003d line.substring(8).split(\":\", 3);","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"inezkok"},"content":" String description \u003d fullLine[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"inezkok"},"content":" String start \u003d fullLine[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"inezkok"},"content":" String end \u003d fullLine[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"inezkok"},"content":" String taskStart \u003d formatDate(start.substring(0, start.length() - 2).trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"inezkok"},"content":" String taskEnd \u003d formatDate(end.substring(0, end.length() - 1).trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"inezkok"},"content":" validateDate(taskStart);","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"inezkok"},"content":" validateDate(taskEnd);","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"inezkok"},"content":" String taskDescription \u003d description.substring(0, description.length() - 5).trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"inezkok"},"content":" LocalDate d1 \u003d LocalDate.parse(taskStart);","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"inezkok"},"content":" LocalDate d2 \u003d LocalDate.parse(taskEnd);","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"inezkok"},"content":" Event event \u003d new Event(taskDescription, d1, d2);","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"inezkok"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! File has unexpected task type :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"inezkok"},"content":" if (done.equals(\"[X]\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"inezkok"},"content":" tasks.get(i).markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"inezkok"},"content":" } else if (done.equals(\"[ ]\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! File has unexpected done value :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"inezkok"},"content":" i++;","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"inezkok"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"inezkok"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":167,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"inezkok"},"content":" * Saves changes made to the task list in the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"inezkok"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On IO exceptions.","lastModifiedDate":"2023-08-28"},{"lineNumber":174,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":175,"author":{"gitId":"inezkok"},"content":" public void save(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":176,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":177,"author":{"gitId":"inezkok"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":178,"author":{"gitId":"inezkok"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":179,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"inezkok"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"inezkok"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"inezkok"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"inezkok"},"content":" System.out.println(\"Boop Beep OOPS! \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":184,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":185,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"inezkok"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":188,"author":{"gitId":"inezkok"},"content":" String stringList \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":189,"author":{"gitId":"inezkok"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":190,"author":{"gitId":"inezkok"},"content":" stringList \u003d stringList + list.get(i) + System.lineSeparator();","lastModifiedDate":"2023-08-28"},{"lineNumber":191,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":192,"author":{"gitId":"inezkok"},"content":" fw.write(stringList);","lastModifiedDate":"2023-08-28"},{"lineNumber":193,"author":{"gitId":"inezkok"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":194,"author":{"gitId":"inezkok"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":195,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":196,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":197,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":198}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.task.TaskCategoryComparator;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * The TaskList class contains the task list and the related operations.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * @author Inez Kok","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * The constructor for an empty TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * The constructor for a TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param tasks The array list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" * @return Returns the array list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" * Returns the specific task in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" * @param index The zero-based index of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" * @return Returns the task with that index.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size() : \"index should be between 0 and size of task list - 1\";","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" * Marks the specific task in the task list as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" * @param index The zero-based index of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" public void markTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size() : \"index should be between 0 and size of task list - 1\";","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" tasks.get(index).markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" * Marks the specific task in the task list as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" * @param index The zero-based index of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size() : \"index should be between 0 and size of task list - 1\";","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" tasks.get(index).markNotDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":" * Adds a task into the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" * @param task The task being added.","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":" assert task !\u003d null : \"task should not be a null\";","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"inezkok"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"inezkok"},"content":" * Removes a task from the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"inezkok"},"content":" * @param index The zero-based index of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"inezkok"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"inezkok"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size() : \"index should be between 0 and size of task list - 1\";","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"inezkok"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"inezkok"},"content":" * Retrieves the number of tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"inezkok"},"content":" * @return The number of tasks in the task lists.","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"inezkok"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"inezkok"},"content":" return tasks.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"inezkok"},"content":" * Finds tasks in the task list containing the keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"inezkok"},"content":" public TaskList find(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"inezkok"},"content":" assert !keyword.isBlank() : \"keyword should not be blank\";","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"inezkok"},"content":" TaskList filteredTasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"inezkok"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"inezkok"},"content":" String taskStringLower \u003d tasks.get(i).toString().toLowerCase();","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"inezkok"},"content":" String keywordLower \u003d keyword.toLowerCase();","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"inezkok"},"content":" if (taskStringLower.contains(keywordLower)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"inezkok"},"content":" filteredTasks.add(tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"inezkok"},"content":" return filteredTasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"inezkok"},"content":" * Sorts the task list by the type of category.","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"inezkok"},"content":" * @return Returns a task list sorted by the category of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"inezkok"},"content":" public TaskList sortByCategory() {","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"inezkok"},"content":" ArrayList\u003cTask\u003e newTasks \u003d tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"inezkok"},"content":" TaskCategoryComparator taskComparator \u003d new TaskCategoryComparator();","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"inezkok"},"content":" Collections.sort(newTasks, taskComparator);","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"inezkok"},"content":" TaskList sortedTaskList \u003d new TaskList(newTasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"inezkok"},"content":" return sortedTaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":137}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The Ui class deals with the interactions with the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * @author Inez Kok","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" private static final String NAME \u003d \"Beep Boop Bot\";","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" private StringBuilder output;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * The constructor for a Ui.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public Ui() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" this.output \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" public void resetOutput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" output.setLength(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" public String getOutput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" return output.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" public void appendOutput(String str) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" output.append(str);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" public void printMessage(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" appendOutput(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" * Prints the greeting message.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" public static String getGreetingMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" String greetingMessage \u003d String.format(\"Hello! I\u0027m %s!\\nHow can I help you?\\n\", NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" return greetingMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" * Prints the exit message.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" public void printExitMessage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" String exitMessage \u003d \"Bye Bye! Hope to see you again soon! Beep Boop!\";","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" appendOutput(exitMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" * Prints the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":" public void printList(ArrayList\u003cTask\u003e list, String header) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":" appendOutput(header + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" String taskString \u003d String.format(\"%d. %s\\n\", i + 1, list.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":" appendOutput(taskString);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" * Prints the message that should appear when a task is successfully added.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" * @param task The task that was successfully added.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":" * @param list The updated list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" public void printAddSuccessMessage(Task task, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":" appendOutput(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" String taskString \u003d String.format(\"%s\\n\", task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":" String sizeString \u003d String.format(\"Now you have %d tasks in the list.\\n\", list.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" appendOutput(taskString);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" appendOutput(sizeString);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"inezkok"},"content":" * Prints the message that should appear when a task is successfully deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"inezkok"},"content":" * @param index The zero-based index of the task that was successfully deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"inezkok"},"content":" * @param list The list of tasks before being updated.","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"inezkok"},"content":" public void printDeleteSuccessMessage(int index, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"inezkok"},"content":" appendOutput(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"inezkok"},"content":" String taskString \u003d String.format(\"%s\\n\", list.get(index).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"inezkok"},"content":" String sizeString \u003d String.format(\"Now you have %d tasks in the list.\\n\", list.size() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"inezkok"},"content":" appendOutput(taskString);","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"inezkok"},"content":" appendOutput(sizeString);","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":95}},{"path":"src/main/java/duke/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * The AddDeadlineCommand class is the command for adding a Deadline into the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" private LocalDate deadlineDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * The constructor for an AddDeadlineCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" * @param deadlineDate The due date of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" public AddDeadlineCommand(String description, LocalDate deadlineDate) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" this.deadlineDate \u003d deadlineDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" * Executes the AddDeadlineCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input or file error.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" Deadline deadline \u003d new Deadline(description, deadlineDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" ui.printAddSuccessMessage(deadline, tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" * Checks whether this is an Exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":54}},{"path":"src/main/java/duke/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * The AddEventCommand is the command for adding an Event into the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" * The constructor for an AddEventCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" * @param start The start date of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * @param end The end date of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" public AddEventCommand(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" * Executes the AddEventCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input or file error.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" Event event \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" ui.printAddSuccessMessage(event, tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" * Checks whether the command is an Exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":57}},{"path":"src/main/java/duke/command/AddToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * The AddToDoCommand is the command for adding a ToDo to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"public class AddToDoCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * The constructor for an AddToDoCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * @param description The description of the ToDo.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" public AddToDoCommand(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * Executes the AddToDoCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input or file error.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" ui.printAddSuccessMessage(todo, tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an Exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":49}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" * The Command class is an abstract class for commands.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" * Executes the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input or file error.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an Exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * @return Returns whether it is an Exit command.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":28}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" * The DeleteCommand class is for the command to delete tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * The constructor for a DeleteCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param index The one-based index of the task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * Executes the delete command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" ui.printDeleteSuccessMessage(index, tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" tasks.delete(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an Exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":47}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The ExitCommand class is for the command \"bye\".","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * Executes the exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" ui.printExitMessage();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @return Returns true.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":32}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The FindCommand is for \"find\" command.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" private String keyword;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * The constructor for a FindCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param keyword The string representation of the keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" * Executes the find command.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" ui.printList(tasks.find(this.keyword).getAllTasks(), \"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":43}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The ListCommmand class is for the \"list\" command.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * Executes the list command.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" ui.printList(tasks.getAllTasks(), \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":32}},{"path":"src/main/java/duke/command/MarkDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" * The MarkDoneCommand is for the \"mark\" command.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"public class MarkDoneCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * The constructor for a MarkDoneCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param index The one-based index of the task to be marked.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public MarkDoneCommand(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * Executes the mark done command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" tasks.markTask(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" ui.printMessage(\"Beep Boop NICE! I\u0027ve marked this task as done:\\n\\t\\t\" + tasks.get(index));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":47}},{"path":"src/main/java/duke/command/SortCategoryCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The SortCategoryCommand is the command for sorting the tasks in the task list by their categories.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"public class SortCategoryCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * Executes the sort category command.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" ui.printList(tasks.sortByCategory().getAllTasks(),","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" \"Here are the tasks in your list sorted by category:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"inezkok":33}},{"path":"src/main/java/duke/command/UnmarkDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" * The UnmarkDoneCommand is for the \"unmark\" command.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"public class UnmarkDoneCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * The constructor for an UnmarkDoneCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param index The one-based index of the task to be unmarked.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public UnmarkDoneCommand(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * Executes the unmark done command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" tasks.unmarkTask(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" ui.printMessage(\"Beep Boop NICE! I\u0027ve unmarked this task as done:\\n\\t\\t\" + tasks.get(index));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":47}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":" * The DukeException is an exception that occurs while running the Duke program.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The constructor of a DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * @param message The error message of the DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" super(message);","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":15}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" * The Deadline class is a type of Task with a due date.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" private static final DateTimeFormatter FORMAT \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * The constructor for a Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param deadline The due date of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public Deadline(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * Returns the string representation of a Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @return Returns the string representation of a Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" return String.format(\"[D] %s (by: %s)\", super.toString(), deadline.format(FORMAT));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":33}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" * The Event class is a task that has a start and end date.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" private static final DateTimeFormatter FORMAT \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" private LocalDate start;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" private LocalDate end;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * The constructor for an Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * @param start The start date of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * @param end The end date of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" public Event(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * Returns the string representation of an Event.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" * @return Returns the string representation of an Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" return String.format(\"[E] %s (from: %s to: %s)\", super.toString(), start.format(FORMAT), end.format(FORMAT));","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":36}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":" * The Task class is used to represent a task.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" private String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" * The constructor for a Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * @param description","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" public void markDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" * Returns the string representation of a Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" * @return Returns the string representation of a Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" if (isDone) {","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" return String.format(\"[X] %s\", description);","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" return String.format(\"[ ] %s\", description);","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":46}},{"path":"src/main/java/duke/task/TaskCategoryComparator.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":" * A Comparator class to compare tasks by their categories.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"public class TaskCategoryComparator implements Comparator\u003cTask\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * Compares given tasks by their categories.","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * @param t1 the first object to be compared.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" * @param t2 the second object to be compared.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * @return Returns integer value -1, 0, 1 if t1 is less than, equal to or greater than","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * t2 respectively.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" public int compare(Task t1, Task t2) {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" String taskString \u003d t1.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" String otherTaskString \u003d t2.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" boolean isTaskToDo \u003d taskString.startsWith(\"[T]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" boolean isTaskDeadline \u003d taskString.startsWith(\"[D]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" boolean isTaskEvent \u003d taskString.startsWith(\"[E]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" boolean isOtherTaskToDo \u003d otherTaskString.startsWith(\"[T]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" boolean isOtherTaskDeadline \u003d otherTaskString.startsWith(\"[D]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" boolean isOtherTaskEvent \u003d otherTaskString.startsWith(\"[E]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" if (isTaskToDo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" if (isOtherTaskToDo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" return 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" return -1;","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" } else if (isTaskDeadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" if (isOtherTaskToDo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" return 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" } else if (isOtherTaskDeadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" return 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" return -1;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" } else if (isTaskEvent) {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" if (isOtherTaskToDo || isOtherTaskDeadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" return 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" } else if (isOtherTaskEvent) {","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" return 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" return -1;","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" return 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"inezkok":56}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":" * The ToDo class is a task without a due date.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The constructor for a ToDo.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * Returns the string representation of the ToDo.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * @return Returns the string representation of the ToDo.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" return String.format(\"[T] %s\", super.toString());","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":25}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"\u003cfx:root alignment\u003d\"CENTER_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"75.0\" fitWidth\u003d\"75.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" \u003cInsets left\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":21}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":23}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" public void dummyTest() {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":17}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import duke.command.AddDeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import duke.command.AddEventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"import duke.command.AddToDoCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"import duke.command.MarkDoneCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"import duke.command.UnmarkDoneCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" public void parser_success() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"bye\", 4) instanceof ExitCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"list\", 4) instanceof ListCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"mark 2\", 4) instanceof MarkDoneCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"unmark 2\", 4) instanceof UnmarkDoneCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"delete 2\", 4) instanceof DeleteCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"todo read book\", 4) instanceof AddToDoCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"deadline return book /by 2023-06-06\", 4) instanceof AddDeadlineCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"event orientation week /from 2023-07-31 /to 2023-08-04\", 4)","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" instanceof AddEventCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"find book\", 4) instanceof FindCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" public void parser_outOfRange_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"blah\", 4) instanceof Command);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! I\u0027m sorry, but I don\u0027t know what that means :(\", e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"mark 0\", 4) instanceof MarkDoneCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please make sure that the index of the task is within range.\",","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"unmark 5\", 4) instanceof UnmarkDoneCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please make sure that the index of the task is within range.\",","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"delete 7\", 4) instanceof DeleteCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please make sure that the index of the task is within range.\",","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" public void parser_invalidDate_exceptionThrown() {","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"deadline return book /by June 6th 2023\", 1)","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" instanceof AddDeadlineCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please check that the date is in YYYY-MM-DD format.\", e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":" public void parser_emptyDescriptionOrDate_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"todo\", 1) instanceof AddToDoCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"deadline\", 1) instanceof AddDeadlineCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please make sure that the description\"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"inezkok"},"content":" + \" and date of the deadline is not empty.\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"event\", 1) instanceof AddEventCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please make sure that the description\"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"inezkok"},"content":" + \" and dates of the event is not empty.\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":106}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" public void taskListConstructorTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" assertEquals(0, tasks.size(), \"Test initialisation of empty TaskList\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" public void taskListOverloadedConstructorTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" ToDo todo \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" TaskList taskList \u003d new TaskList(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" assertEquals(1, taskList.size(), \"Test initialisation of TaskList\");","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" public void taskListMethodsTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" ToDo todo \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" assertEquals(1, tasks.size(), \"Test addition of task\");","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" Deadline deadline \u003d new Deadline(\"return book\", LocalDate.parse(\"2023-06-06\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" Event event \u003d new Event(\"orientation week\", LocalDate.parse(\"2023-07-31\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" LocalDate.parse(\"2023-08-04\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" tasks.delete(0);","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" assertEquals(2, tasks.size(), \"Test deletion of task\");","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":49}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" public void deadlineTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" Deadline deadline \u003d new Deadline(\"return book\", LocalDate.parse(\"2023-06-06\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[D] [ ] return book (by: Jun 06 2023)\", deadline.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" deadline.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[D] [X] return book (by: Jun 06 2023)\", deadline.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" deadline.markNotDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[D] [ ] return book (by: Jun 06 2023)\", deadline.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":21}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"public class EventTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" public void eventTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" Event event \u003d new Event(\"orientation week\", LocalDate.parse(\"2023-07-31\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" LocalDate.parse(\"2023-08-04\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[E] [ ] orientation week (from: Jul 31 2023 to: Aug 04 2023)\", event.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" event.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[E] [X] orientation week (from: Jul 31 2023 to: Aug 04 2023)\", event.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" event.markNotDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[E] [ ] orientation week (from: Jul 31 2023 to: Aug 04 2023)\", event.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":22}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" public void toDoTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" ToDo todo \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[T] [ ] read book\", todo.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" todo.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[T] [X] read book\", todo.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" todo.markNotDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[T] [ ] read book\", todo.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"todo borrow book","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"mark 2","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"unmark 2","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":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":"inezkok"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"inezkok":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"inezkok":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":"inezkok"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"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":"inezkok"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"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":"inezkok"},"content":" mainClass.set(\"duke.Main\")","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":"inezkok"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"inezkok":20,"-":43}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"[T] [X] read book","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"[D] [ ] return book (by: Jun 06 2023)","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"[E] [X] orientation week (from: Jul 31 2023 to: Aug 04 2023)","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"[T] [ ] Book driving lesson","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"inezkok":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" * The Duke program is a chatbot named Beep Boop Bot that","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * executes commands to create and edit a tasklist.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * @author Inez Kok","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" private static final String FILE_PATH \u003d \"data/tasks.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * The constructor for a Duke.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" public Duke() {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" // Setting up required components","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" this.storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" // Load tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" * Returns the String representation of the Duke response to a given input.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" * @param input The user input given.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" * @return The String representation of the Duke response.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" if (isExit) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" ui.resetOutput();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" Command c \u003d Parser.parse(input, tasks.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" return ui.getOutput();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"inezkok":59,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * Runs the GUI Duke program.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * @param args The collection of String arguments.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":17}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.gui.MainWindow;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * Starts the GUI program.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * primary stages.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" scene.getStylesheets().add(\"/view/styles.css\");","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" stage.setTitle(\"Beep Boop Bot\");","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":42}},{"path":"src/main/java/duke/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * The AddDeadlineCommand class is the command for adding a Deadline into the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" private LocalDate deadlineDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * The constructor for an AddDeadlineCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" * @param deadlineDate The due date of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" public AddDeadlineCommand(String description, LocalDate deadlineDate) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" this.deadlineDate \u003d deadlineDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" * Executes the AddDeadlineCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input or file error.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" Deadline deadline \u003d new Deadline(description, deadlineDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" ui.printAddSuccessMessage(deadline, tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" * Checks whether this is an Exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":54}},{"path":"src/main/java/duke/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" * The AddEventCommand is the command for adding an Event into the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * The constructor for an AddEventCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" * @param start The start date of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" * @param end The end date of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" public AddEventCommand(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" * Executes the AddEventCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input or file error.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" Event event \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" ui.printAddSuccessMessage(event, tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" * Checks whether the command is an Exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":56}},{"path":"src/main/java/duke/command/AddToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * The AddToDoCommand is the command for adding a ToDo to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"public class AddToDoCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * The constructor for an AddToDoCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * @param description The description of the ToDo.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" public AddToDoCommand(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * Executes the AddToDoCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input or file error.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" ui.printAddSuccessMessage(todo, tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an Exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":49}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" * The Command class is an abstract class for commands.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" * Executes the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input or file error.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an Exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * @return Returns whether it is an Exit command.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":28}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" * The DeleteCommand class is for the command to delete tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * The constructor for a DeleteCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param index The one-based index of the task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * Executes the delete command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" ui.printDeleteSuccessMessage(index, tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" tasks.delete(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an Exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":47}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The ExitCommand class is for the command \"bye\".","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * Executes the exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" ui.printExitMessage();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @return Returns true.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" return true;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":32}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The FindCommand is for \"find\" command.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" private String keyword;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * The constructor for a FindCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param keyword The string representation of the keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" * Executes the find command.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" ui.printList(tasks.find(this.keyword).getAllTasks(), \"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":43}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The ListCommmand class is for the \"list\" command.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * Executes the list command.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" ui.printList(tasks.getAllTasks(), \"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":32}},{"path":"src/main/java/duke/command/MarkDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * The MarkDoneCommand is for the \"mark\" command.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"public class MarkDoneCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * The constructor for a MarkDoneCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * @param index The one-based index of the task to be marked.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" public MarkDoneCommand(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * Executes the mark done command.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" tasks.markTask(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" ui.printMessage(\"Beep Boop NICE! I\u0027ve marked this task as done:\\n\\t\\t\" + tasks.get(index));","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":48}},{"path":"src/main/java/duke/command/SortCategoryCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The SortCategoryCommand is the command for sorting the tasks in the task list by their categories.","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"public class SortCategoryCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * Executes the sort category command.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" ui.printList(tasks.sortByCategory().getAllTasks(),","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" \"Here are the tasks in your list sorted by category:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"inezkok":33}},{"path":"src/main/java/duke/command/UnmarkDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" * The UnmarkDoneCommand is for the \"unmark\" command.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"public class UnmarkDoneCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * The constructor for an UnmarkDoneCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param index The one-based index of the task to be unmarked.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public UnmarkDoneCommand(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" * Executes the unmark done command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * @param tasks The TaskList to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param ui The Ui to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * @param storage The Storage to be worked on.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @throws DukeException","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" tasks.unmarkTask(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" ui.printMessage(\"Beep Boop NICE! I\u0027ve unmarked this task as done:\\n\\t\\t\" + tasks.get(index));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" storage.save(tasks.getAllTasks());","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" * Checks whether it is an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" * @return Returns false.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":47}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":" * The DukeException is an exception that occurs while running the Duke program.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The constructor of a DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * @param message The error message of the DukeException.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" super(message);","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":15}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.gui;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" private void flip(String text) {","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" if (text.contains(\"OOPS\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" dialog.setStyle(\"-fx-background-color: #DE4E5E; -fx-background-radius: 0 10 10 10;\");","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" dialog.setStyle(\"-fx-background-color: #5B7FF5; -fx-background-radius: 0 10 10 10;\");","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" db.flip(text);","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":66}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.gui;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Duke.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" * Initialises Main Window.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" showGreetingMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" * Sets the relevant Duke.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" * @param d The Duke to be set.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" if (response.trim().isBlank()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":" DialogBox.getUserDialog(input, userImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" private void showGreetingMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" DialogBox.getDukeDialog(","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":" Ui.getGreetingMessage(),","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" dukeImage","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" )","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":82}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" * The Deadline class is a type of Task with a due date.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" private static final DateTimeFormatter FORMAT \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * The constructor for a Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param deadline The due date of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public Deadline(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * Returns the string representation of a Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @return Returns the string representation of a Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" return String.format(\"[D] %s (by: %s)\", super.toString(), deadline.format(FORMAT));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":33}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" * The Event class is a task that has a start and end date.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" private static final DateTimeFormatter FORMAT \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" private LocalDate start;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" private LocalDate end;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * The constructor for an Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * @param start The start date of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * @param end The end date of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" public Event(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * Returns the string representation of an Event.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" * @return Returns the string representation of an Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" return String.format(\"[E] %s (from: %s to: %s)\", super.toString(), start.format(FORMAT), end.format(FORMAT));","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":36}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":" * The Task class is used to represent a task.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" private String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" * The constructor for a Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * @param description","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" public void markDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" * Returns the string representation of a Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" * @return Returns the string representation of a Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" if (isDone) {","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" return String.format(\"[X] %s\", description);","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" return String.format(\"[ ] %s\", description);","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":46}},{"path":"src/main/java/duke/task/TaskCategoryComparator.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":" * A Comparator class to compare tasks by their categories.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"public class TaskCategoryComparator implements Comparator\u003cTask\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * Compares given tasks by their categories.","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * @param t1 the first object to be compared.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" * @param t2 the second object to be compared.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" * @return Returns integer value -1, 0, 1 if t1 is less than, equal to or greater than","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" * t2 respectively.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" public int compare(Task t1, Task t2) {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" String taskString \u003d t1.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" String otherTaskString \u003d t2.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" boolean isTaskToDo \u003d taskString.startsWith(\"[T]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" boolean isTaskDeadline \u003d taskString.startsWith(\"[D]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" boolean isTaskEvent \u003d taskString.startsWith(\"[E]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" boolean isOtherTaskToDo \u003d otherTaskString.startsWith(\"[T]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" boolean isOtherTaskDeadline \u003d otherTaskString.startsWith(\"[D]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" boolean isOtherTaskEvent \u003d otherTaskString.startsWith(\"[E]\");","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" if (isTaskToDo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" if (isOtherTaskToDo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" return 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" return -1;","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" } else if (isTaskDeadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" if (isOtherTaskToDo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" return 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" } else if (isOtherTaskDeadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" return 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" return -1;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" } else if (isTaskEvent) {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" if (isOtherTaskToDo || isOtherTaskDeadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" return 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" } else if (isOtherTaskEvent) {","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" return 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" return -1;","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" return 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"inezkok":56}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":" * The ToDo class is a task without a due date.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The constructor for a ToDo.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * Returns the string representation of the ToDo.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * @return Returns the string representation of the ToDo.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" return String.format(\"[T] %s\", super.toString());","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"inezkok":25}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.util;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.command.AddDeadlineCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.command.AddEventCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import duke.command.AddToDoCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"import duke.command.MarkDoneCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"import duke.command.SortCategoryCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"import duke.command.UnmarkDoneCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" * The Parser class deals with making sense of the user command.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" * @author Inez Kok","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" * Parses through user command and make sense of it.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" * @param input This is the user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @param size This is the size of the current task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" * @return Command This returns the respective command based on user input.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input error.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" public static Command parse(String input, int size) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" assert size \u003e\u003d 0 : \"size of task list should be more than equal to 0\";","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" String number \u003d input.replaceFirst(\"mark\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" checkRange(number, size);","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" int index \u003d Integer.parseInt(number);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" return new MarkDoneCommand(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" String number \u003d input.replaceFirst(\"unmark\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" checkRange(number, size);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" int index \u003d Integer.parseInt(number);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" return new UnmarkDoneCommand(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" String description \u003d input.replaceFirst(\"todo\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" checkToDo(description);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" return new AddToDoCommand(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" String[] deadlineString \u003d input.replaceFirst(\"deadline\", \"\")","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" .split(\"/\", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":" checkDeadline(deadlineString);","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" String deadlineDate \u003d deadlineString[1].replaceFirst(\"by\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" checkDate(deadlineDate);","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" String description \u003d deadlineString[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" LocalDate d \u003d LocalDate.parse(deadlineDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" return new AddDeadlineCommand(description, d);","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" String[] eventString \u003d input.replaceFirst(\"event\", \"\").split(\"/\", 3);","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" checkEvent(eventString);","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" String start \u003d eventString[1].replaceFirst(\"from\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" String end \u003d eventString[2].replaceFirst(\"to\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":" checkDate(start);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" checkDate(end);","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" String description \u003d eventString[0].trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" LocalDate d1 \u003d LocalDate.parse(start);","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":" LocalDate d2 \u003d LocalDate.parse(end);","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":" return new AddEventCommand(description, d1, d2);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"inezkok"},"content":" String number \u003d input.replaceFirst(\"delete\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"inezkok"},"content":" checkRange(number, size);","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"inezkok"},"content":" int index \u003d Integer.parseInt(number);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"inezkok"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"inezkok"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"inezkok"},"content":" String keyword \u003d input.replaceFirst(\"find\", \"\").trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"inezkok"},"content":" checkFind(keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"inezkok"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"inezkok"},"content":" } else if (input.equals(\"sort\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"inezkok"},"content":" return new SortCategoryCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! I\u0027m sorry, but I don\u0027t know what that means :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"inezkok"},"content":" * Checks whether the user input for mark,unmark or delete commands is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"inezkok"},"content":" * @param number The string representation of the one-based index of task.","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"inezkok"},"content":" * @param size The size of the current task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input error.","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"inezkok"},"content":" private static void checkRange(String number, int size) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"inezkok"},"content":" assert size \u003e\u003d 0 : \"size of task list should be more than equal to 0\";","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"inezkok"},"content":" if (number.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that the index of the task is not empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"inezkok"},"content":" int numberInt \u003d Integer.parseInt(number);","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"inezkok"},"content":" if (numberInt \u003c\u003d 0 || numberInt \u003e size) {","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that\"","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"inezkok"},"content":" + \" the index of the task is within range.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"inezkok"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that the index of the task is an integer.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"inezkok"},"content":" * Check whethers the user input for creating a todo is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"inezkok"},"content":" * @param description The string representation of the todo description.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input error.","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"inezkok"},"content":" private static void checkToDo(String description) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"inezkok"},"content":" if (description.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"inezkok"},"content":" * Checks whether the user input for creating a deadline is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"inezkok"},"content":" * @param deadlineString The array of string representations of the parameters of a Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input error.","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"inezkok"},"content":" private static void checkDeadline(String[] deadlineString) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"inezkok"},"content":" boolean isNotLengthTwo \u003d deadlineString.length !\u003d 2;","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"inezkok"},"content":" if (isNotLengthTwo) {","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that\"","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"inezkok"},"content":" + \" the description and date of the deadline is not empty.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"inezkok"},"content":" boolean isDescriptionBlank \u003d deadlineString[0].isBlank();","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"inezkok"},"content":" boolean isDateBlank \u003d deadlineString[1].isBlank();","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"inezkok"},"content":" if (isDescriptionBlank || isDateBlank) {","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that\"","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"inezkok"},"content":" + \" the description and date of the deadline is not empty.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"inezkok"},"content":" * Checks whether the user input for creating a event is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"inezkok"},"content":" * @param eventString The array of string representations of the parameters of an Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On input error.","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"inezkok"},"content":" private static void checkEvent(String[] eventString) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"inezkok"},"content":" boolean isNotLengthThree \u003d eventString.length !\u003d 3;","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"inezkok"},"content":" if (isNotLengthThree) {","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that\"","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"inezkok"},"content":" + \" the description and dates of the event is not empty.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"inezkok"},"content":" boolean isDescriptionBlank \u003d eventString[0].isBlank();","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"inezkok"},"content":" boolean isFromDateBlank \u003d eventString[1].isBlank();","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"inezkok"},"content":" boolean isToDateBlank \u003d eventString[2].isBlank();","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"inezkok"},"content":" if (isDescriptionBlank || isFromDateBlank || isToDateBlank) {","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please make sure that\"","lastModifiedDate":"2023-08-28"},{"lineNumber":177,"author":{"gitId":"inezkok"},"content":" + \" the description and date of the event is not empty.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"inezkok"},"content":" * Checks whether the user input for a Date is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":185,"author":{"gitId":"inezkok"},"content":" * @param date The string representation of the date.","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On format error of String date.","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":188,"author":{"gitId":"inezkok"},"content":" private static void checkDate(String date) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":189,"author":{"gitId":"inezkok"},"content":" assert !date.isBlank() : \"date should not be blank\";","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":192,"author":{"gitId":"inezkok"},"content":" LocalDate d \u003d LocalDate.parse(date);","lastModifiedDate":"2023-08-28"},{"lineNumber":193,"author":{"gitId":"inezkok"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":194,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please check that the date is in YYYY-MM-DD format.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":195,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":196,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":197,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":199,"author":{"gitId":"inezkok"},"content":" * Checks whether the keyword for the find command is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":200,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":201,"author":{"gitId":"inezkok"},"content":" * @param keyword The keyword to be searched for.","lastModifiedDate":"2023-08-28"},{"lineNumber":202,"author":{"gitId":"inezkok"},"content":" * @throws DukeException When keyword is blank.","lastModifiedDate":"2023-08-28"},{"lineNumber":203,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":204,"author":{"gitId":"inezkok"},"content":" private static void checkFind(String keyword) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":205,"author":{"gitId":"inezkok"},"content":" assert !keyword.isBlank() : \"keyword should not be blank\";","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"inezkok"},"content":" if (keyword.isBlank()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":208,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please check that you have entered a keyword.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":209,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":210,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":211,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":211}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.util;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" * The Storage class deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" * @author Inez Kok","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" private String filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * This is the constructor for a Storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" * @param filePath The string representation of the file path.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" * Checks whether the string representation of a date is valid.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" * @param date The string representation of the date.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On format error.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" private void validateDate(String date) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" LocalDate d \u003d LocalDate.parse(date);","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! Please check that the date is in YYYY-MM-DD format.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" * Formats the string representation of a date YYYY-MM-DD.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" * @param date The string representation of the date MMM DD YYYY.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" * @return Returns the string representation of a date YYYY-MM-DD.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" private String formatDate(String date) {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" String dateString \u003d date;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" String month \u003d dateString.substring(0, 3);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" String day \u003d dateString.substring(4, 6);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" String year \u003d dateString.substring(7, 11);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":" if (month.equals(\"Jan\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" month \u003d \"01\";","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Feb\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":" month \u003d \"02\";","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Mar\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" month \u003d \"03\";","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Apr\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" month \u003d \"04\";","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"May\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" month \u003d \"05\";","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Jun\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":" month \u003d \"06\";","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Jul\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" month \u003d \"07\";","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Aug\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" month \u003d \"08\";","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Sep\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" month \u003d \"09\";","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Oct\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":" month \u003d \"10\";","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Nov\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":" month \u003d \"11\";","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"inezkok"},"content":" } else if (month.equals(\"Dec\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"inezkok"},"content":" month \u003d \"12\";","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"inezkok"},"content":" return String.format(\"%s-%s-%s\", year, month, day);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"inezkok"},"content":" * Loads the list of tasks in the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"inezkok"},"content":" * @return Returns an array list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On corrupted values in file.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"inezkok"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"inezkok"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"inezkok"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"inezkok"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"inezkok"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"inezkok"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"inezkok"},"content":" int i \u003d 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"inezkok"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"inezkok"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"inezkok"},"content":" String taskType \u003d line.substring(0, 3);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"inezkok"},"content":" String done \u003d line.substring(4, 7);","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"inezkok"},"content":" if (taskType.equals(\"[T]\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"inezkok"},"content":" String description \u003d line.substring(8);","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"inezkok"},"content":" ToDo toDo \u003d new ToDo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"inezkok"},"content":" tasks.add(toDo);","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"inezkok"},"content":" } else if (taskType.equals(\"[D]\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"inezkok"},"content":" String[] fullLine \u003d line.substring(8).split(\":\", 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"inezkok"},"content":" String description \u003d fullLine[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"inezkok"},"content":" String date \u003d fullLine[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"inezkok"},"content":" String taskDate \u003d formatDate(date.substring(0, date.length()).trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"inezkok"},"content":" validateDate(taskDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"inezkok"},"content":" String taskDescription \u003d description.substring(0, description.length() - 3).trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"inezkok"},"content":" LocalDate d \u003d LocalDate.parse(taskDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"inezkok"},"content":" Deadline deadline \u003d new Deadline(taskDescription, d);","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"inezkok"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"inezkok"},"content":" } else if (taskType.equals(\"[E]\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"inezkok"},"content":" String[] fullLine \u003d line.substring(8).split(\":\", 3);","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"inezkok"},"content":" String description \u003d fullLine[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"inezkok"},"content":" String start \u003d fullLine[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"inezkok"},"content":" String end \u003d fullLine[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"inezkok"},"content":" String taskStart \u003d formatDate(start.substring(0, start.length() - 2).trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"inezkok"},"content":" String taskEnd \u003d formatDate(end.substring(0, end.length() - 1).trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"inezkok"},"content":" validateDate(taskStart);","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"inezkok"},"content":" validateDate(taskEnd);","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"inezkok"},"content":" String taskDescription \u003d description.substring(0, description.length() - 5).trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"inezkok"},"content":" LocalDate d1 \u003d LocalDate.parse(taskStart);","lastModifiedDate":"2023-08-28"},{"lineNumber":143,"author":{"gitId":"inezkok"},"content":" LocalDate d2 \u003d LocalDate.parse(taskEnd);","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"inezkok"},"content":" Event event \u003d new Event(taskDescription, d1, d2);","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"inezkok"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! File has unexpected task type :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"inezkok"},"content":" if (done.equals(\"[X]\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"inezkok"},"content":" tasks.get(i).markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"inezkok"},"content":" } else if (done.equals(\"[ ]\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"inezkok"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! File has unexpected done value :(\");","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"inezkok"},"content":" i++;","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"inezkok"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"inezkok"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":167,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":168,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":169,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":170,"author":{"gitId":"inezkok"},"content":" * Saves changes made to the task list in the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"inezkok"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"inezkok"},"content":" * @throws DukeException On IO exceptions.","lastModifiedDate":"2023-08-28"},{"lineNumber":174,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":175,"author":{"gitId":"inezkok"},"content":" public void save(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":176,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":177,"author":{"gitId":"inezkok"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":178,"author":{"gitId":"inezkok"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":179,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"inezkok"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"inezkok"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"inezkok"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"inezkok"},"content":" System.out.println(\"Boop Beep OOPS! \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":184,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":185,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":186,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":187,"author":{"gitId":"inezkok"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-28"},{"lineNumber":188,"author":{"gitId":"inezkok"},"content":" String stringList \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":189,"author":{"gitId":"inezkok"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":190,"author":{"gitId":"inezkok"},"content":" stringList \u003d stringList + list.get(i) + System.lineSeparator();","lastModifiedDate":"2023-08-28"},{"lineNumber":191,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":192,"author":{"gitId":"inezkok"},"content":" fw.write(stringList);","lastModifiedDate":"2023-08-28"},{"lineNumber":193,"author":{"gitId":"inezkok"},"content":" fw.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":194,"author":{"gitId":"inezkok"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":195,"author":{"gitId":"inezkok"},"content":" throw new DukeException(\"Boop Beep OOPS! \" + e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":196,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":197,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":198}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.util;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import duke.task.TaskCategoryComparator;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * The TaskList class contains the task list and the related operations.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" * @author Inez Kok","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" * The constructor for an empty TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" * The constructor for a TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" * @param tasks The array list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" * @return Returns the array list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" * Returns the specific task in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" * @param index The zero-based index of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" * @return Returns the task with that index.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size() : \"index should be between 0 and size of task list - 1\";","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" * Marks the specific task in the task list as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" * @param index The zero-based index of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" public void markTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size() : \"index should be between 0 and size of task list - 1\";","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" tasks.get(index).markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" * Marks the specific task in the task list as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" * @param index The zero-based index of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size() : \"index should be between 0 and size of task list - 1\";","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" tasks.get(index).markNotDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":" * Adds a task into the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" * @param task The task being added.","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":" assert task !\u003d null : \"task should not be a null\";","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"inezkok"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"inezkok"},"content":" * Removes a task from the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"inezkok"},"content":" * @param index The zero-based index of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"inezkok"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"inezkok"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size() : \"index should be between 0 and size of task list - 1\";","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"inezkok"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"inezkok"},"content":" * Retrieves the number of tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"inezkok"},"content":" * @return The number of tasks in the task lists.","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"inezkok"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"inezkok"},"content":" return tasks.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"inezkok"},"content":" * Finds tasks in the task list containing the keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"inezkok"},"content":" public TaskList find(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"inezkok"},"content":" assert !keyword.isBlank() : \"keyword should not be blank\";","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"inezkok"},"content":" TaskList filteredTasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"inezkok"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"inezkok"},"content":" String taskStringLower \u003d tasks.get(i).toString().toLowerCase();","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"inezkok"},"content":" String keywordLower \u003d keyword.toLowerCase();","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"inezkok"},"content":" if (taskStringLower.contains(keywordLower)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"inezkok"},"content":" filteredTasks.add(tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"inezkok"},"content":" return filteredTasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"inezkok"},"content":" * Sorts the task list by the type of category.","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"inezkok"},"content":" * @return Returns a task list sorted by the category of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"inezkok"},"content":" public TaskList sortByCategory() {","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"inezkok"},"content":" ArrayList\u003cTask\u003e newTasks \u003d tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"inezkok"},"content":" TaskCategoryComparator taskComparator \u003d new TaskCategoryComparator();","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"inezkok"},"content":" Collections.sort(newTasks, taskComparator);","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"inezkok"},"content":" TaskList sortedTaskList \u003d new TaskList(newTasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"inezkok"},"content":" return sortedTaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":137}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.util;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" * The Ui class deals with the interactions with the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" * @author Inez Kok","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" private static final String NAME \u003d \"Beep Boop Bot\";","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" private StringBuilder output;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" * The constructor for a Ui.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" public Ui() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" this.output \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" public void resetOutput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" output.setLength(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" public String getOutput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" return output.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" public void appendOutput(String str) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" output.append(str);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" public void printMessage(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" appendOutput(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" * Prints the greeting message.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" public static String getGreetingMessage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" String greetingMessage \u003d String.format(\"Hello! I\u0027m %s!\\nHow can I help you?\\n\", NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" return greetingMessage;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" * Prints the exit message.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" public void printExitMessage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" String exitMessage \u003d \"Bye Bye! Hope to see you again soon! Beep Boop!\";","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" appendOutput(exitMessage);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" * Prints the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":" public void printList(ArrayList\u003cTask\u003e list, String header) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":" appendOutput(header + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":" String taskString \u003d String.format(\"%d. %s\\n\", i + 1, list.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":" appendOutput(taskString);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" * Prints the message that should appear when a task is successfully added.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" * @param task The task that was successfully added.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":" * @param list The updated list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" public void printAddSuccessMessage(Task task, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":" appendOutput(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" String taskString \u003d String.format(\"%s\\n\", task.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":" String sizeString \u003d String.format(\"Now you have %d tasks in the list.\\n\", list.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" appendOutput(taskString);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" appendOutput(sizeString);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"inezkok"},"content":" * Prints the message that should appear when a task is successfully deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"inezkok"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"inezkok"},"content":" * @param index The zero-based index of the task that was successfully deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"inezkok"},"content":" * @param list The list of tasks before being updated.","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"inezkok"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"inezkok"},"content":" public void printDeleteSuccessMessage(int index, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"inezkok"},"content":" appendOutput(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"inezkok"},"content":" String taskString \u003d String.format(\"%s\\n\", list.get(index).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"inezkok"},"content":" String sizeString \u003d String.format(\"Now you have %d tasks in the list.\\n\", list.size() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"inezkok"},"content":" appendOutput(taskString);","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"inezkok"},"content":" appendOutput(sizeString);","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":95}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"\u003cfx:root alignment\u003d\"CENTER_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/1\"","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"75.0\" fitWidth\u003d\"75.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" \u003cInsets left\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":21}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" fx:controller\u003d\"duke.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"inezkok":23}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" public void dummyTest() {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" public void anotherDummyTest() {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":17}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"import duke.command.AddDeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import duke.command.AddEventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"import duke.command.AddToDoCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"import duke.command.MarkDoneCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"import duke.command.SortCategoryCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":"import duke.command.UnmarkDoneCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" public void parser_success() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"bye\", 4) instanceof ExitCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"list\", 4) instanceof ListCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"mark 2\", 4) instanceof MarkDoneCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"unmark 2\", 4) instanceof UnmarkDoneCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"delete 2\", 4) instanceof DeleteCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"todo read book\", 4) instanceof AddToDoCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"deadline return book /by 2023-06-06\", 4) instanceof AddDeadlineCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"event orientation week /from 2023-07-31 /to 2023-08-04\", 4)","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" instanceof AddEventCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"find book\", 4) instanceof FindCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"sort\", 4) instanceof SortCategoryCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" public void parser_outOfRange_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"blah\", 4) instanceof Command);","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! I\u0027m sorry, but I don\u0027t know what that means :(\", e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"mark 0\", 4) instanceof MarkDoneCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please make sure that the index of the task is within range.\",","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"inezkok"},"content":" e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"unmark 5\", 4) instanceof UnmarkDoneCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please make sure that the index of the task is within range.\",","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"inezkok"},"content":" e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"delete 7\", 4) instanceof DeleteCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please make sure that the index of the task is within range.\",","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"inezkok"},"content":" e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"inezkok"},"content":" public void parser_invalidDate_exceptionThrown() {","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"deadline return book /by June 6th 2023\", 1)","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"inezkok"},"content":" instanceof AddDeadlineCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please check that the date is in YYYY-MM-DD format.\", e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"inezkok"},"content":" public void parser_emptyDescriptionOrDate_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"todo\", 1) instanceof AddToDoCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"deadline\", 1) instanceof AddDeadlineCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please make sure that the description\"","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"inezkok"},"content":" + \" and date of the deadline is not empty.\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"inezkok"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"inezkok"},"content":" assertTrue(Parser.parse(\"event\", 1) instanceof AddEventCommand);","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"inezkok"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"inezkok"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"inezkok"},"content":" assertEquals(\"Boop Beep OOPS! Please make sure that the description\"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"inezkok"},"content":" + \" and dates of the event is not empty.\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":109}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" public void taskListConstructorTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" assertEquals(0, tasks.size(), \"Test initialisation of empty TaskList\");","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"inezkok"},"content":" public void taskListOverloadedConstructorTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"inezkok"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"inezkok"},"content":" ToDo todo \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"inezkok"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"inezkok"},"content":" TaskList taskList \u003d new TaskList(tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"inezkok"},"content":" assertEquals(1, taskList.size(), \"Test initialisation of TaskList\");","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"inezkok"},"content":" public void taskListMethodsTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"inezkok"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"inezkok"},"content":" ToDo todo \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"inezkok"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"inezkok"},"content":" assertEquals(1, tasks.size(), \"Test addition of task\");","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"inezkok"},"content":" Deadline deadline \u003d new Deadline(\"return book\", LocalDate.parse(\"2023-06-06\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"inezkok"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"inezkok"},"content":" Event event \u003d new Event(\"orientation week\", LocalDate.parse(\"2023-07-31\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"inezkok"},"content":" LocalDate.parse(\"2023-08-04\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"inezkok"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"inezkok"},"content":" tasks.delete(0);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"inezkok"},"content":" assertEquals(2, tasks.size(), \"Test deletion of task\");","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":50}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" public void deadlineTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" Deadline deadline \u003d new Deadline(\"return book\", LocalDate.parse(\"2023-06-06\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[D] [ ] return book (by: Jun 06 2023)\", deadline.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":" deadline.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[D] [X] return book (by: Jun 06 2023)\", deadline.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" deadline.markNotDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[D] [ ] return book (by: Jun 06 2023)\", deadline.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":21}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":"public class EventTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" public void eventTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":" Event event \u003d new Event(\"orientation week\", LocalDate.parse(\"2023-07-31\"),","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" LocalDate.parse(\"2023-08-04\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[E] [ ] orientation week (from: Jul 31 2023 to: Aug 04 2023)\", event.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" event.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[E] [X] orientation week (from: Jul 31 2023 to: Aug 04 2023)\", event.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":" event.markNotDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[E] [ ] orientation week (from: Jul 31 2023 to: Aug 04 2023)\", event.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":22}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"inezkok"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"inezkok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"inezkok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"inezkok"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"inezkok"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"inezkok"},"content":" public void toDoTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"inezkok"},"content":" ToDo todo \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[T] [ ] read book\", todo.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"inezkok"},"content":" todo.markDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[T] [X] read book\", todo.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"inezkok"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"inezkok"},"content":" todo.markNotDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"inezkok"},"content":" assertEquals(\"[T] [ ] read book\", todo.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"inezkok"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"inezkok"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"inezkok":19}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"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":"inezkok"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"inezkok":1,"-":20}}] diff --git a/inezkok_ip_master/commits.json b/inezkok_ip_master/commits.json index d37d5204..74d816b8 100644 --- a/inezkok_ip_master/commits.json +++ b/inezkok_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"inezkok":[{"date":"2023-08-20","commitResults":[{"hash":"99410bdab96fe00d3cab19663d4dde39138d0990","isMergeCommit":false,"messageTitle":"Implement Level-0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":6}}},{"hash":"006f214276b6cac94cbae7e0193de3ec3bf1ee75","isMergeCommit":false,"messageTitle":"Implement Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":1}}},{"hash":"5566eb49690202f897addf8c45911e08bef7dde0","isMergeCommit":false,"messageTitle":"Implement Level-2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":4}}},{"hash":"1b2ad643b98f91a4057be4f43825283fe9dac37a","isMergeCommit":false,"messageTitle":"Implement Level-3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":3}}},{"hash":"ce2683d2d1b9563c90ffe7d215194c4497df2f2b","isMergeCommit":false,"messageTitle":"Implement Level-4: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":5}}},{"hash":"e2eab5ad1a41bdda47a68edb7baa9ca37075eb8a","isMergeCommit":false,"messageTitle":"Implement A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"3b00c4592897f76889db5d69633d59e8e31aed2a","isMergeCommit":false,"messageTitle":"Implement Level-5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":40}}},{"hash":"15509e43ae10314567cda06200af11c0a65759ff","isMergeCommit":false,"messageTitle":"Implement Level-6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}}]},{"date":"2023-08-27","commitResults":[{"hash":"2de04013918d4a42ec914bb2d7901d08633edb97","isMergeCommit":false,"messageTitle":"Implement Level-7: Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":110,"deletions":13}}},{"hash":"0179e648e08716f54b2b72951e64edee8f9a8bef","isMergeCommit":false,"messageTitle":"Edit exit message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"6ae8217e9a3faf4e66df0a89686f11527065ee67","isMergeCommit":false,"messageTitle":"Edit greet message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b4ad78b6aa6294c360754eb28df38ec97be5cfea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9344146ddcba03715fd441412699031888bb7305","isMergeCommit":false,"messageTitle":"Implement Level-8: Dates and Times (without time)","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":93,"deletions":14}}},{"hash":"6e46e1d164cc3735205de361ca83c3f1a455b331","isMergeCommit":false,"messageTitle":"Edit DukeException error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"3e2dd2c04b0fe46a12e6d6899dece55248e8d9a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"723b3b05099eae57640cb19f64b654ec6bb94260","isMergeCommit":false,"messageTitle":"Edit exception messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}}]},{"date":"2023-08-28","commitResults":[{"hash":"02073f5038708e8f2421e0ec62405a4d98b66712","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":548,"deletions":308}}},{"hash":"e98558220f2b3f4b77c8ed96741c508fb2888126","isMergeCommit":false,"messageTitle":"Implement A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":11},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"80a782dfb2baa05728eb0c2c074e50658f990744","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"a21909bde4c83b0a65a91eb31601e45e69b9f63d","isMergeCommit":false,"messageTitle":"Implement A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":224,"deletions":6}}},{"hash":"ec6c77022612145c694e974d76a19e885cd339cb","isMergeCommit":false,"messageTitle":"Implement A-Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"0a2f6755a3c5b4ec38f96f8d0d14d4ae5361e2a9","isMergeCommit":false,"messageTitle":"Implement A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":447,"deletions":22}}},{"hash":"2c663bbf8561c1a0ef7b5d6f7922909c39f4eb5e","isMergeCommit":false,"messageTitle":"Implement A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":7}}},{"hash":"9529a6d923181cdbb755756279528bc7428e9649","isMergeCommit":false,"messageTitle":"Implement Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":0}}},{"hash":"bbd61658c9d99c295ad4a4099f7664bb11383ab9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"f92e666d655ddca75fe19bf786b3218091f16847","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"90d39d5b3068a362a49540686bbd9da1da0c8212","isMergeCommit":false,"messageTitle":"Correct A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"09b6946be6727187a1e2465819d21b6868ee8c32","isMergeCommit":false,"messageTitle":"Correct coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"a50700f3d235aa2df7d0bd92950fe1df0ba89f5e","isMergeCommit":false,"messageTitle":"Implement A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":83,"deletions":72}}}]},{"date":"2023-09-03","commitResults":[{"hash":"77455fb1a43c4a2b0a5c39eb4814448084aec225","isMergeCommit":false,"messageTitle":"Implement Level-10: GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":1,"deletions":1},"java":{"insertions":254,"deletions":92}}},{"hash":"c7e2251210520de3ea14c04ed482a348a75159e3","isMergeCommit":false,"messageTitle":"Implement GUI with FXML and fix CheckStyle and JavaDoc","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":38,"deletions":0},"java":{"insertions":220,"deletions":209}}},{"hash":"b368223cdde34fc41381c5f2003442267e7470e2","isMergeCommit":false,"messageTitle":"Fix JavaFX warning","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":10,"deletions":4},"java":{"insertions":2,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"c4e452fc8a447e515c5df9e7395138af9496bd54","isMergeCommit":false,"messageTitle":"Fix text truncating in dialog box","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"fxml":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-08","commitResults":[{"hash":"e0264df79eaf1a64ef7bba304b0201bebd99c1ec","isMergeCommit":false,"messageTitle":"Update names of method to coding standard","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":16,"deletions":16}}}]},{"date":"2023-09-10","commitResults":[{"hash":"ae7e0d295fc90fda1dc79009fcc69b54e187ce32","isMergeCommit":false,"messageTitle":"Edit application for JAR file","messageBody":"","tags":["A-Jar-1"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"1da261daf49fd7adbe23046744a2b1abde5039a8","isMergeCommit":false,"messageTitle":"Implement A-Assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"8b2d9bf5a535922aa5ee18e81650338d14534639","isMergeCommit":false,"messageTitle":"Parser class: implement A-CodingQuality","messageBody":"Parser class methods (checkDeadline, checkEvent) have some complicated\nexpressions, affecting readability.\n\nLet\u0027s break down the complicated expressions into steps (create boolean\nintermediate steps like isDescriptionBlank).\n\nBreaking the complicated expressions down improve code quality and\nreadability.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":3}}},{"hash":"656fbd1e34413230896bd86a3fdb7015c8c2aedd","isMergeCommit":true,"messageTitle":"Merge pull request #2 from inezkok/branch-A-CodeQuality","messageBody":"Parser class: implement A-CodingQuality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"d0dab07bb345a45faacac1ea96a7a81fdb1a84ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"dbbc92ba46c14ea119b56b32eec2f504d06d25ec","isMergeCommit":true,"messageTitle":"Merge pull request #1 from inezkok/branch-A-Assertions","messageBody":"Branch A-Assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"57ce4338a1046509e26239ed5ad47f5b3ca1e64a","isMergeCommit":false,"messageTitle":"Find command: make matching case-insensitive","messageBody":"Find command is case-sensitive.\n\nA case-insensitive find is more user-friendly because users cannot be\nexpected to remember the exact case of the keywords.\n\nLet\u0027s change the string representation of each task and keyword to be\nin lowercase before checking if they match.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"8283d11b5d2e4c246480dcd2fec58bb3b1c9c11a","isMergeCommit":false,"messageTitle":"Add Increment: A-CI","messageBody":"","tags":["A-CI"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"7bcb41ccb8636d1d1ad9cf6cc33873fc329498d5","isMergeCommit":false,"messageTitle":"Implement C-Sort","messageBody":"The task list cannot be sorted by their categories.\n\nA sorted task list allows the user to view their tasks in a more\norganised manner, making it easier for them to differentiate the tasks\nby their categories.\n\nLet\u0027s create a TaskCategoryComparator class that implements the\nComparator interface and a SortCategoryCommand class.\n\nCreating a TaskCategoryComparator class allows us to use the sort method\nin the Collections class to sort our array list of tasks.\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":107,"deletions":11}}}]},{"date":"2023-09-16","commitResults":[{"hash":"2f9a8860fa761ab678c2abece01c8465c36f8e96","isMergeCommit":false,"messageTitle":"Edit import statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"769ba3fa6d0cd8918df952b87bccf20be6e8a1f6","isMergeCommit":false,"messageTitle":"Fixed parser checkDeadline and checkEvent methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"inezkok":{"java":1808,"md":2,"fxml":44,"sh":0,"bat":1,"gradle":20,"txt":14}},"authorContributionVariance":{"inezkok":122583.586},"authorDisplayNameMap":{"inezkok":"CS2103T-W12-1 KOK ..INEZ"}} +{"authorDailyContributionsMap":{"inezkok":[{"date":"2023-08-20","commitResults":[{"hash":"99410bdab96fe00d3cab19663d4dde39138d0990","isMergeCommit":false,"messageTitle":"Implement Level-0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":6}}},{"hash":"006f214276b6cac94cbae7e0193de3ec3bf1ee75","isMergeCommit":false,"messageTitle":"Implement Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":1}}},{"hash":"5566eb49690202f897addf8c45911e08bef7dde0","isMergeCommit":false,"messageTitle":"Implement Level-2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":4}}},{"hash":"1b2ad643b98f91a4057be4f43825283fe9dac37a","isMergeCommit":false,"messageTitle":"Implement Level-3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":3}}},{"hash":"ce2683d2d1b9563c90ffe7d215194c4497df2f2b","isMergeCommit":false,"messageTitle":"Implement Level-4: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":5}}},{"hash":"e2eab5ad1a41bdda47a68edb7baa9ca37075eb8a","isMergeCommit":false,"messageTitle":"Implement A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"3b00c4592897f76889db5d69633d59e8e31aed2a","isMergeCommit":false,"messageTitle":"Implement Level-5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":40}}},{"hash":"15509e43ae10314567cda06200af11c0a65759ff","isMergeCommit":false,"messageTitle":"Implement Level-6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}}]},{"date":"2023-08-27","commitResults":[{"hash":"2de04013918d4a42ec914bb2d7901d08633edb97","isMergeCommit":false,"messageTitle":"Implement Level-7: Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":110,"deletions":13}}},{"hash":"0179e648e08716f54b2b72951e64edee8f9a8bef","isMergeCommit":false,"messageTitle":"Edit exit message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"6ae8217e9a3faf4e66df0a89686f11527065ee67","isMergeCommit":false,"messageTitle":"Edit greet message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"b4ad78b6aa6294c360754eb28df38ec97be5cfea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9344146ddcba03715fd441412699031888bb7305","isMergeCommit":false,"messageTitle":"Implement Level-8: Dates and Times (without time)","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":93,"deletions":14}}},{"hash":"6e46e1d164cc3735205de361ca83c3f1a455b331","isMergeCommit":false,"messageTitle":"Edit DukeException error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"3e2dd2c04b0fe46a12e6d6899dece55248e8d9a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"723b3b05099eae57640cb19f64b654ec6bb94260","isMergeCommit":false,"messageTitle":"Edit exception messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}}]},{"date":"2023-08-28","commitResults":[{"hash":"02073f5038708e8f2421e0ec62405a4d98b66712","isMergeCommit":false,"messageTitle":"Implement A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":548,"deletions":308}}},{"hash":"e98558220f2b3f4b77c8ed96741c508fb2888126","isMergeCommit":false,"messageTitle":"Implement A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":11},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"80a782dfb2baa05728eb0c2c074e50658f990744","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"a21909bde4c83b0a65a91eb31601e45e69b9f63d","isMergeCommit":false,"messageTitle":"Implement A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":224,"deletions":6}}},{"hash":"ec6c77022612145c694e974d76a19e885cd339cb","isMergeCommit":false,"messageTitle":"Implement A-Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"0a2f6755a3c5b4ec38f96f8d0d14d4ae5361e2a9","isMergeCommit":false,"messageTitle":"Implement A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":447,"deletions":22}}},{"hash":"2c663bbf8561c1a0ef7b5d6f7922909c39f4eb5e","isMergeCommit":false,"messageTitle":"Implement A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":7}}},{"hash":"9529a6d923181cdbb755756279528bc7428e9649","isMergeCommit":false,"messageTitle":"Implement Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":0}}},{"hash":"bbd61658c9d99c295ad4a4099f7664bb11383ab9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"f92e666d655ddca75fe19bf786b3218091f16847","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"90d39d5b3068a362a49540686bbd9da1da0c8212","isMergeCommit":false,"messageTitle":"Correct A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"09b6946be6727187a1e2465819d21b6868ee8c32","isMergeCommit":false,"messageTitle":"Correct coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"a50700f3d235aa2df7d0bd92950fe1df0ba89f5e","isMergeCommit":false,"messageTitle":"Implement A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":83,"deletions":72}}}]},{"date":"2023-09-03","commitResults":[{"hash":"77455fb1a43c4a2b0a5c39eb4814448084aec225","isMergeCommit":false,"messageTitle":"Implement Level-10: GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":1,"deletions":1},"java":{"insertions":254,"deletions":92}}},{"hash":"c7e2251210520de3ea14c04ed482a348a75159e3","isMergeCommit":false,"messageTitle":"Implement GUI with FXML and fix CheckStyle and JavaDoc","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":38,"deletions":0},"java":{"insertions":220,"deletions":209}}},{"hash":"b368223cdde34fc41381c5f2003442267e7470e2","isMergeCommit":false,"messageTitle":"Fix JavaFX warning","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":10,"deletions":4},"java":{"insertions":2,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"c4e452fc8a447e515c5df9e7395138af9496bd54","isMergeCommit":false,"messageTitle":"Fix text truncating in dialog box","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"fxml":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-08","commitResults":[{"hash":"e0264df79eaf1a64ef7bba304b0201bebd99c1ec","isMergeCommit":false,"messageTitle":"Update names of method to coding standard","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":16,"deletions":16}}}]},{"date":"2023-09-10","commitResults":[{"hash":"ae7e0d295fc90fda1dc79009fcc69b54e187ce32","isMergeCommit":false,"messageTitle":"Edit application for JAR file","messageBody":"","tags":["A-Jar-1"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"1da261daf49fd7adbe23046744a2b1abde5039a8","isMergeCommit":false,"messageTitle":"Implement A-Assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"8b2d9bf5a535922aa5ee18e81650338d14534639","isMergeCommit":false,"messageTitle":"Parser class: implement A-CodingQuality","messageBody":"Parser class methods (checkDeadline, checkEvent) have some complicated\nexpressions, affecting readability.\n\nLet\u0027s break down the complicated expressions into steps (create boolean\nintermediate steps like isDescriptionBlank).\n\nBreaking the complicated expressions down improve code quality and\nreadability.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":3}}},{"hash":"656fbd1e34413230896bd86a3fdb7015c8c2aedd","isMergeCommit":true,"messageTitle":"Merge pull request #2 from inezkok/branch-A-CodeQuality","messageBody":"Parser class: implement A-CodingQuality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"d0dab07bb345a45faacac1ea96a7a81fdb1a84ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"dbbc92ba46c14ea119b56b32eec2f504d06d25ec","isMergeCommit":true,"messageTitle":"Merge pull request #1 from inezkok/branch-A-Assertions","messageBody":"Branch A-Assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"57ce4338a1046509e26239ed5ad47f5b3ca1e64a","isMergeCommit":false,"messageTitle":"Find command: make matching case-insensitive","messageBody":"Find command is case-sensitive.\n\nA case-insensitive find is more user-friendly because users cannot be\nexpected to remember the exact case of the keywords.\n\nLet\u0027s change the string representation of each task and keyword to be\nin lowercase before checking if they match.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"8283d11b5d2e4c246480dcd2fec58bb3b1c9c11a","isMergeCommit":false,"messageTitle":"Add Increment: A-CI","messageBody":"","tags":["A-CI"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"7bcb41ccb8636d1d1ad9cf6cc33873fc329498d5","isMergeCommit":false,"messageTitle":"Implement C-Sort","messageBody":"The task list cannot be sorted by their categories.\n\nA sorted task list allows the user to view their tasks in a more\norganised manner, making it easier for them to differentiate the tasks\nby their categories.\n\nLet\u0027s create a TaskCategoryComparator class that implements the\nComparator interface and a SortCategoryCommand class.\n\nCreating a TaskCategoryComparator class allows us to use the sort method\nin the Collections class to sort our array list of tasks.\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":107,"deletions":11}}}]},{"date":"2023-09-16","commitResults":[{"hash":"2f9a8860fa761ab678c2abece01c8465c36f8e96","isMergeCommit":false,"messageTitle":"Edit import statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"769ba3fa6d0cd8918df952b87bccf20be6e8a1f6","isMergeCommit":false,"messageTitle":"Fixed parser checkDeadline and checkEvent methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":8}}},{"hash":"96df5990d11ef0bb28c9c36b4703b0a2f82f3d88","isMergeCommit":false,"messageTitle":"Reorganise files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":10},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":49,"deletions":39}}},{"hash":"a9b8d6c0f73556056984389369c55730cb56b272","isMergeCommit":false,"messageTitle":"Improve GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":2,"deletions":1}}},{"hash":"c02254872051014e9c52a22dbb4bc9c5b0c74977","isMergeCommit":false,"messageTitle":"Improve GUI with error message","messageBody":"","tags":["A-BetterGui"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"d12ed3db43aa32c53fbfdfdfb1835f376d49ec86","isMergeCommit":false,"messageTitle":"Fix checkctyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":13}}},{"hash":"a7af4d3b63ae89273cbced3c98a2b2a04ad00f5f","isMergeCommit":false,"messageTitle":"Change colors in GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"inezkok":{"java":1825,"md":2,"fxml":44,"sh":0,"bat":1,"gradle":20,"txt":4}},"authorContributionVariance":{"inezkok":122464.9},"authorDisplayNameMap":{"inezkok":"CS2103T-W12-1 KOK ..INEZ"}} diff --git a/jacksonyuan256_ip_master/authorship.json b/jacksonyuan256_ip_master/authorship.json index 8221d247..f88b6cf0 100644 --- a/jacksonyuan256_ip_master/authorship.json +++ b/jacksonyuan256_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"plugins {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"repositories {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" mavenCentral()","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"dependencies {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" testImplementation \u0027org.junit.jupiter:junit-jupiter-api:5.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" testRuntimeOnly \u0027org.junit.jupiter:junit-jupiter-engine:5.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" String javaFxVersion \u003d \u002717.0.8\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":"shadowJar {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":"application {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" mainClass.set(\u0027chatbot.Duke\u0027)","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":"javafx {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" version \u003d \"17\"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":"test {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" testLogging {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" showExceptions true","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" showCauses true","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" showStackTraces true","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" version \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":"run {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jacksonyuan256":69}},{"path":"src/main/java/chatbot/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" * Stores the task details for deadlines.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" private String input;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" private String time;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Deadline. Initialises the description + extras.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" public Deadline(String description, String input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" return \"[D]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" public String getExtras() {","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" String[] dateDetails \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" LocalDate localDate \u003d LocalDate.parse(dateDetails[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" time \u003d \" \" + dateDetails[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" return \"(by: \" + localDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" + time + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" return getTypeIcon() + super.getStatusIcon() ","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" + super.description + getExtras();","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jacksonyuan256":41}},{"path":"src/main/java/chatbot/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":61}},{"path":"src/main/java/chatbot/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" * Contains the main components to run the bot.","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" /** Storage to load and write files. */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" private Storage storage; ","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" /** UI to handle the printing of output. */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" private UI ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" /** taskHandler to store the list of Tasks and do operations. */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" private TaskList taskHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" /** Interprets user input. */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" private ExpenseReport expenseReport;","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" private Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" private Scene scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/dukeBot.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" private boolean isFirstResponse;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor to initialise the necessary components","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" // root starts at ip","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" this.storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" this.ui \u003d new UI(storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" this.taskHandler \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" this.expenseReport \u003d new ExpenseReport();","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" this.parser \u003d new Parser(ui, taskHandler, storage, expenseReport);","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" this.isFirstResponse \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" Label helloWorld \u003d new Label(\"Hello World!\"); // Creating a new Label control","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" scene \u003d new Scene(helloWorld); // Setting the scene to be our Label","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"jacksonyuan256"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"jacksonyuan256"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"jacksonyuan256"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"jacksonyuan256"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"jacksonyuan256"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"jacksonyuan256"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"jacksonyuan256"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"jacksonyuan256"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"jacksonyuan256"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"jacksonyuan256"},"content":" stage.setScene(scene); // Setting the stage to show our screen","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"jacksonyuan256"},"content":" stage.show(); // Render the stage.","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"jacksonyuan256"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"jacksonyuan256"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"jacksonyuan256"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"jacksonyuan256"},"content":" //Part 3. Add functionality to handle user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"jacksonyuan256"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"jacksonyuan256"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"jacksonyuan256"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"jacksonyuan256"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"jacksonyuan256"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"jacksonyuan256"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"jacksonyuan256"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"jacksonyuan256"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"jacksonyuan256"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"jacksonyuan256"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"jacksonyuan256"},"content":" * Runs the program until the loop breaks.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"jacksonyuan256"},"content":" * The loop only breaks when the input is \"bye\"","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"jacksonyuan256"},"content":" * and breaker is set to 1.","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"jacksonyuan256"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"jacksonyuan256"},"content":" public String run(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"jacksonyuan256"},"content":" return parser.runInput(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":134,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"jacksonyuan256"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"jacksonyuan256"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"jacksonyuan256"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"jacksonyuan256"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-06"},{"lineNumber":141,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"jacksonyuan256"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-06"},{"lineNumber":143,"author":{"gitId":"jacksonyuan256"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-06"},{"lineNumber":144,"author":{"gitId":"jacksonyuan256"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":145,"author":{"gitId":"jacksonyuan256"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":146,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":147,"author":{"gitId":"jacksonyuan256"},"content":" return textToAdd;","lastModifiedDate":"2023-09-06"},{"lineNumber":148,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":151,"author":{"gitId":"jacksonyuan256"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"jacksonyuan256"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":153,"author":{"gitId":"jacksonyuan256"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":154,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":155,"author":{"gitId":"jacksonyuan256"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":156,"author":{"gitId":"jacksonyuan256"},"content":" // Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-06"},{"lineNumber":157,"author":{"gitId":"jacksonyuan256"},"content":" // Label dukeText \u003d new Label(getResponse(userInput.getText()));","lastModifiedDate":"2023-09-06"},{"lineNumber":158,"author":{"gitId":"jacksonyuan256"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":159,"author":{"gitId":"jacksonyuan256"},"content":" String dukeText \u003d getResponse(userText);","lastModifiedDate":"2023-09-06"},{"lineNumber":160,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":161,"author":{"gitId":"jacksonyuan256"},"content":" DialogBox.getUserDialog(userText, user),","lastModifiedDate":"2023-09-06"},{"lineNumber":162,"author":{"gitId":"jacksonyuan256"},"content":" DialogBox.getDukeDialog(dukeText, duke)","lastModifiedDate":"2023-09-06"},{"lineNumber":163,"author":{"gitId":"jacksonyuan256"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":164,"author":{"gitId":"jacksonyuan256"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":165,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":166,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":167,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":168,"author":{"gitId":"jacksonyuan256"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":169,"author":{"gitId":"jacksonyuan256"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-06"},{"lineNumber":170,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":171,"author":{"gitId":"jacksonyuan256"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":172,"author":{"gitId":"jacksonyuan256"},"content":" if (isFirstResponse) {","lastModifiedDate":"2023-09-06"},{"lineNumber":173,"author":{"gitId":"jacksonyuan256"},"content":" isFirstResponse \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":174,"author":{"gitId":"jacksonyuan256"},"content":" return ui.startProgram();","lastModifiedDate":"2023-09-06"},{"lineNumber":175,"author":{"gitId":"jacksonyuan256"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":176,"author":{"gitId":"jacksonyuan256"},"content":" return run(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":177,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":178,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"jacksonyuan256"},"content":" public static void main(String[] args) { }","lastModifiedDate":"2023-09-11"},{"lineNumber":181,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jacksonyuan256":180,"-":1}},{"path":"src/main/java/chatbot/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":" * Stores the task details for events.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" private String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" private String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Event. Initialises the description + extras.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" return \"[E]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" public String getExtras() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" return \" (from:\" + from + \" to:\" + to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" return getTypeIcon() + super.getStatusIcon()","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" + super.description + getExtras();","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jacksonyuan256":34}},{"path":"src/main/java/chatbot/Expense.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":" * Records the user\u0027s expenses","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"public class Expense {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" private String description;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" private String cost;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" public Expense(String description, String cost) {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" this.cost \u003d cost;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" public void updateCosts(String cost) {","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" this.cost \u003d cost;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" return String.format(\" %s : %s\", description, cost);","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"jacksonyuan256":22}},{"path":"src/main/java/chatbot/ExpenseReport.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.List;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"public class ExpenseReport {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" private List\u003cExpense\u003e expenses;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" public ExpenseReport() {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" this.expenses \u003d new ArrayList\u003cExpense\u003e();","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" public void addExpense(Expense expense) {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" expenses.add(expense);","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" public void deleteExpense(int index) {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" expenses.remove(index);","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" public List\u003cExpense\u003e getExpenseReport() {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" return expenses;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" public Expense getExpense(int index) {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" return expenses.get(index);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" public int getSize() {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" return expenses.size();","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"jacksonyuan256":31}},{"path":"src/main/java/chatbot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":12}},{"path":"src/main/java/chatbot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":31}},{"path":"src/main/java/chatbot/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/dukeBot.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":51}},{"path":"src/main/java/chatbot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":" * Handles the interpretation of user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" /** UI to handle the printing of output. */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" private UI ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" /** taskHandler to store the list of Tasks and do operations. */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" private TaskList taskHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" /** Storage to load and write files. */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" private ExpenseReport expenseReport;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Parser. Initialises the UI, taskHandler, storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" public Parser(UI ui, TaskList taskHandler, Storage storage, ExpenseReport expenseReport) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" this.taskHandler \u003d taskHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" this.expenseReport \u003d expenseReport;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" // Purely for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" public Parser() {}","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" * Interprets the user string input and","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" * returns a value based on the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" * @param input The user input to be interpreted.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" * @return The value to determine if the program ends. ","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" public String runInput(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":" return ui.endProgram();","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" storage.write(taskHandler.getTaskList());","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printStorageList(taskHandler.getTaskList());","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.equals(\"report\")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printExpenseReport(expenseReport.getExpenseReport());","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" int stringLength \u003d input.length();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d Integer.parseInt(input.substring(stringLength - 1)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" Task task \u003d taskHandler.unmark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printUnmarked(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":" int stringLength \u003d input.length();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d Integer.parseInt(input.substring(stringLength - 1)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jacksonyuan256"},"content":" Task task \u003d taskHandler.mark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printMarked(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jacksonyuan256"},"content":" int stringLength \u003d input.length();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d Integer.parseInt(input.substring(stringLength - 1)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jacksonyuan256"},"content":" Task task \u003d taskHandler.retrieveTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jacksonyuan256"},"content":" taskHandler.delete(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jacksonyuan256"},"content":" int size \u003d taskHandler.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jacksonyuan256"},"content":" return ui.deleteTask(task, size);","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"editExpense\")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 11);","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"jacksonyuan256"},"content":" String[] splitInput \u003d input.split(\" \", 3);","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"jacksonyuan256"},"content":" String updatedCost \u003d splitInput[2];","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"jacksonyuan256"},"content":" expenseReport.getExpense(index).updateCosts(updatedCost);","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"jacksonyuan256"},"content":" Expense expense \u003d expenseReport.getExpense(index);","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printUpdatedExpense(expense);","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 5);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"jacksonyuan256"},"content":" String[] keywords \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"jacksonyuan256"},"content":" List\u003cTask\u003e filteredList \u003d taskHandler.filterByWord(keywords[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printStorageList(filteredList);","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"jacksonyuan256"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"jacksonyuan256"},"content":" if (!(input.startsWith(\"todo\") || input.startsWith(\"event\") ","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"jacksonyuan256"},"content":" || input.startsWith(\"deadline\") || input.startsWith(\"expense\"))) {","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"jacksonyuan256"},"content":" return ui.invalidInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"jacksonyuan256"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"jacksonyuan256"},"content":" Task todo \u003d new Todo(splitInput[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"jacksonyuan256"},"content":" taskHandler.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d taskHandler.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"jacksonyuan256"},"content":" return ui.addTask(todo, index);","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 9);","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":141,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"jacksonyuan256"},"content":" String[] splitInput \u003d input.split(\"/\", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"jacksonyuan256"},"content":" String[] getDescription \u003d splitInput[0].split(\" \", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"jacksonyuan256"},"content":" String returnBy \u003d splitInput[1].substring(3);","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"jacksonyuan256"},"content":" Task deadline \u003d new Deadline(getDescription[1], returnBy);","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"jacksonyuan256"},"content":" taskHandler.add(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d taskHandler.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"jacksonyuan256"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"jacksonyuan256"},"content":" return ui.addTask(deadline, index);","lastModifiedDate":"2023-09-06"},{"lineNumber":154,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 6);","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":159,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":160,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"jacksonyuan256"},"content":" String[] splitInput \u003d input.split(\"/\");","lastModifiedDate":"2023-09-11"},{"lineNumber":163,"author":{"gitId":"jacksonyuan256"},"content":" String[] toGetDateTime \u003d splitInput[0].split(\" \", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":164,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"jacksonyuan256"},"content":" String from \u003d splitInput[1].substring(4);","lastModifiedDate":"2023-09-11"},{"lineNumber":166,"author":{"gitId":"jacksonyuan256"},"content":" String to \u003d splitInput[2].substring(2);","lastModifiedDate":"2023-09-11"},{"lineNumber":167,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"jacksonyuan256"},"content":" Task event \u003d new Event(toGetDateTime[1], from, to);","lastModifiedDate":"2023-09-11"},{"lineNumber":169,"author":{"gitId":"jacksonyuan256"},"content":" taskHandler.add(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d taskHandler.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"jacksonyuan256"},"content":" return ui.addTask(event, index);","lastModifiedDate":"2023-09-06"},{"lineNumber":173,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"expense\")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":174,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":175,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 8);","lastModifiedDate":"2023-09-12"},{"lineNumber":176,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":177,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":179,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":180,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":181,"author":{"gitId":"jacksonyuan256"},"content":" String[] splitInput \u003d input.split(\"/\");","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"jacksonyuan256"},"content":" String[] getDescription \u003d splitInput[0].split(\" \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":183,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":184,"author":{"gitId":"jacksonyuan256"},"content":" Expense expense \u003d new Expense(getDescription[1], splitInput[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":185,"author":{"gitId":"jacksonyuan256"},"content":" expenseReport.addExpense(expense);","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d expenseReport.getSize();","lastModifiedDate":"2023-09-12"},{"lineNumber":187,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"jacksonyuan256"},"content":" return ui.addExpense(expense, index);","lastModifiedDate":"2023-09-12"},{"lineNumber":189,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"jacksonyuan256"},"content":" assert false : \"execution should never reach here\";","lastModifiedDate":"2023-09-11"},{"lineNumber":192,"author":{"gitId":"jacksonyuan256"},"content":" return \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":193,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"jacksonyuan256"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"jacksonyuan256"},"content":" * Checks for incomplete user inputs.","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"jacksonyuan256"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"jacksonyuan256"},"content":" * @param str The user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"jacksonyuan256"},"content":" * @param minimum The minimum length of the user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"jacksonyuan256"},"content":" * @throws UserInputException If the input is deemed incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"jacksonyuan256"},"content":" public static void validateInput(String str, int minimum) throws UserInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"jacksonyuan256"},"content":" if (str.length() \u003c\u003d minimum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"jacksonyuan256"},"content":" throw new UserInputException(\"OOPS!!! The description of a \" + str + \" cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jacksonyuan256":207}},{"path":"src/main/java/chatbot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" * Handles the loading and writing of text files.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" /** The string representation of the directory */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Storage. Initialises the filepath.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" * Checks if the file path exists and","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" * prints the text document if it exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" * @throws FileNotFoundException If file path is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" public String load() {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" String outputStr \u003d \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" Scanner printSC \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" while (printSC.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" outputStr +\u003d printSC.nextLine() + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":" System.out.println(printSC.nextLine());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" printSC.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" System.out.println(\"No file found!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" return outputStr;","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" * Creates a new file in the specified path and","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" * writes to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" * @throws IOException If the input/output is interrupted.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" public void write(List\u003cTask\u003e taskForce) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" String toBeSaved \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" for (int i \u003d 0; i \u003c taskForce.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" toBeSaved \u003d toBeSaved + taskForce.get(i) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" File path \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" FileWriter wr \u003d new FileWriter(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":" wr.write(toBeSaved);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":" wr.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" wr.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":" System.out.println(\"This will never occur.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jacksonyuan256":68}},{"path":"src/main/java/chatbot/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":" * Stores the task details.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" /** Basic task description */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" /** Determine whether the task is completed */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" * Returns [ ] for not marked, [X] for marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" * @return String representation of whether it is marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" return (isDone ? \"[X] \" : \"[ ] \");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" * Returns the string representation of its type.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" * @return String representation of its type.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" return \"[ ]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" * Returns any extra information required by the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" * @return String representation of the extra information.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" public String getExtras() {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" return \"\";","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" * Marks the task as completed","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" public void markTaskDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" * Marks the task as not completed","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" public void markTaskNotDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"jacksonyuan256":59}},{"path":"src/main/java/chatbot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" * Stores and handles the addition/deletion list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" * The task is added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" * The task is removed from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" * The task is marked and returned back.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":" * @param index The index of the task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" * @return The task that was marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" public Task mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" task.markTaskDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" * The task is unmarked and returned back.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" * @param index The index of the task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" * @return The task that was unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" public Task unmark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" task.markTaskNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" * Retrieves the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" * @return The task in the corresponding index.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":" public Task retrieveTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" assert this.getSize() \u003e\u003d 1 : \"There are currently no tasks\";","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":" * Returns the size of the list","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"jacksonyuan256"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"jacksonyuan256"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jacksonyuan256"},"content":" * Returns the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jacksonyuan256"},"content":" public List\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"jacksonyuan256"},"content":" return tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"jacksonyuan256"},"content":" * Retrieves the filtered list according to the keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"jacksonyuan256"},"content":" * @param keyword The word to filter the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"jacksonyuan256"},"content":" * @return The filtered list.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"jacksonyuan256"},"content":" public List\u003cTask\u003e filterByWord(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"jacksonyuan256"},"content":" List\u003cTask\u003e filteredList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"jacksonyuan256"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"jacksonyuan256"},"content":" if (task.description.contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"jacksonyuan256"},"content":" filteredList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"jacksonyuan256"},"content":" return filteredList;","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jacksonyuan256":95}},{"path":"src/main/java/chatbot/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":" * Stores the task details for todo.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Todo. Initialises the description.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" return \"[T]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" public String getExtras() {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" return \"\";","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" return getTypeIcon() + super.getStatusIcon() + super.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jacksonyuan256":28}},{"path":"src/main/java/chatbot/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":" * Handles the printing of statements to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"public class UI {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_GOODBYE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_WELCOME \u003d \"Hello! I\u0027m Afro\\n\" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_UNMARK \u003d \"OK, I\u0027ve marked this task as not done yet:\";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_MARK \u003d \"OK, I\u0027ve marked this task as done:\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_ADD_TASK \u003d \"Got it. I\u0027ve added this task:\";","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_DELETE_TASK \u003d \"Noted. I have removed this task.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_ADD_EXPENSE \u003d \"Got it. I\u0027ve added this expense\";","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_INVALID \u003d \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" /** Storage to load and write files. */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for UI. Initialises the storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" public UI(Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the greeting message and loads a previous text file if any.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" public String startProgram() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_WELCOME);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" String output \u003d storage.load() + \"\\n\" + MESSAGE_WELCOME;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" return MESSAGE_WELCOME;","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the program end message.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" public String endProgram() {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" return MESSAGE_GOODBYE;","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the marked message and the String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" * @param task The task to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" public String printMarked(Task task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_MARK);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" assert task.isDone : \"This task is still marked as not completed.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d MESSAGE_MARK + \"\\n\" + task;","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the unmarked message and the String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" * @param task The task to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" public String printUnmarked(Task task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_UNMARK);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" assert !task.isDone : \"This task is still marked as completed.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d MESSAGE_UNMARK + \"\\n\" + task;","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the add message, the String representation of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"jacksonyuan256"},"content":" * and the size of the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"jacksonyuan256"},"content":" * @param task The task to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"jacksonyuan256"},"content":" * @param size The size of the modified list.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"jacksonyuan256"},"content":" public String addTask(Task task, int size) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_ADD);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d MESSAGE_ADD_TASK + \"\\n\" + task + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"jacksonyuan256"},"content":" + \"Now you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the add message, the String representation of the expense","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"jacksonyuan256"},"content":" * and the size of the list.","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"jacksonyuan256"},"content":" * @param expense The task to be printed","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"jacksonyuan256"},"content":" * @param size The size of the modified list.","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"jacksonyuan256"},"content":" public String addExpense(Expense expense, int size) {","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d MESSAGE_ADD_EXPENSE + \"\\n\" + expense + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"jacksonyuan256"},"content":" + \"Now you have \" + size + \" expenses in the report.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the deleted message, the String representation of the task","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"jacksonyuan256"},"content":" * and the size of the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"jacksonyuan256"},"content":" * @param task The task to be printed.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"jacksonyuan256"},"content":" * @param size The size of the modified list.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"jacksonyuan256"},"content":" public String deleteTask(Task task, int size) {","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_DELETE);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d MESSAGE_DELETE_TASK + \"\\n\" + task + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"jacksonyuan256"},"content":" + \"Now you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"jacksonyuan256"},"content":" * Prints every task to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"jacksonyuan256"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"jacksonyuan256"},"content":" public String printStorageList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"jacksonyuan256"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d tasks.indexOf(task) + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(index + \":\" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"jacksonyuan256"},"content":" toBePrinted +\u003d index + \":\" + task + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"jacksonyuan256"},"content":" public String printExpenseReport(List\u003cExpense\u003e expenses) {","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d \"\";","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"jacksonyuan256"},"content":" for (Expense expense : expenses) {","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d expenses.indexOf(expense) + 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"jacksonyuan256"},"content":" toBePrinted +\u003d index + \":\" + expense + \"\\n\";","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the error message for incomplete commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"jacksonyuan256"},"content":" * @param str The string to be printed.","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"jacksonyuan256"},"content":" public String printIncompleteCommand(String str) {","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(str);","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"jacksonyuan256"},"content":" return str;","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"jacksonyuan256"},"content":" public String printUpdatedExpense(Expense expense) {","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"jacksonyuan256"},"content":" return String.format(\"I have updated the expense\\n%s\", expense);","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the error message for invalid inputs.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"jacksonyuan256"},"content":" public String invalidInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_INVALID);","lastModifiedDate":"2023-09-06"},{"lineNumber":151,"author":{"gitId":"jacksonyuan256"},"content":" return MESSAGE_INVALID;","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jacksonyuan256":153}},{"path":"src/main/java/chatbot/UserInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"public class UserInputException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" public UserInputException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jacksonyuan256":8}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"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-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"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\"chatbot.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"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-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"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-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"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-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":19}},{"path":"src/test/java/chatbot/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot; //same package as the class being tested","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" public void addDeleteTasksTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" TaskList taskManager \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(0, taskManager.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" Task todo \u003d new Todo(\"read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.add(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(1, taskManager.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.delete(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(0, taskManager.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" public void markUnmarkTasksTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" TaskList taskManager \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" Task todoOne \u003d new Todo(\"read book\");","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" Task todoTwo \u003d new Todo(\"cooking\");","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.add(todoOne);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.add(todoTwo);","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.mark(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(\"[T][X] cooking\", taskManager.retrieveTask(1).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.unmark(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(\"[T][ ] cooking\", taskManager.retrieveTask(1).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" public void validateInputTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" parser.validateInput(\"deadline\", 7);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(\"OOPS!!! The description of a deadline cannot be empty.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" parser.validateInput(\"event\", 6);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(\"OOPS!!! The description of a event cannot be empty.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" parser.validateInput(\"todo\", 5);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jacksonyuan256":61}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"todo read book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"list","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jacksonyuan256":3}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"plugins {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"repositories {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" mavenCentral()","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"dependencies {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" testImplementation \u0027org.junit.jupiter:junit-jupiter-api:5.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" testRuntimeOnly \u0027org.junit.jupiter:junit-jupiter-engine:5.10.0\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" String javaFxVersion \u003d \u002717.0.8\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":"shadowJar {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":"application {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" mainClass.set(\u0027chatbot.Duke\u0027)","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":"javafx {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" version \u003d \"17\"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":"test {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" testLogging {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" showExceptions true","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" showCauses true","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" showStackTraces true","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" version \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":"run {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jacksonyuan256":69}},{"path":"src/main/java/chatbot/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" * Stores the task details for deadlines.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" private String input;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" private String time;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Deadline. Initialises the description + extras.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" public Deadline(String description, String input) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" return \"[D]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" public String getExtras() {","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" String[] dateDetails \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" LocalDate localDate \u003d LocalDate.parse(dateDetails[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" time \u003d \" \" + dateDetails[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" return \"(by: \" + localDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" + time + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" return getTypeIcon() + super.getStatusIcon() ","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" + super.description + getExtras();","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jacksonyuan256":41}},{"path":"src/main/java/chatbot/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":61}},{"path":"src/main/java/chatbot/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" * Contains the main components to run the bot.","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" /** Storage to load and write files. */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" private Storage storage; ","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" /** UI to handle the printing of output. */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" private UI ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" /** taskHandler to store the list of Tasks and do operations. */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" private TaskList taskHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" /** Interprets user input. */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" private ExpenseReport expenseReport;","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" private Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" private Scene scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/dukeBot.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" private boolean isFirstResponse;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor to initialise the necessary components","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" // root starts at ip","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" this.storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" this.ui \u003d new UI(storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" this.taskHandler \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" this.expenseReport \u003d new ExpenseReport();","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" this.parser \u003d new Parser(ui, taskHandler, storage, expenseReport);","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" this.isFirstResponse \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" Label helloWorld \u003d new Label(\"Hello World!\"); // Creating a new Label control","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" scene \u003d new Scene(helloWorld); // Setting the scene to be our Label","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"jacksonyuan256"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"jacksonyuan256"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"jacksonyuan256"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"jacksonyuan256"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"jacksonyuan256"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"jacksonyuan256"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"jacksonyuan256"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"jacksonyuan256"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"jacksonyuan256"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"jacksonyuan256"},"content":" stage.setScene(scene); // Setting the stage to show our screen","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"jacksonyuan256"},"content":" stage.show(); // Render the stage.","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"jacksonyuan256"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"jacksonyuan256"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"jacksonyuan256"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"jacksonyuan256"},"content":" //Part 3. Add functionality to handle user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"jacksonyuan256"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"jacksonyuan256"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"jacksonyuan256"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"jacksonyuan256"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"jacksonyuan256"},"content":" handleUserInput();","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"jacksonyuan256"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"jacksonyuan256"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"jacksonyuan256"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"jacksonyuan256"},"content":" });","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"jacksonyuan256"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"jacksonyuan256"},"content":" * Runs the program until the loop breaks.","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"jacksonyuan256"},"content":" * The loop only breaks when the input is \"bye\"","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"jacksonyuan256"},"content":" * and breaker is set to 1.","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"jacksonyuan256"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"jacksonyuan256"},"content":" public String run(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"jacksonyuan256"},"content":" return parser.runInput(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":134,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"jacksonyuan256"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"jacksonyuan256"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"jacksonyuan256"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"jacksonyuan256"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-06"},{"lineNumber":141,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":142,"author":{"gitId":"jacksonyuan256"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-06"},{"lineNumber":143,"author":{"gitId":"jacksonyuan256"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-06"},{"lineNumber":144,"author":{"gitId":"jacksonyuan256"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":145,"author":{"gitId":"jacksonyuan256"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":146,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":147,"author":{"gitId":"jacksonyuan256"},"content":" return textToAdd;","lastModifiedDate":"2023-09-06"},{"lineNumber":148,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":149,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":151,"author":{"gitId":"jacksonyuan256"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"jacksonyuan256"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":153,"author":{"gitId":"jacksonyuan256"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":154,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":155,"author":{"gitId":"jacksonyuan256"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":156,"author":{"gitId":"jacksonyuan256"},"content":" // Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-06"},{"lineNumber":157,"author":{"gitId":"jacksonyuan256"},"content":" // Label dukeText \u003d new Label(getResponse(userInput.getText()));","lastModifiedDate":"2023-09-06"},{"lineNumber":158,"author":{"gitId":"jacksonyuan256"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":159,"author":{"gitId":"jacksonyuan256"},"content":" String dukeText \u003d getResponse(userText);","lastModifiedDate":"2023-09-06"},{"lineNumber":160,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":161,"author":{"gitId":"jacksonyuan256"},"content":" DialogBox.getUserDialog(userText, user),","lastModifiedDate":"2023-09-06"},{"lineNumber":162,"author":{"gitId":"jacksonyuan256"},"content":" DialogBox.getDukeDialog(dukeText, duke)","lastModifiedDate":"2023-09-06"},{"lineNumber":163,"author":{"gitId":"jacksonyuan256"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":164,"author":{"gitId":"jacksonyuan256"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":165,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":166,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":167,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":168,"author":{"gitId":"jacksonyuan256"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":169,"author":{"gitId":"jacksonyuan256"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-06"},{"lineNumber":170,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":171,"author":{"gitId":"jacksonyuan256"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":172,"author":{"gitId":"jacksonyuan256"},"content":" if (isFirstResponse) {","lastModifiedDate":"2023-09-06"},{"lineNumber":173,"author":{"gitId":"jacksonyuan256"},"content":" isFirstResponse \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":174,"author":{"gitId":"jacksonyuan256"},"content":" return ui.startProgram();","lastModifiedDate":"2023-09-06"},{"lineNumber":175,"author":{"gitId":"jacksonyuan256"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":176,"author":{"gitId":"jacksonyuan256"},"content":" return run(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":177,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":178,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"jacksonyuan256"},"content":" public static void main(String[] args) { }","lastModifiedDate":"2023-09-11"},{"lineNumber":181,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jacksonyuan256":180,"-":1}},{"path":"src/main/java/chatbot/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":" * Stores the task details for events.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" private String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" private String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Event. Initialises the description + extras.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" return \"[E]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" public String getExtras() {","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" return \" (from:\" + from + \" to:\" + to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" return getTypeIcon() + super.getStatusIcon()","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" + super.description + getExtras();","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jacksonyuan256":34}},{"path":"src/main/java/chatbot/Expense.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":" * Records the user\u0027s expenses","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"public class Expense {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" private String description;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" private String cost;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" public Expense(String description, String cost) {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" this.cost \u003d cost;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" public void updateCosts(String cost) {","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" this.cost \u003d cost;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" return String.format(\" %s : %s\", description, cost);","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"jacksonyuan256":22}},{"path":"src/main/java/chatbot/ExpenseReport.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.List;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"public class ExpenseReport {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" private List\u003cExpense\u003e expenses;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" public ExpenseReport() {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" this.expenses \u003d new ArrayList\u003cExpense\u003e();","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" public void addExpense(Expense expense) {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" expenses.add(expense);","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" public void deleteExpense(int index) {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" expenses.remove(index);","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" public List\u003cExpense\u003e getExpenseReport() {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" return expenses;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" public Expense getExpense(int index) {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" return expenses.get(index);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" public int getSize() {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" return expenses.size();","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"jacksonyuan256":31}},{"path":"src/main/java/chatbot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":12}},{"path":"src/main/java/chatbot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":31}},{"path":"src/main/java/chatbot/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/dukeBot.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":51}},{"path":"src/main/java/chatbot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":" * Handles the interpretation of user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" /** UI to handle the printing of output. */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" private UI ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" /** taskHandler to store the list of Tasks and do operations. */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" private TaskList taskHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" /** Storage to load and write files. */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" private ExpenseReport expenseReport;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Parser. Initialises the UI, taskHandler, storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" public Parser(UI ui, TaskList taskHandler, Storage storage, ExpenseReport expenseReport) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" this.taskHandler \u003d taskHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" this.expenseReport \u003d expenseReport;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" // Purely for testing purposes.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" public Parser() {}","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" * Interprets the user string input and","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" * returns a value based on the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" * @param input The user input to be interpreted.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" * @return The value to determine if the program ends. ","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" public String runInput(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":" return ui.endProgram();","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" storage.write(taskHandler.getTaskList());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printStorageList(taskHandler.getTaskList());","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.equals(\"report\")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printExpenseReport(expenseReport.getExpenseReport());","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" return unmarkCommand(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" return markCommand(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" return deleteCommand(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"editExpense\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" return editExpenseCommand(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" return findCommand(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" if (!(input.startsWith(\"todo\") || input.startsWith(\"event\") ","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" || input.startsWith(\"deadline\") || input.startsWith(\"expense\"))) {","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" return ui.invalidInput();","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" return todoCommand(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" return deadlineCommand(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":" return eventCommand(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" } else if (input.startsWith(\"expense\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":" return expenseCommand(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":" assert false : \"execution should never reach here\";","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":" return \"\";","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jacksonyuan256"},"content":" public String markCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jacksonyuan256"},"content":" int stringLength \u003d input.length();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d Integer.parseInt(input.substring(stringLength - 1)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jacksonyuan256"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jacksonyuan256"},"content":" Task task \u003d taskHandler.mark(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printMarked(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"jacksonyuan256"},"content":" public String unmarkCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"jacksonyuan256"},"content":" int stringLength \u003d input.length();","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d Integer.parseInt(input.substring(stringLength - 1)) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"jacksonyuan256"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"jacksonyuan256"},"content":" Task task \u003d taskHandler.unmark(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printUnmarked(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"jacksonyuan256"},"content":" public String todoCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"jacksonyuan256"},"content":" String[] splitInput \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"jacksonyuan256"},"content":" Task todo \u003d new Todo(splitInput[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"jacksonyuan256"},"content":" taskHandler.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d taskHandler.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"jacksonyuan256"},"content":" return ui.addTask(todo, index);","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"jacksonyuan256"},"content":" public String deadlineCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 9);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"jacksonyuan256"},"content":" String[] splitInput \u003d input.split(\"/\", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"jacksonyuan256"},"content":" String[] getDescription \u003d splitInput[0].split(\" \", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"jacksonyuan256"},"content":" String returnBy \u003d splitInput[1].substring(3);","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"jacksonyuan256"},"content":" Task deadline \u003d new Deadline(getDescription[1], returnBy);","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"jacksonyuan256"},"content":" taskHandler.add(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d taskHandler.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"jacksonyuan256"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"jacksonyuan256"},"content":" return ui.addTask(deadline, index);","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"jacksonyuan256"},"content":" public String eventCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 6);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"jacksonyuan256"},"content":" String[] splitInput \u003d input.split(\"/\");","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"jacksonyuan256"},"content":" String[] toGetDateTime \u003d splitInput[0].split(\" \", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":143,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"jacksonyuan256"},"content":" String from \u003d splitInput[1].substring(4);","lastModifiedDate":"2023-09-11"},{"lineNumber":145,"author":{"gitId":"jacksonyuan256"},"content":" String to \u003d splitInput[2].substring(2);","lastModifiedDate":"2023-09-11"},{"lineNumber":146,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"jacksonyuan256"},"content":" Task event \u003d new Event(toGetDateTime[1], from, to);","lastModifiedDate":"2023-09-11"},{"lineNumber":148,"author":{"gitId":"jacksonyuan256"},"content":" taskHandler.add(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d taskHandler.getSize();","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"jacksonyuan256"},"content":" return ui.addTask(event, index);","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"jacksonyuan256"},"content":" public String deleteCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":156,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 7);","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"jacksonyuan256"},"content":" int stringLength \u003d input.length();","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d Integer.parseInt(input.substring(stringLength - 1)) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"jacksonyuan256"},"content":" Task task \u003d taskHandler.retrieveTask(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"jacksonyuan256"},"content":" taskHandler.delete(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"jacksonyuan256"},"content":" int size \u003d taskHandler.getSize();","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"jacksonyuan256"},"content":" return ui.deleteTask(task, size);","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"jacksonyuan256"},"content":" public String findCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 5);","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":176,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":177,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":179,"author":{"gitId":"jacksonyuan256"},"content":" String[] keywords \u003d input.split(\" \");","lastModifiedDate":"2023-09-16"},{"lineNumber":180,"author":{"gitId":"jacksonyuan256"},"content":" List\u003cTask\u003e filteredList \u003d taskHandler.filterByWord(keywords[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":182,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printStorageList(filteredList);","lastModifiedDate":"2023-09-16"},{"lineNumber":183,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":185,"author":{"gitId":"jacksonyuan256"},"content":" public String expenseCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 8);","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"jacksonyuan256"},"content":" String[] splitInput \u003d input.split(\"/\");","lastModifiedDate":"2023-09-12"},{"lineNumber":193,"author":{"gitId":"jacksonyuan256"},"content":" String[] getDescription \u003d splitInput[0].split(\" \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":194,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":195,"author":{"gitId":"jacksonyuan256"},"content":" Expense expense \u003d new Expense(getDescription[1], splitInput[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"jacksonyuan256"},"content":" expenseReport.addExpense(expense);","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d expenseReport.getSize();","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"jacksonyuan256"},"content":" return ui.addExpense(expense, index);","lastModifiedDate":"2023-09-12"},{"lineNumber":200,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":202,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":203,"author":{"gitId":"jacksonyuan256"},"content":" * Retrieves the filtered list according to the keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":204,"author":{"gitId":"jacksonyuan256"},"content":" * @param input The word to filter the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":205,"author":{"gitId":"jacksonyuan256"},"content":" * @return The output String.","lastModifiedDate":"2023-09-16"},{"lineNumber":206,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":207,"author":{"gitId":"jacksonyuan256"},"content":" public String editExpenseCommand(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":208,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":209,"author":{"gitId":"jacksonyuan256"},"content":" validateInput(input, 11);","lastModifiedDate":"2023-09-16"},{"lineNumber":210,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":211,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printIncompleteCommand(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":212,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":214,"author":{"gitId":"jacksonyuan256"},"content":" String[] splitInput \u003d input.split(\" \", 3);","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d Integer.parseInt(splitInput[1]) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"jacksonyuan256"},"content":" String updatedCost \u003d splitInput[2];","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":218,"author":{"gitId":"jacksonyuan256"},"content":" expenseReport.getExpense(index).updateCosts(updatedCost);","lastModifiedDate":"2023-09-16"},{"lineNumber":219,"author":{"gitId":"jacksonyuan256"},"content":" Expense expense \u003d expenseReport.getExpense(index);","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":221,"author":{"gitId":"jacksonyuan256"},"content":" return ui.printUpdatedExpense(expense);","lastModifiedDate":"2023-09-16"},{"lineNumber":222,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"jacksonyuan256"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"jacksonyuan256"},"content":" * Checks for incomplete user inputs.","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"jacksonyuan256"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"jacksonyuan256"},"content":" * @param str The user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"jacksonyuan256"},"content":" * @param minimum The minimum length of the user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"jacksonyuan256"},"content":" * @throws UserInputException If the input is deemed incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"jacksonyuan256"},"content":" public static void validateInput(String str, int minimum) throws UserInputException {","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"jacksonyuan256"},"content":" if (str.length() \u003c\u003d minimum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"jacksonyuan256"},"content":" throw new UserInputException(\"OOPS!!! The description of a \" + str + \" cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jacksonyuan256":236}},{"path":"src/main/java/chatbot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" * Handles the loading and writing of text files.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" /** The string representation of the directory */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Storage. Initialises the filepath.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" * Checks if the file path exists and","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" * prints the text document if it exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" * @throws FileNotFoundException If file path is invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" public String load() {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" String outputStr \u003d \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" Scanner printSC \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" while (printSC.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" outputStr +\u003d printSC.nextLine() + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":" System.out.println(printSC.nextLine());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" printSC.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" System.out.println(\"No file found!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" return outputStr;","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" /** ","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" * Creates a new file in the specified path and","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" * writes to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" * @throws IOException If the input/output is interrupted.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" public void write(List\u003cTask\u003e taskForce) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" String toBeSaved \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" for (int i \u003d 0; i \u003c taskForce.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" toBeSaved \u003d toBeSaved + taskForce.get(i) + \"\\n\";","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" File path \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" FileWriter wr \u003d new FileWriter(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":" wr.write(toBeSaved);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":" wr.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" wr.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":" System.out.println(\"This will never occur.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jacksonyuan256":68}},{"path":"src/main/java/chatbot/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":" * Stores the task details.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" /** Basic task description */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" /** Determine whether the task is completed */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" * Returns [ ] for not marked, [X] for marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" * @return String representation of whether it is marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" return (isDone ? \"[X] \" : \"[ ] \");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" * Returns the string representation of its type.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" * @return String representation of its type.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" return \"[ ]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" * Returns any extra information required by the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" * @return String representation of the extra information.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" public String getExtras() {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" return \"\";","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" * Marks the task as completed","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" public void markTaskDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" * Marks the task as not completed","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" public void markTaskNotDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"jacksonyuan256":59}},{"path":"src/main/java/chatbot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" * Stores and handles the addition/deletion list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for TaskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" * The task is added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" * The task is removed from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" * The task is marked and returned back.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":" * @param index The index of the task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" * @return The task that was marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" public Task mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" task.markTaskDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" * The task is unmarked and returned back.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" * @param index The index of the task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" * @return The task that was unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" public Task unmark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" task.markTaskNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" * Retrieves the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" * @return The task in the corresponding index.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":" public Task retrieveTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" assert this.getSize() \u003e\u003d 1 : \"There are currently no tasks\";","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":" * Returns the size of the list","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"jacksonyuan256"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"jacksonyuan256"},"content":" return tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"jacksonyuan256"},"content":" * Returns the task list","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jacksonyuan256"},"content":" public List\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"jacksonyuan256"},"content":" return tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"jacksonyuan256"},"content":" * Retrieves the filtered list according to the keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"jacksonyuan256"},"content":" * @param keyword The word to filter the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"jacksonyuan256"},"content":" * @return The filtered list.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"jacksonyuan256"},"content":" public List\u003cTask\u003e filterByWord(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"jacksonyuan256"},"content":" List\u003cTask\u003e filteredList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"jacksonyuan256"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"jacksonyuan256"},"content":" if (task.description.contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"jacksonyuan256"},"content":" filteredList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"jacksonyuan256"},"content":" return filteredList;","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jacksonyuan256":95}},{"path":"src/main/java/chatbot/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":" * Stores the task details for todo.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for Todo. Initialises the description.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" return \"[T]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" public String getExtras() {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":" return \"\";","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" return getTypeIcon() + super.getStatusIcon() + super.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jacksonyuan256":28}},{"path":"src/main/java/chatbot/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":" * Handles the printing of statements to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"public class UI {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_GOODBYE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_WELCOME \u003d \"Hello! I\u0027m Afro\\n\" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_UNMARK \u003d \"OK, I\u0027ve marked this task as not done yet:\";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_MARK \u003d \"OK, I\u0027ve marked this task as done:\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_ADD_TASK \u003d \"Got it. I\u0027ve added this task:\";","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_DELETE_TASK \u003d \"Noted. I have removed this task.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_ADD_EXPENSE \u003d \"Got it. I\u0027ve added this expense\";","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" private static final String MESSAGE_INVALID \u003d \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" /** Storage to load and write files. */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" * Constructor for UI. Initialises the storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" public UI(Storage storage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the greeting message and loads a previous text file if any.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" public String startProgram() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_WELCOME);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" String output \u003d storage.load() + \"\\n\" + MESSAGE_WELCOME;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" return MESSAGE_WELCOME;","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the program end message.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":" public String endProgram() {","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" return MESSAGE_GOODBYE;","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the marked message and the String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" * @param task The task to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" public String printMarked(Task task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_MARK);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" assert task.isDone : \"This task is still marked as not completed.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d MESSAGE_MARK + \"\\n\" + task;","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the unmarked message and the String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" * @param task The task to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" public String printUnmarked(Task task) {","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_UNMARK);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"jacksonyuan256"},"content":" assert !task.isDone : \"This task is still marked as completed.\";","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d MESSAGE_UNMARK + \"\\n\" + task;","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the add message, the String representation of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"jacksonyuan256"},"content":" * and the size of the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"jacksonyuan256"},"content":" * @param task The task to be printed","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"jacksonyuan256"},"content":" * @param size The size of the modified list.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"jacksonyuan256"},"content":" public String addTask(Task task, int size) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_ADD);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d MESSAGE_ADD_TASK + \"\\n\" + task + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"jacksonyuan256"},"content":" + \"Now you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the add message, the String representation of the expense","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"jacksonyuan256"},"content":" * and the size of the list.","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"jacksonyuan256"},"content":" * @param expense The task to be printed","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"jacksonyuan256"},"content":" * @param size The size of the modified list.","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"jacksonyuan256"},"content":" public String addExpense(Expense expense, int size) {","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d MESSAGE_ADD_EXPENSE + \"\\n\" + expense + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"jacksonyuan256"},"content":" + \"Now you have \" + size + \" expenses in the report.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the deleted message, the String representation of the task","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"jacksonyuan256"},"content":" * and the size of the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"jacksonyuan256"},"content":" * @param task The task to be printed.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"jacksonyuan256"},"content":" * @param size The size of the modified list.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"jacksonyuan256"},"content":" public String deleteTask(Task task, int size) {","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_DELETE);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d MESSAGE_DELETE_TASK + \"\\n\" + task + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"jacksonyuan256"},"content":" + \"Now you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"jacksonyuan256"},"content":" * Prints every task to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"jacksonyuan256"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"jacksonyuan256"},"content":" public String printStorageList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d \"\";","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"jacksonyuan256"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d tasks.indexOf(task) + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(index + \":\" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"jacksonyuan256"},"content":" toBePrinted +\u003d index + \":\" + task + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"jacksonyuan256"},"content":" public String printExpenseReport(List\u003cExpense\u003e expenses) {","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"jacksonyuan256"},"content":" String toBePrinted \u003d \"\";","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"jacksonyuan256"},"content":" for (Expense expense : expenses) {","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"jacksonyuan256"},"content":" int index \u003d expenses.indexOf(expense) + 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"jacksonyuan256"},"content":" toBePrinted +\u003d index + \":\" + expense + \"\\n\";","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"jacksonyuan256"},"content":" return toBePrinted;","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the error message for incomplete commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"jacksonyuan256"},"content":" * @param str The string to be printed.","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"jacksonyuan256"},"content":" public String printIncompleteCommand(String str) {","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(str);","lastModifiedDate":"2023-09-06"},{"lineNumber":139,"author":{"gitId":"jacksonyuan256"},"content":" return str;","lastModifiedDate":"2023-09-06"},{"lineNumber":140,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"jacksonyuan256"},"content":" public String printUpdatedExpense(Expense expense) {","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"jacksonyuan256"},"content":" return String.format(\"I have updated the expense\\n%s\", expense);","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"jacksonyuan256"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"jacksonyuan256"},"content":" * Prints the error message for invalid inputs.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"jacksonyuan256"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"jacksonyuan256"},"content":" public String invalidInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":150,"author":{"gitId":"jacksonyuan256"},"content":" // System.out.println(MESSAGE_INVALID);","lastModifiedDate":"2023-09-06"},{"lineNumber":151,"author":{"gitId":"jacksonyuan256"},"content":" return MESSAGE_INVALID;","lastModifiedDate":"2023-09-06"},{"lineNumber":152,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jacksonyuan256":153}},{"path":"src/main/java/chatbot/UserInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"public class UserInputException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":" public UserInputException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jacksonyuan256":8}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"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-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"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\"chatbot.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"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-06"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"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-06"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"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-06"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"jacksonyuan256":19}},{"path":"src/test/java/chatbot/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"package chatbot; //same package as the class being tested","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jacksonyuan256"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jacksonyuan256"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jacksonyuan256"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jacksonyuan256"},"content":" public void addDeleteTasksTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jacksonyuan256"},"content":" TaskList taskManager \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(0, taskManager.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jacksonyuan256"},"content":" Task todo \u003d new Todo(\"read book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.add(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(1, taskManager.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.delete(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(0, taskManager.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jacksonyuan256"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jacksonyuan256"},"content":" public void markUnmarkTasksTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jacksonyuan256"},"content":" TaskList taskManager \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jacksonyuan256"},"content":" Task todoOne \u003d new Todo(\"read book\");","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"jacksonyuan256"},"content":" Task todoTwo \u003d new Todo(\"cooking\");","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.add(todoOne);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.add(todoTwo);","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.mark(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(\"[T][X] cooking\", taskManager.retrieveTask(1).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jacksonyuan256"},"content":" taskManager.unmark(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(\"[T][ ] cooking\", taskManager.retrieveTask(1).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jacksonyuan256"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jacksonyuan256"},"content":" public void validateInputTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jacksonyuan256"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jacksonyuan256"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jacksonyuan256"},"content":" parser.validateInput(\"deadline\", 7);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(\"OOPS!!! The description of a deadline cannot be empty.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jacksonyuan256"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jacksonyuan256"},"content":" parser.validateInput(\"event\", 6);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(\"OOPS!!! The description of a event cannot be empty.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"jacksonyuan256"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jacksonyuan256"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jacksonyuan256"},"content":" parser.validateInput(\"todo\", 5);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"jacksonyuan256"},"content":" } catch (UserInputException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"jacksonyuan256"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"jacksonyuan256"},"content":" e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"jacksonyuan256"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"jacksonyuan256"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jacksonyuan256":61}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jacksonyuan256"},"content":"todo read book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"jacksonyuan256"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"jacksonyuan256"},"content":"list","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"jacksonyuan256":3}}] diff --git a/jacksonyuan256_ip_master/commits.json b/jacksonyuan256_ip_master/commits.json index 135ac09e..34ba99de 100644 --- a/jacksonyuan256_ip_master/commits.json +++ b/jacksonyuan256_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jacksonyuan256":[{"date":"2023-08-20","commitResults":[{"hash":"db8cfd053b5c2b458b62d0df4abcd8187da38953","isMergeCommit":false,"messageTitle":"Rename Greet Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}}]},{"date":"2023-08-21","commitResults":[{"hash":"46eb64f9374a51b7d90d0682af24d664e9745910","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"221bb23c5315bd69d017a5311cd9e09a0d4b5c3e","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"2e5d6ce1689830425de0279f53597996f705a341","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":8}}}]},{"date":"2023-08-22","commitResults":[{"hash":"4582559cc007b3c16202a8ffa0b12472883a24b1","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":14}}},{"hash":"8d45d65f86ecd22b118d3865d9fa23f42fd4d452","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"c08ac58a19b667df524ce9c0820b861fa0efabcc","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":4}}},{"hash":"20b42173a43b01441fc69f89e5c8d12e308bf2e5","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"925027e1464fb1d6fed2b875e369280837bc288d","isMergeCommit":false,"messageTitle":"Added the feature to save data","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":20}}},{"hash":"1e98197b68c3dc35eccaea4ee866368d9802c1e5","isMergeCommit":false,"messageTitle":"Added features to rewrite dates in a different format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":8}}},{"hash":"6a6e5c614d923cd7b03c99f6235a781d74b3b7d8","isMergeCommit":false,"messageTitle":"Revert \"Added features to rewrite dates in a different format\"","messageBody":"This reverts commit 1e98197b68c3dc35eccaea4ee866368d9802c1e5.\n","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":22}}},{"hash":"17c4878cb23b42924af79026a689ccffc0a16d57","isMergeCommit":false,"messageTitle":"Added features to rewrite date/time","messageBody":"ran into some issues earlier and had to revert\n","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}},{"hash":"80d1a0243e16f982842123efee9b1c84f67ab190","isMergeCommit":true,"messageTitle":"Merge Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"f59b86727e2c1fbd357df777e4e39ef61087023a","isMergeCommit":false,"messageTitle":"Refactored code to extract code as classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":324,"deletions":18}}},{"hash":"d889329af3836791d99a483dc03680d40b2522bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3dee7aa8ea8ed6b0c4097a8e18ff70317b5fb91f","isMergeCommit":false,"messageTitle":"Organise into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":3}}},{"hash":"3aac169caf2ecbf0bc987db7a20627fe783ce4c1","isMergeCommit":false,"messageTitle":"Added gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":51,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3f3fbceaaf196c344b334790eb039389fda62d4b","isMergeCommit":false,"messageTitle":"Added JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":0}}},{"hash":"aea449565625f9841549bbe42bc9bf1ada041e59","isMergeCommit":false,"messageTitle":"Added JavaDocs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":10},"java":{"insertions":140,"deletions":5}}},{"hash":"8fa065ee269c28ca4a40699656713582f0c0752e","isMergeCommit":false,"messageTitle":"Tweaked code according to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":19}}},{"hash":"cd0eff75fdeb5c84ed780cfba75a4186b220329e","isMergeCommit":false,"messageTitle":"Added the feature to find tasks via a keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":1}}},{"hash":"d5fd05308608ae539f28a9e82b7ee6ef9650b8a4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"9c63ae694df8cdac2070b72471ecd5767807fa9a","isMergeCommit":true,"messageTitle":"Resolved merge conflicts","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"81d0c5fb6e290fbec01db0f897a184aae28a6f71","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"b6dd1b2c5f6aa10c3df0890db9cf48ef581e628f","isMergeCommit":false,"messageTitle":"Some minor edits","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":19}}}]},{"date":"2023-09-04","commitResults":[{"hash":"399557b75ae1a02a2de992e772695c33431a582d","isMergeCommit":false,"messageTitle":"Added checkstyle to gradle","messageBody":"Minor edits to everything\n","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":75,"deletions":18}}},{"hash":"0a241c9ca5ddbdf34ab8b601b5a70003bda5aca9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-checkStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"b544a9f0fec1b22d2e44156e9dc912719c16691a","isMergeCommit":false,"messageTitle":"Added GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":376,"deletions":64}}},{"hash":"735754b47fd7a6baf488230062aee602df8e1007","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"fbd4b467a908472d7aa91d3f6ec2ca17fbb80e1b","isMergeCommit":false,"messageTitle":"Added java assertions in some classes","messageBody":"An assertion was added at the end of runInput method (Parser) since it\nis not intended for the method to reach the end. One was also added for\nretrieveTask method (TaskList) as it cannot be called if the length\nof the arrayList is 0. For mark and unmark, we also want to ensure that\nthe correct completion status is printed. To do this, let\u0027s add an\nassertion to check the boolean isDone.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":6,"deletions":1}}},{"hash":"ad6ebbc987440737894b32395979c28b7d98d051","isMergeCommit":false,"messageTitle":"Edited some code to improve the code quality","messageBody":"By using the gradle checkstyle to detect style violations, most of it\nhas been rectified to the best of my means. I am still unsure why some\nwhitespace and newline errors still show up.\n","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":257}}},{"hash":"3409202a2ef98817dabc82e58132457861747212","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jacksonyuan256/branch-A-CodeQuality","messageBody":"Edited some code to improve the code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"86e2847b3e5fbe80c2d7a5c3e2d23f7d0064bddb","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jacksonyuan256/branch-A-Assertions","messageBody":"Added java assertions in some classes","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"7b53c7128ba2dce852fedb2f3485d163ef170187","isMergeCommit":false,"messageTitle":"Added an extension to record expenses","messageBody":"This new feature allows users to record their expenses, to edit the\ncosts and subsequently to see the full report.\n","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":15}}},{"hash":"73c83143d06c749312b14369bd5afdf1b98c77e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Extension\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"jacksonyuan256":{"java":1142,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":69,"txt":3}},"authorContributionVariance":{"jacksonyuan256":19585.29},"authorDisplayNameMap":{"jacksonyuan256":"CS2103T-F12-3 YUAN..KSON"}} +{"authorDailyContributionsMap":{"jacksonyuan256":[{"date":"2023-08-20","commitResults":[{"hash":"db8cfd053b5c2b458b62d0df4abcd8187da38953","isMergeCommit":false,"messageTitle":"Rename Greet Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}}]},{"date":"2023-08-21","commitResults":[{"hash":"46eb64f9374a51b7d90d0682af24d664e9745910","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"221bb23c5315bd69d017a5311cd9e09a0d4b5c3e","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"2e5d6ce1689830425de0279f53597996f705a341","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":8}}}]},{"date":"2023-08-22","commitResults":[{"hash":"4582559cc007b3c16202a8ffa0b12472883a24b1","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":14}}},{"hash":"8d45d65f86ecd22b118d3865d9fa23f42fd4d452","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"c08ac58a19b667df524ce9c0820b861fa0efabcc","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":4}}},{"hash":"20b42173a43b01441fc69f89e5c8d12e308bf2e5","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"925027e1464fb1d6fed2b875e369280837bc288d","isMergeCommit":false,"messageTitle":"Added the feature to save data","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":20}}},{"hash":"1e98197b68c3dc35eccaea4ee866368d9802c1e5","isMergeCommit":false,"messageTitle":"Added features to rewrite dates in a different format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":8}}},{"hash":"6a6e5c614d923cd7b03c99f6235a781d74b3b7d8","isMergeCommit":false,"messageTitle":"Revert \"Added features to rewrite dates in a different format\"","messageBody":"This reverts commit 1e98197b68c3dc35eccaea4ee866368d9802c1e5.\n","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":22}}},{"hash":"17c4878cb23b42924af79026a689ccffc0a16d57","isMergeCommit":false,"messageTitle":"Added features to rewrite date/time","messageBody":"ran into some issues earlier and had to revert\n","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}},{"hash":"80d1a0243e16f982842123efee9b1c84f67ab190","isMergeCommit":true,"messageTitle":"Merge Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"f59b86727e2c1fbd357df777e4e39ef61087023a","isMergeCommit":false,"messageTitle":"Refactored code to extract code as classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":324,"deletions":18}}},{"hash":"d889329af3836791d99a483dc03680d40b2522bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3dee7aa8ea8ed6b0c4097a8e18ff70317b5fb91f","isMergeCommit":false,"messageTitle":"Organise into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":3}}},{"hash":"3aac169caf2ecbf0bc987db7a20627fe783ce4c1","isMergeCommit":false,"messageTitle":"Added gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":51,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3f3fbceaaf196c344b334790eb039389fda62d4b","isMergeCommit":false,"messageTitle":"Added JUnit tests","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":0}}},{"hash":"aea449565625f9841549bbe42bc9bf1ada041e59","isMergeCommit":false,"messageTitle":"Added JavaDocs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":10},"java":{"insertions":140,"deletions":5}}},{"hash":"8fa065ee269c28ca4a40699656713582f0c0752e","isMergeCommit":false,"messageTitle":"Tweaked code according to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":19}}},{"hash":"cd0eff75fdeb5c84ed780cfba75a4186b220329e","isMergeCommit":false,"messageTitle":"Added the feature to find tasks via a keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":1}}},{"hash":"d5fd05308608ae539f28a9e82b7ee6ef9650b8a4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"9c63ae694df8cdac2070b72471ecd5767807fa9a","isMergeCommit":true,"messageTitle":"Resolved merge conflicts","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"81d0c5fb6e290fbec01db0f897a184aae28a6f71","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"b6dd1b2c5f6aa10c3df0890db9cf48ef581e628f","isMergeCommit":false,"messageTitle":"Some minor edits","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":19}}}]},{"date":"2023-09-04","commitResults":[{"hash":"399557b75ae1a02a2de992e772695c33431a582d","isMergeCommit":false,"messageTitle":"Added checkstyle to gradle","messageBody":"Minor edits to everything\n","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":75,"deletions":18}}},{"hash":"0a241c9ca5ddbdf34ab8b601b5a70003bda5aca9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-checkStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"b544a9f0fec1b22d2e44156e9dc912719c16691a","isMergeCommit":false,"messageTitle":"Added GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":376,"deletions":64}}},{"hash":"735754b47fd7a6baf488230062aee602df8e1007","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"fbd4b467a908472d7aa91d3f6ec2ca17fbb80e1b","isMergeCommit":false,"messageTitle":"Added java assertions in some classes","messageBody":"An assertion was added at the end of runInput method (Parser) since it\nis not intended for the method to reach the end. One was also added for\nretrieveTask method (TaskList) as it cannot be called if the length\nof the arrayList is 0. For mark and unmark, we also want to ensure that\nthe correct completion status is printed. To do this, let\u0027s add an\nassertion to check the boolean isDone.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":6,"deletions":1}}},{"hash":"ad6ebbc987440737894b32395979c28b7d98d051","isMergeCommit":false,"messageTitle":"Edited some code to improve the code quality","messageBody":"By using the gradle checkstyle to detect style violations, most of it\nhas been rectified to the best of my means. I am still unsure why some\nwhitespace and newline errors still show up.\n","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":257}}},{"hash":"3409202a2ef98817dabc82e58132457861747212","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jacksonyuan256/branch-A-CodeQuality","messageBody":"Edited some code to improve the code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"86e2847b3e5fbe80c2d7a5c3e2d23f7d0064bddb","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jacksonyuan256/branch-A-Assertions","messageBody":"Added java assertions in some classes","tags":["A-Assertions"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"7b53c7128ba2dce852fedb2f3485d163ef170187","isMergeCommit":false,"messageTitle":"Added an extension to record expenses","messageBody":"This new feature allows users to record their expenses, to edit the\ncosts and subsequently to see the full report.\n","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":15}}},{"hash":"73c83143d06c749312b14369bd5afdf1b98c77e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Extension\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"21c9ff88e11b51f599b959651f00e13d86b82c9f","isMergeCommit":false,"messageTitle":"Some code quality changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":114}}}]}]},"authorFileTypeContributionMap":{"jacksonyuan256":{"java":1171,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":69,"txt":3}},"authorContributionVariance":{"jacksonyuan256":18688.646},"authorDisplayNameMap":{"jacksonyuan256":"CS2103T-F12-3 YUAN..KSON"}} diff --git a/jason-raiin_ip_master/authorship.json b/jason-raiin_ip_master/authorship.json index 5d88154a..2c536650 100644 --- a/jason-raiin_ip_master/authorship.json +++ b/jason-raiin_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":"jason-raiin"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-31"},{"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":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" mainClass.set(\"jerma.Jerma\")","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" archiveBaseName \u003d \"jerma\"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":"checkstyle {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jason-raiin":24,"-":40}},{"path":"src/main/java/jerma/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" * An example of a custom control using FXML. This control represents a dialog","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" * box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" MainWindow.class.getResource(\"/views/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" * Flips the dialog box such that the ImageView is on the left and text on","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" * the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" .observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" public static DialogBox getJermaDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":64}},{"path":"src/main/java/jerma/Jerma.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"public class Jerma {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" private Boolean[] running;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" public Jerma() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" running \u003d new Boolean[] { true };","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" public String load() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" tasks \u003d Storage.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" return \"Task list has been loaded\";","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" return ui.error(\"Save file not found\");","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" } catch (UnsupportedOperationException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" return ui.error(\"Corrupted save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" public String hello() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" return ui.hello();","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" Command command \u003d Parser.parse(input, ui, tasks, running);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" return command.execute();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" return ui.error(\"Invalid arguments. Try again!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" } catch (UnsupportedOperationException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" return ui.error(\"Invalid command. Try again!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" return ui.error(\"Invalid date format. Try again!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jason-raiin":51,"-":2}},{"path":"src/main/java/jerma/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":9}},{"path":"src/main/java/jerma/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" private Jerma jerma \u003d new Jerma();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" Main.class.getResource(\"/views/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" MainWindow mw \u003d fxmlLoader.\u003cMainWindow\u003egetController();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" mw.setJerma(jerma);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" mw.onStart();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":34}},{"path":"src/main/java/jerma/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" private Jerma jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" private Image sterImage \u003d new Image(","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" this.getClass().getResourceAsStream(\"/images/ster.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" private Image jermaImage \u003d new Image(","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" this.getClass().getResourceAsStream(\"/images/jerma.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" public void setJerma(Jerma jerma) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" this.jerma \u003d jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" public void onStart() {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" DialogBox.getJermaDialog(this.jerma.hello(), jermaImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" DialogBox.getJermaDialog(this.jerma.load(), jermaImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" * Creates two dialog boxes, one echoing user input and the other containing","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" * Duke\u0027s reply and then appends them to the dialog container. Clears the","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" * user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" String response \u003d jerma.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":" DialogBox.getUserDialog(input, sterImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":" DialogBox.getJermaDialog(response, jermaImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":61}},{"path":"src/main/java/jerma/commands/AddTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"public class AddTask extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" private Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" public AddTask(Ui ui, TaskList tasks, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" return ui.newTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jason-raiin":19}},{"path":"src/main/java/jerma/commands/Bye.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"public class Bye extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" private Boolean[] running;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" public Bye(Ui ui, TaskList tasks, Boolean[] running) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" this.running \u003d running;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" ui.error(\"Filepath issue\");","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" ui.error(\"Failed to save\");","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" running[0] \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" return ui.bye();","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jason-raiin":28}},{"path":"src/main/java/jerma/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" protected Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" protected TaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" protected Command(Ui ui, TaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" public abstract String execute();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"jason-raiin":16}},{"path":"src/main/java/jerma/commands/Delete.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"public class Delete extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" private Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" public Delete(Ui ui, TaskList tasks, int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" assert index \u003e 0 || index \u003c\u003d tasks.size() : \"Index out of range\";","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" tasks.remove(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" return ui.deleteTask(task, tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jason-raiin":20}},{"path":"src/main/java/jerma/commands/Find.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"public class Find extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" private String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" public Find(Ui ui, TaskList tasks, String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" TaskList results \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" if (task.toString().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" results.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" return ui.listTasks(results);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"jason-raiin":25}},{"path":"src/main/java/jerma/commands/Help.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"public class Help extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" public Help(Ui ui, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" return ui.help();","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jason-raiin":14}},{"path":"src/main/java/jerma/commands/List.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"public class List extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" public List(Ui ui, TaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" return ui.listTasks(this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"jason-raiin":14}},{"path":"src/main/java/jerma/commands/Mark.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"public class Mark extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" private Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" public Mark(Ui ui, TaskList tasks, int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" assert index \u003e 0 || index \u003c\u003d tasks.size() : \"Index out of range\";","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" task.setDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" return ui.markTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"jason-raiin":20}},{"path":"src/main/java/jerma/commands/Unmark.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"public class Unmark extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" private Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" public Unmark(Ui ui, TaskList tasks, int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" assert index \u003e 0 || index \u003c\u003d tasks.size() : \"Index out of range\";","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" task.setUndone();","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" return ui.unmarkTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"jason-raiin":20}},{"path":"src/main/java/jerma/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" * Constructor for a Deadline Task","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" * @param by Date when the deadline should be complete by","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" * @throws DateTimeParseException Thrown if date is not parseable","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" this.symbol \u003d \"D\";","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Deadline Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Deadline Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"%s|%s|%s\", symbol, super.save(), by);","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Deadline Task","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Deadline Task","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"[%s]%s (by %s)\", symbol, super.toString(), by);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jason-raiin":41}},{"path":"src/main/java/jerma/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" * Constructor for a Event Task","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" * @param by Date when the deadline should be complete by","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" * @throws DateTimeParseException Thrown if date is not parseable","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" public Event(String descriptor, String from, String to) {","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" super(descriptor);","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" this.symbol \u003d \"E\";","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Event Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Event Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"%s|%s|%s|%s\", symbol, super.save(), from, to);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Event Task","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Event Task","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"[%s]%s (%s to %s)\", symbol, super.toString(),","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" from, to);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jason-raiin":44}},{"path":"src/main/java/jerma/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":" protected String symbol;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":" private String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":" private Boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" * Constructor for a Task","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" * Sets task to done","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" public void setDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" * Sets task to undone","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" public void setUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" public String save() {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"%d|%s\", isDone.compareTo(false), description);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" };","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Task","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Task","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), description);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jason-raiin":54}},{"path":"src/main/java/jerma/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":" * Constructor for a Todo Task","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" symbol \u003d \"T\";","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Todo Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Todo Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"%s|%s\", symbol, super.save());","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Todo Task","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" * ","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Todo Task","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"[%s]%s\", symbol, super.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jason-raiin":33}},{"path":"src/main/java/jerma/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.utils;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.AddTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Bye;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Delete;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Find;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Help;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Mark;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Unmark;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"enum Keywords {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" LIST, BYE, MARK, UNMARK, TODO, DEADLINE, EVENT, DELETE, FIND, HELP;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" public static Keywords parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" for (Keywords command : Keywords.values()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" if (command.toString().toLowerCase().equals(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" return command;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" throw new UnsupportedOperationException();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" public static Command parse(String input, Ui ui, TaskList tasks,","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" Boolean[] running) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" String[] inputArgs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" Keywords command \u003d Keywords.parse(inputArgs[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" case LIST:","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" return new List(ui, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" case BYE:","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" return new Bye(ui, tasks, running);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" case MARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" int index \u003d Integer.parseInt(inputArgs[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" return new Mark(ui, tasks, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" case UNMARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" index \u003d Integer.parseInt(inputArgs[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" return new Unmark(ui, tasks, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" case DELETE:","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" index \u003d Integer.parseInt(inputArgs[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" return new Delete(ui, tasks, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" case TODO:","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" Task task \u003d new Todo(inputArgs[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" return new AddTask(ui, tasks, task);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" String[] split \u003d inputArgs[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" String description \u003d split[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":" String by \u003d split[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":" return new AddTask(ui, tasks, task);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":" case EVENT:","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":" String[] split1 \u003d inputArgs[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":" String[] split2 \u003d split1[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jason-raiin"},"content":" description \u003d split1[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jason-raiin"},"content":" String from \u003d split2[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jason-raiin"},"content":" String to \u003d split2[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jason-raiin"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jason-raiin"},"content":" return new AddTask(ui, tasks, task);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jason-raiin"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"jason-raiin"},"content":" return new Find(ui, tasks, inputArgs[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"jason-raiin"},"content":" case HELP:","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"jason-raiin"},"content":" return new Help(ui, tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jason-raiin"},"content":" throw new UnsupportedOperationException();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jason-raiin":78}},{"path":"src/main/java/jerma/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.utils;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" private static final Path SAVE_FOLDER \u003d Paths.get(\".\", \"data\");","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" private static final Path SAVE_PATH \u003d Paths.get(SAVE_FOLDER.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" \"save.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" public static TaskList load() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" List\u003cString\u003e save \u003d Files.readAllLines(SAVE_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" for (String taskString : save) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" String[] taskElements \u003d taskString.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" switch (taskElements[0]) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" task \u003d new Todo(taskElements[2]);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" task \u003d new Deadline(taskElements[2], taskElements[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" task \u003d new Event(taskElements[2], taskElements[3],","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" taskElements[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" throw new UnsupportedOperationException();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" if (taskElements[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" task.setDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" public static void save(TaskList tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" Files.createDirectories(SAVE_FOLDER);","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":" if (!Files.exists(SAVE_PATH)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" Files.createFile(SAVE_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":" String saveString \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":" saveString +\u003d task.save() + \"\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":" byte[] saveBytes \u003d saveString.getBytes();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"jason-raiin"},"content":" Files.write(SAVE_PATH, saveBytes);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"jason-raiin"},"content":" System.out.println(\"List saved\");","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jason-raiin":67}},{"path":"src/main/java/jerma/utils/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.utils;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" String strRep \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" strRep +\u003d String.format(\"%d. %s\", i + 1, this.get(i));","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" if (i !\u003d this.size() - 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" strRep +\u003d \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" return strRep;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jason-raiin":19}},{"path":"src/main/java/jerma/utils/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.utils;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" public String hello() {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"Hello! I\u0027m Jerma.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" public String bye() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"See ya soon!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" public String error(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"Error: \" + message;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" public String listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" System.out.println(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" public String newTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" String type \u003d task.getClass().getName().split(\"\\\\.\")[1].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" String output \u003d String.format(\"Added %s: %s\", type, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" public String markTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"Marked as done: \\n\" + task;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" public String unmarkTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"Marked as undone: \\n\" + task;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" public String deleteTask(Task task, int numberOfTasksRemaining) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" String output \u003d String.format(","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" \"Removed the task: \\n%s \\nYou have %d tasks remaining.\", task,","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" numberOfTasksRemaining);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":" public String help() {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"Command list: \\n todo [description] \\n deadline [description] /by [deadline] \\n event [description] /from [start] /to [end] \\n list \\n mark [index] \\n unmark [index] \\n delete [index] \\n find [keyword] \\n bye\";","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jason-raiin":62}},{"path":"src/main/resources/views/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"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/11\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":16}},{"path":"src/main/resources/views/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"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/11\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"jerma.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":19}},{"path":"src/test/java/jerma/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks; //same package as the class being tested","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" private final Task deadline \u003d new Deadline(\"desc\", \"2019-08-09\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" public void deadline_constructor_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[D][ ] desc (by 2019-08-09)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" public void deadline_constructor_invalidDate_exception() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" assertThrows(DateTimeParseException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" () -\u003e new Deadline(\"desc\", \"by\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" public void todo_save_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"D|0|desc|2019-08-09\", deadline.save());","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" public void todo_setDone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" deadline.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[D][X] desc (by 2019-08-09)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" public void todo_setUndone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" deadline.setUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[D][ ] desc (by 2019-08-09)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jason-raiin":41}},{"path":"src/test/java/jerma/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks; //same package as the class being tested","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" private final Task event \u003d new Event(\"desc\", \"2019-08-09\", \"2019-09-09\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" public void deadline_constructor_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[E][ ] desc (2019-08-09 to 2019-09-09)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" public void deadline_constructor_invalidDate_exception() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" assertThrows(DateTimeParseException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" () -\u003e new Event(\"desc\", \"from\", \"to\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" public void todo_save_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"E|0|desc|2019-08-09|2019-09-09\", event.save());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" public void todo_setDone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" event.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[E][X] desc (2019-08-09 to 2019-09-09)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" public void todo_setUndone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" event.setUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[E][ ] desc (2019-08-09 to 2019-09-09)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jason-raiin":44}},{"path":"src/test/java/jerma/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks; //same package as the class being tested","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" private final Task todo \u003d new Todo(\"desc\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" public void todo_constructor_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[T][ ] desc\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" public void todo_save_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"T|0|desc\", todo.save());","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" public void todo_setDone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" todo.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[T][X] desc\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" public void todo_setUndone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" todo.setUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[T][ ] desc\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jason-raiin":31}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"deadline this /by tomorrow","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"todo that","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"event those /from yesterday /to next week","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"mark 2","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"unmark 2","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jason-raiin":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":"java -classpath ..\\bin Jerma \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"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":{"jason-raiin":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":"jason-raiin"},"content":"java -classpath ../bin Jerma \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-20"},{"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":{"jason-raiin":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":"jason-raiin"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-31"},{"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":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" mainClass.set(\"jerma.Launcher\")","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" archiveBaseName \u003d \"jerma\"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":"checkstyle {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jason-raiin":24,"-":40}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"Welcome to Jerma, a chatbot for organising your to-do lists.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"### Chat-Style UI","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"Construct and edit your to-do list as if you were talking to a digital personal assistant.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"### Load and Save","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":"Save your to-do list to file on exit, and load it up when you run Jerma again.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"### `help`","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":"`help`","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":"Provides a list of commands for Jerma.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":"### `todo`","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":"`todo [description]`","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":"Creates a Todo task and adds it to your list.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":"### `deadline`","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"`deadline [description] /by [date]`","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":"Creates a Deadline task with an end date and adds it to your list.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":"### `event`","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":"`todo [description] /from [date] /to [date]`","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":"Creates an Event task with a start and end date and adds it to your list.","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":"### `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":"`list`","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":"Displays your current to-do list.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":"### `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":"`mark [index]`","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":"Marks a task as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":"### `unmark`","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":"`unmark [index]`","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":"Marks a task as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":"### `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":"`delete [index]`","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":"Removes a task from your list.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":65,"author":{"gitId":"jason-raiin"},"content":"### `find`","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":67,"author":{"gitId":"jason-raiin"},"content":"`find [keyword]`","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":69,"author":{"gitId":"jason-raiin"},"content":"Search for tasks containing the provided keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":71,"author":{"gitId":"jason-raiin"},"content":"### `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":73,"author":{"gitId":"jason-raiin"},"content":"`bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":75,"author":{"gitId":"jason-raiin"},"content":"Saves current tasklist to file and exits Jerma.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"jason-raiin":58,"-":17}},{"path":"src/main/java/jerma/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" * An example of a custom control using FXML. This control represents a dialog","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" * box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" MainWindow.class.getResource(\"/views/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" * Flips the dialog box such that the ImageView is on the left and text on","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" * the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" .observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" public static DialogBox getJermaDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":64}},{"path":"src/main/java/jerma/Jerma.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" * Jerma class, contains the chatbot","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":"public class Jerma {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" private TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" private Boolean[] running \u003d new Boolean[] { true };","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" * Loads tasklist from file","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" * @return Response string","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" public String load() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" tasks \u003d Storage.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" return \"Task list has been loaded\";","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" return ui.error(\"Save file not found\");","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" } catch (UnsupportedOperationException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" return ui.error(\"Corrupted save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" public String hello() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" return ui.hello();","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" * Parses the input and generates the bot\u0027s response.","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" * @param input The input string from the user","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" * @return The bot\u0027s response","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" Command command \u003d Parser.parse(input, ui, tasks, running);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" return command.execute();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" return ui.error(\"Invalid arguments. Try again!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" } catch (UnsupportedOperationException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" return ui.error(\"Invalid command. Try again!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" return ui.error(\"Invalid date format. Try again!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jason-raiin":56,"-":2}},{"path":"src/main/java/jerma/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":" * Launcher for the application","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":12}},{"path":"src/main/java/jerma/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" private Jerma jerma \u003d new Jerma();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" Main.class.getResource(\"/views/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" MainWindow mw \u003d fxmlLoader.\u003cMainWindow\u003egetController();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" mw.setJerma(jerma);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" mw.onStart();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":34}},{"path":"src/main/java/jerma/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" private Jerma jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" private Image sterImage \u003d new Image(","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" this.getClass().getResourceAsStream(\"/images/ster.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" private Image jermaImage \u003d new Image(","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" this.getClass().getResourceAsStream(\"/images/jerma.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" public void setJerma(Jerma jerma) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" this.jerma \u003d jerma;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" * Initialises chatbot on start","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" public void onStart() {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" DialogBox.getJermaDialog(this.jerma.hello(), jermaImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" DialogBox.getJermaDialog(this.jerma.load(), jermaImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" * Creates two dialog boxes, one echoing user input and the other containing","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" * Duke\u0027s reply and then appends them to the dialog container. Clears the","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" * user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":" String response \u003d jerma.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":" DialogBox.getUserDialog(input, sterImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":" DialogBox.getJermaDialog(response, jermaImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"jason-raiin"},"content":" if (response.contains(\"See ya soon!\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"jason-raiin"},"content":" javafx.application.Platform.exit();","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":68}},{"path":"src/main/java/jerma/commands/AddTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" * AddTask class, is a Command that adds a task to the tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"public class AddTask extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" private Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" * Creates an AddTask command","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" * @param ui Ui instance","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" * @param tasks Current tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" * @param task Task to be added","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" public AddTask(Ui ui, TaskList tasks, Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" return ui.newTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jason-raiin":30}},{"path":"src/main/java/jerma/commands/Bye.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" * Bye class, is a Command that exits the program","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"public class Bye extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" private Boolean[] running;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" * Creates a Bye command","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" * @param ui Ui instance","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" * @param tasks Current tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" * @param running Current bot state","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" public Bye(Ui ui, TaskList tasks, Boolean[] running) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" this.running \u003d running;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" Storage.save(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" ui.error(\"Filepath issue\");","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" ui.error(\"Failed to save\");","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" running[0] \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" return ui.bye();","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jason-raiin":39}},{"path":"src/main/java/jerma/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" * Command abstract class","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" protected Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" protected TaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" protected Command(Ui ui, TaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" * Executes the command","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" * @return Bot response","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" public abstract String execute();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"jason-raiin":24}},{"path":"src/main/java/jerma/commands/Delete.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" * Delete class, is a Command that deletes a task","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"public class Delete extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" private Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" * Creates a Delete command","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" * @param ui Ui instance","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" * @param tasks Current tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" * @param index Index of the task to be deleted","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" public Delete(Ui ui, TaskList tasks, int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" assert index \u003e 0 || index \u003c\u003d tasks.size() : \"Index out of range\";","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" tasks.remove(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" return ui.deleteTask(task, tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jason-raiin":31}},{"path":"src/main/java/jerma/commands/Find.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" * Find class, is a Command that finds tasks from a search keyword","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"public class Find extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" private String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" * Create a Find command","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" * @param ui Ui instance","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" * @param tasks Current tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" * @param keyword Search keyword","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" public Find(Ui ui, TaskList tasks, String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" TaskList results \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" if (task.toString().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" results.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" return ui.listTasks(results);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"jason-raiin":36}},{"path":"src/main/java/jerma/commands/Help.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" * Help class, is a Command that returns a help message","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"public class Help extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" public Help(Ui ui, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" return ui.help();","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jason-raiin":17}},{"path":"src/main/java/jerma/commands/List.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" * List class, is a Command that prints the current tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"public class List extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" public List(Ui ui, TaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" return ui.listTasks(this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"jason-raiin":17}},{"path":"src/main/java/jerma/commands/Mark.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" * Mark class, is a Command that marks a task","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"public class Mark extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" private Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" * Creates a Mark command","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" * @param ui Ui instance","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" * @param tasks Current Tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" * @param index Index of the task to be marked","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" public Mark(Ui ui, TaskList tasks, int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" assert index \u003e 0 || index \u003c\u003d tasks.size() : \"Index out of range\";","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" task.setDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" return ui.markTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"jason-raiin":31}},{"path":"src/main/java/jerma/commands/Unmark.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.utils.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" * Unmark class, is a Command that unmarks a task","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"public class Unmark extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" private Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" * Creates an Unmark command","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" * @param ui Ui instance","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" * @param tasks Current tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" * @param index Index of the task to be unmarked","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" public Unmark(Ui ui, TaskList tasks, int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" super(ui, tasks);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" assert index \u003e 0 || index \u003c\u003d tasks.size() : \"Index out of range\";","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" public String execute() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" task.setUndone();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" return ui.unmarkTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"jason-raiin":31}},{"path":"src/main/java/jerma/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" * Deadline class. Is a Task with deadline date.","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" * Constructor for a Deadline Task","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" * @param by Date when the deadline should be complete by","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" * @throws DateTimeParseException Thrown if date is not parseable","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" this.symbol \u003d \"D\";","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Deadline Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Deadline Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"%s|%s|%s\", symbol, super.save(), by);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Deadline Task","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Deadline Task","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"[%s]%s (by %s)\", symbol, super.toString(), by);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jason-raiin":44}},{"path":"src/main/java/jerma/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" * Event class. Is a Task with start and end date.","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" * Constructor for a Event Task","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" * @param by Date when the deadline should be complete by","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" * @throws DateTimeParseException Thrown if date is not parseable","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" public Event(String descriptor, String from, String to) {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" super(descriptor);","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" this.symbol \u003d \"E\";","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Event Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Event Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"%s|%s|%s|%s\", symbol, super.save(), from, to);","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Event Task","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Event Task","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"[%s]%s (%s to %s)\", symbol, super.toString(),","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" from, to);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jason-raiin":47}},{"path":"src/main/java/jerma/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":" * Abstract class for Tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" protected String symbol;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" private String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" private Boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" * Constructor for a Task","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" * Sets task to done","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" public void setDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" * Sets task to undone","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" public void setUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" public String save() {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"%d|%s\", isDone.compareTo(false), description);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" };","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Task","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Task","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), description);","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jason-raiin":57}},{"path":"src/main/java/jerma/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":" * Todo class. Is a Task with no additional fields.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" * Constructor for a Todo Task","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" symbol \u003d \"T\";","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Todo Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Todo Task for saving purposes","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" public String save() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"%s|%s\", symbol, super.save());","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" * Returns string representation of Todo Task","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" * @return String representation of Todo Task","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" return String.format(\"[%s]%s\", symbol, super.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jason-raiin":36}},{"path":"src/main/java/jerma/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.utils;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.AddTask;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Bye;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Delete;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Find;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Help;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Mark;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"import jerma.commands.Unmark;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"enum Keywords {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" LIST, BYE, MARK, UNMARK, TODO, DEADLINE, EVENT, DELETE, FIND, HELP;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" public static Keywords parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" for (Keywords command : Keywords.values()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" if (command.toString().toLowerCase().equals(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" return command;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" throw new UnsupportedOperationException();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" * Parser class, containing static method to parse user input","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" * Parses user input into a Command","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" * @param input User input string","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" * @param ui Current Ui instance","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" * @param tasks Current tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" * @param running State of the chatbot","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" * @return Command to be executed","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" public static Command parse(String input, Ui ui, TaskList tasks,","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" Boolean[] running) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" String[] inputArgs \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" Keywords command \u003d Keywords.parse(inputArgs[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" case LIST:","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" return new List(ui, tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" case BYE:","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" return new Bye(ui, tasks, running);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":" case MARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" int index \u003d Integer.parseInt(inputArgs[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" return new Mark(ui, tasks, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":" case UNMARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":" index \u003d Integer.parseInt(inputArgs[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" return new Unmark(ui, tasks, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":" case DELETE:","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":" index \u003d Integer.parseInt(inputArgs[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":" return new Delete(ui, tasks, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":" case TODO:","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jason-raiin"},"content":" Task task \u003d new Todo(inputArgs[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jason-raiin"},"content":" return new AddTask(ui, tasks, task);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jason-raiin"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jason-raiin"},"content":" String[] split \u003d inputArgs[1].split(\" /by \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jason-raiin"},"content":" String description \u003d split[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jason-raiin"},"content":" String by \u003d split[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jason-raiin"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jason-raiin"},"content":" return new AddTask(ui, tasks, task);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jason-raiin"},"content":" case EVENT:","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jason-raiin"},"content":" String[] split1 \u003d inputArgs[1].split(\" /from \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jason-raiin"},"content":" String[] split2 \u003d split1[1].split(\" /to \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"jason-raiin"},"content":" description \u003d split1[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"jason-raiin"},"content":" String from \u003d split2[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"jason-raiin"},"content":" String to \u003d split2[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jason-raiin"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jason-raiin"},"content":" return new AddTask(ui, tasks, task);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jason-raiin"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"jason-raiin"},"content":" return new Find(ui, tasks, inputArgs[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"jason-raiin"},"content":" case HELP:","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"jason-raiin"},"content":" return new Help(ui, tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"jason-raiin"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"jason-raiin"},"content":" throw new UnsupportedOperationException();","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jason-raiin":91}},{"path":"src/main/java/jerma/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.utils;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" * Storage class, contains static methods for saving to and loading from file.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" private static final Path SAVE_FOLDER \u003d Paths.get(\".\", \"data\");","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" private static final Path SAVE_PATH \u003d Paths.get(SAVE_FOLDER.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" \"save.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" * Loads TaskList from file","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" * @return TaskList as read from file","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" * @throws IOException","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" public static TaskList load() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" List\u003cString\u003e save \u003d Files.readAllLines(SAVE_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" for (String taskString : save) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" String[] taskElements \u003d taskString.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" switch (taskElements[0]) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" task \u003d new Todo(taskElements[2]);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" task \u003d new Deadline(taskElements[2], taskElements[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" task \u003d new Event(taskElements[2], taskElements[3],","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" taskElements[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" throw new UnsupportedOperationException();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" if (taskElements[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" task.setDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":" * Saves current tasklist to file","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"jason-raiin"},"content":" * @param tasks Current tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"jason-raiin"},"content":" * @throws IOException","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"jason-raiin"},"content":" public static void save(TaskList tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jason-raiin"},"content":" Files.createDirectories(SAVE_FOLDER);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"jason-raiin"},"content":" if (!Files.exists(SAVE_PATH)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"jason-raiin"},"content":" Files.createFile(SAVE_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"jason-raiin"},"content":" String saveString \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"jason-raiin"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jason-raiin"},"content":" saveString +\u003d task.save() + \"\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"jason-raiin"},"content":" byte[] saveBytes \u003d saveString.getBytes();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"jason-raiin"},"content":" Files.write(SAVE_PATH, saveBytes);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"jason-raiin"},"content":" System.out.println(\"List saved\");","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jason-raiin":82}},{"path":"src/main/java/jerma/utils/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.utils;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" * TaskList class, representing a List of Tasks. Inherits from Arraylist.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" String strRep \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" strRep +\u003d String.format(\"%d. %s\", i + 1, this.get(i));","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" if (i !\u003d this.size() - 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" strRep +\u003d \"\\n\";","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" return strRep;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jason-raiin":22}},{"path":"src/main/java/jerma/utils/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.utils;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import jerma.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":" * Ui class, handles the bot\u0027s response generation.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" * Prints and returns hello message","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" * @return Hello message","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" public String hello() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"Hello! I\u0027m Jerma.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" * Prints and returns bye message","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" * @return Bye message","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" public String bye() {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"See ya soon!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" * Prints and returns error message","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" * @param message Error message","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" * @return Error message","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" public String error(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"Error: \" + message;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":" * Prints and returns tasklist message","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"jason-raiin"},"content":" * @param tasks Tasklist","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"jason-raiin"},"content":" * @return Tasklist message","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"jason-raiin"},"content":" public String listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jason-raiin"},"content":" System.out.println(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"jason-raiin"},"content":" return tasks.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"jason-raiin"},"content":" * Prints and returns task message","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"jason-raiin"},"content":" * @param task Task","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"jason-raiin"},"content":" * @return Task message","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"jason-raiin"},"content":" public String newTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jason-raiin"},"content":" String type \u003d task.getClass().getName().split(\"\\\\.\")[1].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"jason-raiin"},"content":" String output \u003d String.format(\"Added %s: %s\", type, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"jason-raiin"},"content":" * Prints and returns mark task message","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"jason-raiin"},"content":" * @param task Marked task","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"jason-raiin"},"content":" * @return Mark task message","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"jason-raiin"},"content":" public String markTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"Marked as done: \\n\" + task;","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"jason-raiin"},"content":" * Prints and returns unmark task message","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"jason-raiin"},"content":" * @param task Unmarked task","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"jason-raiin"},"content":" * @return Unmark task message","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"jason-raiin"},"content":" public String unmarkTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"Marked as undone: \\n\" + task;","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"jason-raiin"},"content":" * Prints and returns delete task message","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"jason-raiin"},"content":" * @param task Deleted task","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"jason-raiin"},"content":" * @param numberOfTasksRemaining Number of tasks in the list remaining","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"jason-raiin"},"content":" * @return Delete task message","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"jason-raiin"},"content":" public String deleteTask(Task task, int numberOfTasksRemaining) {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"jason-raiin"},"content":" String output \u003d String.format(","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"jason-raiin"},"content":" \"Removed the task: \\n%s \\nYou have %d tasks remaining.\", task,","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"jason-raiin"},"content":" numberOfTasksRemaining);","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"jason-raiin"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"jason-raiin"},"content":" * Prints and returns help message","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"jason-raiin"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"jason-raiin"},"content":" * @return Help message","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"jason-raiin"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"jason-raiin"},"content":" public String help() {","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"jason-raiin"},"content":" String output \u003d \"Command list: \\n\" + \"todo [description] \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"jason-raiin"},"content":" + \"deadline [description] /by [deadline] \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"jason-raiin"},"content":" + \"event [description] /from [start] /to [end] \\n\" + \"list \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"jason-raiin"},"content":" + \"mark [index] \\n\" + \"unmark [index] \\n\" + \"delete [index] \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"jason-raiin"},"content":" + \"find [keyword] \\n\" + \"bye\";","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"jason-raiin"},"content":" System.out.println(output);","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"jason-raiin"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jason-raiin":121}},{"path":"src/main/resources/views/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"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/11\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":16}},{"path":"src/main/resources/views/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"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/11\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"jerma.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jason-raiin":19}},{"path":"src/test/java/jerma/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks; //same package as the class being tested","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" private final Task deadline \u003d new Deadline(\"desc\", \"2019-08-09\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" public void deadline_constructor_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[D][ ] desc (by 2019-08-09)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" public void deadline_constructor_invalidDateException() {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" new Deadline(\"desc\", \"by\");","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" assertEquals(DateTimeParseException.class, e.getClass());","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" public void todo_save_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"D|0|desc|2019-08-09\", deadline.save());","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" public void todo_setDone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" deadline.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[D][X] desc (by 2019-08-09)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":" public void todo_setUndone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" deadline.setUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[D][ ] desc (by 2019-08-09)\", deadline.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jason-raiin":42}},{"path":"src/test/java/jerma/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks; //same package as the class being tested","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" private final Task event \u003d new Event(\"desc\", \"2019-08-09\", \"2019-09-09\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" public void deadline_constructor_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[E][ ] desc (2019-08-09 to 2019-09-09)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":" public void deadline_constructor_invalidDateException() {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" new Event(\"desc\", \"from\", \"to\");","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" assertEquals(DateTimeParseException.class, e.getClass());","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" public void todo_save_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"E|0|desc|2019-08-09|2019-09-09\", event.save());","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jason-raiin"},"content":" public void todo_setDone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jason-raiin"},"content":" event.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[E][X] desc (2019-08-09 to 2019-09-09)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jason-raiin"},"content":" event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jason-raiin"},"content":" public void todo_setUndone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jason-raiin"},"content":" event.setUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[E][ ] desc (2019-08-09 to 2019-09-09)\",","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jason-raiin"},"content":" event.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jason-raiin":45}},{"path":"src/test/java/jerma/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"package jerma.tasks; //same package as the class being tested","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"jason-raiin"},"content":" private final Task todo \u003d new Todo(\"desc\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"jason-raiin"},"content":" public void todo_constructor_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[T][ ] desc\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"jason-raiin"},"content":" public void todo_save_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"T|0|desc\", todo.save());","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jason-raiin"},"content":" public void todo_setDone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jason-raiin"},"content":" todo.setDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[T][X] desc\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jason-raiin"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jason-raiin"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jason-raiin"},"content":" public void todo_setUndone_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jason-raiin"},"content":" todo.setUndone();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jason-raiin"},"content":" assertEquals(\"[T][ ] desc\", todo.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jason-raiin"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jason-raiin"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"jason-raiin":31}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jason-raiin"},"content":"deadline this /by tomorrow","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"jason-raiin"},"content":"todo that","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"jason-raiin"},"content":"event those /from yesterday /to next week","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"jason-raiin"},"content":"mark 2","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"jason-raiin"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"jason-raiin"},"content":"unmark 2","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"jason-raiin"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"jason-raiin":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"jason-raiin"},"content":"javac -cp ..\\src\\main\\java\\jerma -Xlint:none -d ..\\bin ..\\src\\main\\java\\jerma\\*.java","lastModifiedDate":"2023-09-16"},{"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":"jason-raiin"},"content":"java -classpath ..\\bin Jerma \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"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":{"jason-raiin":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":"jason-raiin"},"content":"if ! javac -cp ../src/main/java/jerma -Xlint:none -d ../bin ../src/main/java/jerma/*.java","lastModifiedDate":"2023-09-16"},{"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":"jason-raiin"},"content":"java -classpath ../bin Jerma \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-20"},{"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":{"jason-raiin":2,"-":36}}] diff --git a/jason-raiin_ip_master/commits.json b/jason-raiin_ip_master/commits.json index 2e22c70f..d5cb0cbc 100644 --- a/jason-raiin_ip_master/commits.json +++ b/jason-raiin_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jason-raiin":[{"date":"2023-08-20","commitResults":[{"hash":"3ffba049068a5b9fe52648fd943e54f3a4cf3b49","isMergeCommit":false,"messageTitle":"Rename chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"c1cb1428e9660476b16c6f5116643b286945fbac","isMergeCommit":false,"messageTitle":"Add greet and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"8221ba280b7413f44ee79055aef4976f5cee3314","isMergeCommit":false,"messageTitle":"Initialise scanner","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"020d045107deef8603fd1dde7c54fc930ada30d1","isMergeCommit":false,"messageTitle":"Implement echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"fa41eeec0c8aa5daca01efbb65a50b76ab56c9d4","isMergeCommit":false,"messageTitle":"Add Command enum and parse method","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"5a09848a4ce72863635ea01b12f244d5770b7113","isMergeCommit":false,"messageTitle":"Implement switching for different commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":5}}},{"hash":"737ba559524c07abd87a75c5a430e60790bfaa50","isMergeCommit":false,"messageTitle":"Initialise list, implement add to list, implement list command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"b74c834c6f7b20862955823d7306ba261b89d495","isMergeCommit":false,"messageTitle":"Add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"98917d77454bbadf1174646b82c727866a5bbd19","isMergeCommit":false,"messageTitle":"Standardise formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":31}}},{"hash":"b8bc2e628da58868c938cf359ba79a7d39285b34","isMergeCommit":false,"messageTitle":"Implement Task class in chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"3a27fe6beeeb23c14ffe655516939a3e19851986","isMergeCommit":false,"messageTitle":"Add input processing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"16acbef711de54f37c59b54a1cdff97127153e95","isMergeCommit":false,"messageTitle":"Implement mark and unmark commands","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"829d9c89d52c7c40771e361fe04b7b0e259d73d4","isMergeCommit":false,"messageTitle":"Add todo, deadline, and event commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":4}}},{"hash":"c62403b36b8dc3856fad011c1de5cea4b42e10ab","isMergeCommit":false,"messageTitle":"Add Event, Task, and Todo classes, made Task abstract","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":3}}},{"hash":"ee039512ce7a3756eb5093bffca9f2d287be1cbc","isMergeCommit":false,"messageTitle":"Restore default Echo functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"c30bb1ffc0dfc9d53395c90af7ba69c2f80b8079","isMergeCommit":false,"messageTitle":"Override toString method for Task subclasses","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"e6fdf7cb7b03e2a0da79544b9da6dc87a69e591d","isMergeCommit":false,"messageTitle":"Implement Deadline and Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}},{"hash":"f82d407be9ee9f42cff697afbc5b88d11c46e426","isMergeCommit":false,"messageTitle":"Fix minor UI bugs, implement basic testing for Jerma","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":2,"deletions":2},"sh":{"insertions":1,"deletions":1}}},{"hash":"e6e55eacbd1e3519db4a12d74f917afeb5302fab","isMergeCommit":false,"messageTitle":"Add exception throw and catch for invalid command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":11}}},{"hash":"646e5b059471ae0af894da480b966c9762c759ed","isMergeCommit":false,"messageTitle":"Streamline exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":58}}},{"hash":"d74c1deaba15291e0322153bf02222ed58dc85e8","isMergeCommit":false,"messageTitle":"Implement Delete command","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}}]},{"date":"2023-08-26","commitResults":[{"hash":"722fbcfd8cbfc133376ee3aa7c384a73e3330629","isMergeCommit":false,"messageTitle":"Add save method to Task to generate save string","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":4}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ac674e119f386ddf949b47249c7da1dcc3bd1a6d","isMergeCommit":false,"messageTitle":"Add SaveHandler class and implement save method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":2}}},{"hash":"93526f07dbac3a262ce5d3302c6590f8d085db99","isMergeCommit":false,"messageTitle":"Implement load method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":4}}},{"hash":"0bc47c882499c761949c3cc1d243af04065990ed","isMergeCommit":false,"messageTitle":"Add logging for loading and saving","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"4c00b2ab4410407938aaf7cae49c018cb40548e2","isMergeCommit":false,"messageTitle":"Handle filepaths independent of OS","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":14}}},{"hash":"0590c4bb7a37380fad54c80dce4404162a442b2e","isMergeCommit":false,"messageTitle":"Handle directory creation and IOExceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":3}}},{"hash":"20ca51163ebe433f5be41c9f1052e6b32ea9ad84","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6d96b620674b44708c68df0612a08ca22b64a47c","isMergeCommit":false,"messageTitle":"Add LocalDate parsing and exception handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}},{"hash":"7f9ff1a260dc7f34503607c15f81b9955d16cef2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"6ce0a7b8fe5facf3b2c58a640f28accdb738c896","isMergeCommit":false,"messageTitle":"Move all tasks into tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"c2be60b1c55d48bde1d06bcaf155540053d76639","isMergeCommit":false,"messageTitle":"Rename SaveHandler to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"a3be85e6f3b52aa27e4cb713a01df1de78051a98","isMergeCommit":false,"messageTitle":"Refactor out TaskList and UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":21}}}]},{"date":"2023-08-28","commitResults":[{"hash":"adb4d5a23c5bb635dcba312abce16b097f9a00c6","isMergeCommit":false,"messageTitle":"Move utils classes into utils package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"c459b267c8b622a12fd8741199ae29fa9bdbe08b","isMergeCommit":false,"messageTitle":"Add new Command abstract class and implement List class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":4}}},{"hash":"affb831de28ba50a02f1732663f6d24e1396a47c","isMergeCommit":false,"messageTitle":"Refactor Mark and Unmark commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":18}}}]},{"date":"2023-08-30","commitResults":[{"hash":"3eaea9c7867b9f80a6b758328a02e7f0ba3b497e","isMergeCommit":false,"messageTitle":"Add Delete command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}},{"hash":"dd0438c702f17029e60850daf51d2ae1a4a0c420","isMergeCommit":false,"messageTitle":"Add Bye command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":5}}},{"hash":"e459bf97c539fa242f402f620510681faae29a1f","isMergeCommit":false,"messageTitle":"Improve error handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":49}}},{"hash":"71e15fec69f15ffc9f6e681a266d65a56205be85","isMergeCommit":false,"messageTitle":"Add AddTask command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":11}}},{"hash":"35528aa9aa8c762a1c993dd0190339866f7391e9","isMergeCommit":false,"messageTitle":"Refactor input parsing into Parser utils class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":71}}},{"hash":"624cdcfbfa9dafbb004b2d7d143732a4dcd1f5c8","isMergeCommit":false,"messageTitle":"Move error handling to main file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":14}}},{"hash":"cfb7d8de55731e6f5e0e7fff88826100dec5db28","isMergeCommit":false,"messageTitle":"Move scanner to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":13}}},{"hash":"36ff4366f488c22ef0c5badf60c5d85633f30af6","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"632e41c599064a7a0268a8e4da11a53feffbffaf","isMergeCommit":false,"messageTitle":"Package all files into Jerma package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":57}}},{"hash":"0c6b23dbf0b0a98af2b0aca4327aea798ba3f625","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"50a3ce7d71b62d11f66a823d41041aebe802bb73","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e9f94bc6e6297f24316a7889b5bb0de96c2a0c3e","isMergeCommit":false,"messageTitle":"Add checkstyles","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":318,"deletions":318}}},{"hash":"7908288f583764be14990ba5626a92681f11172f","isMergeCommit":false,"messageTitle":"Configure shadowJar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"48ccb36aaf6aabc1991912a34a69bbc0356241ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"492570b4101e3343be49ab69ca5a427c993b78c6","isMergeCommit":false,"messageTitle":"Add unit tests for tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":0}}},{"hash":"b2d0a2170cc9c8d1d0f767ba7e1b84995f5de8f2","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"d01f30d814d3368052455088a25f6e747bbf92e5","isMergeCommit":false,"messageTitle":"Add javadocs for Tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d0c066b15c58c924206e91df7578249ff9ddd7a3","isMergeCommit":false,"messageTitle":"Add Find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":2}}},{"hash":"5b83b2f3f9d5cbe64007f062aacce310f6ed5a5f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","tags":["A-Javadoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"efbfddd91797a34b7f545eeb91d81ef490e7cc07","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9","A-Checkstyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"313ce5cd555a6e1f0008c3f13dc90a2d879b824a","isMergeCommit":false,"messageTitle":"Add javafx dependencies","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"b73428c4bd9a726e3463352e6849419024942dfe","isMergeCommit":false,"messageTitle":"Implement basic echo functionality for GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":1}}},{"hash":"69b956f91192313b71c829746af78188ef4d618a","isMergeCommit":false,"messageTitle":"Integrate with chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":65}}},{"hash":"e6574bf31ef2cb85135618fed6baa390fc34bbaa","isMergeCommit":false,"messageTitle":"Integrate fxml","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":139,"deletions":130}}},{"hash":"bf7aee9e92701f2380f40ac98448313f3aa01cf2","isMergeCommit":false,"messageTitle":"Add on start events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"3e295bd0a7e7131b3fd3fb5ac57cbdb83651044b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10","A-Varargs"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"97c602174bef9339943ba672bfa2aa02424fbc47","isMergeCommit":false,"messageTitle":"Add help method to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"3fcc8406bae9919eb53c5d16b541b8f238f67a45","isMergeCommit":false,"messageTitle":"Add Help command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"aa431393b031b7a07ac1b4431ae2b3c83a8712bf","isMergeCommit":false,"messageTitle":"Add Help command to parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"83341e7253f9412da1a1d9c11897f9105825f46f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Help\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"df2a7a74cc034093ba55a6dcdf3974f805ff56ee","isMergeCommit":false,"messageTitle":"Add assertions for index argument","messageBody":"MARK UNMARK and DELETE commands accept an index argument for the list\nitem to select. Assertion added to check that the index provided is\nwithin the range of indexes in the list.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"4db1d558aa5e0853507845860190712c9ba322cb","isMergeCommit":false,"messageTitle":"Remove redundant this references","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":42}}},{"hash":"f904614e3056142d126ee0003b727bd6f58bb426","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jason-raiin/branch-A-CodeQuality","messageBody":"Remove redundant this references","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"b82a8496ad13c30ea6c942da97f371887025d2de","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/jason-raiin/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f21201721a3076bd9317f6bf890e546a09fa4631","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0dc824cdfc94026ba9abb29b63180dee4fe2f5c8","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jason-raiin/branch-A-Assertions","messageBody":"Add assertions for list index","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"c2fc07b97735b9444157cf624a5baf0a806e619c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/jason-raiin/ip","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"jason-raiin":{"java":909,"md":0,"fxml":35,"sh":1,"bat":1,"gradle":24,"txt":7}},"authorContributionVariance":{"jason-raiin":53576.87},"authorDisplayNameMap":{"jason-raiin":"CS2103T-F12-4 HUAN.. CAN"}} +{"authorDailyContributionsMap":{"jason-raiin":[{"date":"2023-08-20","commitResults":[{"hash":"3ffba049068a5b9fe52648fd943e54f3a4cf3b49","isMergeCommit":false,"messageTitle":"Rename chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"c1cb1428e9660476b16c6f5116643b286945fbac","isMergeCommit":false,"messageTitle":"Add greet and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"8221ba280b7413f44ee79055aef4976f5cee3314","isMergeCommit":false,"messageTitle":"Initialise scanner","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"020d045107deef8603fd1dde7c54fc930ada30d1","isMergeCommit":false,"messageTitle":"Implement echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"fa41eeec0c8aa5daca01efbb65a50b76ab56c9d4","isMergeCommit":false,"messageTitle":"Add Command enum and parse method","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"5a09848a4ce72863635ea01b12f244d5770b7113","isMergeCommit":false,"messageTitle":"Implement switching for different commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":5}}},{"hash":"737ba559524c07abd87a75c5a430e60790bfaa50","isMergeCommit":false,"messageTitle":"Initialise list, implement add to list, implement list command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"b74c834c6f7b20862955823d7306ba261b89d495","isMergeCommit":false,"messageTitle":"Add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"98917d77454bbadf1174646b82c727866a5bbd19","isMergeCommit":false,"messageTitle":"Standardise formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":31}}},{"hash":"b8bc2e628da58868c938cf359ba79a7d39285b34","isMergeCommit":false,"messageTitle":"Implement Task class in chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"3a27fe6beeeb23c14ffe655516939a3e19851986","isMergeCommit":false,"messageTitle":"Add input processing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"16acbef711de54f37c59b54a1cdff97127153e95","isMergeCommit":false,"messageTitle":"Implement mark and unmark commands","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"829d9c89d52c7c40771e361fe04b7b0e259d73d4","isMergeCommit":false,"messageTitle":"Add todo, deadline, and event commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":4}}},{"hash":"c62403b36b8dc3856fad011c1de5cea4b42e10ab","isMergeCommit":false,"messageTitle":"Add Event, Task, and Todo classes, made Task abstract","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":3}}},{"hash":"ee039512ce7a3756eb5093bffca9f2d287be1cbc","isMergeCommit":false,"messageTitle":"Restore default Echo functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"c30bb1ffc0dfc9d53395c90af7ba69c2f80b8079","isMergeCommit":false,"messageTitle":"Override toString method for Task subclasses","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"e6fdf7cb7b03e2a0da79544b9da6dc87a69e591d","isMergeCommit":false,"messageTitle":"Implement Deadline and Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}},{"hash":"f82d407be9ee9f42cff697afbc5b88d11c46e426","isMergeCommit":false,"messageTitle":"Fix minor UI bugs, implement basic testing for Jerma","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":2,"deletions":2},"sh":{"insertions":1,"deletions":1}}},{"hash":"e6e55eacbd1e3519db4a12d74f917afeb5302fab","isMergeCommit":false,"messageTitle":"Add exception throw and catch for invalid command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":11}}},{"hash":"646e5b059471ae0af894da480b966c9762c759ed","isMergeCommit":false,"messageTitle":"Streamline exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":58}}},{"hash":"d74c1deaba15291e0322153bf02222ed58dc85e8","isMergeCommit":false,"messageTitle":"Implement Delete command","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}}]},{"date":"2023-08-26","commitResults":[{"hash":"722fbcfd8cbfc133376ee3aa7c384a73e3330629","isMergeCommit":false,"messageTitle":"Add save method to Task to generate save string","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":4}}}]},{"date":"2023-08-27","commitResults":[{"hash":"ac674e119f386ddf949b47249c7da1dcc3bd1a6d","isMergeCommit":false,"messageTitle":"Add SaveHandler class and implement save method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":2}}},{"hash":"93526f07dbac3a262ce5d3302c6590f8d085db99","isMergeCommit":false,"messageTitle":"Implement load method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":4}}},{"hash":"0bc47c882499c761949c3cc1d243af04065990ed","isMergeCommit":false,"messageTitle":"Add logging for loading and saving","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"4c00b2ab4410407938aaf7cae49c018cb40548e2","isMergeCommit":false,"messageTitle":"Handle filepaths independent of OS","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":14}}},{"hash":"0590c4bb7a37380fad54c80dce4404162a442b2e","isMergeCommit":false,"messageTitle":"Handle directory creation and IOExceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":3}}},{"hash":"20ca51163ebe433f5be41c9f1052e6b32ea9ad84","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6d96b620674b44708c68df0612a08ca22b64a47c","isMergeCommit":false,"messageTitle":"Add LocalDate parsing and exception handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}},{"hash":"7f9ff1a260dc7f34503607c15f81b9955d16cef2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"6ce0a7b8fe5facf3b2c58a640f28accdb738c896","isMergeCommit":false,"messageTitle":"Move all tasks into tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"c2be60b1c55d48bde1d06bcaf155540053d76639","isMergeCommit":false,"messageTitle":"Rename SaveHandler to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"a3be85e6f3b52aa27e4cb713a01df1de78051a98","isMergeCommit":false,"messageTitle":"Refactor out TaskList and UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":21}}}]},{"date":"2023-08-28","commitResults":[{"hash":"adb4d5a23c5bb635dcba312abce16b097f9a00c6","isMergeCommit":false,"messageTitle":"Move utils classes into utils package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"c459b267c8b622a12fd8741199ae29fa9bdbe08b","isMergeCommit":false,"messageTitle":"Add new Command abstract class and implement List class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":4}}},{"hash":"affb831de28ba50a02f1732663f6d24e1396a47c","isMergeCommit":false,"messageTitle":"Refactor Mark and Unmark commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":18}}}]},{"date":"2023-08-30","commitResults":[{"hash":"3eaea9c7867b9f80a6b758328a02e7f0ba3b497e","isMergeCommit":false,"messageTitle":"Add Delete command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}},{"hash":"dd0438c702f17029e60850daf51d2ae1a4a0c420","isMergeCommit":false,"messageTitle":"Add Bye command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":5}}},{"hash":"e459bf97c539fa242f402f620510681faae29a1f","isMergeCommit":false,"messageTitle":"Improve error handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":49}}},{"hash":"71e15fec69f15ffc9f6e681a266d65a56205be85","isMergeCommit":false,"messageTitle":"Add AddTask command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":11}}},{"hash":"35528aa9aa8c762a1c993dd0190339866f7391e9","isMergeCommit":false,"messageTitle":"Refactor input parsing into Parser utils class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":71}}},{"hash":"624cdcfbfa9dafbb004b2d7d143732a4dcd1f5c8","isMergeCommit":false,"messageTitle":"Move error handling to main file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":14}}},{"hash":"cfb7d8de55731e6f5e0e7fff88826100dec5db28","isMergeCommit":false,"messageTitle":"Move scanner to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":13}}},{"hash":"36ff4366f488c22ef0c5badf60c5d85633f30af6","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"632e41c599064a7a0268a8e4da11a53feffbffaf","isMergeCommit":false,"messageTitle":"Package all files into Jerma package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":57}}},{"hash":"0c6b23dbf0b0a98af2b0aca4327aea798ba3f625","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"50a3ce7d71b62d11f66a823d41041aebe802bb73","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e9f94bc6e6297f24316a7889b5bb0de96c2a0c3e","isMergeCommit":false,"messageTitle":"Add checkstyles","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":318,"deletions":318}}},{"hash":"7908288f583764be14990ba5626a92681f11172f","isMergeCommit":false,"messageTitle":"Configure shadowJar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"48ccb36aaf6aabc1991912a34a69bbc0356241ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"492570b4101e3343be49ab69ca5a427c993b78c6","isMergeCommit":false,"messageTitle":"Add unit tests for tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":0}}},{"hash":"b2d0a2170cc9c8d1d0f767ba7e1b84995f5de8f2","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"d01f30d814d3368052455088a25f6e747bbf92e5","isMergeCommit":false,"messageTitle":"Add javadocs for Tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d0c066b15c58c924206e91df7578249ff9ddd7a3","isMergeCommit":false,"messageTitle":"Add Find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":2}}},{"hash":"5b83b2f3f9d5cbe64007f062aacce310f6ed5a5f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","tags":["A-Javadoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"efbfddd91797a34b7f545eeb91d81ef490e7cc07","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9","A-Checkstyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"313ce5cd555a6e1f0008c3f13dc90a2d879b824a","isMergeCommit":false,"messageTitle":"Add javafx dependencies","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"b73428c4bd9a726e3463352e6849419024942dfe","isMergeCommit":false,"messageTitle":"Implement basic echo functionality for GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":1}}},{"hash":"69b956f91192313b71c829746af78188ef4d618a","isMergeCommit":false,"messageTitle":"Integrate with chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":65}}},{"hash":"e6574bf31ef2cb85135618fed6baa390fc34bbaa","isMergeCommit":false,"messageTitle":"Integrate fxml","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":139,"deletions":130}}},{"hash":"bf7aee9e92701f2380f40ac98448313f3aa01cf2","isMergeCommit":false,"messageTitle":"Add on start events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"3e295bd0a7e7131b3fd3fb5ac57cbdb83651044b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10","A-Varargs"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"97c602174bef9339943ba672bfa2aa02424fbc47","isMergeCommit":false,"messageTitle":"Add help method to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"3fcc8406bae9919eb53c5d16b541b8f238f67a45","isMergeCommit":false,"messageTitle":"Add Help command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"aa431393b031b7a07ac1b4431ae2b3c83a8712bf","isMergeCommit":false,"messageTitle":"Add Help command to parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"83341e7253f9412da1a1d9c11897f9105825f46f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Help\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"df2a7a74cc034093ba55a6dcdf3974f805ff56ee","isMergeCommit":false,"messageTitle":"Add assertions for index argument","messageBody":"MARK UNMARK and DELETE commands accept an index argument for the list\nitem to select. Assertion added to check that the index provided is\nwithin the range of indexes in the list.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"4db1d558aa5e0853507845860190712c9ba322cb","isMergeCommit":false,"messageTitle":"Remove redundant this references","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":42}}},{"hash":"f904614e3056142d126ee0003b727bd6f58bb426","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jason-raiin/branch-A-CodeQuality","messageBody":"Remove redundant this references","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"b82a8496ad13c30ea6c942da97f371887025d2de","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/jason-raiin/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f21201721a3076bd9317f6bf890e546a09fa4631","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0dc824cdfc94026ba9abb29b63180dee4fe2f5c8","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jason-raiin/branch-A-Assertions","messageBody":"Add assertions for list index","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"c2fc07b97735b9444157cf624a5baf0a806e619c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/jason-raiin/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"5e95b5b9b84d5dfe0a533dee3125b479c1c38f89","isMergeCommit":false,"messageTitle":"Implement quitting the programme on bye command","messageBody":"","tags":["A-Release","A-BetterGui"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":7,"deletions":8}}},{"hash":"eea72df2fe862e23b19993b3a46fed2c61102b57","isMergeCommit":false,"messageTitle":"Fix all checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":16}}},{"hash":"53a2b351e02b7d780d51cb7bf21e260544ace329","isMergeCommit":false,"messageTitle":"Fix checkstyle for tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":19}}},{"hash":"848465f7d5f854005291964846a178f708569ce3","isMergeCommit":false,"messageTitle":"Remove text ui tests","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"0ae0ae5d1dc0b4fba1f887c1ab1268dc82affa88","isMergeCommit":false,"messageTitle":"Fill in README docs","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":60,"deletions":14}}}]}]},"authorFileTypeContributionMap":{"jason-raiin":{"java":1108,"md":58,"fxml":35,"sh":2,"bat":2,"gradle":24,"txt":7}},"authorContributionVariance":{"jason-raiin":45941.12},"authorDisplayNameMap":{"jason-raiin":"CS2103T-F12-4 HUAN.. CAN"}} diff --git a/javinchua_ip_master/authorship.json b/javinchua_ip_master/authorship.json index d2e25704..9fbec01c 100644 --- a/javinchua_ip_master/authorship.json +++ b/javinchua_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"javinchua":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":"javinchua"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-31"},{"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":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"javinchua"},"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":"javinchua"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-29"},{"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":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":"checkstyle {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"javinchua":21,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import duke.exception.EmptyTaskException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" * Duke is a command-line task management application that allows users to manage tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" * It provides functionality to add tasks, mark tasks as done, delete tasks, and more.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * This class serves as the entry point of the application and manages its execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * Constructs a new instance of the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * Initializes the user interface, storage, and task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * Loads task from storage into the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" public Duke() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" ArrayList\u003cTask\u003e tasks \u003d storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" this.tasks \u003d new TaskList(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" assert this.tasks !\u003d null : \"Tasks should be initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" new Duke().run();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" * Runs the main loop of the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" * Displays a welcome message and processes user input until an exit command is encountered.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" String input \u003d ui.getUserInput();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" ui.showLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" } catch (DukeException | InvalidIndexException | EmptyTaskException | InvalidDateTimeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" } finally {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" ui.showLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" response.append(c.execute(tasks, ui, storage));","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" if (c.isExit()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":" System.exit(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" } catch (DukeException | InvalidIndexException | EmptyTaskException | InvalidDateTimeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" response.append(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" response.append(\"An error occurred: \").append(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":" return response.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"javinchua":98,"-":4}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.gui.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"javinchua":13}},{"path":"src/main/java/duke/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * The {@code AddDeadlineCommand} class encapsulates the details of the deadline,","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * including its description and due date. When executed, the deadline is added","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * to the task list and the list is saved using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * Due date of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" private final String by;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" * Description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * Constructs a new {@code AddDeadlineCommand} with the provided description","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * and due date.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @param description description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @param by due date of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" public AddDeadlineCommand(String description, String by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" * Executes the command by adding a new deadline to the provided task list,","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" * and saving the updated list using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" * @param tasks list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" * @param ui user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * @param storage storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for adding of deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.addTask(new Deadline(description, by));","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" * Indicates that this command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" * @return {@code false} since this command doesn\u0027t cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":66}},{"path":"src/main/java/duke/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * The {@code AddEventCommand} class encapsulates the details of the event,","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * including its description and the duration it spans (from-to). When executed,","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * the event is added to the task list and the list is saved using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * Starting time/date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" private final String from;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * Ending time/date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" private final String to;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Description of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * Constructs a new {@code AddEventCommand} with the provided description","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * and the duration (from-to) it spans.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" * @param description description of the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" * @param from starting time/date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" * @param to ending time/date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" public AddEventCommand(String description, String from, String to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" * Executes the command by adding a new event to the provided task list,","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" * and saving the updated list using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" * @param tasks list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" * @param ui user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" * @param storage storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for adding of event.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.addTask(new Event(description, from, to));","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" * Indicates that this command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" * @return {@code false} since this command doesn\u0027t cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":72}},{"path":"src/main/java/duke/command/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * Represents a command to add a to-do task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * The {@code AddTodoCommand} class encapsulates the details of the to-do,","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * specifically its description. When executed, the to-do is added to the","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * task list and the list is saved using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * Description of the to-do task.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" * Constructs a new {@code AddTodoCommand} with the provided description.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" * @param description Description of the to-do task.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * Executes the command by adding a new to-do to the provided task list,","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * and saving the updated list using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for adding of todo.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.addTask(new Todo(description));","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" * Indicates that this command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" * @return {@code false} since this command doesn\u0027t cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":58}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Represents an abstract command that can be executed in the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * Executes the specific command using the provided task list, user interface, and storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" * @return A response message indicating the result of the command execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * @throws Exception If there\u0027s any error during the command execution.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws Exception;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * Checks if this command triggers an exit from the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" * @return {@code true} if the command causes the application to exit, otherwise {@code false}.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":29}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Represents a command to delete a specific task from the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * This command deletes a task identified by its index from the provided task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * Once deleted, it also saves the updated list to storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" /** The index of the task to be deleted. */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" * Constructs a new DeleteCommand with the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" * @param index The index of the task in the task list to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * Deletes the task from the task list based on its index and saves the updated list to storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for deleting of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is not valid.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.deleteTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" * Specifies that executing a DeleteCommand will not cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" * @return {@code false} as deleting a task doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":54}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * When executed, this command displays an exit message to the user and indicates to the application","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * that it should terminate.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" * Executes the exit command, displaying an exit message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for exiting of program.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" return ui.showExitMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * Specifies that executing an ExitCommand will cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * @return {@code true} indicating the application should terminate.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":38}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Represents a command to search for tasks that match a given keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * The {@code FindCommand} allows users to find tasks in their list based","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * on a keyword they provide.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * Keyword to search against.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" private final String keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" * Constructs a new {@code FindCommand} with the provided keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" * @param keyword Keyword to search against","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * Executes the command by searching for the keyword in the provided task list,","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * and printing the results.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @param tasks List of duke.tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for finding tasks from keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" return tasks.findTasks(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" * Indicates that this command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" * @return {@code false} since this command doesn\u0027t cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":52}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Represents a command to list all tasks in the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * When executed, this command will display all tasks in the task list to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * Executes the list command, displaying all tasks in the task list to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks to be displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system (not used in this command but retained for consistency).","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for listing of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" return tasks.listTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Specifies that executing a ListCommand will not cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * @return {@code false} indicating the application should continue running.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":37}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Represents a command to mark a task as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * When executed, this command will mark the task at the specified index as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" /** The index of the task to be marked as completed. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * Constructs a new MarkCommand with the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task to be marked as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Executes the mark command, marking the task at the specified index as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for marking of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the given index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.markTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" * Specifies that executing a MarkCommand will not cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * @return {@code false} indicating the application should continue running.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":53}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Represents a command to unmark a task as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * When executed, this command will unmark the task at the specified index as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" /** The index of the task to be unmarked as completed. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * Constructs a new UnmarkCommand with the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task to be unmarked as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Executes the unmark command, unmarking the task at the specified index as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for unmarking of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the given index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.unmarkTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" * Specifies that executing an UnmarkCommand will not cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * @return {@code false} indicating the application should continue running.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":53}},{"path":"src/main/java/duke/command/UpdateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Represents a command to update a specific task in the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * This command allows updating various attributes of a task based on its index. The attributes","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * that can be updated include the task\u0027s description, start time/date (\u0027from\u0027), end time/date (\u0027to\u0027),","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * and the deadline (\u0027by\u0027). Only provided attributes will be updated, while the others remain unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"public class UpdateCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * Starting time/date of the event.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" private final String from;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * Ending time/date of the event.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" private final String to;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Description of the event.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" private final String description;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * Due date of the deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" private final String by;","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" * Index of the task to be updated.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" private final int index;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" * Constructs an UpdateCommand with specified parameters.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task in the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * @param description Updated description of the task. Null if unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" * @param from Updated starting time/date of the event. Null if unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" * @param to Updated ending time/date of the event. Null if unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" * @param by Updated due date of the deadline task. Null if unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" public UpdateCommand(int index, String description, String from, String to, String by) {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" * Executes the update command, updating the specified task attributes and saving the changes.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" * @param tasks The list of tasks to be updated.","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" * @param storage The storage to save tasks after updating.","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message indicating the success of the update operation.","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is out of bounds.","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.updateTask(index, description, from, to, by);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" * Indicates that this command doesn\u0027t terminate the application.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" * @return {@code false} since this command doesn\u0027t cause the application to exit.","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"javinchua":85}},{"path":"src/main/java/duke/exception/CorruptHarddriveException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents an duke.exception that is thrown when the application encounters corrupted or incorrectly formatted data.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * This duke.exception indicates that the data read from the storage or hard drive is not in the expected format.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class CorruptHarddriveException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * Constructs a new CorruptHarddriveException with a default error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" public CorruptHarddriveException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but the data is not in the correct format :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":17}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Exception thrown when an unrecognized command is provided to the Duke chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Constructs a DukeException with a default error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" public DukeException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":13}},{"path":"src/main/java/duke/exception/EmptyTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * Exception thrown when a task\u0027s field (description, by, from, to) is found to be empty.","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"public class EmptyTaskException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * Constructs an duke.exception.EmptyTaskException with a specific error message","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * based on the type of task and the empty field.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * @param type The type of task (e.g., todo, deadline, event).","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * @param field The specific field (e.g., description, by, from, to) that is empty.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" public EmptyTaskException(TaskType type, String field) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" super(\"☹ OOPS!!! The \" + field + \" of a \" + type + \" cannot be empty.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":19}},{"path":"src/main/java/duke/exception/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents an duke.exception that is thrown when the application encounters an invalid date and time input.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * This duke.exception is triggered when the user provides a date","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * and time format that does not match the expected formats:","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * \"yyyy-MM-dd\" or \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"public class InvalidDateTimeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * Constructs a new InvalidDateTimeException with a default error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" public InvalidDateTimeException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but the input of date and time is invalid.\"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" + \" Please follow the format of yyyy-MM-dd or yyyy-MM-dd HHmm :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":20}},{"path":"src/main/java/duke/exception/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Exception thrown when an invalid index is used to access a list.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class InvalidIndexException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Constructs an duke.exception.InvalidIndexException with a default error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" super(\"☹ OOPS!!! This index is out of the list\u0027s bounds.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":13}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"javinchua"},"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":21,"author":{"gitId":"javinchua"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" double radius \u003d 35;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" Circle clip \u003d new Circle(radius, radius, radius);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" displayPicture.setClip(clip);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"javinchua":65}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"javinchua":33}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * Initializes the main window with default UI settings and behaviors.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(Ui.showWelcomeMessage(), dukeImage));","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"javinchua"},"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":46,"author":{"gitId":"javinchua"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" * Handles the style of the send button when the mouse hovers over it.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" * Changes the background color and cursor style for improved user feedback.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" public void onHoverButton() {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" sendButton.setStyle(\"-fx-background-color: #005792; -fx-text-fill: #fff; \"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" + \"-fx-background-radius: 20; -fx-border-radius: 20; -fx-cursor: hand;\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" * Reverts the style of the send button when the mouse exits the button area.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" * Resets the background color and maintains the cursor style for a consistent user experience.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" public void onExitButton() {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" sendButton.setStyle(\"-fx-background-color: #0077B5; -fx-text-fill: #fff; \"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" + \"-fx-background-radius: 20; -fx-border-radius: 20; -fx-cursor: hand;\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"javinchua":80}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents a task with a specific deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e A Deadline task is an extension of the basic Task, with an added","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * characteristic of a \"by\" field that represents the deadline of the task. \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" private String by;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * Creates a new deadline task with the specified description and deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" super(TaskType.DEADLINE, description);","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" * @return A formatted string showing the deadline task\u0027s type, status, description, and deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" return super.toString() + \" (by: \" + this.by + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * Returns a transformed format of the deadline task, useful for data storage or other operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" * @return A string that represents the deadline task in a unique format.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" public String transformFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" return super.transformFormat() + \" | \" + this.by;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" * Returns the deadline of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" * @return A {@code String} representing the deadline of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" public String getBy() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" return this.by;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" * Modifies the by of this task.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" public void setBy(String newBy) {","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" this.by \u003d newBy;","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":57}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents a task that occurs during a specific period.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e An Event task is an extension of the basic Task, with additional characteristics of","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * \"from\" and \"to\" fields representing the start and end times of the event, respectively. \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" private String from;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" private String to;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * Creates a new event task with the specified description, start time, and end time.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" super(TaskType.EVENT, description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" * Returns a string representation of the event task.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * @return A formatted string showing the event task\u0027s type, status, description, start time, and end time.","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" return super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" * Returns a transformed format of the event task, useful for data storage or other operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" * @return A string that represents the event task in a unique format.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" public String transformFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" return super.transformFormat() + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * Returns the start of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" * @return A {@code String} representing the start of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" public String getFrom() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" return this.from;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" * Returns the end of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" * @return A {@code String} representing the end of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" public String getTo() {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" return this.to;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" * Modifies the from of this task.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" public void setFrom(String newFrom) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" this.from \u003d newFrom;","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" * Modifies the to of this task.","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" public void setTo(String newTo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" this.to \u003d newTo;","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":75}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents a generic task with a specific type, description, and completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e The Task class is a fundamental representation of a task that can be of various types","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * such as TODO, DEADLINE, or EVENT.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Each task has a type, a description, and a flag that indicates whether it has been completed. \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"public class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" private TaskType type;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" private String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * Constructs a new Task instance with the specified type and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" * @param type The type of the task, which can be one of the values in {@link TaskType}.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * @param description A brief description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" public Task(TaskType type, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" this.isDone \u003d false; // Default value for a new task","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" * Provides a string representation of the task, which includes its type, completion status, and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * @return A formatted string indicating the task\u0027s type, whether it\u0027s done, and its description.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" String printType;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" printType \u003d \"T\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" case EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" printType \u003d \"E\";","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" printType \u003d \"D\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" printType \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" String indicator \u003d isDone ? \"X\" : \" \";","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" return \"[\" + printType + \"][\" + indicator + \"] \" + description;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" * Sets the task\u0027s completion status to \u0027done\u0027.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" public void mark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" * Resets the task\u0027s completion status to \u0027not done\u0027.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" public void unmark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" * Transforms the task\u0027s data into a specific format, useful for data storage or other representations.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" * @return A string that represents the task\u0027s type, completion status, and description in a unique format.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" public String transformFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" String printType;","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" printType \u003d \"T\";","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" case EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" printType \u003d \"E\";","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":" printType \u003d \"D\";","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" printType \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":" return printType + \" | \" + this.isDone + \" | \" + this.description;","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" * Returns the type of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" * @return A {@code TaskType} representing the type of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"javinchua"},"content":" public TaskType getTaskType() {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":" return this.type;","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"javinchua"},"content":" * Returns the description of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"javinchua"},"content":" * @return A {@code String} representing the description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"javinchua"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"javinchua"},"content":" return this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"javinchua"},"content":" * Returns the completion of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"javinchua"},"content":" * @return A {@code boolean} representing the completion of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"javinchua"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"javinchua"},"content":" return this.isDone;","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"javinchua"},"content":" * Modifies the description of this task.","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"javinchua"},"content":" public void setDescription(String newDescription) {","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"javinchua"},"content":" this.description \u003d newDescription;","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":123}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Represents a list of tasks, allowing for various operations such as","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * adding, deleting, marking tasks as done, and unmarking tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003eThe TaskList class provides a comprehensive set of methods to manage and manipulate","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * a list of tasks. Each task in the list can be accessed by its index.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * Methods throw {@link InvalidIndexException} if operations are attempted on invalid indices.\u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" private ArrayList\u003cTask\u003e store;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * Initializes an empty list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" this.store \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" * Initializes a task list with a given list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * @param tasks An ArrayList of tasks to initialize the task list with.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" if (tasks \u003d\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" throw new IllegalArgumentException(\"Task list cannot be null\");","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" this.store \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" * @return Confirmation message indicating task addition.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" int initialSize \u003d store.size();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" store.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" assert store.size() \u003d\u003d initialSize + 1 : \"Task addition failed!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" return String.format(\"Got it. I\u0027ve added this task:\"","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" + \"\\n\\t%s\\nNow you have %d tasks in the list.\\n\", task, store.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" * Deletes a task from the list based on its index.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" * @return Confirmation message indicating task deletion.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" public String deleteTask(int index) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" int initialSize \u003d store.size();","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" validateIndex(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" Task task \u003d store.remove(index - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" assert store.size() \u003d\u003d initialSize - 1 : \"Task deletion failed!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\"","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" + \"\\n\\t%s\\nNow you have %d tasks in the list.\\n\", task, store.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" * Lists all tasks currently in the list.","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" * @return Formatted string of all tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" StringBuilder output \u003d new StringBuilder(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" for (Task task : store) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" output.append(counter++).append(\".\").append(task).append(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" return output.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":" * Marks a task as done based on its index.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task to be marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" * @return Confirmation message indicating task status change to done.","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":" public String markTask(int index) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" validateIndex(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" Task curr \u003d store.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" curr.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" return String.format(\"Nice! I\u0027ve marked this task as done:\\n\\t%s\\n\", curr);","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":" * Marks a task as not done based on its index.","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task to be marked as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"javinchua"},"content":" * @return Confirmation message indicating task status change to not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"javinchua"},"content":" public String unmarkTask(int index) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"javinchua"},"content":" validateIndex(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"javinchua"},"content":" Task curr \u003d store.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"javinchua"},"content":" curr.unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"javinchua"},"content":" return String.format(\"OK, I\u0027ve marked this task as not done yet:\\n\\t%s\\n\", curr);","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"javinchua"},"content":" * Retrieves the current list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"javinchua"},"content":" * @return A clone of the ArrayList containing all the tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"javinchua"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"javinchua"},"content":" return new ArrayList\u003c\u003e(store);","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"javinchua"},"content":" * Searches and provides tasks containing the specified keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"javinchua"},"content":" * @param keyword Keyword to search for in task descriptions.","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"javinchua"},"content":" * @return Formatted string of matching tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"javinchua"},"content":" public String findTasks(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"javinchua"},"content":" StringBuilder output \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"javinchua"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"javinchua"},"content":" for (int i \u003d 0; i \u003c store.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"javinchua"},"content":" if (store.get(i).getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"javinchua"},"content":" isFound \u003d true;","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"javinchua"},"content":" output.append(i + 1).append(\".\").append(store.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"javinchua"},"content":" if (!isFound) {","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"javinchua"},"content":" output.append(\"No matching tasks found.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"javinchua"},"content":" return output.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"javinchua"},"content":" * Validates the provided index against the task store\u0027s size.","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"javinchua"},"content":" * @param index Index to validate.","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException if the index is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"javinchua"},"content":" private void validateIndex(int index) throws InvalidIndexException {","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"javinchua"},"content":" if (index \u003c 1 || index \u003e store.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"javinchua"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"javinchua"},"content":" * Updates the attributes of a task in the task list based on the provided index.","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"javinchua"},"content":" * The method supports updating the description for all task types. For {@code Event} tasks,","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"javinchua"},"content":" * the \u0027from\u0027 and \u0027to\u0027 attributes can be updated. For {@code Deadline} tasks, the \u0027by\u0027 attribute","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"javinchua"},"content":" * can be updated. Only the provided attributes are updated, while the others remain unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task in the task list to be updated.","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"javinchua"},"content":" * @param newDescription New description for the task. If {@code null}, description remains unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"javinchua"},"content":" * @param newFrom New starting time/date for an {@code Event} task. If {@code null} or if task is not an event,","lastModifiedDate":"2023-09-10"},{"lineNumber":166,"author":{"gitId":"javinchua"},"content":" * remains unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"javinchua"},"content":" * @param newTo New ending time/date for an {@code Event} task. If {@code null} or if task is not an event,","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"javinchua"},"content":" * remains unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"javinchua"},"content":" * @param newBy New due date for a {@code Deadline} task. If {@code null} or if task is not a deadline,","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"javinchua"},"content":" * remains unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message indicating the updated task details.","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is out of the range of the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"javinchua"},"content":" public String updateTask(int index, String newDescription, String newFrom, String newTo, String newBy)","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"javinchua"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"javinchua"},"content":" validateIndex(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"javinchua"},"content":" Task task \u003d store.get(index - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"javinchua"},"content":" if (newDescription !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"javinchua"},"content":" task.setDescription(newDescription);","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"javinchua"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"javinchua"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"javinchua"},"content":" if (newFrom !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"javinchua"},"content":" eventTask.setFrom(newFrom);","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"javinchua"},"content":" if (newTo !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"javinchua"},"content":" eventTask.setTo(newTo);","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"javinchua"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":192,"author":{"gitId":"javinchua"},"content":" Deadline deadlineTask \u003d (Deadline) task;","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"javinchua"},"content":" if (newBy !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"javinchua"},"content":" deadlineTask.setBy(newBy);","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"javinchua"},"content":" return \"Updated task:\\n\\t\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":200}},{"path":"src/main/java/duke/tasks/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Enum representing the types of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":8}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents a todo task, a type of task without a specific deadline or duration.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Creates a new todo task with the specified description.","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" super(TaskType.TODO, description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":17}},{"path":"src/main/java/duke/util/DateParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * Utility class for parsing and transforming date-time strings.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * The DateParser class provides functionality for transforming date and datetime strings from","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * one format to another. The class currently supports date strings in the format \"yyyy-MM-dd\"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * and datetime strings in the format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"public class DateParser {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" * Formatter for parsing input date strings in the format \"yyyy-MM-dd\".","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" private static final DateTimeFormatter INPUT_DATE_FORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" * Formatter for parsing input datetime strings in the format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" private static final DateTimeFormatter INPUT_DATETIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * Formatter for producing output date strings in the format \"MMM dd yyyy\".","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" private static final DateTimeFormatter OUTPUT_DATE_FORMATTER \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" * Formatter for producing output datetime strings in the format \"MMM dd yyyy, h:mma\".","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" private static final DateTimeFormatter OUTPUT_DATETIME_FORMATTER \u003d","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy, h:mma\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" * Pattern for validating input datetime strings.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" private static final Pattern DATETIME_PATTERN \u003d Pattern.compile(\"^\\\\d{4}-\\\\d{2}-\\\\d{2} \\\\d{4}$\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" * Pattern for validating input date strings.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" private static final Pattern DATE_PATTERN \u003d Pattern.compile(\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" * Transforms the input date or datetime string to a different format.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" * If the input string matches the datetime pattern \"yyyy-MM-dd HHmm\", it will be transformed to","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" * \"MMM dd yyyy, h:mma\". If the input string matches the date pattern \"yyyy-MM-dd\", it will be","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" * transformed to \"MMM dd yyyy\". If the input string doesn\u0027t match any of the known patterns,","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" * an InvalidDateTimeException will be thrown.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" * @param dateTimeStr the input date or datetime string.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" * @return a transformed date or datetime string.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" * @throws InvalidDateTimeException if the input string format is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" public static String transformDateTimeFormat(String dateTimeStr) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" if (DATETIME_PATTERN.matcher(dateTimeStr).matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(dateTimeStr, INPUT_DATETIME_FORMATTER);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" return dateTime.format(OUTPUT_DATETIME_FORMATTER);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" } else if (DATE_PATTERN.matcher(dateTimeStr).matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" LocalDate date \u003d LocalDate.parse(dateTimeStr, INPUT_DATE_FORMATTER);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" return date.format(OUTPUT_DATE_FORMATTER);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" throw new InvalidDateTimeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":76}},{"path":"src/main/java/duke/util/Pair.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents an immutable key-value pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class Pair {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" private final String key;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" private final String value;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * Initializes a new Pair with the specified key and value.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * @param key The key for this pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * @param value The value to be paired with the specified key.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" public Pair(String key, String value) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" this.key \u003d key;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" this.value \u003d value;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" * Retrieves the key of this pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" * @return The key associated with this pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" public String getKey() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" return key;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * Retrieves the value of this pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @return The value associated with this pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" public String getValue() {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" return value;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":39}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.command.AddDeadlineCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.command.AddEventCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import duke.command.AddTodoCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"import duke.command.UpdateCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"import duke.exception.EmptyTaskException;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * Provides functionality to parse user input into commands that the application can understand.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Parses the input string into a Command.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * @param input The raw input string from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * @return A Command that corresponds to the input instruction.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @throws DukeException If the input does not match any command or is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @throws EmptyTaskException If the input is missing essential information.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * @throws InvalidDateTimeException If the date or time format is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" public static Command parse(String input) throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" String[] pairSplit \u003d input.split(\"/\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" Pair commandPair \u003d parsePair(pairSplit[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" String command \u003d commandPair.getKey();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" String argument \u003d commandPair.getValue();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" HashMap\u003cString, String\u003e map \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" for (int i \u003d 1; i \u003c pairSplit.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" Pair temp \u003d parsePair(pairSplit[i]);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" map.put(temp.getKey(), temp.getValue());","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" switch (command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" index \u003d parseInt(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" index \u003d parseInt(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" index \u003d parseInt(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" if (argument.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.TODO, \"description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" return new AddTodoCommand(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" if (argument.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.TODO, \"description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" String by \u003d map.getOrDefault(\"by\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" if (by.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.DEADLINE, \"by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":" return new AddDeadlineCommand(argument, DateParser.transformDateTimeFormat(by));","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" if (argument.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.TODO, \"description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" String from \u003d map.getOrDefault(\"from\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":" if (from.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.EVENT, \"from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" String to \u003d map.getOrDefault(\"to\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" if (to.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.EVENT, \"to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":" return new AddEventCommand(argument,","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"javinchua"},"content":" DateParser.transformDateTimeFormat(from),","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":" DateParser.transformDateTimeFormat(to));","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"javinchua"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"javinchua"},"content":" return new FindCommand(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"javinchua"},"content":" case \"update\":","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"javinchua"},"content":" index \u003d parseInt(argument);","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"javinchua"},"content":" String newDescription \u003d map.getOrDefault(\"description\", null);","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"javinchua"},"content":" String newFrom \u003d map.getOrDefault(\"from\", null);","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"javinchua"},"content":" String newTo \u003d map.getOrDefault(\"to\", null);","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"javinchua"},"content":" String newBy \u003d map.getOrDefault(\"by\", null);","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"javinchua"},"content":" return new UpdateCommand(index, newDescription, newFrom, newTo, newBy);","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"javinchua"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"javinchua"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"javinchua"},"content":" * Parses a string to extract a pair of values.","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"javinchua"},"content":" * @param input The string to parse.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"javinchua"},"content":" * @return A Pair where the key is the first word of the input, and the value is the rest of the string.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"javinchua"},"content":" * @throws DukeException If the input string is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"javinchua"},"content":" private static Pair parsePair(String input) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"javinchua"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"javinchua"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"javinchua"},"content":" String[] parts \u003d input.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"javinchua"},"content":" String firstWord \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"javinchua"},"content":" String restOfString \u003d parts.length \u003e 1 ? parts[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"javinchua"},"content":" return new Pair(firstWord.trim(), restOfString.trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"javinchua"},"content":" * Converts a string to an integer.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"javinchua"},"content":" * @param argument The string to parse.","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"javinchua"},"content":" * @return The integer representation of the string.","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"javinchua"},"content":" * @throws DukeException If the string cannot be parsed into an integer.","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"javinchua"},"content":" private static int parseInt(String argument) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"javinchua"},"content":" return Integer.parseInt(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"javinchua"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"javinchua"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":145}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import duke.exception.CorruptHarddriveException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" * Provides functionality for storing tasks in a file and retrieving tasks from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" /** File path to where the tasks are saved. */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" private static final String FILE_PATH \u003d \"./data/hardrive.txt\";","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" /** Directory path to where the file is located. */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" private static final String DATA_FOLDER_PATH \u003d \"./data\";","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" * Loads the tasks from the hard drive.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * @return An ArrayList of Task objects, each representing a task retrieved from the hard drive.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" ArrayList\u003cTask\u003e store \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" File f \u003d new File(FILE_PATH); // create a File for the given file path","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" Scanner s \u003d new Scanner(f); // create a Scanner using the File as the source","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" int index \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" index++;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" String data \u003d s.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" String[] dataSplit \u003d data.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" String type \u003d dataSplit[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" if (dataSplit.length !\u003d 3) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" throw new CorruptHarddriveException();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" task \u003d new Todo(dataSplit[2].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" store.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" if (Boolean.valueOf(dataSplit[1].trim())) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" task.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" if (dataSplit.length !\u003d 4) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" throw new CorruptHarddriveException();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" task \u003d new Deadline(dataSplit[2].trim(), dataSplit[3].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" store.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" if (Boolean.valueOf(dataSplit[1].trim())) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" task.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" if (dataSplit.length !\u003d 5) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" throw new CorruptHarddriveException();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" task \u003d new Event(dataSplit[2].trim(), dataSplit[3].trim(), dataSplit[4].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" store.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" if (Boolean.valueOf(dataSplit[1].trim())) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" task.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" throw new CorruptHarddriveException();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":" System.out.println(\"No initial file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" } catch (CorruptHarddriveException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":" return store;","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":" * Saves the given list of tasks to the hard drive.","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" * @param store The list of tasks to save.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" public void save(ArrayList\u003cTask\u003e store) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"javinchua"},"content":" File dataFolder \u003d new File(DATA_FOLDER_PATH);","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":" if (!dataFolder.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"javinchua"},"content":" dataFolder.mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"javinchua"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"javinchua"},"content":" for (Task element : store) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"javinchua"},"content":" String data \u003d element.transformFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"javinchua"},"content":" fw.write(data);","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"javinchua"},"content":" fw.write(System.lineSeparator());","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"javinchua"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"javinchua"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"javinchua"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":113}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * Represents the user interface for managing input and output to the console.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * Provides methods to show welcome and exit messages, get user input, and display a horizontal line.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" /** The horizontal line used for formatting output */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" private static final String HORIZONTAL_LINE \u003d \"----------------------------------------\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" /** The name of the bot */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" private static final String name \u003d \"Code Buddy\";","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" /** Scanner object to read user input */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" private Scanner inputScanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * Initializes a new Ui object, setting up the scanner for user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" public Ui() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" this.inputScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" * Displays the welcome message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" * @return A string continaing the welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" public static String showWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" output +\u003d HORIZONTAL_LINE + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" output +\u003d \"Hello! I\u0027m \" + name + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" output +\u003d \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" output +\u003d HORIZONTAL_LINE + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" * Retrieves a line of input from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" * @return A string containing the user\u0027s input.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" public String getUserInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" return inputScanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" * Displays the exit message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" * @return A string containing the exit message.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" public String showExitMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" return \"Bye. Hope to see you again soon !\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" * Displays a horizontal line for formatting purposes.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" * @return A string representing a horizontal line.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" public String showLine() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" return HORIZONTAL_LINE + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":65}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-spacing: 10;\" 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":"javinchua"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" \u003cLabel fx:id\u003d\"dialog\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-background-color: #ECECEC; -fx-background-radius: 15; -fx-border-radius: 32; -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.6), 5, 0, 0, 2);\" text\u003d\"Label\" wrapText\u003d\"true\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" \u003cInsets bottom\u003d\"8.0\" left\u003d\"16.0\" right\u003d\"16.0\" top\u003d\"8.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"70.0\" fitWidth\u003d\"70.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"javinchua":21}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"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\" style\u003d\"-fx-background-color: linear-gradient(to bottom right, #ECECEC, #FFFFFF); -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.6), 5, 0, 0, 2);\" fx:controller\u003d\"duke.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" \u003cTextField fx:id\u003d\"userInput\" style\u003d\"-fx-background-radius: 15; -fx-border-radius: 15;\" 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":11,"author":{"gitId":"javinchua"},"content":" \u003cButton fx:id\u003d\"sendButton\" style\u003d\"-fx-background-color: #0077B5; -fx-text-fill: #fff; -fx-background-radius: 20; -fx-border-radius: 20; -fx-cursor: hand;\" onMouseEntered\u003d\"#onHoverButton\" onMouseExited\u003d\"#onExitButton\" 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":12,"author":{"gitId":"javinchua"},"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":13,"author":{"gitId":"javinchua"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" spacing\u003d\"10\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"javinchua":18}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" // Testing the creation of a Deadline task and its default values.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" public void createDeadlineTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" Deadline deadline \u003d new Deadline(\"Complete project\", \"2023-09-01\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" assertEquals(TaskType.DEADLINE, deadline.getTaskType());","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" assertEquals(\"Complete project\", deadline.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" assertFalse(deadline.isDone()); // Ensure that by default, tasks are not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" assertEquals(\"2023-09-01\", deadline.getBy());","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" // Testing the string representation of a Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" Deadline deadline \u003d new Deadline(\"Complete project\", \"2023-09-01\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[D][ ] Complete project (by: 2023-09-01)\", deadline.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" // Testing the transformFormat method for a Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" public void transformFormatTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" Deadline deadline \u003d new Deadline(\"Complete project\", \"2023-09-01\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" assertEquals(\"D | false | Complete project | 2023-09-01\", deadline.transformFormat());","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":33}},{"path":"src/test/java/duke/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" // Testing the creation of an Event task and its default values.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" public void createEventTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" Event event \u003d new Event(\"Team Meeting\", \"9:00AM\", \"11:00AM\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" assertEquals(TaskType.EVENT, event.getTaskType());","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" assertEquals(\"Team Meeting\", event.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" assertFalse(event.isDone()); // Ensure that by default, tasks are not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" assertEquals(\"9:00AM\", event.getFrom());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" assertEquals(\"11:00AM\", event.getTo());","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" // Testing the string representation of an Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" Event event \u003d new Event(\"Team Meeting\", \"9:00AM\", \"11:00AM\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[E][ ] Team Meeting (from: 9:00AM to: 11:00AM)\", event.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" // Testing the transformFormat method for an Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" public void transformFormatTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" Event event \u003d new Event(\"Team Meeting\", \"9:00AM\", \"11:00AM\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" assertEquals(\"E | false | Team Meeting | 9:00AM | 11:00AM\", event.transformFormat());","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":36}},{"path":"src/test/java/duke/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" // Testing the creation of a task and its default values.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" public void createTaskTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" Task task \u003d new Task(TaskType.TODO, \"Test description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" assertEquals(TaskType.TODO, task.getTaskType());","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" assertEquals(\"Test description\", task.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" assertFalse(task.isDone()); // Ensure that by default, tasks are not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" // Testing the string representation of a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" Task todoTask \u003d new Task(TaskType.TODO, \"Todo task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[T][ ] Todo task\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" Task eventTask \u003d new Task(TaskType.EVENT, \"Event task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[E][ ] Event task\", eventTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" Task deadlineTask \u003d new Task(TaskType.DEADLINE, \"Deadline task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[D][ ] Deadline task\", deadlineTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" // Testing marking a task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" public void markTaskTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" Task task \u003d new Task(TaskType.TODO, \"Test description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" task.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[T][X] Test description\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" // Testing unmarking a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" public void unmarkTaskTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" Task task \u003d new Task(TaskType.TODO, \"Test description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" task.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" task.unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[T][ ] Test description\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" // Testing the transformFormat method.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" public void transformFormatTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" Task todoTask \u003d new Task(TaskType.TODO, \"Todo task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" assertEquals(\"T | false | Todo task\", todoTask.transformFormat());","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" Task eventTask \u003d new Task(TaskType.EVENT, \"Event task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" assertEquals(\"E | false | Event task\", eventTask.transformFormat());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" Task deadlineTask \u003d new Task(TaskType.DEADLINE, \"Deadline task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" assertEquals(\"D | false | Deadline task\", deadlineTask.transformFormat());","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":64}},{"path":"src/test/java/duke/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" public void createTodoTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" Todo todo \u003d new Todo(\"Test description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" assertEquals(TaskType.TODO, todo.getTaskType());","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" assertEquals(\"Test description\", todo.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":13}},{"path":"src/test/java/duke/util/DateParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class DateParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" public void transformDateTimeFormat_validDateTimeString_transformed() throws InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" String input \u003d \"2023-08-28 1430\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" String expectedOutput \u003d \"Aug 28 2023, 2:30PM\";","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" assertEquals(expectedOutput, DateParser.transformDateTimeFormat(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" public void transformDateTimeFormat_validDateString_transformed() throws InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" String input \u003d \"2023-08-28\";","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" String expectedOutput \u003d \"Aug 28 2023\";","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" assertEquals(expectedOutput, DateParser.transformDateTimeFormat(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" public void transformDateTimeFormat_invalidDateString_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" String input \u003d \"2023/08/28\";","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e DateParser.transformDateTimeFormat(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" public void transformDateTimeFormat_invalidDateTimeString_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" String input \u003d \"2023/08/28 14:30\";","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e DateParser.transformDateTimeFormat(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" public void transformDateTimeFormat_invalidString_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" String input \u003d \"invalid date\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e DateParser.transformDateTimeFormat(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":47}},{"path":"src/test/java/duke/util/PairTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class PairTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" public void getKey_validPair_correctKeyReturned() {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" Pair pair \u003d new Pair(\"name\", \"duke\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" assertEquals(\"name\", pair.getKey());","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" public void getValue_validPair_correctValueReturned() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" Pair pair \u003d new Pair(\"name\", \"duke\");","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" assertEquals(\"duke\", pair.getValue());","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":20}},{"path":"src/test/java/duke/util/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.command.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.exception.EmptyTaskException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" public void parse_emptyInput_dukeExceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" Parser.parse(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" public void parse_validByeCommand_exitCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof ExitCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" public void parse_validListCommand_listCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof ListCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" public void parse_invalidCommand_dukeExceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" Parser.parse(\"invalidcommand\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" public void parse_markCommandWithValidIndex_markCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"mark 2\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof MarkCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" public void parse_unmarkCommandWithValidIndex_unmarkCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"unmark 2\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof UnmarkCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" public void parse_deleteCommandWithValidIndex_deleteCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"delete 2\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof DeleteCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" public void parse_todoCommandWithDescription_addTodoCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"todo sample todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof AddTodoCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" public void parse_todoCommandWithoutDescription_emptyTaskExceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" assertThrows(EmptyTaskException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" Parser.parse(\"todo \");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" public void parse_deadlineCommandWithDescriptionAndBy_addDeadlineCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"deadline sample /by 2023-08-28\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof AddDeadlineCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" public void parse_deadlineCommandWithoutBy_emptyTaskExceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" assertThrows(EmptyTaskException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" Parser.parse(\"deadline sample deadline\");","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" public void parse_eventCommandWithDescriptionFromAndTo_addEventCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"event sample /from 2023-08-28 1200 /to 2023-08-28 1400\");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof AddEventCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":" public void parse_eventCommandWithoutTo_emptyTaskExceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" assertThrows(EmptyTaskException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" Parser.parse(\"event sample /from 2023-08-28 1200\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":95}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"deadline return book /by 2019-12-11 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"event project meeting /from 2019-12-11 1800 /to 2020-01-21 2130","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"delete 3","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":10}},{"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":"javinchua"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"javinchua":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":"javinchua"},"content":"if ! javac -cp ../src/main/java/duke -Xlint:none -d ../bin ../src/main/java/duke/*.java ../src/main/java/duke/**/*.java","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"javinchua":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"javinchua":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":"javinchua"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-31"},{"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":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"javinchua"},"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":"javinchua"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-16"},{"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":"javinchua"},"content":" archiveBaseName \u003d \"codeBuddy\"","lastModifiedDate":"2023-09-16"},{"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":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":"checkstyle {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"javinchua":22,"-":40}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"CodeBuddy is a command-line task management application that allows users to manage tasks,","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI).","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"If you can type fast, CodeBuddy can get your task management done faster than traditional GUI apps.","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"### Adding a Deadline: ```deadline```","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"Adds a deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"Format: ```deadline [taskname] /by [date]```","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"- ```deadline return book /by 2021-11-12 1800```","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"- ```deadline submit task /by 2011-09-12```","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"### Adding an Event: ```event```","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"Adds an event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":"Format: ```event [taskname] /from [date] /to [date]```","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"- ```event project meeting /from 2019-12-11 1800 /to 2020-01-21 2130```","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":"### Adding a Todo: ```todo```","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":"Adds a todo task.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":"Format: ```todo [taskname]```","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":"- ```todo borrow book```","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":"### Listing all tasks: ```list```","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":"Shows a list of all tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":"Format: ```list```","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":"### Marking a task: ```mark```","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":"Marks a task as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":"Format: ```mark [index]```","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":"- ```mark 2```","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":"### Unmarking a task: ```unmark```","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":"Marks a task as not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":"Format: ```unmark [index]```","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":"- ```unmark 2```","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":"### Finding a task: ```find```","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":"Search for tasks that match a given keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":"Format: ```find [keyword]```","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":"- ```find book```","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":"### Delete a task: ```delete```","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":"Delete a task from the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":"Format: ```delete [index]```","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":"- ```delete 2```","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":"### Update a task: ```update```","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":"Marks a task as not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":"Format: ```update [index] /[field] [values]```","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":"- ```update 2 /by 2021-11-18 1800 /description hello```","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":"- ```update 3 /from 2021-11-18 1800 /to 2021-12-18```","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":"### Exiting the program: ```bye```","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":"Exits the program","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":"Format: ```bye```","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":"### Saving the data","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":99,"author":{"gitId":"javinchua"},"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-16"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"javinchua":86,"-":15}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import duke.exception.EmptyTaskException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" * Duke is a command-line task management application that allows users to manage tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" * It provides functionality to add tasks, mark tasks as done, delete tasks, and more.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * This class serves as the entry point of the application and manages its execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * Constructs a new instance of the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * Initializes the user interface, storage, and task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * Loads task from storage into the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" public Duke() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" ArrayList\u003cTask\u003e tasks \u003d storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" this.tasks \u003d new TaskList(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" assert this.tasks !\u003d null : \"Tasks should be initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" new Duke().run();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" * Runs the main loop of the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" * Displays a welcome message and processes user input until an exit command is encountered.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" public void run() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" String input \u003d ui.getUserInput();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" ui.showLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" } catch (DukeException | InvalidIndexException | EmptyTaskException | InvalidDateTimeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" } finally {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" ui.showLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" response.append(c.execute(tasks, ui, storage));","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" if (c.isExit()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":" System.exit(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" } catch (DukeException | InvalidIndexException | EmptyTaskException | InvalidDateTimeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" response.append(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" response.append(\"An error occurred: \").append(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":" return response.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"javinchua":98,"-":4}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.gui.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"javinchua":13}},{"path":"src/main/java/duke/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * The {@code AddDeadlineCommand} class encapsulates the details of the deadline,","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * including its description and due date. When executed, the deadline is added","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * to the task list and the list is saved using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * Due date of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" private final String by;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" * Description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * Constructs a new {@code AddDeadlineCommand} with the provided description","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * and due date.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @param description description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @param by due date of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" public AddDeadlineCommand(String description, String by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" * Executes the command by adding a new deadline to the provided task list,","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" * and saving the updated list using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" * @param tasks list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" * @param ui user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * @param storage storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for adding of deadline.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.addTask(new Deadline(description, by));","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" * Indicates that this command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" * @return {@code false} since this command doesn\u0027t cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":66}},{"path":"src/main/java/duke/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * The {@code AddEventCommand} class encapsulates the details of the event,","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * including its description and the duration it spans (from-to). When executed,","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * the event is added to the task list and the list is saved using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * Starting time/date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" private final String from;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * Ending time/date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" private final String to;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Description of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * Constructs a new {@code AddEventCommand} with the provided description","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * and the duration (from-to) it spans.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" * @param description description of the event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" * @param from starting time/date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" * @param to ending time/date of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" public AddEventCommand(String description, String from, String to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" * Executes the command by adding a new event to the provided task list,","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" * and saving the updated list using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" * @param tasks list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" * @param ui user interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" * @param storage storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for adding of event.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.addTask(new Event(description, from, to));","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" * Indicates that this command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" * @return {@code false} since this command doesn\u0027t cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":72}},{"path":"src/main/java/duke/command/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * Represents a command to add a to-do task to the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * The {@code AddTodoCommand} class encapsulates the details of the to-do,","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * specifically its description. When executed, the to-do is added to the","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * task list and the list is saved using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * Description of the to-do task.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" private final String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" * Constructs a new {@code AddTodoCommand} with the provided description.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" * @param description Description of the to-do task.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * Executes the command by adding a new to-do to the provided task list,","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * and saving the updated list using the provided storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for adding of todo.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.addTask(new Todo(description));","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" * Indicates that this command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" * @return {@code false} since this command doesn\u0027t cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":58}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Represents an abstract command that can be executed in the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * Executes the specific command using the provided task list, user interface, and storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" * @return A response message indicating the result of the command execution.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * @throws Exception If there\u0027s any error during the command execution.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws Exception;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * Checks if this command triggers an exit from the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" * @return {@code true} if the command causes the application to exit, otherwise {@code false}.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":29}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Represents a command to delete a specific task from the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * This command deletes a task identified by its index from the provided task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * Once deleted, it also saves the updated list to storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" /** The index of the task to be deleted. */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" * Constructs a new DeleteCommand with the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" * @param index The index of the task in the task list to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * Deletes the task from the task list based on its index and saves the updated list to storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for deleting of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is not valid.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.deleteTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" * Specifies that executing a DeleteCommand will not cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" * @return {@code false} as deleting a task doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":54}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * When executed, this command displays an exit message to the user and indicates to the application","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * that it should terminate.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" * Executes the exit command, displaying an exit message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for exiting of program.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" return ui.showExitMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * Specifies that executing an ExitCommand will cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * @return {@code true} indicating the application should terminate.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":38}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Represents a command to search for tasks that match a given keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * The {@code FindCommand} allows users to find tasks in their list based","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * on a keyword they provide.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * Keyword to search against.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" private final String keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" * Constructs a new {@code FindCommand} with the provided keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" * @param keyword Keyword to search against","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * Executes the command by searching for the keyword in the provided task list,","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * and printing the results.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @param tasks List of duke.tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for finding tasks from keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" return tasks.findTasks(keyword);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" * Indicates that this command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" * @return {@code false} since this command doesn\u0027t cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":52}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Represents a command to list all tasks in the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * When executed, this command will display all tasks in the task list to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * Executes the list command, displaying all tasks in the task list to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks to be displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system (not used in this command but retained for consistency).","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for listing of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" return tasks.listTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Specifies that executing a ListCommand will not cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * @return {@code false} indicating the application should continue running.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":37}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Represents a command to mark a task as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * When executed, this command will mark the task at the specified index as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" /** The index of the task to be marked as completed. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * Constructs a new MarkCommand with the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task to be marked as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Executes the mark command, marking the task at the specified index as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for marking of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the given index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.markTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" * Specifies that executing a MarkCommand will not cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * @return {@code false} indicating the application should continue running.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":53}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Represents a command to unmark a task as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * When executed, this command will unmark the task at the specified index as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" /** The index of the task to be unmarked as completed. */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" private final int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * Constructs a new UnmarkCommand with the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task to be unmarked as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Executes the unmark command, unmarking the task at the specified index as completed.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * @param tasks List of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * @param ui User interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @param storage Storage system.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message for unmarking of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the given index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.unmarkTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" * Specifies that executing an UnmarkCommand will not cause the application to exit.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * @return {@code false} indicating the application should continue running.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":53}},{"path":"src/main/java/duke/command/UpdateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Represents a command to update a specific task in the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * This command allows updating various attributes of a task based on its index. The attributes","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * that can be updated include the task\u0027s description, start time/date (\u0027from\u0027), end time/date (\u0027to\u0027),","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * and the deadline (\u0027by\u0027). Only provided attributes will be updated, while the others remain unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"public class UpdateCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * Starting time/date of the event.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" private final String from;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * Ending time/date of the event.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" private final String to;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Description of the event.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" private final String description;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * Due date of the deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" private final String by;","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" * Index of the task to be updated.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" private final int index;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" * Constructs an UpdateCommand with specified parameters.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task in the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * @param description Updated description of the task. Null if unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" * @param from Updated starting time/date of the event. Null if unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" * @param to Updated ending time/date of the event. Null if unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" * @param by Updated due date of the deadline task. Null if unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" public UpdateCommand(int index, String description, String from, String to, String by) {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" * Executes the update command, updating the specified task attributes and saving the changes.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" * @param tasks The list of tasks to be updated.","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" * @param storage The storage to save tasks after updating.","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message indicating the success of the update operation.","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is out of bounds.","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" String output \u003d tasks.updateTask(index, description, from, to, by);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" * Indicates that this command doesn\u0027t terminate the application.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" * @return {@code false} since this command doesn\u0027t cause the application to exit.","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"javinchua":85}},{"path":"src/main/java/duke/exception/CorruptHarddriveException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents an duke.exception that is thrown when the application encounters corrupted or incorrectly formatted data.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * This duke.exception indicates that the data read from the storage or hard drive is not in the expected format.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class CorruptHarddriveException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * Constructs a new CorruptHarddriveException with a default error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" public CorruptHarddriveException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but the data is not in the correct format :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":17}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Exception thrown when an unrecognized command is provided to the Duke chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Constructs a DukeException with a default error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" public DukeException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":13}},{"path":"src/main/java/duke/exception/EmptyTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * Exception thrown when a task\u0027s field (description, by, from, to) is found to be empty.","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"public class EmptyTaskException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" * Constructs an duke.exception.EmptyTaskException with a specific error message","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * based on the type of task and the empty field.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * @param type The type of task (e.g., todo, deadline, event).","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * @param field The specific field (e.g., description, by, from, to) that is empty.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" public EmptyTaskException(TaskType type, String field) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" super(\"☹ OOPS!!! The \" + field + \" of a \" + type + \" cannot be empty.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":19}},{"path":"src/main/java/duke/exception/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents an duke.exception that is thrown when the application encounters an invalid date and time input.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * This duke.exception is triggered when the user provides a date","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * and time format that does not match the expected formats:","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * \"yyyy-MM-dd\" or \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"public class InvalidDateTimeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * Constructs a new InvalidDateTimeException with a default error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" public InvalidDateTimeException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but the input of date and time is invalid.\"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" + \" Please follow the format of yyyy-MM-dd or yyyy-MM-dd HHmm :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":20}},{"path":"src/main/java/duke/exception/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Exception thrown when an invalid index is used to access a list.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class InvalidIndexException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Constructs an duke.exception.InvalidIndexException with a default error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" super(\"☹ OOPS!!! This index is out of the list\u0027s bounds.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":13}},{"path":"src/main/java/duke/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"javinchua"},"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":21,"author":{"gitId":"javinchua"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" double radius \u003d 35;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" Circle clip \u003d new Circle(radius, radius, radius);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" displayPicture.setClip(clip);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"javinchua":65}},{"path":"src/main/java/duke/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"javinchua":33}},{"path":"src/main/java/duke/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * Initializes the main window with default UI settings and behaviors.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(Ui.showWelcomeMessage(), dukeImage));","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"javinchua"},"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":46,"author":{"gitId":"javinchua"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" * Handles the style of the send button when the mouse hovers over it.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" * Changes the background color and cursor style for improved user feedback.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" public void onHoverButton() {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" sendButton.setStyle(\"-fx-background-color: #005792; -fx-text-fill: #fff; \"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" + \"-fx-background-radius: 20; -fx-border-radius: 20; -fx-cursor: hand;\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" * Reverts the style of the send button when the mouse exits the button area.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" * Resets the background color and maintains the cursor style for a consistent user experience.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" public void onExitButton() {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" sendButton.setStyle(\"-fx-background-color: #0077B5; -fx-text-fill: #fff; \"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" + \"-fx-background-radius: 20; -fx-border-radius: 20; -fx-cursor: hand;\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"javinchua":80}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents a task with a specific deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e A Deadline task is an extension of the basic Task, with an added","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * characteristic of a \"by\" field that represents the deadline of the task. \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" private String by;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * Creates a new deadline task with the specified description and deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" super(TaskType.DEADLINE, description);","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" * @return A formatted string showing the deadline task\u0027s type, status, description, and deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" return super.toString() + \" (by: \" + this.by + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * Returns a transformed format of the deadline task, useful for data storage or other operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" * @return A string that represents the deadline task in a unique format.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" public String transformFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" return super.transformFormat() + \" | \" + this.by;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" * Returns the deadline of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" * @return A {@code String} representing the deadline of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" public String getBy() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" return this.by;","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" * Modifies the by of this task.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" public void setBy(String newBy) {","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" this.by \u003d newBy;","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":57}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents a task that occurs during a specific period.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e An Event task is an extension of the basic Task, with additional characteristics of","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * \"from\" and \"to\" fields representing the start and end times of the event, respectively. \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" private String from;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" private String to;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * Creates a new event task with the specified description, start time, and end time.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" super(TaskType.EVENT, description);","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" * Returns a string representation of the event task.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * @return A formatted string showing the event task\u0027s type, status, description, start time, and end time.","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" return super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" * Returns a transformed format of the event task, useful for data storage or other operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" * @return A string that represents the event task in a unique format.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" public String transformFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" return super.transformFormat() + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" * Returns the start of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" * @return A {@code String} representing the start of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" public String getFrom() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" return this.from;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" * Returns the end of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" * @return A {@code String} representing the end of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" public String getTo() {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" return this.to;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" * Modifies the from of this task.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" public void setFrom(String newFrom) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" this.from \u003d newFrom;","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" * Modifies the to of this task.","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" public void setTo(String newTo) {","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" this.to \u003d newTo;","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":75}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents a generic task with a specific type, description, and completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e The Task class is a fundamental representation of a task that can be of various types","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * such as TODO, DEADLINE, or EVENT.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Each task has a type, a description, and a flag that indicates whether it has been completed. \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"public class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" private TaskType type;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" private String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * Constructs a new Task instance with the specified type and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" * @param type The type of the task, which can be one of the values in {@link TaskType}.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * @param description A brief description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" public Task(TaskType type, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" this.isDone \u003d false; // Default value for a new task","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" * Provides a string representation of the task, which includes its type, completion status, and description.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * @return A formatted string indicating the task\u0027s type, whether it\u0027s done, and its description.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" String printType;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" printType \u003d \"T\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" case EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" printType \u003d \"E\";","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" printType \u003d \"D\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" printType \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" String indicator \u003d isDone ? \"X\" : \" \";","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" return \"[\" + printType + \"][\" + indicator + \"] \" + description;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" * Sets the task\u0027s completion status to \u0027done\u0027.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" public void mark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" * Resets the task\u0027s completion status to \u0027not done\u0027.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" public void unmark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" * Transforms the task\u0027s data into a specific format, useful for data storage or other representations.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" * @return A string that represents the task\u0027s type, completion status, and description in a unique format.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" public String transformFormat() {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" String printType;","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" case TODO:","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" printType \u003d \"T\";","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" case EVENT:","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" printType \u003d \"E\";","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":" printType \u003d \"D\";","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" printType \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":" return printType + \" | \" + this.isDone + \" | \" + this.description;","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" * Returns the type of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" * @return A {@code TaskType} representing the type of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"javinchua"},"content":" public TaskType getTaskType() {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":" return this.type;","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"javinchua"},"content":" * Returns the description of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"javinchua"},"content":" * @return A {@code String} representing the description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"javinchua"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"javinchua"},"content":" return this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"javinchua"},"content":" * Returns the completion of this task.","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"javinchua"},"content":" * @return A {@code boolean} representing the completion of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"javinchua"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"javinchua"},"content":" return this.isDone;","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"javinchua"},"content":" * Modifies the description of this task.","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"javinchua"},"content":" public void setDescription(String newDescription) {","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"javinchua"},"content":" this.description \u003d newDescription;","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":123}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" * Represents a list of tasks, allowing for various operations such as","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * adding, deleting, marking tasks as done, and unmarking tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003eThe TaskList class provides a comprehensive set of methods to manage and manipulate","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * a list of tasks. Each task in the list can be accessed by its index.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * Methods throw {@link InvalidIndexException} if operations are attempted on invalid indices.\u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" private ArrayList\u003cTask\u003e store;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" * Initializes an empty list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" this.store \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" * Initializes a task list with a given list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * @param tasks An ArrayList of tasks to initialize the task list with.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" if (tasks \u003d\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" throw new IllegalArgumentException(\"Task list cannot be null\");","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" this.store \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" * @return Confirmation message indicating task addition.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" int initialSize \u003d store.size();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" store.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" assert store.size() \u003d\u003d initialSize + 1 : \"Task addition failed!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" return String.format(\"Got it. I\u0027ve added this task:\"","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" + \"\\n\\t%s\\nNow you have %d tasks in the list.\\n\", task, store.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" * Deletes a task from the list based on its index.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" * @return Confirmation message indicating task deletion.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" public String deleteTask(int index) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" int initialSize \u003d store.size();","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" validateIndex(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" Task task \u003d store.remove(index - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" assert store.size() \u003d\u003d initialSize - 1 : \"Task deletion failed!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\"","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" + \"\\n\\t%s\\nNow you have %d tasks in the list.\\n\", task, store.size());","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" * Lists all tasks currently in the list.","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" * @return Formatted string of all tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" StringBuilder output \u003d new StringBuilder(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" for (Task task : store) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" output.append(counter++).append(\".\").append(task).append(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" return output.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":" * Marks a task as done based on its index.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task to be marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" * @return Confirmation message indicating task status change to done.","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":" public String markTask(int index) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" validateIndex(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" Task curr \u003d store.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" curr.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" return String.format(\"Nice! I\u0027ve marked this task as done:\\n\\t%s\\n\", curr);","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":" * Marks a task as not done based on its index.","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task to be marked as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"javinchua"},"content":" * @return Confirmation message indicating task status change to not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"javinchua"},"content":" public String unmarkTask(int index) throws InvalidIndexException {","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"javinchua"},"content":" validateIndex(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"javinchua"},"content":" Task curr \u003d store.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"javinchua"},"content":" curr.unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"javinchua"},"content":" return String.format(\"OK, I\u0027ve marked this task as not done yet:\\n\\t%s\\n\", curr);","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"javinchua"},"content":" * Retrieves the current list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"javinchua"},"content":" * @return A clone of the ArrayList containing all the tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"javinchua"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"javinchua"},"content":" return new ArrayList\u003c\u003e(store);","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"javinchua"},"content":" * Searches and provides tasks containing the specified keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"javinchua"},"content":" * @param keyword Keyword to search for in task descriptions.","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"javinchua"},"content":" * @return Formatted string of matching tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"javinchua"},"content":" public String findTasks(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"javinchua"},"content":" StringBuilder output \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"javinchua"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"javinchua"},"content":" for (int i \u003d 0; i \u003c store.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"javinchua"},"content":" if (store.get(i).getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"javinchua"},"content":" isFound \u003d true;","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"javinchua"},"content":" output.append(i + 1).append(\".\").append(store.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"javinchua"},"content":" if (!isFound) {","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"javinchua"},"content":" output.append(\"No matching tasks found.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"javinchua"},"content":" return output.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"javinchua"},"content":" * Validates the provided index against the task store\u0027s size.","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"javinchua"},"content":" * @param index Index to validate.","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException if the index is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"javinchua"},"content":" private void validateIndex(int index) throws InvalidIndexException {","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"javinchua"},"content":" if (index \u003c 1 || index \u003e store.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"javinchua"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"javinchua"},"content":" * Updates the attributes of a task in the task list based on the provided index.","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"javinchua"},"content":" * The method supports updating the description for all task types. For {@code Event} tasks,","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"javinchua"},"content":" * the \u0027from\u0027 and \u0027to\u0027 attributes can be updated. For {@code Deadline} tasks, the \u0027by\u0027 attribute","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"javinchua"},"content":" * can be updated. Only the provided attributes are updated, while the others remain unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"javinchua"},"content":" * @param index Index of the task in the task list to be updated.","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"javinchua"},"content":" * @param newDescription New description for the task. If {@code null}, description remains unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"javinchua"},"content":" * @param newFrom New starting time/date for an {@code Event} task. If {@code null} or if task is not an event,","lastModifiedDate":"2023-09-10"},{"lineNumber":166,"author":{"gitId":"javinchua"},"content":" * remains unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"javinchua"},"content":" * @param newTo New ending time/date for an {@code Event} task. If {@code null} or if task is not an event,","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"javinchua"},"content":" * remains unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"javinchua"},"content":" * @param newBy New due date for a {@code Deadline} task. If {@code null} or if task is not a deadline,","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"javinchua"},"content":" * remains unchanged.","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"javinchua"},"content":" * @return A confirmation message indicating the updated task details.","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"javinchua"},"content":" * @throws InvalidIndexException If the provided index is out of the range of the task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"javinchua"},"content":" public String updateTask(int index, String newDescription, String newFrom, String newTo, String newBy)","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"javinchua"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"javinchua"},"content":" validateIndex(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"javinchua"},"content":" Task task \u003d store.get(index - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"javinchua"},"content":" if (newDescription !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"javinchua"},"content":" task.setDescription(newDescription);","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"javinchua"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"javinchua"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"javinchua"},"content":" if (newFrom !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"javinchua"},"content":" eventTask.setFrom(newFrom);","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"javinchua"},"content":" if (newTo !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"javinchua"},"content":" eventTask.setTo(newTo);","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"javinchua"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":192,"author":{"gitId":"javinchua"},"content":" Deadline deadlineTask \u003d (Deadline) task;","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"javinchua"},"content":" if (newBy !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"javinchua"},"content":" deadlineTask.setBy(newBy);","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"javinchua"},"content":" return \"Updated task:\\n\\t\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":200}},{"path":"src/main/java/duke/tasks/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Enum representing the types of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":8}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents a todo task, a type of task without a specific deadline or duration.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" * Creates a new todo task with the specified description.","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" super(TaskType.TODO, description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":17}},{"path":"src/main/java/duke/util/DateParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * Utility class for parsing and transforming date-time strings.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * The DateParser class provides functionality for transforming date and datetime strings from","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * one format to another. The class currently supports date strings in the format \"yyyy-MM-dd\"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" * and datetime strings in the format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"public class DateParser {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" * Formatter for parsing input date strings in the format \"yyyy-MM-dd\".","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" private static final DateTimeFormatter INPUT_DATE_FORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" * Formatter for parsing input datetime strings in the format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" private static final DateTimeFormatter INPUT_DATETIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * Formatter for producing output date strings in the format \"MMM dd yyyy\".","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" private static final DateTimeFormatter OUTPUT_DATE_FORMATTER \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" * Formatter for producing output datetime strings in the format \"MMM dd yyyy, h:mma\".","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" private static final DateTimeFormatter OUTPUT_DATETIME_FORMATTER \u003d","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy, h:mma\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" * Pattern for validating input datetime strings.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" private static final Pattern DATETIME_PATTERN \u003d Pattern.compile(\"^\\\\d{4}-\\\\d{2}-\\\\d{2} \\\\d{4}$\");","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" * Pattern for validating input date strings.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" private static final Pattern DATE_PATTERN \u003d Pattern.compile(\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" * Transforms the input date or datetime string to a different format.","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" * If the input string matches the datetime pattern \"yyyy-MM-dd HHmm\", it will be transformed to","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" * \"MMM dd yyyy, h:mma\". If the input string matches the date pattern \"yyyy-MM-dd\", it will be","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" * transformed to \"MMM dd yyyy\". If the input string doesn\u0027t match any of the known patterns,","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" * an InvalidDateTimeException will be thrown.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" * @param dateTimeStr the input date or datetime string.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" * @return a transformed date or datetime string.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" * @throws InvalidDateTimeException if the input string format is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" public static String transformDateTimeFormat(String dateTimeStr) throws InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" if (DATETIME_PATTERN.matcher(dateTimeStr).matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(dateTimeStr, INPUT_DATETIME_FORMATTER);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" return dateTime.format(OUTPUT_DATETIME_FORMATTER);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" } else if (DATE_PATTERN.matcher(dateTimeStr).matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" LocalDate date \u003d LocalDate.parse(dateTimeStr, INPUT_DATE_FORMATTER);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" return date.format(OUTPUT_DATE_FORMATTER);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" throw new InvalidDateTimeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":76}},{"path":"src/main/java/duke/util/Pair.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":" * Represents an immutable key-value pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class Pair {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" private final String key;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" private final String value;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" * Initializes a new Pair with the specified key and value.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" * @param key The key for this pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" * @param value The value to be paired with the specified key.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" public Pair(String key, String value) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" this.key \u003d key;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" this.value \u003d value;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" * Retrieves the key of this pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" * @return The key associated with this pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" public String getKey() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" return key;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * Retrieves the value of this pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @return The value associated with this pair.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" public String getValue() {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" return value;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":39}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.command.AddDeadlineCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.command.AddEventCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import duke.command.AddTodoCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"import duke.command.UpdateCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"import duke.exception.EmptyTaskException;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"import duke.tasks.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" * Provides functionality to parse user input into commands that the application can understand.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" * Parses the input string into a Command.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" * @param input The raw input string from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" * @return A Command that corresponds to the input instruction.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" * @throws DukeException If the input does not match any command or is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" * @throws EmptyTaskException If the input is missing essential information.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" * @throws InvalidDateTimeException If the date or time format is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" public static Command parse(String input) throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" String[] pairSplit \u003d input.split(\"/\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" Pair commandPair \u003d parsePair(pairSplit[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" String command \u003d commandPair.getKey();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" String argument \u003d commandPair.getValue();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" HashMap\u003cString, String\u003e map \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" for (int i \u003d 1; i \u003c pairSplit.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" Pair temp \u003d parsePair(pairSplit[i]);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" map.put(temp.getKey(), temp.getValue());","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" switch (command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" index \u003d parseInt(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" index \u003d parseInt(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" index \u003d parseInt(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" if (argument.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.TODO, \"description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" return new AddTodoCommand(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" if (argument.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.TODO, \"description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" String by \u003d map.getOrDefault(\"by\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" if (by.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.DEADLINE, \"by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":" return new AddDeadlineCommand(argument, DateParser.transformDateTimeFormat(by));","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" if (argument.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.TODO, \"description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" String from \u003d map.getOrDefault(\"from\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":" if (from.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.EVENT, \"from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" String to \u003d map.getOrDefault(\"to\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" if (to.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" throw new EmptyTaskException(TaskType.EVENT, \"to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":" return new AddEventCommand(argument,","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"javinchua"},"content":" DateParser.transformDateTimeFormat(from),","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":" DateParser.transformDateTimeFormat(to));","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"javinchua"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"javinchua"},"content":" return new FindCommand(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"javinchua"},"content":" case \"update\":","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"javinchua"},"content":" index \u003d parseInt(argument);","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"javinchua"},"content":" String newDescription \u003d map.getOrDefault(\"description\", null);","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"javinchua"},"content":" String newFrom \u003d map.getOrDefault(\"from\", null);","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"javinchua"},"content":" String newTo \u003d map.getOrDefault(\"to\", null);","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"javinchua"},"content":" String newBy \u003d map.getOrDefault(\"by\", null);","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"javinchua"},"content":" return new UpdateCommand(index, newDescription, newFrom, newTo, newBy);","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"javinchua"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"javinchua"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"javinchua"},"content":" * Parses a string to extract a pair of values.","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"javinchua"},"content":" * @param input The string to parse.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"javinchua"},"content":" * @return A Pair where the key is the first word of the input, and the value is the rest of the string.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"javinchua"},"content":" * @throws DukeException If the input string is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"javinchua"},"content":" private static Pair parsePair(String input) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"javinchua"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"javinchua"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"javinchua"},"content":" String[] parts \u003d input.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"javinchua"},"content":" String firstWord \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"javinchua"},"content":" String restOfString \u003d parts.length \u003e 1 ? parts[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"javinchua"},"content":" return new Pair(firstWord.trim(), restOfString.trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"javinchua"},"content":" * Converts a string to an integer.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"javinchua"},"content":" * @param argument The string to parse.","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"javinchua"},"content":" * @return The integer representation of the string.","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"javinchua"},"content":" * @throws DukeException If the string cannot be parsed into an integer.","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"javinchua"},"content":" private static int parseInt(String argument) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"javinchua"},"content":" return Integer.parseInt(argument);","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"javinchua"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"javinchua"},"content":" throw new DukeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":145}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"import duke.exception.CorruptHarddriveException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" * Provides functionality for storing tasks in a file and retrieving tasks from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" /** File path to where the tasks are saved. */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" private static final String FILE_PATH \u003d \"./data/hardrive.txt\";","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" /** Directory path to where the file is located. */","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" private static final String DATA_FOLDER_PATH \u003d \"./data\";","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" * Loads the tasks from the hard drive.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" * @return An ArrayList of Task objects, each representing a task retrieved from the hard drive.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" ArrayList\u003cTask\u003e store \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" File f \u003d new File(FILE_PATH); // create a File for the given file path","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" Scanner s \u003d new Scanner(f); // create a Scanner using the File as the source","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" int index \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" index++;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" String data \u003d s.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" String[] dataSplit \u003d data.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" String type \u003d dataSplit[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" if (dataSplit.length !\u003d 3) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" throw new CorruptHarddriveException();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" task \u003d new Todo(dataSplit[2].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" store.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" if (Boolean.valueOf(dataSplit[1].trim())) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" task.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" if (dataSplit.length !\u003d 4) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" throw new CorruptHarddriveException();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" task \u003d new Deadline(dataSplit[2].trim(), dataSplit[3].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" store.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" if (Boolean.valueOf(dataSplit[1].trim())) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" task.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" if (dataSplit.length !\u003d 5) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":" throw new CorruptHarddriveException();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" task \u003d new Event(dataSplit[2].trim(), dataSplit[3].trim(), dataSplit[4].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" store.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" if (Boolean.valueOf(dataSplit[1].trim())) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" task.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" throw new CorruptHarddriveException();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":" System.out.println(\"No initial file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" } catch (CorruptHarddriveException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":" return store;","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":" * Saves the given list of tasks to the hard drive.","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" * @param store The list of tasks to save.","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" public void save(ArrayList\u003cTask\u003e store) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"javinchua"},"content":" File dataFolder \u003d new File(DATA_FOLDER_PATH);","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"javinchua"},"content":" if (!dataFolder.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"javinchua"},"content":" dataFolder.mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"javinchua"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"javinchua"},"content":" for (Task element : store) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"javinchua"},"content":" String data \u003d element.transformFormat();","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"javinchua"},"content":" fw.write(data);","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"javinchua"},"content":" fw.write(System.lineSeparator());","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"javinchua"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"javinchua"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"javinchua"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":113}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":" * Represents the user interface for managing input and output to the console.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" * Provides methods to show welcome and exit messages, get user input, and display a horizontal line.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" /** The horizontal line used for formatting output */","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" private static final String HORIZONTAL_LINE \u003d \"----------------------------------------\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" /** The name of the bot */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" private static final String name \u003d \"Code Buddy\";","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" /** Scanner object to read user input */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" private Scanner inputScanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" * Initializes a new Ui object, setting up the scanner for user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" public Ui() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" this.inputScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" * Displays the welcome message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" * @return A string continaing the welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" public static String showWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" output +\u003d HORIZONTAL_LINE + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" output +\u003d \"Hello! I\u0027m \" + name + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" output +\u003d \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" output +\u003d HORIZONTAL_LINE + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" * Retrieves a line of input from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" * @return A string containing the user\u0027s input.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" public String getUserInput() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" return inputScanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" * Displays the exit message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" * @return A string containing the exit message.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" public String showExitMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" return \"Bye. Hope to see you again soon !\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" * Displays a horizontal line for formatting purposes.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" * @return A string representing a horizontal line.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" public String showLine() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" return HORIZONTAL_LINE + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":65}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-spacing: 10;\" 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":"javinchua"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" \u003cLabel fx:id\u003d\"dialog\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-background-color: #ECECEC; -fx-background-radius: 15; -fx-border-radius: 32; -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.6), 5, 0, 0, 2);\" text\u003d\"Label\" wrapText\u003d\"true\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" \u003cInsets bottom\u003d\"8.0\" left\u003d\"16.0\" right\u003d\"16.0\" top\u003d\"8.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"70.0\" fitWidth\u003d\"70.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"javinchua":21}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"javinchua"},"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\" style\u003d\"-fx-background-color: linear-gradient(to bottom right, #ECECEC, #FFFFFF); -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.6), 5, 0, 0, 2);\" fx:controller\u003d\"duke.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" \u003cTextField fx:id\u003d\"userInput\" style\u003d\"-fx-background-radius: 15; -fx-border-radius: 15;\" 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":11,"author":{"gitId":"javinchua"},"content":" \u003cButton fx:id\u003d\"sendButton\" style\u003d\"-fx-background-color: #0077B5; -fx-text-fill: #fff; -fx-background-radius: 20; -fx-border-radius: 20; -fx-cursor: hand;\" onMouseEntered\u003d\"#onHoverButton\" onMouseExited\u003d\"#onExitButton\" 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":12,"author":{"gitId":"javinchua"},"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":13,"author":{"gitId":"javinchua"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" spacing\u003d\"10\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"javinchua":18}},{"path":"src/test/java/duke/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" // Testing the creation of a Deadline task and its default values.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" public void createDeadlineTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" Deadline deadline \u003d new Deadline(\"Complete project\", \"2023-09-01\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" assertEquals(TaskType.DEADLINE, deadline.getTaskType());","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" assertEquals(\"Complete project\", deadline.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" assertFalse(deadline.isDone()); // Ensure that by default, tasks are not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" assertEquals(\"2023-09-01\", deadline.getBy());","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" // Testing the string representation of a Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" Deadline deadline \u003d new Deadline(\"Complete project\", \"2023-09-01\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[D][ ] Complete project (by: 2023-09-01)\", deadline.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" // Testing the transformFormat method for a Deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" public void transformFormatTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" Deadline deadline \u003d new Deadline(\"Complete project\", \"2023-09-01\");","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" assertEquals(\"D | false | Complete project | 2023-09-01\", deadline.transformFormat());","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":33}},{"path":"src/test/java/duke/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"public class EventTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" // Testing the creation of an Event task and its default values.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" public void createEventTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" Event event \u003d new Event(\"Team Meeting\", \"9:00AM\", \"11:00AM\");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" assertEquals(TaskType.EVENT, event.getTaskType());","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" assertEquals(\"Team Meeting\", event.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" assertFalse(event.isDone()); // Ensure that by default, tasks are not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" assertEquals(\"9:00AM\", event.getFrom());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" assertEquals(\"11:00AM\", event.getTo());","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" // Testing the string representation of an Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" Event event \u003d new Event(\"Team Meeting\", \"9:00AM\", \"11:00AM\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[E][ ] Team Meeting (from: 9:00AM to: 11:00AM)\", event.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" // Testing the transformFormat method for an Event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" public void transformFormatTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" Event event \u003d new Event(\"Team Meeting\", \"9:00AM\", \"11:00AM\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" assertEquals(\"E | false | Team Meeting | 9:00AM | 11:00AM\", event.transformFormat());","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":36}},{"path":"src/test/java/duke/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" // Testing the creation of a task and its default values.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" public void createTaskTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" Task task \u003d new Task(TaskType.TODO, \"Test description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" assertEquals(TaskType.TODO, task.getTaskType());","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" assertEquals(\"Test description\", task.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" assertFalse(task.isDone()); // Ensure that by default, tasks are not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" // Testing the string representation of a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" Task todoTask \u003d new Task(TaskType.TODO, \"Todo task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[T][ ] Todo task\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" Task eventTask \u003d new Task(TaskType.EVENT, \"Event task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[E][ ] Event task\", eventTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" Task deadlineTask \u003d new Task(TaskType.DEADLINE, \"Deadline task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[D][ ] Deadline task\", deadlineTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" // Testing marking a task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" public void markTaskTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" Task task \u003d new Task(TaskType.TODO, \"Test description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" task.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[T][X] Test description\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" // Testing unmarking a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" public void unmarkTaskTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":" Task task \u003d new Task(TaskType.TODO, \"Test description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" task.mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" task.unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" assertEquals(\"[T][ ] Test description\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" // Testing the transformFormat method.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" public void transformFormatTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" Task todoTask \u003d new Task(TaskType.TODO, \"Todo task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":" assertEquals(\"T | false | Todo task\", todoTask.transformFormat());","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" Task eventTask \u003d new Task(TaskType.EVENT, \"Event task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" assertEquals(\"E | false | Event task\", eventTask.transformFormat());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" Task deadlineTask \u003d new Task(TaskType.DEADLINE, \"Deadline task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":" assertEquals(\"D | false | Deadline task\", deadlineTask.transformFormat());","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":64}},{"path":"src/test/java/duke/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" public void createTodoTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" Todo todo \u003d new Todo(\"Test description\");","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" assertEquals(TaskType.TODO, todo.getTaskType());","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" assertEquals(\"Test description\", todo.getDescription());","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":13}},{"path":"src/test/java/duke/util/DateParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"public class DateParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" public void transformDateTimeFormat_validDateTimeString_transformed() throws InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" String input \u003d \"2023-08-28 1430\";","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" String expectedOutput \u003d \"Aug 28 2023, 2:30PM\";","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" assertEquals(expectedOutput, DateParser.transformDateTimeFormat(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" public void transformDateTimeFormat_validDateString_transformed() throws InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" String input \u003d \"2023-08-28\";","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" String expectedOutput \u003d \"Aug 28 2023\";","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" assertEquals(expectedOutput, DateParser.transformDateTimeFormat(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" public void transformDateTimeFormat_invalidDateString_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" String input \u003d \"2023/08/28\";","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e DateParser.transformDateTimeFormat(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" public void transformDateTimeFormat_invalidDateTimeString_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" String input \u003d \"2023/08/28 14:30\";","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e DateParser.transformDateTimeFormat(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" public void transformDateTimeFormat_invalidString_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" String input \u003d \"invalid date\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" assertThrows(InvalidDateTimeException.class, () -\u003e DateParser.transformDateTimeFormat(input));","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":47}},{"path":"src/test/java/duke/util/PairTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"public class PairTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":" public void getKey_validPair_correctKeyReturned() {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":" Pair pair \u003d new Pair(\"name\", \"duke\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":" assertEquals(\"name\", pair.getKey());","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" public void getValue_validPair_correctValueReturned() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" Pair pair \u003d new Pair(\"name\", \"duke\");","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" assertEquals(\"duke\", pair.getValue());","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":20}},{"path":"src/test/java/duke/util/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"package duke.util;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"import duke.command.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"import duke.exception.EmptyTaskException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"import duke.exception.InvalidDateTimeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"javinchua"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"javinchua"},"content":" public void parse_emptyInput_dukeExceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"javinchua"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"javinchua"},"content":" Parser.parse(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"javinchua"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"javinchua"},"content":" public void parse_validByeCommand_exitCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof ExitCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"javinchua"},"content":" public void parse_validListCommand_listCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof ListCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"javinchua"},"content":" public void parse_invalidCommand_dukeExceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"javinchua"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"javinchua"},"content":" Parser.parse(\"invalidcommand\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"javinchua"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"javinchua"},"content":" public void parse_markCommandWithValidIndex_markCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"mark 2\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof MarkCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"javinchua"},"content":" public void parse_unmarkCommandWithValidIndex_unmarkCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"unmark 2\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof UnmarkCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"javinchua"},"content":" public void parse_deleteCommandWithValidIndex_deleteCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"delete 2\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof DeleteCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"javinchua"},"content":" public void parse_todoCommandWithDescription_addTodoCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"todo sample todo\");","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof AddTodoCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"javinchua"},"content":" public void parse_todoCommandWithoutDescription_emptyTaskExceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"javinchua"},"content":" assertThrows(EmptyTaskException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"javinchua"},"content":" Parser.parse(\"todo \");","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"javinchua"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"javinchua"},"content":" public void parse_deadlineCommandWithDescriptionAndBy_addDeadlineCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"deadline sample /by 2023-08-28\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof AddDeadlineCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"javinchua"},"content":" public void parse_deadlineCommandWithoutBy_emptyTaskExceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"javinchua"},"content":" assertThrows(EmptyTaskException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"javinchua"},"content":" Parser.parse(\"deadline sample deadline\");","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"javinchua"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"javinchua"},"content":" public void parse_eventCommandWithDescriptionFromAndTo_addEventCommandReturned() throws DukeException, EmptyTaskException, InvalidDateTimeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"javinchua"},"content":" Command cmd \u003d Parser.parse(\"event sample /from 2023-08-28 1200 /to 2023-08-28 1400\");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"javinchua"},"content":" assertTrue(cmd instanceof AddEventCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"javinchua"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"javinchua"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"javinchua"},"content":" public void parse_eventCommandWithoutTo_emptyTaskExceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"javinchua"},"content":" assertThrows(EmptyTaskException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"javinchua"},"content":" Parser.parse(\"event sample /from 2023-08-28 1200\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"javinchua"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"javinchua"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"javinchua"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"javinchua":95}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"javinchua"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"javinchua"},"content":"deadline return book /by 2019-12-11 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"javinchua"},"content":"event project meeting /from 2019-12-11 1800 /to 2020-01-21 2130","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"javinchua"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"javinchua"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"javinchua"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"javinchua"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"javinchua"},"content":"delete 3","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"javinchua"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"javinchua"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"javinchua":10}},{"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":"javinchua"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"javinchua":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":"javinchua"},"content":"if ! javac -cp ../src/main/java/duke -Xlint:none -d ../bin ../src/main/java/duke/*.java ../src/main/java/duke/**/*.java","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"javinchua":1,"-":37}}] diff --git a/javinchua_ip_master/commits.json b/javinchua_ip_master/commits.json index 832c4d31..b8aed443 100644 --- a/javinchua_ip_master/commits.json +++ b/javinchua_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"javinchua":[{"date":"2023-08-23","commitResults":[{"hash":"9db3c0f7600c5a282950c95473e8dae0f358a9a0","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"9b3c718f37b6b0816133a950155fdb64e2b7b46d","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"5cfb43f4c06869ecf8326f13acbbde06df2e541d","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"b6834ad945537d4c47e5148019897f2533f1b73a","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":8}}},{"hash":"200f0bf111619140b97273ebff6415ccaf7c4426","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":6}}},{"hash":"be1fed0517833543b0de2f442c3aa6c0e054987c","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"3140c46e4858d56c4ad8a0a3254cd067e76af641","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":42}}},{"hash":"0d7ca833537b38f49a25828f97d2e67981ce2e2c","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"19a94f7ca92db29908507d83121251238707aa34","isMergeCommit":false,"messageTitle":"Use Enums","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":152,"deletions":22}}},{"hash":"a35010d964c2f9e63f80cc02d79d21f33cf16f2c","isMergeCommit":false,"messageTitle":"Refactor print of types","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":4}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e627e0733253df394c6ed70f48618e4ad6654cc1","isMergeCommit":false,"messageTitle":"Fix index","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"4f714cd8480bdcd35519ed790c8a1c4bc117331d","isMergeCommit":false,"messageTitle":"Revert \"Fix index\"","messageBody":"This reverts commit e627e0733253df394c6ed70f48618e4ad6654cc1.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"1f22a12118415f67a7331a769ae82c905e73a61e","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Fix index\"\"","messageBody":"This reverts commit 4f714cd8480bdcd35519ed790c8a1c4bc117331d.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"d9697710d5e678b6c5def00d5760e91fed86bbf0","isMergeCommit":false,"messageTitle":"Save Tasks to Harddrive","messageBody":"Tasks that are added or deleted disappear after the chatbot is reloaded\n\nUsers will not be able to access previous tasks\n\nSave the tasks in the hard disk automatically whenever the task list changes. Load the data from the hard disk when the chatbot starts up.\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":125,"deletions":1}}},{"hash":"262603891f20afad61652ba64fdea3df6cbf8b9a","isMergeCommit":false,"messageTitle":"Teach chatbot how to understand dates and times","messageBody":"Output of datetime of task depended on user\u0027s input format\n\nUnclear understanding of date time\n\nUse DateTimeFormatter to format the time and present it clearer to the user\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":4}}}]},{"date":"2023-08-29","commitResults":[{"hash":"1209616e305f026c20c5958cd43c08224bb73c16","isMergeCommit":false,"messageTitle":"Refactor the code to extract out closely related code as classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":6},"java":{"insertions":1178,"deletions":426}}},{"hash":"ea026caf5d68a1540158ac3e140c0a077cfaa932","isMergeCommit":false,"messageTitle":"Organise into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":212,"deletions":213},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3a601dc81f2802b9c4b3df1d9f8d761bf21711ab","isMergeCommit":true,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"cb15800a6c16c028399ce01d3cbab918aa63672e","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"f504b437fbd428e65364c31ac1ad9da6fbe12fa7","isMergeCommit":false,"messageTitle":"Add JUnit test cases","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":364,"deletions":16}}},{"hash":"9bc79c48f36428525ee221bf3f8ac36cd6331b8a","isMergeCommit":false,"messageTitle":"Fix printing statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3},"sh":{"insertions":1,"deletions":1}}},{"hash":"7bf772bd41c01df8d4203af963927a48d5975d19","isMergeCommit":false,"messageTitle":"Edit gradle file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"8ac374e188e0d2b3772f1a8b14ae47b7fc26e929","isMergeCommit":false,"messageTitle":"Edit JavaDocs to be concise","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":50}}},{"hash":"096d7870a0a17af328d1832184b7bfe9ab6bae43","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"Tweak the code to follow Java Coding standards\n","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":8}}},{"hash":"fbad82425b0e95b2692f079b1ec906c65be79742","isMergeCommit":false,"messageTitle":"Find keywords","messageBody":"Given a keyword, users can search for tasks containing that keyword.\n","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}},{"hash":"0530a0930916339c0974b2305cd1593eeb4e4fe7","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"d3e3f2e9fb66d038cadb8be48fad9478915a3cbb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ca97f713e4b9bafdc6d83cc33199ad00dce97b4f","isMergeCommit":false,"messageTitle":"Update Parser.java","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"70285679a235daeb6be88aca264ff53aa3fbe67e","isMergeCommit":false,"messageTitle":"Modify code based on checkstyle violations","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":81,"deletions":52}}}]},{"date":"2023-09-04","commitResults":[{"hash":"cf5eca10e48cd9a516043e0bbc683483387327ed","isMergeCommit":false,"messageTitle":"Implementing Java GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":40,"deletions":0},"java":{"insertions":322,"deletions":59}}}]},{"date":"2023-09-10","commitResults":[{"hash":"d7e47a5a424797bae9dca2bc127c981b0b024e46","isMergeCommit":false,"messageTitle":"Modify GUI","messageBody":"Text gets truncated when text is longer than the height of the dialog\n\nThis results in tasks not being visible to the user\n\nChanging the .fxml files to allow growing of dialog container\n\nThis allows users to see all tasks\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"fxml":{"insertions":9,"deletions":10},"java":{"insertions":2,"deletions":3}}},{"hash":"3b243cee2c8b8294d65ab577965a9a5c57149a20","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"There is no check to ensure tasklist is instantiated correctly and tasks are added and deleted correctly\n\nWe can add checks to see if the code is behaving correctly.\n\nWe add assert statements to ensure the code is behaving appropriately.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"e349b5d0ac8551aacdb0080885f04fe909bf4fc4","isMergeCommit":false,"messageTitle":"Refactor TaskList for enhanced readability and maintainability","messageBody":"The TaskList class has areas with redundant code and unclear string constructions. Additionally, methods like string concatenations in loops are not optimized.\n\nTo ensure the maintainability of the code, increase readability, and optimize performance, it\u0027s essential to refactor the areas of concern. Moreover, it\u0027s crucial to prevent potential bugs and side effects from external list modifications.\n\nRefactor string building using String.format().\nCentralize index validation with validateIndex().\nEnsure a deep copy of the input ArrayList during object construction.\nAdopt StringBuilder for methods with loop-based string concatenations.\nEnhance method documentation.\nAdd null-checks for enhanced error handling.\n\nUsing String.format() and StringBuilder improves clarity and performance, respectively. Centralizing the validation logic prevents code repetition, making the codebase more maintainable. Deep copying ensures the TaskList object remains in a valid state, isolated from external modifications. Enhanced documentation aids in understanding for future developers. Null checks are a good defensive programming measure.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":68}}},{"hash":"f8df13c2c5ef73c27502eb9303e0fc37807125ce","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"2652d176cdb473c97d5679ad35f9705895bc672c","isMergeCommit":false,"messageTitle":"Add Updating of Tasks","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":10}}},{"hash":"63ea39449281692438023c40a463d9e903ae9071","isMergeCommit":true,"messageTitle":"Merge pull request #1 from javinchua/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}},{"hash":"9b0dd9a2bc1c32bd3050f3e3bcfa25ec1d892d51","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-BCD-Extension","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"990103b75c878465a19bd9b40816080716b8a4de","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"52f1eff3636e3fc6930212913c66e7101f40d7a2","isMergeCommit":true,"messageTitle":"Merge pull request #2 from javinchua/branch-BCD-Extension","messageBody":"Branch bcd extension","fileTypesAndContributionMap":{}},{"hash":"e3994835797f25dd2b1f71340f302fcfca7cdddd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6620827cff688008897b8a4f136722366a23cd6d","isMergeCommit":true,"messageTitle":"Merge pull request #3 from javinchua/branch-A-Assertions","messageBody":"Branch a assertions","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"7a39ba32a9cefa6e326bd271c94cd9956e426bbf","isMergeCommit":false,"messageTitle":"Fix checkstyle code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":15}}},{"hash":"e428d1723a6bb87f43e65115586952ff3e7a6001","isMergeCommit":false,"messageTitle":"Update test case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"38ddc2aea33d9622b94ddcd0d22670150516a429","isMergeCommit":false,"messageTitle":"update based on naming conventions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":15}}}]}]},"authorFileTypeContributionMap":{"javinchua":{"java":2194,"md":2,"fxml":39,"sh":1,"bat":1,"gradle":21,"txt":10}},"authorContributionVariance":{"javinchua":241836.16},"authorDisplayNameMap":{"javinchua":"CS2103T-W17-1 CHUA..AVIN"}} +{"authorDailyContributionsMap":{"javinchua":[{"date":"2023-08-23","commitResults":[{"hash":"9db3c0f7600c5a282950c95473e8dae0f358a9a0","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":6}}},{"hash":"9b3c718f37b6b0816133a950155fdb64e2b7b46d","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"5cfb43f4c06869ecf8326f13acbbde06df2e541d","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"b6834ad945537d4c47e5148019897f2533f1b73a","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":8}}},{"hash":"200f0bf111619140b97273ebff6415ccaf7c4426","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":6}}},{"hash":"be1fed0517833543b0de2f442c3aa6c0e054987c","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"3140c46e4858d56c4ad8a0a3254cd067e76af641","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":42}}},{"hash":"0d7ca833537b38f49a25828f97d2e67981ce2e2c","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"19a94f7ca92db29908507d83121251238707aa34","isMergeCommit":false,"messageTitle":"Use Enums","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":152,"deletions":22}}},{"hash":"a35010d964c2f9e63f80cc02d79d21f33cf16f2c","isMergeCommit":false,"messageTitle":"Refactor print of types","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":4}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e627e0733253df394c6ed70f48618e4ad6654cc1","isMergeCommit":false,"messageTitle":"Fix index","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"4f714cd8480bdcd35519ed790c8a1c4bc117331d","isMergeCommit":false,"messageTitle":"Revert \"Fix index\"","messageBody":"This reverts commit e627e0733253df394c6ed70f48618e4ad6654cc1.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"1f22a12118415f67a7331a769ae82c905e73a61e","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Fix index\"\"","messageBody":"This reverts commit 4f714cd8480bdcd35519ed790c8a1c4bc117331d.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"d9697710d5e678b6c5def00d5760e91fed86bbf0","isMergeCommit":false,"messageTitle":"Save Tasks to Harddrive","messageBody":"Tasks that are added or deleted disappear after the chatbot is reloaded\n\nUsers will not be able to access previous tasks\n\nSave the tasks in the hard disk automatically whenever the task list changes. Load the data from the hard disk when the chatbot starts up.\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":125,"deletions":1}}},{"hash":"262603891f20afad61652ba64fdea3df6cbf8b9a","isMergeCommit":false,"messageTitle":"Teach chatbot how to understand dates and times","messageBody":"Output of datetime of task depended on user\u0027s input format\n\nUnclear understanding of date time\n\nUse DateTimeFormatter to format the time and present it clearer to the user\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":4}}}]},{"date":"2023-08-29","commitResults":[{"hash":"1209616e305f026c20c5958cd43c08224bb73c16","isMergeCommit":false,"messageTitle":"Refactor the code to extract out closely related code as classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":6},"java":{"insertions":1178,"deletions":426}}},{"hash":"ea026caf5d68a1540158ac3e140c0a077cfaa932","isMergeCommit":false,"messageTitle":"Organise into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":212,"deletions":213},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3a601dc81f2802b9c4b3df1d9f8d761bf21711ab","isMergeCommit":true,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"cb15800a6c16c028399ce01d3cbab918aa63672e","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"f504b437fbd428e65364c31ac1ad9da6fbe12fa7","isMergeCommit":false,"messageTitle":"Add JUnit test cases","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":364,"deletions":16}}},{"hash":"9bc79c48f36428525ee221bf3f8ac36cd6331b8a","isMergeCommit":false,"messageTitle":"Fix printing statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3},"sh":{"insertions":1,"deletions":1}}},{"hash":"7bf772bd41c01df8d4203af963927a48d5975d19","isMergeCommit":false,"messageTitle":"Edit gradle file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"8ac374e188e0d2b3772f1a8b14ae47b7fc26e929","isMergeCommit":false,"messageTitle":"Edit JavaDocs to be concise","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":50}}},{"hash":"096d7870a0a17af328d1832184b7bfe9ab6bae43","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"Tweak the code to follow Java Coding standards\n","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":8}}},{"hash":"fbad82425b0e95b2692f079b1ec906c65be79742","isMergeCommit":false,"messageTitle":"Find keywords","messageBody":"Given a keyword, users can search for tasks containing that keyword.\n","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":0}}},{"hash":"0530a0930916339c0974b2305cd1593eeb4e4fe7","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"d3e3f2e9fb66d038cadb8be48fad9478915a3cbb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ca97f713e4b9bafdc6d83cc33199ad00dce97b4f","isMergeCommit":false,"messageTitle":"Update Parser.java","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"70285679a235daeb6be88aca264ff53aa3fbe67e","isMergeCommit":false,"messageTitle":"Modify code based on checkstyle violations","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":81,"deletions":52}}}]},{"date":"2023-09-04","commitResults":[{"hash":"cf5eca10e48cd9a516043e0bbc683483387327ed","isMergeCommit":false,"messageTitle":"Implementing Java GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":40,"deletions":0},"java":{"insertions":322,"deletions":59}}}]},{"date":"2023-09-10","commitResults":[{"hash":"d7e47a5a424797bae9dca2bc127c981b0b024e46","isMergeCommit":false,"messageTitle":"Modify GUI","messageBody":"Text gets truncated when text is longer than the height of the dialog\n\nThis results in tasks not being visible to the user\n\nChanging the .fxml files to allow growing of dialog container\n\nThis allows users to see all tasks\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"fxml":{"insertions":9,"deletions":10},"java":{"insertions":2,"deletions":3}}},{"hash":"3b243cee2c8b8294d65ab577965a9a5c57149a20","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"There is no check to ensure tasklist is instantiated correctly and tasks are added and deleted correctly\n\nWe can add checks to see if the code is behaving correctly.\n\nWe add assert statements to ensure the code is behaving appropriately.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"e349b5d0ac8551aacdb0080885f04fe909bf4fc4","isMergeCommit":false,"messageTitle":"Refactor TaskList for enhanced readability and maintainability","messageBody":"The TaskList class has areas with redundant code and unclear string constructions. Additionally, methods like string concatenations in loops are not optimized.\n\nTo ensure the maintainability of the code, increase readability, and optimize performance, it\u0027s essential to refactor the areas of concern. Moreover, it\u0027s crucial to prevent potential bugs and side effects from external list modifications.\n\nRefactor string building using String.format().\nCentralize index validation with validateIndex().\nEnsure a deep copy of the input ArrayList during object construction.\nAdopt StringBuilder for methods with loop-based string concatenations.\nEnhance method documentation.\nAdd null-checks for enhanced error handling.\n\nUsing String.format() and StringBuilder improves clarity and performance, respectively. Centralizing the validation logic prevents code repetition, making the codebase more maintainable. Deep copying ensures the TaskList object remains in a valid state, isolated from external modifications. Enhanced documentation aids in understanding for future developers. Null checks are a good defensive programming measure.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":68}}},{"hash":"f8df13c2c5ef73c27502eb9303e0fc37807125ce","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"2652d176cdb473c97d5679ad35f9705895bc672c","isMergeCommit":false,"messageTitle":"Add Updating of Tasks","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":10}}},{"hash":"63ea39449281692438023c40a463d9e903ae9071","isMergeCommit":true,"messageTitle":"Merge pull request #1 from javinchua/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}},{"hash":"9b0dd9a2bc1c32bd3050f3e3bcfa25ec1d892d51","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-BCD-Extension","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"990103b75c878465a19bd9b40816080716b8a4de","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"52f1eff3636e3fc6930212913c66e7101f40d7a2","isMergeCommit":true,"messageTitle":"Merge pull request #2 from javinchua/branch-BCD-Extension","messageBody":"Branch bcd extension","fileTypesAndContributionMap":{}},{"hash":"e3994835797f25dd2b1f71340f302fcfca7cdddd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6620827cff688008897b8a4f136722366a23cd6d","isMergeCommit":true,"messageTitle":"Merge pull request #3 from javinchua/branch-A-Assertions","messageBody":"Branch a assertions","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"7a39ba32a9cefa6e326bd271c94cd9956e426bbf","isMergeCommit":false,"messageTitle":"Fix checkstyle code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":15}}},{"hash":"e428d1723a6bb87f43e65115586952ff3e7a6001","isMergeCommit":false,"messageTitle":"Update test case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"38ddc2aea33d9622b94ddcd0d22670150516a429","isMergeCommit":false,"messageTitle":"update based on naming conventions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":15}}}]},{"date":"2023-09-16","commitResults":[{"hash":"7e089f882a9a2dd3d0554c8ca774d1710ad512d7","isMergeCommit":false,"messageTitle":"Update User Guide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":86,"deletions":14}}},{"hash":"fbff0d8e1f3b4dfafe07728dd66ea16f9522685d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{}},{"hash":"1213bf03eef10ec4de7408ca3441e43b41ea4e01","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"javinchua":{"java":2194,"md":88,"fxml":39,"sh":1,"bat":1,"gradle":22,"txt":10}},"authorContributionVariance":{"javinchua":233848.61},"authorDisplayNameMap":{"javinchua":"CS2103T-W17-1 CHUA..AVIN"}} diff --git a/jedkohjk_ip_master/authorship.json b/jedkohjk_ip_master/authorship.json index 8a9aff02..5d34ceca 100644 --- a/jedkohjk_ip_master/authorship.json +++ b/jedkohjk_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"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":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" mainClass.set(\"duke/Launcher\")","lastModifiedDate":"2023-09-05"},{"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":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jedkohjk":21,"-":41}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.controller.Duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.controller.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" private Duke duke \u003d new Duke(\"chatBot\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public void stop() {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" duke.save();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":45}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Command to terminate the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Constructs ByeCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public ByeCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" super(\"bye\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" return \"\";","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":42}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.Argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * Actionable representing a command input by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" protected final String commandName;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" protected Map\u003cString, Object\u003e args;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * Constructs command.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @param commandName The name of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" public Command(String commandName, Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" this.commandName \u003d commandName;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.args \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" protected abstract List\u003cCommandElement\u003e getCommandElements();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * Generates regex pattern expected for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @return Regex pattern expected for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public Pattern getPattern() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return Pattern.compile(String.join(\"\", this.getCommandElements().stream().map(","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" e -\u003e e.getRegexForm()).collect(Collectors.toList())));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" * Generates readable expected structure for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @return Readable expected structure for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" public String getStructure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e struct \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" struct.add(commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" struct.add(e.getName());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" return String.join(\" \", struct);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e commandList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" commandList.add(this.commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" int i \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" if (e instanceof Argument) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" commandList.add(((Argument) e).formatOutput(args.get(e.toString())).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" commandList.add(e.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":" return String.join(\" \", commandList);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":" * Generates list of arguments expected from command.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":" * @return List of arguments expected from command.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":" public List\u003cArgument\u003e getArguments() {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":" List\u003cArgument\u003e argsList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":" argsList.add(null);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":" if (e instanceof Argument) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":" argsList.add((Argument) e);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jedkohjk"},"content":" argsList.add(null);","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"jedkohjk"},"content":" return argsList;","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"jedkohjk"},"content":" * Gets command to act.","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jedkohjk"},"content":" * @param tasks The list of tasks to act on.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jedkohjk"},"content":" * @param storage The Storage to update data.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jedkohjk"},"content":" * @return Message for the user.","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException When the execution fails.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jedkohjk"},"content":" public abstract String execute(TaskList tasks, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":106}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to find all relevant tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructs ListCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public FindCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"find\", args);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" public List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"key\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"key\") instanceof String;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" String key \u003d (String) this.args.get(\"key\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" List\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" if (task.isRelated(key)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Here are the relevant tasks:\\n%s\", Formatter.stringifyList(filteredTasks));","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jedkohjk":52}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Command to list all current tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Constructs ListCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public ListCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" super(\"list\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Here are the tasks in your list:\\n%s\", Formatter.stringifyList(tasks));","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":41}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Command to mark a task as complete.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructs MarkCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public MarkCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" super(\"mark\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"index\") instanceof Integer;","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" tasks.mark(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Nice! I\u0027ve marked this task as done:\\n %s\", tasks.access(idx).toString());","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":45}},{"path":"src/main/java/duke/command/OngoingCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Command to list all events on a given date.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"public class OngoingCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * Constructs OngoingCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public OngoingCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" super(\"ongoing\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return List.of(new DateArgument(\"date\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"date\") instanceof LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" LocalDate date \u003d (LocalDate) this.args.get(\"date\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" List\u003cTask\u003e filteredEvents \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" if ((task instanceof Event) \u0026\u0026 ((Event) task).isOngoing(date)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" filteredEvents.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Here are the ongoing events on %s:\\n%s\",","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" Formatter.stringifyDate(date), Formatter.stringifyList(filteredEvents));","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":55}},{"path":"src/main/java/duke/command/QueueCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to list all deadlines in sorted order.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class QueueCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructs QueueCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public QueueCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"queue\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" List\u003cDeadline\u003e deadlines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" deadlines.add((Deadline) task);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Here is the queue of deadlines:\\n%s\", Formatter.stringifyList(deadlines));","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":50}},{"path":"src/main/java/duke/command/RemoveCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to remove an task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class RemoveCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructs RemoveCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public RemoveCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"remove\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"index\") instanceof Integer;","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n %s\\n%s\",","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" tasks.delete(idx).toString(), Formatter.getTaskCount(tasks.size()));","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":46}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Command to mark a task as incomplete.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructs UnmarkCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public UnmarkCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" super(\"unmark\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"index\") instanceof Integer;","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" tasks.unmark(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"OK, I\u0027ve marked this task as not done yet:\\n %s\", tasks.access(idx).toString());","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":45}},{"path":"src/main/java/duke/command/task/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.field.Field;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class DeadlineCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructs DeadlineCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public DeadlineCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"deadline\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/by\"), new DateArgument(\"by\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" protected Deadline makeTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"description\") instanceof String;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"by\") instanceof LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" return new Deadline((String) this.args.get(\"description\"), (LocalDate) this.args.get(\"by\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":46}},{"path":"src/main/java/duke/command/task/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DateRangeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.field.Field;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new event.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class EventCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructs EventCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public EventCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"event\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/from\"), new DateArgument(\"from\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/to\"), new DateArgument(\"to\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" protected Event makeTask() throws DateRangeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"description\") instanceof String;","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"from\") instanceof LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"to\") instanceof LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" return new Event((String) this.args.get(\"description\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" (LocalDate) this.args.get(\"from\"), (LocalDate) this.args.get(\"to\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":50}},{"path":"src/main/java/duke/command/task/TaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"public abstract class TaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructs TaskCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param commandName The name of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public TaskCommand(String commandName, Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(commandName, args);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" protected abstract Task makeTask() throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" Task newTask \u003d this.makeTask();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n %s\\n%s\",","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" tasks.access(tasks.size()).toString(), Formatter.getTaskCount(tasks.size()));","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":40}},{"path":"src/main/java/duke/command/task/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"public class ToDoCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" private Map\u003cString, Object\u003e inputs;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructs ToDoCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public ToDoCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" super(\"todo\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" protected ToDo makeTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"description\") instanceof String;","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" return new ToDo((String) this.args.get(\"description\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":43}},{"path":"src/main/java/duke/controller/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.controller;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * The main chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"public class Duke {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" private String name;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructs Duke.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param name Name of the bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public Duke(String name) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" this.tasks \u003d this.storage.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * Returns default greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" * @return Default greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String greet() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Hello! I\u0027m %s\\nWhat can I do for you?\", name);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * Generates response to command.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" * @param input Command from user.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @return Response by chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" return cmd.execute(tasks, storage);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" * Saves tasks to file.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" public void save() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":60}},{"path":"src/main/java/duke/controller/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.controller;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.DialogBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" * Initialises the window.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" * Sets the duke object used for the program logic.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @param duke The duke object to be set.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" public void setDuke(Duke duke) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" this.duke \u003d duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" DialogBox.getDukeDialog(duke.greet(), dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"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":53,"author":{"gitId":"jedkohjk"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":66}},{"path":"src/main/java/duke/exception/CommandFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when the general format of a command is wrong.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class CommandFormatException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs CommandFormatException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param cmd The command in question.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * @param format The correct format for the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" public CommandFormatException(String cmd, String format) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! %s command should have the following format:\\n %s\", cmd, format));","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":18}},{"path":"src/main/java/duke/exception/DateRangeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an end date precedes a start date.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class DateRangeException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs DateRangeException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public DateRangeException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"☹ OOPS!!! End date cannot be before start date.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * General exception thrown by duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs DukeException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param msg The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(msg);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/EmptyArgException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an argument is left empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class EmptyArgException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs EmptyArgException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param arg The name of the argument in question.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public EmptyArgException(String arg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! %s field should not be empty.\", arg));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when a command is not recognised.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs InvalidCommandException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param cmd The invalid command entered.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public InvalidCommandException(String cmd) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what \\\"%s\\\" means :-(\", cmd));","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when a date is input in the wrong format.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidDateException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs InvalidDateException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public InvalidDateException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"☹ OOPS!!! Please enter a valid date in yyyy-mm-dd format.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an index is input in the wrong format.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs InvalidIndexException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"☹ OOPS!!! Please enter a valid positive integer for the index.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/OutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when the index entered is out of range of the current list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class OutOfBoundsException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructs OutOfBoundsException.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param index The index input.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * @param taskCount The current number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" public OutOfBoundsException(int index, int taskCount) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"☹ OOPS!!! %d is out of range. %s\", index, Formatter.getTaskCount(taskCount)));","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":20}},{"path":"src/main/java/duke/object/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.OutOfBoundsException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * List containing Tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Marks task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to mark the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" public void mark(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" this.access(index).mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * Unmarks task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to unmark the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" public void unmark(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" this.access(index).unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * Accesses task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to access the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @return The task at the index.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public Task access(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" this.checkBounds(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return super.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * Deletes task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to delete the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public Task delete(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" this.checkBounds(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" return super.remove(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" private void checkBounds(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" if (index \u003e this.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" throw new OutOfBoundsException(index, this.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":63}},{"path":"src/main/java/duke/object/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.DeadlineCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Task with an end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class Deadline extends Task implements Comparable\u003cDeadline\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructs Deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param by The end date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), Formatter.stringifyDate(this.by));","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return (new DeadlineCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description),","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"by\", this.by)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public int compareTo(Deadline other) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" return (int) ChronoUnit.DAYS.between(other.by, this.by);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":56}},{"path":"src/main/java/duke/object/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DateRangeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Task with a start and end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructs Event.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param from The start date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @param to The end date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * @throws DateRangeException When the start date is after the end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public Event(String description, LocalDate from, LocalDate to) throws DateRangeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" if (to.isBefore(from)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" throw new DateRangeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" Formatter.stringifyDate(this.from), Formatter.stringifyDate(this.to));","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" return (new EventCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description),","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"from\", this.from),","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"to\", this.to)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" * Returns whether the event is happening on a given date.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" * @param date The date one is checking.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" * @return Whether the event is happening on that date.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" public boolean isOngoing(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" return !(date.isBefore(this.from) || date.isAfter(this.to));","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":66}},{"path":"src/main/java/duke/object/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * Represents a task stored by the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"public class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" protected String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructs Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * Marks task as complete.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" public void mark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * Marks task as incomplete.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public void unmark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[%s] %s\", this.isDone ? \"X\" : \" \", this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * Constructs the command needed to create the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" * @param idx The task\u0027s index in a given list;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" * @return The string command needed to create the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" Map\u003cString, Object\u003e indexMap \u003d Map.ofEntries(new SimpleEntry\u003c\u003e(\"index\", idx));","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" return (new MarkCommand(indexMap)).toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" return (new UnmarkCommand(indexMap)).toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" * Returns whether a key is related to the task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" * @param key The key to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" * @return Whether the key is a substring of the task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" public boolean isRelated(String key) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" return this.description.contains(key);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":73}},{"path":"src/main/java/duke/object/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.ToDoCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Task without any date requirements.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Constructs ToDo.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return (new ToDoCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":40}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.function.Function;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"import duke.command.OngoingCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"import duke.command.QueueCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"import duke.command.RemoveCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.DeadlineCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.EventCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.ToDoCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.CommandFormatException;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.Argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * Object to interpret user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" private static final Map\u003cString, Function\u003cMap\u003cString, Object\u003e, Command\u003e\u003e COMMANDS \u003d Map.ofEntries(","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"list\", x -\u003e new ListCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"find\", x -\u003e new FindCommand(x)),","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"queue\", x -\u003e new QueueCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"ongoing\", x -\u003e new OngoingCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"mark\", x -\u003e new MarkCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"unmark\", x -\u003e new UnmarkCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"todo\", x -\u003e new ToDoCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"deadline\", x -\u003e new DeadlineCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"event\", x -\u003e new EventCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"remove\", x -\u003e new RemoveCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"bye\", x -\u003e new ByeCommand(x)));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * Converts input to Command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * @param input User input.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @return Command based on the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException When the input is not formatted correctly.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public static Command parse(String input) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" String[] commandParts \u003d input.replaceAll(\"\\n\", \"\").trim().split(\" \", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" String commandName \u003d commandParts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" String commandArgs \u003d commandParts.length \u003e 1 ? commandParts[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" Map\u003cString, Object\u003e args \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" if (!COMMANDS.containsKey(commandName)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidCommandException(commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d COMMANDS.get(commandName).apply(args);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" Matcher groups \u003d cmd.getPattern().matcher(commandArgs);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" if (!groups.matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" throw new CommandFormatException(commandName, cmd.getStructure());","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" List\u003cArgument\u003e fields \u003d cmd.getArguments();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" for (int i \u003d 0; i \u003c fields.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" Argument arg \u003d fields.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" if (arg !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" args.put(arg.toString(), arg.formatInput(groups.group(i)));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" return cmd;","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":75}},{"path":"src/main/java/duke/parser/element/CommandElement.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * A substring of a command representing a logical unit.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public interface CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Gets the name of the command element.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @return Name of the command element.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" abstract String getName();","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * Gets how the command element will be represented in regex.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * @return The command element in regex form.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" abstract String getRegexForm();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":22}},{"path":"src/main/java/duke/parser/element/argument/Argument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" * The variable user inputs in a command.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"public abstract class Argument implements CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" private String text;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Constructs Argument.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public Argument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"{ %s }\", this.text);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String getRegexForm() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return \"(.*)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" * Interprets the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @return The object interpreted with semantic meaning to the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException if the input cannot be converted into something of meaning.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" public abstract Object formatInput(String input) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" * Converts a value from the program to readable form.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" * @param val Object with semantic meaning to the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" * @return The readable form of the object.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" public abstract String formatOutput(Object val);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":63}},{"path":"src/main/java/duke/parser/element/argument/DateArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Input must be a date.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class DateArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Constructs DateArgument.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public DateArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public LocalDate formatInput(String input) throws InvalidDateException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" return LocalDate.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" return val.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":42}},{"path":"src/main/java/duke/parser/element/argument/IndexArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Input must be an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class IndexArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructs IndexArgument.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" public IndexArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public Integer formatInput(String input) throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" int idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" idx \u003d Integer.parseInt(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" if (idx \u003c\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" return String.valueOf((int) ((Integer) val));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":44}},{"path":"src/main/java/duke/parser/element/argument/StringArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.EmptyArgException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Input must be a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class StringArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructs StringArgument.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" public StringArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public String formatInput(String input) throws EmptyArgException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" if (input \u003d\u003d null || input.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" throw new EmptyArgException(this.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return input;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return val.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":38}},{"path":"src/main/java/duke/parser/element/field/Field.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.field;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * A fixed string that acts as a delimiter in a command.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class Field implements CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" private String text;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Constructs Field.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * @param text The text represented by the field.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" public Field(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public String getRegexForm() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"( %s )\", this.text);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":45}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Writes data to and retrieves data from storage file.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" private File dataFile;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * Constructs Storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public Storage() {","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" this.dataFile \u003d new File(String.join(File.separator, \".\", \"duke_data\", \"data.txt\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" makeFile(this.dataFile);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" private void makeFile(File file) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" File dir \u003d file.getParentFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" dir.mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" assert false;","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * Generates TaskList from stored data.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" * @return TaskList from stored data.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" public TaskList loadTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" Scanner sc;","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" sc \u003d new Scanner(dataFile);","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" assert sc !\u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" String saved \u003d sc.nextLine().replaceAll(\"\\n\", \"\").trim();","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" if (saved.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" continue;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d Parser.parse(saved);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" cmd.execute(tasks, this);","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" tasks.clear();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" * Saves TaskList to file.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" * @param tasks TaskList to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":" assert dataFile.exists();","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":" FileWriter writer \u003d new FileWriter(dataFile, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":" writer.append(tasks.get(i).toCommand(i + 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":" writer.flush();","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":" assert false;","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":89}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.ui;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.controller.MainWindow;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" * Creates dialogbox on the user side.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" * @param text The text in the dialog box.","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" * @param img The user profile picture.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" * Creates dialogbox on duke side.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" * @param text The text in the dialog box.","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" * @param img Duke profile picture.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":74}},{"path":"src/main/java/duke/util/Formatter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.util;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Common string formats used throughout the project.","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class Formatter {","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Returns shared default message for counting tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param n Number of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * @return The default message for that number of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" public static String getTaskCount(int n) {","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"You have %d task%s in the list now.\", n, n \u003d\u003d 1 ? \"\" : \"s\");","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * Converts list to be displayed as a string.","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @param arr List converted.","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @return The list as a string.","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" public static \u003cT\u003e String stringifyList(List\u003cT\u003e arr) {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e enumArr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" for (T e : arr) {","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" enumArr.add(String.format(\"%d. %s\", i++, e.toString()));","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return String.join(\"\\n\", enumArr);","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * Converts date to be displayed as a string.","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" * @param date Date converted.","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @return The date as a string.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" public static String stringifyDate(LocalDate date) {","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" return date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"jedkohjk":48}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"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":"jedkohjk"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"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":"jedkohjk"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"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":"jedkohjk"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"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.controller.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"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":"jedkohjk"},"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":"jedkohjk"},"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":"jedkohjk"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":19}},{"path":"src/test/java/duke/parser/element/argument/IndexArgumentTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"public class IndexArgumentTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_string_invalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" IndexArgument tested \u003d new IndexArgument(\"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" tested.formatInput(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_nonpositiveInteger_invalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" IndexArgument tested \u003d new IndexArgument(\"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" tested.formatInput(\"0\");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_positiveInteger_integer() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" assertEquals((new IndexArgument(\"\")).formatInput(\"1\"), 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":43}},{"path":"src/test/java/duke/util/FormatterTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.util;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"public class FormatterTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_stringList_enumeratedList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Formatter.stringifyList(List.of(\"first\", \"second\", \"third\")), \"1. first\\n2. second\\n3. third\");","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_intList_enumeratedList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Formatter.stringifyList(List.of(1, 2, 3)), \"1. 1\\n2. 2\\n3. 3\");","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_emptyList_emptyString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Formatter.stringifyList(List.of()), \"\");","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":26}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"# Duke User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"## Description","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"Duke is a chatbot which can store tasks such as todos, deadlines and events.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"## Setup","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"1. Download Duke [here](https://github.com/jedkohjk/ip/releases).","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"2. Find the location of duke.jar in the file explorer.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"3. Copy the file path to duke.jar.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"4. Open the terminal and type ```cd ``` and paste in the file path copied. Enter the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"5. Then type ```java -jar duke.java``` and enter the command to start Duke.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"## Features ","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"### Add tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"#### ToDo","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"Todos are tasks with only a description.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"The following syntax is used to add a todo:","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"todo {description}","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"todo eat","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"todo sleep","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"#### Deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"Deadlines are tasks with a description and a due date.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"The following syntax is used to add a deadline:","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"deadline {description} /by {due date}","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"Note: The date should be in YYYY-MM-DD format.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"deadline eat /by 2050-01-01","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"deadline sleep /by 2030-01-01","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":"#### Event","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"Events are tasks with a description, a start date, and an end date.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"The following syntax is used to add an event:","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":"event {description} /from {start date} /to {end date}","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":"Note: The dates should be in YYYY-MM-DD format.","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":"event eat /from 2050-01-01 /to 2070-01-01","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":"event sleep /from 2030-01-01 /to 2080-01-01","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":"### List tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":"List all tasks saved by the chatbot by entering the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":"list","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":"### Find tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":"Find relevant tasks using a substring of their description using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":"find {substring of description}","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":"If this is the list of tasks:","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"jedkohjk"},"content":"1. [T][ ] abc","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"jedkohjk"},"content":"2. [T][ ] a b c","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"jedkohjk"},"content":"The command ```find b``` will return:","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":97,"author":{"gitId":"jedkohjk"},"content":"1. [T][ ] abc","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"jedkohjk"},"content":"2. [T][ ] a b c","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"jedkohjk"},"content":"The command ```find ab``` will return:","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"jedkohjk"},"content":"1. [T][ ] abc","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"jedkohjk"},"content":"### Remove tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"jedkohjk"},"content":"Remove tasks based on their index by which they appear when you use ```list``` using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"jedkohjk"},"content":"remove {index}","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"jedkohjk"},"content":"Example:","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"jedkohjk"},"content":"If this is the list of tasks:","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"jedkohjk"},"content":"1. [T][ ] eat","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"jedkohjk"},"content":"2. [T][ ] sleep","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"jedkohjk"},"content":"The command ```remove 1``` will remove ```1. [T][ ] eat```.","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"jedkohjk"},"content":"### Mark as complete","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"jedkohjk"},"content":"Mark task as complete based on their index by which they appear when you use ```list``` using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"jedkohjk"},"content":"mark {index}","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"jedkohjk"},"content":"Whether a task is complete is indicated by whether or not there is an ```X``` in the box beside it when it is listed.","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"jedkohjk"},"content":"### Mark as incomplete","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"jedkohjk"},"content":"Mark task as incomplete based on their index by which they appear when you use ```list``` using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"jedkohjk"},"content":"unmark {index}","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"jedkohjk"},"content":"Whether a task is complete is indicated by whether or not there is an ```X``` in the box beside it when it is listed.","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"jedkohjk"},"content":"### Sort deadlines","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"jedkohjk"},"content":"List all deadlines sorted by their due dates using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"jedkohjk"},"content":"queue","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"jedkohjk"},"content":"### Find ongoing events","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"jedkohjk"},"content":"List all ongoing events on a given date using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"jedkohjk"},"content":"ongoing {date}","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"jedkohjk"},"content":"Note: The date should be in YYYY-MM-DD format.","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"jedkohjk"},"content":"### Exit the program","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"jedkohjk"},"content":"Exit the program by typing the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"jedkohjk"},"content":"bye","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"jedkohjk"},"content":"Your current data will be saved and auto-loaded upon restarting the program.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"jedkohjk":165,"-":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":"jedkohjk"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u002717.0.7\u0027","lastModifiedDate":"2023-09-16"},{"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":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" mainClass.set(\"duke/Launcher\")","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"jedkohjk":22,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"# Duke User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"## Description","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"Duke is a chatbot which can store tasks such as todos, deadlines and events.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"## Setup","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"1. Download Duke [here](https://github.com/jedkohjk/ip/releases).","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"2. Find the location of duke.jar in the file explorer.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"3. Copy the file path to duke.jar.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"4. Open the terminal and type ```cd ``` and paste in the file path copied. Enter the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"5. Then type ```java -jar duke.java``` and enter the command to start Duke.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"### Add tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"#### ToDo","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"Todos are tasks with only a description.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"The following syntax is used to add a todo:","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"todo {description}","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"todo eat","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"todo sleep","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"#### Deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"Deadlines are tasks with a description and a due date.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"The following syntax is used to add a deadline:","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"deadline {description} /by {due date}","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"Note: The date should be in YYYY-MM-DD format.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"deadline eat /by 2050-01-01","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"deadline sleep /by 2030-01-01","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":"#### Event","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":"Events are tasks with a description, a start date, and an end date.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"The following syntax is used to add an event:","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":"event {description} /from {start date} /to {end date}","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":"Note: The dates should be in YYYY-MM-DD format.","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":"event eat /from 2050-01-01 /to 2070-01-01","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":"event sleep /from 2030-01-01 /to 2080-01-01","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":"### List tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":"List all tasks saved by the chatbot by entering the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":"list","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":"### Find tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":"Find relevant tasks using a substring of their description using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":"find {substring of description}","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":"If this is the list of tasks:","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"jedkohjk"},"content":"1. [T][ ] abc","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"jedkohjk"},"content":"2. [T][ ] a b c","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"jedkohjk"},"content":"The command ```find b``` will return:","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"jedkohjk"},"content":"1. [T][ ] abc","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"jedkohjk"},"content":"2. [T][ ] a b c","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"jedkohjk"},"content":"The command ```find ab``` will return:","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"jedkohjk"},"content":"1. [T][ ] abc","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"jedkohjk"},"content":"### Remove tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"jedkohjk"},"content":"Remove tasks based on their index by which they appear when you use ```list``` using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"jedkohjk"},"content":"remove {index}","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"jedkohjk"},"content":"Example:","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":117,"author":{"gitId":"jedkohjk"},"content":"If this is the list of tasks:","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":119,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"jedkohjk"},"content":"1. [T][ ] eat","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"jedkohjk"},"content":"2. [T][ ] sleep","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"jedkohjk"},"content":"The command ```remove 1``` will remove ```1. [T][ ] eat```.","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"jedkohjk"},"content":"### Mark as complete","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"jedkohjk"},"content":"Mark task as complete based on their index by which they appear when you use ```list``` using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"jedkohjk"},"content":"mark {index}","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"jedkohjk"},"content":"Whether a task is complete is indicated by whether or not there is an ```X``` in the box beside it when it is listed.","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"jedkohjk"},"content":"### Mark as incomplete","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":138,"author":{"gitId":"jedkohjk"},"content":"Mark task as incomplete based on their index by which they appear when you use ```list``` using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":140,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"jedkohjk"},"content":"unmark {index}","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"jedkohjk"},"content":"Whether a task is complete is indicated by whether or not there is an ```X``` in the box beside it when it is listed.","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"jedkohjk"},"content":"### Sort deadlines","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"jedkohjk"},"content":"List all deadlines sorted by their due dates using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":150,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"jedkohjk"},"content":"queue","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":154,"author":{"gitId":"jedkohjk"},"content":"### Find ongoing events","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":156,"author":{"gitId":"jedkohjk"},"content":"List all ongoing events on a given date using the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":158,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"jedkohjk"},"content":"ongoing {date}","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"jedkohjk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"jedkohjk"},"content":"Note: The date should be in YYYY-MM-DD format.","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":163,"author":{"gitId":"jedkohjk"},"content":"### Exit the program","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":165,"author":{"gitId":"jedkohjk"},"content":"Exit the program by typing the following command:","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":167,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":168,"author":{"gitId":"jedkohjk"},"content":"bye","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":170,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"jedkohjk"},"content":"Your current data will be saved and auto-loaded upon restarting the program.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"jedkohjk":155,"-":16}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.controller.Duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.controller.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" private Duke duke \u003d new Duke(\"chatBot\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public void stop() {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" duke.save();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":45}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Command to terminate the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Constructs ByeCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public ByeCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" super(\"bye\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" return \"\";","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":42}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.Argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * Actionable representing a command input by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" protected final String commandName;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" protected Map\u003cString, Object\u003e args;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * Constructs command.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @param commandName The name of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" public Command(String commandName, Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" this.commandName \u003d commandName;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.args \u003d args;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" protected abstract List\u003cCommandElement\u003e getCommandElements();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * Generates regex pattern expected for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @return Regex pattern expected for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public Pattern getPattern() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return Pattern.compile(String.join(\"\", this.getCommandElements().stream().map(","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" e -\u003e e.getRegexForm()).collect(Collectors.toList())));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" * Generates readable expected structure for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @return Readable expected structure for command.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" public String getStructure() {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e struct \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" struct.add(commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" struct.add(e.getName());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" return String.join(\" \", struct);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e commandList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" commandList.add(this.commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" int i \u003d 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" if (e instanceof Argument) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" commandList.add(((Argument) e).formatOutput(args.get(e.toString())).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" commandList.add(e.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":" return String.join(\" \", commandList);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":" * Generates list of arguments expected from command.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":" * @return List of arguments expected from command.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":" public List\u003cArgument\u003e getArguments() {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":" List\u003cArgument\u003e argsList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":" argsList.add(null);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":" for (CommandElement e : this.getCommandElements()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":" if (e instanceof Argument) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":" argsList.add((Argument) e);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"jedkohjk"},"content":" argsList.add(null);","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"jedkohjk"},"content":" return argsList;","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"jedkohjk"},"content":" * Gets command to act.","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"jedkohjk"},"content":" * @param tasks The list of tasks to act on.","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"jedkohjk"},"content":" * @param storage The Storage to update data.","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"jedkohjk"},"content":" * @return Message for the user.","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException When the execution fails.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"jedkohjk"},"content":" public abstract String execute(TaskList tasks, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":106}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to find all relevant tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructs ListCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public FindCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"find\", args);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" public List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"key\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"key\") instanceof String;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" String key \u003d (String) this.args.get(\"key\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" List\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" if (task.isRelated(key)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Here are the relevant tasks:\\n%s\", Formatter.stringifyList(filteredTasks));","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"jedkohjk":52}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Command to list all current tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Constructs ListCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" public ListCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" super(\"list\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Here are the tasks in your list:\\n%s\", Formatter.stringifyList(tasks));","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":41}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Command to mark a task as complete.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructs MarkCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public MarkCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" super(\"mark\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"index\") instanceof Integer;","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" tasks.mark(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Nice! I\u0027ve marked this task as done:\\n %s\", tasks.access(idx).toString());","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":45}},{"path":"src/main/java/duke/command/OngoingCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * Command to list all events on a given date.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"public class OngoingCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * Constructs OngoingCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public OngoingCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" super(\"ongoing\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return List.of(new DateArgument(\"date\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"date\") instanceof LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" LocalDate date \u003d (LocalDate) this.args.get(\"date\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" List\u003cTask\u003e filteredEvents \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" if ((task instanceof Event) \u0026\u0026 ((Event) task).isOngoing(date)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" filteredEvents.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Here are the ongoing events on %s:\\n%s\",","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" Formatter.stringifyDate(date), Formatter.stringifyList(filteredEvents));","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":55}},{"path":"src/main/java/duke/command/QueueCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to list all deadlines in sorted order.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class QueueCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructs QueueCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public QueueCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"queue\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" List\u003cDeadline\u003e deadlines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" deadlines.add((Deadline) task);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Here is the queue of deadlines:\\n%s\", Formatter.stringifyList(deadlines));","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":50}},{"path":"src/main/java/duke/command/RemoveCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to remove an task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class RemoveCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructs RemoveCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public RemoveCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"remove\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"index\") instanceof Integer;","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n %s\\n%s\",","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" tasks.delete(idx).toString(), Formatter.getTaskCount(tasks.size()));","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":46}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.IndexArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Command to mark a task as incomplete.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructs UnmarkCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public UnmarkCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" super(\"unmark\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" return List.of(new IndexArgument(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"index\") instanceof Integer;","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" int idx \u003d (int) ((Integer) this.args.get(\"index\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" tasks.unmark(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"OK, I\u0027ve marked this task as not done yet:\\n %s\", tasks.access(idx).toString());","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":45}},{"path":"src/main/java/duke/command/task/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.field.Field;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"public class DeadlineCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructs DeadlineCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public DeadlineCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(\"deadline\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/by\"), new DateArgument(\"by\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" protected Deadline makeTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"description\") instanceof String;","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"by\") instanceof LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" return new Deadline((String) this.args.get(\"description\"), (LocalDate) this.args.get(\"by\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":46}},{"path":"src/main/java/duke/command/task/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DateRangeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.DateArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.field.Field;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new event.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class EventCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * Constructs EventCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public EventCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(\"event\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/from\"), new DateArgument(\"from\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" new Field(\"/to\"), new DateArgument(\"to\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" protected Event makeTask() throws DateRangeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"description\") instanceof String;","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"from\") instanceof LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"to\") instanceof LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" return new Event((String) this.args.get(\"description\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" (LocalDate) this.args.get(\"from\"), (LocalDate) this.args.get(\"to\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":50}},{"path":"src/main/java/duke/command/task/TaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new task.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"public abstract class TaskCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructs TaskCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param commandName The name of the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public TaskCommand(String commandName, Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" super(commandName, args);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" protected abstract Task makeTask() throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public String execute(TaskList tasks, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" Task newTask \u003d this.makeTask();","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n %s\\n%s\",","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" tasks.access(tasks.size()).toString(), Formatter.getTaskCount(tasks.size()));","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":40}},{"path":"src/main/java/duke/command/task/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.command.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.StringArgument;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Command to add a new todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"public class ToDoCommand extends TaskCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" private Map\u003cString, Object\u003e inputs;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructs ToDoCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param args The arguments entered by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public ToDoCommand(Map\u003cString, Object\u003e args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" super(\"todo\", args);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" protected List\u003cCommandElement\u003e getCommandElements() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" return List.of(new StringArgument(\"description\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" protected ToDo makeTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" assert this.args.get(\"description\") instanceof String;","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" return new ToDo((String) this.args.get(\"description\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":43}},{"path":"src/main/java/duke/controller/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.controller;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * The main chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"public class Duke {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" private String name;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructs Duke.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param name Name of the bot.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public Duke(String name) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" this.tasks \u003d this.storage.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * Returns default greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" * @return Default greeting message.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String greet() {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"Hello! I\u0027m %s\\nWhat can I do for you?\", name);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * Generates response to command.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" * @param input Command from user.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @return Response by chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" return cmd.execute(tasks, storage);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" * Saves tasks to file.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" public void save() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":60}},{"path":"src/main/java/duke/controller/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.controller;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.ui.DialogBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" * Initialises the window.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" * Sets the duke object used for the program logic.","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @param duke The duke object to be set.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" public void setDuke(Duke duke) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" this.duke \u003d duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" DialogBox.getDukeDialog(duke.greet(), dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"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":53,"author":{"gitId":"jedkohjk"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":66}},{"path":"src/main/java/duke/exception/CommandFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when the general format of a command is wrong.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class CommandFormatException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs CommandFormatException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param cmd The command in question.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * @param format The correct format for the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" public CommandFormatException(String cmd, String format) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"OOPS!!! %s command should have the following format:\\n %s\", cmd, format));","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":18}},{"path":"src/main/java/duke/exception/DateRangeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an end date precedes a start date.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class DateRangeException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs DateRangeException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public DateRangeException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"OOPS!!! End date cannot be before start date.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * General exception thrown by duke.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs DukeException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param msg The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(msg);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/EmptyArgException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an argument is left empty.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class EmptyArgException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs EmptyArgException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param arg The name of the argument in question.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public EmptyArgException(String arg) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"OOPS!!! %s field should not be empty.\", arg));","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when a command is not recognised.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs InvalidCommandException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @param cmd The invalid command entered.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public InvalidCommandException(String cmd) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what \\\"%s\\\" means :-(\", cmd));","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":17}},{"path":"src/main/java/duke/exception/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when a date is input in the wrong format.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidDateException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs InvalidDateException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public InvalidDateException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"OOPS!!! Please enter a valid date in yyyy-mm-dd format.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when an index is input in the wrong format.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public class InvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Constructs InvalidIndexException.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" super(\"OOPS!!! Please enter a valid positive integer for the index.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":15}},{"path":"src/main/java/duke/exception/OutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Exception thrown when the index entered is out of range of the current list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class OutOfBoundsException extends DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructs OutOfBoundsException.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param index The index input.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * @param taskCount The current number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" public OutOfBoundsException(int index, int taskCount) {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" super(String.format(\"OOPS!!! %d is out of range. %s\", index, Formatter.getTaskCount(taskCount)));","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":20}},{"path":"src/main/java/duke/object/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.OutOfBoundsException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.object.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * List containing Tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Marks task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to mark the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" public void mark(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" this.access(index).mark();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * Unmarks task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to unmark the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" public void unmark(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" this.access(index).unmark();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" * Accesses task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to access the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @return The task at the index.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public Task access(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" this.checkBounds(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return super.get(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * Deletes task at an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * @param index The index at which to delete the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @throws OutOfBoundsException When the index is not in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public Task delete(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" this.checkBounds(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" return super.remove(index - 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" private void checkBounds(int index) throws OutOfBoundsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" if (index \u003e this.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" throw new OutOfBoundsException(index, this.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":63}},{"path":"src/main/java/duke/object/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.DeadlineCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" * Task with an end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"public class Deadline extends Task implements Comparable\u003cDeadline\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructs Deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param by The end date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), Formatter.stringifyDate(this.by));","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return (new DeadlineCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description),","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"by\", this.by)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public int compareTo(Deadline other) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" return (int) ChronoUnit.DAYS.between(other.by, this.by);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":56}},{"path":"src/main/java/duke/object/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DateRangeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.util.Formatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Task with a start and end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * Constructs Event.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @param from The start date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @param to The end date of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * @throws DateRangeException When the start date is after the end date.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public Event(String description, LocalDate from, LocalDate to) throws DateRangeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" if (to.isBefore(from)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" throw new DateRangeException();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" Formatter.stringifyDate(this.from), Formatter.stringifyDate(this.to));","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" return (new EventCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description),","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"from\", this.from),","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"to\", this.to)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" * Returns whether the event is happening on a given date.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" * @param date The date one is checking.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" * @return Whether the event is happening on that date.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" public boolean isOngoing(LocalDate date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" return !(date.isBefore(this.from) || date.isAfter(this.to));","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":66}},{"path":"src/main/java/duke/object/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" * Represents a task stored by the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"public class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" protected String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * Constructs Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * Marks task as complete.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" public void mark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * Marks task as incomplete.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" public void unmark() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[%s] %s\", this.isDone ? \"X\" : \" \", this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * Constructs the command needed to create the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" * @param idx The task\u0027s index in a given list;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" * @return The string command needed to create the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" Map\u003cString, Object\u003e indexMap \u003d Map.ofEntries(new SimpleEntry\u003c\u003e(\"index\", idx));","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" return (new MarkCommand(indexMap)).toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" return (new UnmarkCommand(indexMap)).toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" * Returns whether a key is related to the task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" * @param key The key to search for.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" * @return Whether the key is a substring of the task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" public boolean isRelated(String key) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" return this.description.contains(key);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":73}},{"path":"src/main/java/duke/object/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.object.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.ToDoCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Task without any date requirements.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Constructs ToDo.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param description The user\u0027s description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String toCommand(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return (new ToDoCommand(Map.ofEntries(","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"description\", this.description)))).toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" + \"\\n\" + super.toCommand(idx) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":40}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.util.AbstractMap.SimpleEntry;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.function.Function;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"import duke.command.OngoingCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"import duke.command.QueueCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"import duke.command.RemoveCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.DeadlineCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.EventCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"import duke.command.task.ToDoCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.CommandFormatException;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.argument.Argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" * Object to interpret user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" private static final Map\u003cString, Function\u003cMap\u003cString, Object\u003e, Command\u003e\u003e COMMANDS \u003d Map.ofEntries(","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"list\", x -\u003e new ListCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"find\", x -\u003e new FindCommand(x)),","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"queue\", x -\u003e new QueueCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"ongoing\", x -\u003e new OngoingCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"mark\", x -\u003e new MarkCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"unmark\", x -\u003e new UnmarkCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"todo\", x -\u003e new ToDoCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"deadline\", x -\u003e new DeadlineCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"event\", x -\u003e new EventCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"remove\", x -\u003e new RemoveCommand(x)),","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" new SimpleEntry\u003c\u003e(\"bye\", x -\u003e new ByeCommand(x)));","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" * Converts input to Command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" * @param input User input.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @return Command based on the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException When the input is not formatted correctly.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" public static Command parse(String input) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" String[] commandParts \u003d input.replaceAll(\"\\n\", \"\").trim().split(\" \", 2);","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" String commandName \u003d commandParts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" String commandArgs \u003d commandParts.length \u003e 1 ? commandParts[1] : \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" Map\u003cString, Object\u003e args \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" if (!COMMANDS.containsKey(commandName)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidCommandException(commandName);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d COMMANDS.get(commandName).apply(args);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" Matcher groups \u003d cmd.getPattern().matcher(commandArgs);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" if (!groups.matches()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" throw new CommandFormatException(commandName, cmd.getStructure());","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" List\u003cArgument\u003e fields \u003d cmd.getArguments();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" for (int i \u003d 0; i \u003c fields.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" Argument arg \u003d fields.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" if (arg !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" args.put(arg.toString(), arg.formatInput(groups.group(i)));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" return cmd;","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":75}},{"path":"src/main/java/duke/parser/element/CommandElement.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":" * A substring of a command representing a logical unit.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"public interface CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Gets the name of the command element.","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * @return Name of the command element.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" abstract String getName();","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * Gets how the command element will be represented in regex.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" * @return The command element in regex form.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" abstract String getRegexForm();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":22}},{"path":"src/main/java/duke/parser/element/argument/Argument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" * The variable user inputs in a command.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"public abstract class Argument implements CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" private String text;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Constructs Argument.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public Argument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"{ %s }\", this.text);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String getRegexForm() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return \"(.*)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" * Interprets the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" * @return The object interpreted with semantic meaning to the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" * @throws DukeException if the input cannot be converted into something of meaning.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" public abstract Object formatInput(String input) throws DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" * Converts a value from the program to readable form.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" * @param val Object with semantic meaning to the program.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" * @return The readable form of the object.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" public abstract String formatOutput(Object val);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":63}},{"path":"src/main/java/duke/parser/element/argument/DateArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidDateException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Input must be a date.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class DateArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Constructs DateArgument.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" public DateArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" public LocalDate formatInput(String input) throws InvalidDateException {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" return LocalDate.parse(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidDateException();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" return val.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":42}},{"path":"src/main/java/duke/parser/element/argument/IndexArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Input must be an index.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class IndexArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructs IndexArgument.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" public IndexArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public Integer formatInput(String input) throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" int idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" idx \u003d Integer.parseInt(input);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" if (idx \u003c\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" return idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" return String.valueOf((int) ((Integer) val));","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":44}},{"path":"src/main/java/duke/parser/element/argument/StringArgument.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.EmptyArgException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * Input must be a string.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class StringArgument extends Argument {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" * Constructs StringArgument.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * @param text The name of the input field.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" public StringArgument(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" super(text);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" public String formatInput(String input) throws EmptyArgException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" if (input \u003d\u003d null || input.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" throw new EmptyArgException(this.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" return input;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" public String formatOutput(Object val) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return val.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":38}},{"path":"src/main/java/duke/parser/element/field/Field.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.field;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.element.CommandElement;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":" * A fixed string that acts as a delimiter in a command.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"public class Field implements CommandElement {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" private String text;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" * Constructs Field.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * @param text The text represented by the field.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" public Field(String text) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" public String getName() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" public String getRegexForm() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"( %s )\", this.text);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" * @inheritdoc","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" return this.text;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":45}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import duke.object.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" * Writes data to and retrieves data from storage file.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" private File dataFile;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" * Constructs Storage.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public Storage() {","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" this.dataFile \u003d new File(String.join(File.separator, \".\", \"duke_data\", \"data.txt\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" makeFile(this.dataFile);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" private void makeFile(File file) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" File dir \u003d file.getParentFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" dir.mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" assert false;","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * Generates TaskList from stored data.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" * @return TaskList from stored data.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" public TaskList loadTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" Scanner sc;","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" sc \u003d new Scanner(dataFile);","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":" sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" assert sc !\u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" String saved \u003d sc.nextLine().replaceAll(\"\\n\", \"\").trim();","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" if (saved.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" continue;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" Command cmd \u003d Parser.parse(saved);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":" cmd.execute(tasks, this);","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" tasks.clear();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" * Saves TaskList to file.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" * @param tasks TaskList to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"jedkohjk"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"jedkohjk"},"content":" assert dataFile.exists();","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"jedkohjk"},"content":" FileWriter writer \u003d new FileWriter(dataFile, false);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"jedkohjk"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"jedkohjk"},"content":" writer.append(tasks.get(i).toCommand(i + 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"jedkohjk"},"content":" writer.flush();","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"jedkohjk"},"content":" writer.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"jedkohjk"},"content":" assert false;","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":89}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.ui;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import duke.controller.MainWindow;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"jedkohjk"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"jedkohjk"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"jedkohjk"},"content":" * Creates dialogbox on the user side.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"jedkohjk"},"content":" * @param text The text in the dialog box.","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"jedkohjk"},"content":" * @param img The user profile picture.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"jedkohjk"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"jedkohjk"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"jedkohjk"},"content":" * Creates dialogbox on duke side.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"jedkohjk"},"content":" * @param text The text in the dialog box.","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"jedkohjk"},"content":" * @param img Duke profile picture.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"jedkohjk"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"jedkohjk"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"jedkohjk"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"jedkohjk"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":74}},{"path":"src/main/java/duke/util/Formatter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.util;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":" * Common string formats used throughout the project.","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"public class Formatter {","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" * Returns shared default message for counting tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" * @param n Number of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" * @return The default message for that number of tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" public static String getTaskCount(int n) {","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" return String.format(\"You have %d task%s in the list now.\", n, n \u003d\u003d 1 ? \"\" : \"s\");","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" * Converts list to be displayed as a string.","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" * @param arr List converted.","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" * @return The list as a string.","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" public static \u003cT\u003e String stringifyList(List\u003cT\u003e arr) {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" List\u003cString\u003e enumArr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" for (T e : arr) {","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":" enumArr.add(String.format(\"%d. %s\", i++, e.toString()));","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" return String.join(\"\\n\", enumArr);","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" * Converts date to be displayed as a string.","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" * @param date Date converted.","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":" * @return The date as a string.","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"jedkohjk"},"content":" public static String stringifyDate(LocalDate date) {","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"jedkohjk"},"content":" return date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"jedkohjk":48}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"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":"jedkohjk"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"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":"jedkohjk"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"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":"jedkohjk"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"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.controller.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"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":"jedkohjk"},"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":"jedkohjk"},"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":"jedkohjk"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"jedkohjk":19}},{"path":"src/test/java/duke/parser/element/argument/IndexArgumentTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.parser.element.argument;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"import duke.exception.InvalidIndexException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"public class IndexArgumentTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_string_invalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" IndexArgument tested \u003d new IndexArgument(\"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" tested.formatInput(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_nonpositiveInteger_invalidIndexException() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":" IndexArgument tested \u003d new IndexArgument(\"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"jedkohjk"},"content":" tested.formatInput(\"0\");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"jedkohjk"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"jedkohjk"},"content":" public void formatInput_positiveInteger_integer() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"jedkohjk"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"jedkohjk"},"content":" assertEquals((new IndexArgument(\"\")).formatInput(\"1\"), 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"jedkohjk"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"jedkohjk"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":43}},{"path":"src/test/java/duke/util/FormatterTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jedkohjk"},"content":"package duke.util;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"jedkohjk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"jedkohjk"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"jedkohjk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"jedkohjk"},"content":"public class FormatterTest {","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_stringList_enumeratedList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Formatter.stringifyList(List.of(\"first\", \"second\", \"third\")), \"1. first\\n2. second\\n3. third\");","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_intList_enumeratedList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Formatter.stringifyList(List.of(1, 2, 3)), \"1. 1\\n2. 2\\n3. 3\");","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"jedkohjk"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"jedkohjk"},"content":" public void stringifyList_emptyList_emptyString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"jedkohjk"},"content":" assertEquals(Formatter.stringifyList(List.of()), \"\");","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"jedkohjk"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"jedkohjk"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"jedkohjk"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"jedkohjk":26}}] diff --git a/jedkohjk_ip_master/commits.json b/jedkohjk_ip_master/commits.json index 8a056277..c645792e 100644 --- a/jedkohjk_ip_master/commits.json +++ b/jedkohjk_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jedkohjk":[{"date":"2023-08-20","commitResults":[{"hash":"d89901cea786845d5dbd1f673278685bef652d12","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":6}}},{"hash":"2a08137b15c3f03d808f50a0d370276b7473e8f7","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"db1b6cb43cba20a28af6b51337ea5b4e41d7578a","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"715a36d09dca866bf6c1db2ebb26d1b17605a735","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":3}}},{"hash":"c3a7e86eec41a25ecc31b9e75579adb789e5320c","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":23}}},{"hash":"cc0cfd589846d8fc54505e27106a0b91621d4490","isMergeCommit":false,"messageTitle":"A TextUiTesting. Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0}}}]},{"date":"2023-08-21","commitResults":[{"hash":"901797c3bed123431bae3ab412a9ee178c85dfef","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":18,"deletions":2},"java":{"insertions":104,"deletions":22}}},{"hash":"cfbfe529012168541eb0cbdffada3c252939becc","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":16,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"505aba97be438ff7c82f3f8e0b65780239d1065e","isMergeCommit":false,"messageTitle":"A Enums. Use Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":117,"deletions":131}}}]},{"date":"2023-08-24","commitResults":[{"hash":"155f2b58550b7483534f7d90169ddb38ca4fb158","isMergeCommit":false,"messageTitle":"A Exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":116,"deletions":85}}},{"hash":"f1ca52060f77ddd7747c0b83d6d5738cd173d22f","isMergeCommit":false,"messageTitle":"fix style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":230,"deletions":230}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c8acea85052c4d356d41c208ba6d064fea939386","isMergeCommit":false,"messageTitle":"add save function","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":26},"java":{"insertions":660,"deletions":222},"bat":{"insertions":3,"deletions":0},"sh":{"insertions":6,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"bc3ffe8c84a90582e9b592e71220978f37090fe8","isMergeCommit":false,"messageTitle":"add date validation","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":5},"java":{"insertions":149,"deletions":15}}},{"hash":"b90ab614fde152b0b6dc546ef7de184e1fc2b309","isMergeCommit":false,"messageTitle":"add oop classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":126},"sh":{"insertions":1,"deletions":1}}},{"hash":"76041d45eb43f27104d2a2335ebb112d5a483e34","isMergeCommit":false,"messageTitle":"organise duke into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":1160,"deletions":963},"sh":{"insertions":1,"deletions":1}}},{"hash":"428a52523dda7662183c74dd0f68733cea74537f","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c9f289cdecf673d1f1fee8037b5805c5788368f6","isMergeCommit":false,"messageTitle":"add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":1,"deletions":2}}},{"hash":"51c42a047435e300dedc47f3bad12b4e07dc1d4e","isMergeCommit":false,"messageTitle":"add junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":12}}},{"hash":"934c2aa7d9bc69034fb4e07d64247571e4711b79","isMergeCommit":false,"messageTitle":"bug fixes and new tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":25}}}]},{"date":"2023-08-30","commitResults":[{"hash":"0ad609d96919212844a9b7951338375b83477519","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":463,"deletions":25}}},{"hash":"346fc50f5d3c8b920934c12b5e83227b45fcb6b8","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":25}}},{"hash":"45896c44872eb174ce5ee394e60e6b8f80af30d3","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":56,"deletions":7},"sh":{"insertions":1,"deletions":1}}},{"hash":"2cbb6622304691f3c1b17ea438d5663cc1d23739","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4c6b497ab60d1da50529db42a69521783b25e3e9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"39272e314da6310fce72c6187db5c6a7824fdfa5","isMergeCommit":false,"messageTitle":"add javadocs for find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"20764663a4d37290a90f3b4ed37e7f94e95d72f7","isMergeCommit":false,"messageTitle":"Bug fixes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9e663b522af5eb5737aa04c494dc0ffae91537be","isMergeCommit":false,"messageTitle":"Add inheritdoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1215b6f7850fa5b6a36c8040ccc41606839d2384","isMergeCommit":false,"messageTitle":"Put entrypoint in Duke class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":16,"deletions":40},"sh":{"insertions":3,"deletions":3}}},{"hash":"3fadb5d3d07c1e0960655cc9894a9b0db7c90783","isMergeCommit":false,"messageTitle":"Update gradle path","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"c4d3a8be43d6033ac71aa21d6662fdae779054e4","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":183,"deletions":165}}}]},{"date":"2023-09-05","commitResults":[{"hash":"29027d4d75075e7b6c7cd3745823e2c078837e98","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":35,"deletions":0},"txt":{"insertions":0,"deletions":23},"java":{"insertions":236,"deletions":28},"bat":{"insertions":0,"deletions":24},"sh":{"insertions":0,"deletions":44}}}]},{"date":"2023-09-10","commitResults":[{"hash":"e3e700188d35b0bf4b606d22ea28db645d37e2fd","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Add assertions\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"194a23632092f8375a74b50d75f9354311329003","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"Refactored code.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":111}}},{"hash":"f6c605c06872e1da967cc5800c1523a617c14e49","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jedkohjk/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"0ebc84ef539e445c02df0ff0d314c4d49eaedb6b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b952771c6f9d983eed908c5c6c82873cdff8e85b","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jedkohjk/branch-A-CodeQuality","messageBody":"Refactor code","tags":["C-Sort","BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"8ed8ce3774706ef00cfa5e162efb1893c7366298","isMergeCommit":false,"messageTitle":"Change javadoc","messageBody":"Change method descriptions to verbs\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":42}}}]},{"date":"2023-09-11","commitResults":[{"hash":"748380b21bd750a39a1d15a80566542ff3b612ed","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"","tags":["A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":232}}}]}]},"authorFileTypeContributionMap":{"jedkohjk":{"java":1885,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":21,"txt":0}},"authorContributionVariance":{"jedkohjk":317963.9},"authorDisplayNameMap":{"jedkohjk":"CS2103T-W17-3 JED ..KEAT"}} +{"authorDailyContributionsMap":{"jedkohjk":[{"date":"2023-08-20","commitResults":[{"hash":"d89901cea786845d5dbd1f673278685bef652d12","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":6}}},{"hash":"2a08137b15c3f03d808f50a0d370276b7473e8f7","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"db1b6cb43cba20a28af6b51337ea5b4e41d7578a","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"715a36d09dca866bf6c1db2ebb26d1b17605a735","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":3}}},{"hash":"c3a7e86eec41a25ecc31b9e75579adb789e5320c","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":23}}},{"hash":"cc0cfd589846d8fc54505e27106a0b91621d4490","isMergeCommit":false,"messageTitle":"A TextUiTesting. Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0}}}]},{"date":"2023-08-21","commitResults":[{"hash":"901797c3bed123431bae3ab412a9ee178c85dfef","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":18,"deletions":2},"java":{"insertions":104,"deletions":22}}},{"hash":"cfbfe529012168541eb0cbdffada3c252939becc","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":16,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"505aba97be438ff7c82f3f8e0b65780239d1065e","isMergeCommit":false,"messageTitle":"A Enums. Use Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":117,"deletions":131}}}]},{"date":"2023-08-24","commitResults":[{"hash":"155f2b58550b7483534f7d90169ddb38ca4fb158","isMergeCommit":false,"messageTitle":"A Exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":116,"deletions":85}}},{"hash":"f1ca52060f77ddd7747c0b83d6d5738cd173d22f","isMergeCommit":false,"messageTitle":"fix style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":230,"deletions":230}}}]},{"date":"2023-08-28","commitResults":[{"hash":"c8acea85052c4d356d41c208ba6d064fea939386","isMergeCommit":false,"messageTitle":"add save function","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":26},"java":{"insertions":660,"deletions":222},"bat":{"insertions":3,"deletions":0},"sh":{"insertions":6,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"bc3ffe8c84a90582e9b592e71220978f37090fe8","isMergeCommit":false,"messageTitle":"add date validation","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":5},"java":{"insertions":149,"deletions":15}}},{"hash":"b90ab614fde152b0b6dc546ef7de184e1fc2b309","isMergeCommit":false,"messageTitle":"add oop classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":126},"sh":{"insertions":1,"deletions":1}}},{"hash":"76041d45eb43f27104d2a2335ebb112d5a483e34","isMergeCommit":false,"messageTitle":"organise duke into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":1160,"deletions":963},"sh":{"insertions":1,"deletions":1}}},{"hash":"428a52523dda7662183c74dd0f68733cea74537f","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c9f289cdecf673d1f1fee8037b5805c5788368f6","isMergeCommit":false,"messageTitle":"add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":1,"deletions":2}}},{"hash":"51c42a047435e300dedc47f3bad12b4e07dc1d4e","isMergeCommit":false,"messageTitle":"add junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":12}}},{"hash":"934c2aa7d9bc69034fb4e07d64247571e4711b79","isMergeCommit":false,"messageTitle":"bug fixes and new tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":25}}}]},{"date":"2023-08-30","commitResults":[{"hash":"0ad609d96919212844a9b7951338375b83477519","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":463,"deletions":25}}},{"hash":"346fc50f5d3c8b920934c12b5e83227b45fcb6b8","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":25}}},{"hash":"45896c44872eb174ce5ee394e60e6b8f80af30d3","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":56,"deletions":7},"sh":{"insertions":1,"deletions":1}}},{"hash":"2cbb6622304691f3c1b17ea438d5663cc1d23739","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4c6b497ab60d1da50529db42a69521783b25e3e9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"39272e314da6310fce72c6187db5c6a7824fdfa5","isMergeCommit":false,"messageTitle":"add javadocs for find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"20764663a4d37290a90f3b4ed37e7f94e95d72f7","isMergeCommit":false,"messageTitle":"Bug fixes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"9e663b522af5eb5737aa04c494dc0ffae91537be","isMergeCommit":false,"messageTitle":"Add inheritdoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1215b6f7850fa5b6a36c8040ccc41606839d2384","isMergeCommit":false,"messageTitle":"Put entrypoint in Duke class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":16,"deletions":40},"sh":{"insertions":3,"deletions":3}}},{"hash":"3fadb5d3d07c1e0960655cc9894a9b0db7c90783","isMergeCommit":false,"messageTitle":"Update gradle path","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"c4d3a8be43d6033ac71aa21d6662fdae779054e4","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":183,"deletions":165}}}]},{"date":"2023-09-05","commitResults":[{"hash":"29027d4d75075e7b6c7cd3745823e2c078837e98","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":35,"deletions":0},"txt":{"insertions":0,"deletions":23},"java":{"insertions":236,"deletions":28},"bat":{"insertions":0,"deletions":24},"sh":{"insertions":0,"deletions":44}}}]},{"date":"2023-09-10","commitResults":[{"hash":"e3e700188d35b0bf4b606d22ea28db645d37e2fd","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Add assertions\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"194a23632092f8375a74b50d75f9354311329003","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"Refactored code.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":111}}},{"hash":"f6c605c06872e1da967cc5800c1523a617c14e49","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jedkohjk/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"0ebc84ef539e445c02df0ff0d314c4d49eaedb6b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b952771c6f9d983eed908c5c6c82873cdff8e85b","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jedkohjk/branch-A-CodeQuality","messageBody":"Refactor code","tags":["C-Sort","BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"8ed8ce3774706ef00cfa5e162efb1893c7366298","isMergeCommit":false,"messageTitle":"Change javadoc","messageBody":"Change method descriptions to verbs\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":42}}}]},{"date":"2023-09-11","commitResults":[{"hash":"748380b21bd750a39a1d15a80566542ff3b612ed","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"","tags":["A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":232}}}]},{"date":"2023-09-16","commitResults":[{"hash":"81131165b0eda8311170b93c13f9244b2ff6c3b3","isMergeCommit":false,"messageTitle":"Remove emoji symbols","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"22d486da82def09d8a84c43ad765a6def7dff33a","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"md":{"insertions":155,"deletions":13}}},{"hash":"19319f690cf307007f3a38519465a6b73d49289a","isMergeCommit":false,"messageTitle":"Add github README","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"md":{"insertions":171,"deletions":24}}}]}]},"authorFileTypeContributionMap":{"jedkohjk":{"java":1885,"md":320,"fxml":35,"sh":0,"bat":0,"gradle":22,"txt":0}},"authorContributionVariance":{"jedkohjk":275150.28},"authorDisplayNameMap":{"jedkohjk":"CS2103T-W17-3 JED ..KEAT"}} diff --git a/jianyangg_ip_master/commits.json b/jianyangg_ip_master/commits.json index 86617aa6..462fbaee 100644 --- a/jianyangg_ip_master/commits.json +++ b/jianyangg_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jianyangg":[{"date":"2023-08-22","commitResults":[{"hash":"01cafddf47bde9f1fa29d35cb023d88b1d240325","isMergeCommit":false,"messageTitle":"add Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"46d345c4a4bdddea9d6733f65dfa6de2e5fa9cd4","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":15}}},{"hash":"e595aed22a9ea92d3a0036fd5956f0418419b6fc","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":9}}},{"hash":"f659bc78a4fa7769ecbb01e38446db8439ef3226","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":7}}},{"hash":"66cc02b134d1ce8d693f9e759bccdf0f7119a4bb","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":4}}},{"hash":"57be9b2280f51af89679662bb4b7a7e0f221400a","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"d67073a9651401661199598ed4324ea61fab4b81","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":18}}},{"hash":"6d0f223d3e107749405081a6e4aaf8a23d87273d","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":10}}},{"hash":"34a5f6474a6b1e79519be0293bd261da628ba27e","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"213fd899aedd91c1b59f93c5841a709803004ba0","isMergeCommit":false,"messageTitle":"Add save list feature","messageBody":"Task list will be saved to data/duke.txt directory\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":74,"deletions":8}}},{"hash":"52f33e010191b3a77db303f083571d059bc25880","isMergeCommit":false,"messageTitle":"Add load list feature","messageBody":"List is now loaded from data/duke.txt, if it exists.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":70,"deletions":11}}},{"hash":"060729ad28f66be8259a141070914c5d3ea68b1f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"e1202cc938ddec3599f75dbacec2e9cf684dc25e","isMergeCommit":false,"messageTitle":"Add Level-8 features to parse dates","messageBody":"Deadline tasks can now parse date into LocalDate objects instead of being stored as String\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":20,"deletions":4}}},{"hash":"f466e39cfcc91371593750b8b8c532c339ed4c4d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e956a530e27066e2ef29eb94bd2496689a1f8f3a","isMergeCommit":false,"messageTitle":"Add exception handling for invalid date string","messageBody":"Deadline task now catches invalid dates and ask the user to input again\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":7}}},{"hash":"bdadb42ff16b1cf4c140d5faa4064b42096475bb","isMergeCommit":false,"messageTitle":"Implement more OOP principles into the code","messageBody":"Code was edited based on A-MoreOOP guidelines.\n","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":400,"deletions":291}}},{"hash":"d77864a0f7e61f484f56e8facc87d7a3e8d3989a","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b7884548d0a5dfdcbc5754cbfe114d30962710e5","isMergeCommit":false,"messageTitle":"Put all classes into one package","messageBody":"Done in accordance with the A-Package instructions.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":466,"deletions":0}}},{"hash":"a50dba38d8e89f2d092d3e33ccbe4a082335bb62","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"14f43035b7901622dcac0f744c44edd04e93c3c0","isMergeCommit":false,"messageTitle":"Put all classes into one package","messageBody":"Done in accordance with the A-Package instructions.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":0,"deletions":455}}},{"hash":"fcf45b39a8e872a13d509a9ce068badce1f6b825","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5f957bf7374204a1098cc9ecd918cce35804ff86","isMergeCommit":false,"messageTitle":"Add Gradle support to the project","messageBody":"Merged add-gradle-support branch with master branch\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"1cbf281472fa42f3bb3626db7990efe0a1d37ee3","isMergeCommit":false,"messageTitle":"Add JUnit tests for ToDo and Task classes","messageBody":"For A-JUnit task.\n","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":1}}},{"hash":"afb152bbae6a18a7db0f6a7a7f012f337e9634a9","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"066c2865b7bc2fdefad15643d82d7c1119be6de2","isMergeCommit":false,"messageTitle":"Create a JAR file","messageBody":"JAR file should not actually be included here. It\u0027ll be released instead as v0.1\n","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"92ef006825fc36dfc3594b79c3afa2a1623f62da","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"b3c0af31a51d2c642c99f528f3aad597d4ed1989","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"Completed according to the requirements specified in A-JavaDoc notes\n","fileTypesAndContributionMap":{"java":{"insertions":418,"deletions":202}}}]},{"date":"2023-08-30","commitResults":[{"hash":"99f6b1060258ac02bf3ff59f73668060b4011b39","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"Allows users to search for tasks using keywords.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":20,"deletions":6}}},{"hash":"bae6ed2cde9668669ded0886b57ced4ccedaaccb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"73ab245a880f69a7921ebf2abebe379415f30c5b","isMergeCommit":true,"messageTitle":"Merge master branch with JavaDoc and Level-9","messageBody":"Handled merge conflicts when merging into master from branch-A-JavaDoc and branch-Level-9\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"80e5700cb93e2dd537c33ec37c4cb4e53299326c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"d903585977b77a8814974e7cec277d020419493c","isMergeCommit":false,"messageTitle":"Implement GUI features for better user experience","messageBody":"Code done in alignment with Level-10 GUI guidelines\n","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":1},"txt":{"insertions":6,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":273,"deletions":66}}},{"hash":"040ad025785ef18301ac5ffbaab82516247a71fc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"6e89ab75ff0cacc4eaf561a22a9743445a76657b","isMergeCommit":false,"messageTitle":"Improve the code quality in accordance with the CS2103T textbook","messageBody":"Code quality were improved with respect to areas such as comments,\n\nline spacing to separate groups of related statements,\n\nand avoided complicated expressions by breaking them down into simpler logic blocks\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":61,"deletions":18}}},{"hash":"351d80f48bbaf7a29d818b724bfce03e7c16c5a7","isMergeCommit":false,"messageTitle":"Add assertions where appropriate to validate function arguments","messageBody":"The addition of these assertions should help us validate our assumptions,\n\nthus making it easier for errors and bugs to be detected.\n\nAs there are not much logic involved in this project, focus is mainly placed\n\non validating the input to the functions\n","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"244d8ca1269b7053485ceb0b1092ad1a2a848e5b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jianyangg/branch-A-Assertions","messageBody":"Add assertions where appropriate to validate function arguments","fileTypesAndContributionMap":{}},{"hash":"bd2e08eda81d4792fb927e6874bf41d6494032e7","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jianyangg/branch-A-CodeQuality","messageBody":"Improve code quality in accordance with the CS2103T textbook","fileTypesAndContributionMap":{}},{"hash":"746fb289aaf233b6b988c5b5ea430a63c370aa49","isMergeCommit":false,"messageTitle":"Add C-Priority extension to Duke","messageBody":"Priority is represented using exclamation marks, printed after the task name. It ranges from 0 - 5, which in turn represents the number of exclamation mark, with 0 being the least and 5 being the highest priority\n","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"6487edb0a250f9f08527519765a7a4bac7f264a2","isMergeCommit":true,"messageTitle":"Merge pull request #3 from jianyangg/branch-C-Priority","messageBody":"Add C-Priority extension to Duke","fileTypesAndContributionMap":{}},{"hash":"f36da8801b5840868962ffe580986e9b147b3140","isMergeCommit":false,"messageTitle":"Tidy up the code quality by including comments","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"a6b04c0a61e1f6d364911ef05029f896b69186d2","isMergeCommit":true,"messageTitle":"Merge pull request #4 from jianyangg/branch-C-Priority","messageBody":"Tidy up the code quality by including comments","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"jianyangg":{"java":1059,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":15,"txt":29}},"authorContributionVariance":{"jianyangg":239813.78},"authorDisplayNameMap":{"jianyangg":"CS2103T-T13-3 LIM ..YANG"}} +{"authorDailyContributionsMap":{"jianyangg":[{"date":"2023-08-22","commitResults":[{"hash":"01cafddf47bde9f1fa29d35cb023d88b1d240325","isMergeCommit":false,"messageTitle":"add Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"46d345c4a4bdddea9d6733f65dfa6de2e5fa9cd4","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":15}}},{"hash":"e595aed22a9ea92d3a0036fd5956f0418419b6fc","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":9}}},{"hash":"f659bc78a4fa7769ecbb01e38446db8439ef3226","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":7}}},{"hash":"66cc02b134d1ce8d693f9e759bccdf0f7119a4bb","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":4}}},{"hash":"57be9b2280f51af89679662bb4b7a7e0f221400a","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"d67073a9651401661199598ed4324ea61fab4b81","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":18}}},{"hash":"6d0f223d3e107749405081a6e4aaf8a23d87273d","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":10}}},{"hash":"34a5f6474a6b1e79519be0293bd261da628ba27e","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"213fd899aedd91c1b59f93c5841a709803004ba0","isMergeCommit":false,"messageTitle":"Add save list feature","messageBody":"Task list will be saved to data/duke.txt directory\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":74,"deletions":8}}},{"hash":"52f33e010191b3a77db303f083571d059bc25880","isMergeCommit":false,"messageTitle":"Add load list feature","messageBody":"List is now loaded from data/duke.txt, if it exists.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":70,"deletions":11}}},{"hash":"060729ad28f66be8259a141070914c5d3ea68b1f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"e1202cc938ddec3599f75dbacec2e9cf684dc25e","isMergeCommit":false,"messageTitle":"Add Level-8 features to parse dates","messageBody":"Deadline tasks can now parse date into LocalDate objects instead of being stored as String\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":20,"deletions":4}}},{"hash":"f466e39cfcc91371593750b8b8c532c339ed4c4d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e956a530e27066e2ef29eb94bd2496689a1f8f3a","isMergeCommit":false,"messageTitle":"Add exception handling for invalid date string","messageBody":"Deadline task now catches invalid dates and ask the user to input again\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":7}}},{"hash":"bdadb42ff16b1cf4c140d5faa4064b42096475bb","isMergeCommit":false,"messageTitle":"Implement more OOP principles into the code","messageBody":"Code was edited based on A-MoreOOP guidelines.\n","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":400,"deletions":291}}},{"hash":"d77864a0f7e61f484f56e8facc87d7a3e8d3989a","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b7884548d0a5dfdcbc5754cbfe114d30962710e5","isMergeCommit":false,"messageTitle":"Put all classes into one package","messageBody":"Done in accordance with the A-Package instructions.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":466,"deletions":0}}},{"hash":"a50dba38d8e89f2d092d3e33ccbe4a082335bb62","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"14f43035b7901622dcac0f744c44edd04e93c3c0","isMergeCommit":false,"messageTitle":"Put all classes into one package","messageBody":"Done in accordance with the A-Package instructions.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":4},"java":{"insertions":0,"deletions":455}}},{"hash":"fcf45b39a8e872a13d509a9ce068badce1f6b825","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5f957bf7374204a1098cc9ecd918cce35804ff86","isMergeCommit":false,"messageTitle":"Add Gradle support to the project","messageBody":"Merged add-gradle-support branch with master branch\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"1cbf281472fa42f3bb3626db7990efe0a1d37ee3","isMergeCommit":false,"messageTitle":"Add JUnit tests for ToDo and Task classes","messageBody":"For A-JUnit task.\n","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":1}}},{"hash":"afb152bbae6a18a7db0f6a7a7f012f337e9634a9","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"066c2865b7bc2fdefad15643d82d7c1119be6de2","isMergeCommit":false,"messageTitle":"Create a JAR file","messageBody":"JAR file should not actually be included here. It\u0027ll be released instead as v0.1\n","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"92ef006825fc36dfc3594b79c3afa2a1623f62da","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"b3c0af31a51d2c642c99f528f3aad597d4ed1989","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"Completed according to the requirements specified in A-JavaDoc notes\n","fileTypesAndContributionMap":{"java":{"insertions":418,"deletions":202}}}]},{"date":"2023-08-30","commitResults":[{"hash":"99f6b1060258ac02bf3ff59f73668060b4011b39","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"Allows users to search for tasks using keywords.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":4},"java":{"insertions":20,"deletions":6}}},{"hash":"bae6ed2cde9668669ded0886b57ced4ccedaaccb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"73ab245a880f69a7921ebf2abebe379415f30c5b","isMergeCommit":true,"messageTitle":"Merge master branch with JavaDoc and Level-9","messageBody":"Handled merge conflicts when merging into master from branch-A-JavaDoc and branch-Level-9\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"80e5700cb93e2dd537c33ec37c4cb4e53299326c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"d903585977b77a8814974e7cec277d020419493c","isMergeCommit":false,"messageTitle":"Implement GUI features for better user experience","messageBody":"Code done in alignment with Level-10 GUI guidelines\n","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":1},"txt":{"insertions":6,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":273,"deletions":66}}},{"hash":"040ad025785ef18301ac5ffbaab82516247a71fc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"6e89ab75ff0cacc4eaf561a22a9743445a76657b","isMergeCommit":false,"messageTitle":"Improve the code quality in accordance with the CS2103T textbook","messageBody":"Code quality were improved with respect to areas such as comments,\n\nline spacing to separate groups of related statements,\n\nand avoided complicated expressions by breaking them down into simpler logic blocks\n","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":61,"deletions":18}}},{"hash":"351d80f48bbaf7a29d818b724bfce03e7c16c5a7","isMergeCommit":false,"messageTitle":"Add assertions where appropriate to validate function arguments","messageBody":"The addition of these assertions should help us validate our assumptions,\n\nthus making it easier for errors and bugs to be detected.\n\nAs there are not much logic involved in this project, focus is mainly placed\n\non validating the input to the functions\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"244d8ca1269b7053485ceb0b1092ad1a2a848e5b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jianyangg/branch-A-Assertions","messageBody":"Add assertions where appropriate to validate function arguments","fileTypesAndContributionMap":{}},{"hash":"bd2e08eda81d4792fb927e6874bf41d6494032e7","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jianyangg/branch-A-CodeQuality","messageBody":"Improve code quality in accordance with the CS2103T textbook","fileTypesAndContributionMap":{}},{"hash":"746fb289aaf233b6b988c5b5ea430a63c370aa49","isMergeCommit":false,"messageTitle":"Add C-Priority extension to Duke","messageBody":"Priority is represented using exclamation marks, printed after the task name. It ranges from 0 - 5, which in turn represents the number of exclamation mark, with 0 being the least and 5 being the highest priority\n","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"6487edb0a250f9f08527519765a7a4bac7f264a2","isMergeCommit":true,"messageTitle":"Merge pull request #3 from jianyangg/branch-C-Priority","messageBody":"Add C-Priority extension to Duke","fileTypesAndContributionMap":{}},{"hash":"f36da8801b5840868962ffe580986e9b147b3140","isMergeCommit":false,"messageTitle":"Tidy up the code quality by including comments","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"a6b04c0a61e1f6d364911ef05029f896b69186d2","isMergeCommit":true,"messageTitle":"Merge pull request #4 from jianyangg/branch-C-Priority","messageBody":"Tidy up the code quality by including comments","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"jianyangg":{"java":1059,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":15,"txt":29}},"authorContributionVariance":{"jianyangg":239813.78},"authorDisplayNameMap":{"jianyangg":"CS2103T-T13-3 LIM ..YANG"}} diff --git a/jibtaf_ip_master/authorship.json b/jibtaf_ip_master/authorship.json index 742edf1d..ed95ec80 100644 --- a/jibtaf_ip_master/authorship.json +++ b/jibtaf_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":"jibtaf"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"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":"jibtaf"},"content":" mainClass.set(\"bellcurvegod.BellCurveGod\")","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"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":"jibtaf"},"content":" archiveBaseName \u003d \"bellCurveGod\"","lastModifiedDate":"2023-09-03"},{"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":"jibtaf"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jibtaf":23,"-":40}},{"path":"src/main/java/bellcurvegod/BellCurveGod.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.BellCurveGodException;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" * Main class.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"public class BellCurveGod {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" private static final String DATA_FILE_PATH \u003d \"./data/tasks.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" private String filePath;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" public BellCurveGod(String path) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" filePath \u003d path;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" public BellCurveGod() {","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" this(DATA_FILE_PATH);","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" Storage.loadTasks(filePath);","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" return Parser.parse(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" } catch (BellCurveGodException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jibtaf":36,"-":2}},{"path":"src/main/java/bellcurvegod/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import static bellcurvegod.storage.Storage.updateData;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the exitCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"public class ExitCommand implements Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" * Says goodbye to the user and exits.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" public static String run() {","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" updateData();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" return Gui.getExitMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":25}},{"path":"src/main/java/bellcurvegod/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.tasklist.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the findCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"public class FindCommand implements Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" * Lists all tasks in the taskList that","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" * contains the keyword that the user is searching for.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" public static String run(String keyword) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cTask\u003e tasks \u003d TaskList.getTaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" if (t.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" matchingTasks.add(t);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" return Gui.getFindMessage(matchingTasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":29}},{"path":"src/main/java/bellcurvegod/command/ListTasksCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.tasklist.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the listTaskCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"public class ListTasksCommand implements Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" * Lists all tasks stored.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" public static String run() {","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cTask\u003e tasks \u003d TaskList.getTaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" return Gui.getListMessage(tasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":20}},{"path":"src/main/java/bellcurvegod/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the markCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"public class MarkCommand implements Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" * Marks the given task as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * @param task task to be marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" public static String run(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" return Gui.getMarkMessage(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":19}},{"path":"src/main/java/bellcurvegod/command/Runnable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the interface for all commands.","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"interface Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" static String run() {","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" return null;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the unmarkCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"public class UnmarkCommand implements Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" * Marks the given task as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * @param task task to be marked as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" public static String run(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" return Gui.getUnmarkMessage(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":19}},{"path":"src/main/java/bellcurvegod/exception/BellCurveGodException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates all exceptions in this app.","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class BellCurveGodException extends Exception {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public BellCurveGodException(String message) {","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyByTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when by time of deadline is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyByTimeException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyByTimeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyDeadlineDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when description of deadline is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyDeadlineDescriptionException extends EmptyDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyDeadlineDescriptionException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when description of task is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyDescriptionException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyEventDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when description of event is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyEventDescriptionException extends EmptyDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyEventDescriptionException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyFromTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when from time of event is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyFromTimeException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyFromTimeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyToTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when to time of event is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyToTimeException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyToTimeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyTodoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when description of todo is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyTodoDescriptionException extends EmptyDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyTodoDescriptionException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when input is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class InvalidCommandException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/WrongDataFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when data is in the wrong format.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class WrongDataFormatException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public WrongDataFormatException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" private Label dialog;","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" private void flip() {","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" public static DialogBox getBellCurveGodDialog(String text, Image img) {","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" db.flip();","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" return db;","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":61}},{"path":"src/main/java/bellcurvegod/gui/Gui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" * Encapsulates all messages shown by the GUI.","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"public class Gui {","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * Greets the user.","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" public static String getWelcomeMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" return \"Hello! I\u0027m Bell Curve God.\\n\" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" public static String getExitMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" return \"Bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" public static String getFindMessage(ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" if (!matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" message +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" message +\u003d (i + 1) + \".\" + matchingTasks.get(i) + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" return \"There is no task in your list that matches this keyword.\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" public static String getListMessage(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" message +\u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" message +\u003d (i + 1) + \".\" + tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" return \"There is no task in your list.\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" public static String getMarkMessage(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" public static String getUnmarkMessage(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" public static String getAddTaskMessage(Task newTask, int numOfTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" message +\u003d \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" + newTask + \"\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" + \"Now you have \" + numOfTasks + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" public static String getDeleteTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" message +\u003d \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" + \"Now you have \" + numOfTasks + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"jibtaf"},"content":" public static String getWrongDateFormatMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"jibtaf"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"jibtaf"},"content":" message +\u003d \"Please enter your time in the following format:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"jibtaf"},"content":" + \"yyyy-mm-dd\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"jibtaf"},"content":" + \"E.g. 2019-10-15\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"jibtaf"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":80}},{"path":"src/main/java/bellcurvegod/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"public class Launcher {","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":13}},{"path":"src/main/java/bellcurvegod/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.BellCurveGod;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * A GUI for BellCurveGod using FXML.","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" private final BellCurveGod bellCurveGod \u003d new BellCurveGod();","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setBellCurveGod(bellCurveGod);","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" stage.show();","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":33}},{"path":"src/main/java/bellcurvegod/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.BellCurveGod;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" private BellCurveGod bellCurveGod;","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" private final Image bellCurveGodImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/bellCurveGod.png\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" public void initialize() {","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" public void setBellCurveGod(BellCurveGod b) {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" bellCurveGod \u003d b;","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" // greets the user","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" printMessage(Gui.getWelcomeMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" public void printMessage(String message) {","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" dialogContainer.getChildren().add(DialogBox.getBellCurveGodDialog(message, bellCurveGodImage));","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"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":47,"author":{"gitId":"jibtaf"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" String response \u003d bellCurveGod.getResponse(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" DialogBox.getBellCurveGodDialog(response, bellCurveGodImage)","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" );","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" userInput.clear();","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":59}},{"path":"src/main/java/bellcurvegod/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.command.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.command.ListTasksCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.BellCurveGodException;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.EmptyDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.InvalidCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.tasklist.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the parser to parse user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * Parses commands entered by the user,","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" * and exits when the user types the command bye.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" public static String parse(String input) throws BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cTask\u003e tasks \u003d TaskList.getTaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" return ExitCommand.run();","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" return ListTasksCommand.run();","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" } else if (words[0].equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" return FindCommand.run(words[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" } else if (words[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" return MarkCommand.run(tasks.get(Integer.parseInt(words[1]) - 1));","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" } else if (words[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" return UnmarkCommand.run(tasks.get(Integer.parseInt(words[1]) - 1));","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" } else if (words[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" return TaskList.delete(tasks.get(Integer.parseInt(words[1]) - 1));","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" return TaskList.addTask(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":52}},{"path":"src/main/java/bellcurvegod/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.WrongDataFormatException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.tasklist.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the storage to store and manipulate data.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" private static final String DATA_DIRECTORY_PATH \u003d \"./data\";","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" private static final String DATA_FILE_PATH \u003d \"./data/tasks.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" private static final ArrayList\u003cTask\u003e TASKS \u003d TaskList.getTaskList();","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" private static void writeToFile(String filePath, String textToAdd) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" fw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" private static void appendToFile(String filePath, String textToAppend) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" FileWriter fw \u003d new FileWriter(filePath, true); // create a FileWriter in append mode","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" fw.write(textToAppend);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" fw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" * Loads the tasks data stored on the disk.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" * @param filePath Path of the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" * @throws IOException If unable to create missing file.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" public static void loadTasks(String filePath) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" readFile(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" createMissingFile(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" * Reads data from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" * @param filePath Path of the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" * @throws FileNotFoundException If file not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" public static void readFile(String filePath) throws FileNotFoundException {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":" handleTaskData(sc.nextLine());","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" } catch (WrongDataFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" sc.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jibtaf"},"content":" * Creates missing file (and directory if not found).","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"jibtaf"},"content":" * @param filePath Path to create missing file at.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jibtaf"},"content":" * @throws IOException If unable to create file.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"jibtaf"},"content":" public static void createMissingFile(String filePath) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jibtaf"},"content":" // System.out.println(\"File not found!\\nFile has been created!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"jibtaf"},"content":" File dir \u003d new File(DATA_DIRECTORY_PATH);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"jibtaf"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"jibtaf"},"content":" dir.mkdir();","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jibtaf"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jibtaf"},"content":" f.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"jibtaf"},"content":" * Adds new tasks to the taskList from parsing the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"jibtaf"},"content":" * @param taskData Data in the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jibtaf"},"content":" * @throws WrongDataFormatException If data is in the wrong format.","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"jibtaf"},"content":" public static void handleTaskData(String taskData) throws WrongDataFormatException {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"jibtaf"},"content":" String[] words \u003d taskData.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"jibtaf"},"content":" String taskType \u003d words[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"jibtaf"},"content":" String status \u003d words[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"jibtaf"},"content":" String description \u003d words[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"jibtaf"},"content":" boolean isDone \u003d status.equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"jibtaf"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"jibtaf"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"jibtaf"},"content":" TASKS.add(new Todo(description, isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"jibtaf"},"content":" TaskList.incrementNumOfTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"jibtaf"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"jibtaf"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"jibtaf"},"content":" String ddl \u003d words[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"jibtaf"},"content":" TASKS.add(new Deadline(description, LocalDate.parse(ddl), isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":110,"author":{"gitId":"jibtaf"},"content":" TaskList.incrementNumOfTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"jibtaf"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"jibtaf"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"jibtaf"},"content":" String fromTime \u003d words[4];","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"jibtaf"},"content":" String toTime \u003d words[5];","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"jibtaf"},"content":" TASKS.add(new Event(description, LocalDate.parse(fromTime), LocalDate.parse(toTime), isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":117,"author":{"gitId":"jibtaf"},"content":" TaskList.incrementNumOfTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"jibtaf"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"jibtaf"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"jibtaf"},"content":" throw new WrongDataFormatException(\"The tasks stored in your local disk have wrong format!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"jibtaf"},"content":" * Rewrites the data file with current content in the taskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"jibtaf"},"content":" * @throws IOException If unable to write to the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"jibtaf"},"content":" public static void updateData() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"jibtaf"},"content":" String data \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"jibtaf"},"content":" for (Task t : TASKS) {","lastModifiedDate":"2023-09-14"},{"lineNumber":132,"author":{"gitId":"jibtaf"},"content":" data +\u003d t.getDataRepresentation() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"jibtaf"},"content":" writeToFile(DATA_FILE_PATH, data);","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":136}},{"path":"src/main/java/bellcurvegod/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.EmptyDeadlineDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" * Encapsulates a task with deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" * Creates a Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" * @param description Description of the Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * @param by Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" * Creates a Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" * @param description Description of the Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" * @param by Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" * @param isDone Whether the Deadline is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" public Deadline(String description, LocalDate by, boolean isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" * Generates a Deadline with description given in the input.","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" * @param input Input entered by user.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" * @return A Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" * @throws EmptyDeadlineDescriptionException If deadline is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" public static Deadline generateDeadlineFromInput(String input) throws EmptyDeadlineDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" if (input.split(\" \").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" throw new EmptyDeadlineDescriptionException(\"You did not provide any description to this Deadline.\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" + \"To add a Deadline, enter \\\"deadline \u003cdescription\u003e /by \u003cyyyy-mm-dd\u003e\\\".\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" String front \u003d input.split(\"/\")[0];","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" String[] frontWords \u003d front.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e desWords \u003d new ArrayList\u003c\u003e(Arrays.asList(frontWords).subList(1, frontWords.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" String des \u003d String.join(\" \", desWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" String back \u003d input.split(\"/\")[1];","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" String[] backWords \u003d back.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e ddlWords \u003d new ArrayList\u003c\u003e(Arrays.asList(backWords).subList(1, backWords.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" String ddl \u003d String.join(\" \", ddlWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":" LocalDate deadline \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" deadline \u003d LocalDate.parse(ddl);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" Ui.showWrongDateFormatMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" return new Deadline(\"__Faulty\", deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"jibtaf"},"content":" return new Deadline(des, deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jibtaf"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jibtaf"},"content":" return \"D|\" + super.getDataRepresentation() + \"|\" + this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"jibtaf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"jibtaf"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":84}},{"path":"src/main/java/bellcurvegod/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.EmptyEventDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" * Encapsulates a task with a duration.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" protected LocalDate from;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" protected LocalDate to;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" * Creates an event.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * @param description Description of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" * @param from From time of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" * @param to To time of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" * Creates an event.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" * @param description Description of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" * @param from From time of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" * @param to To time of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" * @param isDone Whether the event is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" public Event(String description, LocalDate from, LocalDate to, boolean isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" * Generates an Event with description given in the input.","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" * @param input Input entered by user.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" * @return An Event.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" * @throws EmptyEventDescriptionException If description is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" public static Event generateEventFromInput(String input) throws EmptyEventDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" if (input.split(\" \").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" throw new EmptyEventDescriptionException(\"You did not provide any description to this Event.\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" + \"To add an Event, enter \\\"event \u003cdescription\u003e /from \u003cstartTime\u003e /to \u003cendTime\u003e\\\".\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" String[] wordsSplitBySlash \u003d input.split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" String front \u003d wordsSplitBySlash[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" String[] frontWords \u003d front.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e desWords \u003d new ArrayList\u003c\u003e(Arrays.asList(frontWords).subList(1, frontWords.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" String des \u003d String.join(\" \", desWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" String middle \u003d wordsSplitBySlash[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" String[] midWords \u003d middle.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e startWords \u003d new ArrayList\u003c\u003e(Arrays.asList(midWords).subList(1, midWords.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" String start \u003d String.join(\" \", startWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" String back \u003d wordsSplitBySlash[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":" String[] backWords \u003d back.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e endWords \u003d new ArrayList\u003c\u003e(Arrays.asList(backWords).subList(1, backWords.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"jibtaf"},"content":" String end \u003d String.join(\" \", endWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"jibtaf"},"content":" LocalDate from \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jibtaf"},"content":" LocalDate to \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"jibtaf"},"content":" from \u003d LocalDate.parse(start);","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jibtaf"},"content":" to \u003d LocalDate.parse(end);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jibtaf"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"jibtaf"},"content":" Ui.showWrongDateFormatMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"jibtaf"},"content":" return new Event(\"__Faulty\", from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"jibtaf"},"content":" return new Event(des, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"jibtaf"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"jibtaf"},"content":" return \"D|\" + super.getDataRepresentation() + \"|\" + this.from + \"|\" + this.to;","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"jibtaf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"jibtaf"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":97}},{"path":"src/main/java/bellcurvegod/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" * Creates a Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * Returns the description.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" * @return Description.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" * Returns the status icon depending on whether the task is done.","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" * @return \"X\" if the task is done; \" \" otherwise.","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" return this.isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" * Returns a string representing the task for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" * @return A string representing the task for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" String binaryStatus \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" return binaryStatus + \"|\" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" * Returns the string representation of a task.","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" * @return String representation of a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":71}},{"path":"src/main/java/bellcurvegod/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.EmptyTodoDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" * Encapsulates a task with description only.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" * Creates a Todo.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" * @param description Description of the Todo.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * @param isDone Whether the Todo is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" * Generates a Todo with description given in the input.","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" * @param input Input entered by user.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" * @return A Todo.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" * @throws EmptyTodoDescriptionException If the description is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" public static Todo generateTodoFromInput(String input) throws EmptyTodoDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" if (words.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" throw new EmptyTodoDescriptionException(","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" Ui.getLine() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" + \"You did not provide any description to this Todo.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" + \"To add a Todo, enter \\\"todo \u003cdescription\u003e\\\".\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" + Ui.getLine());","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e desWords \u003d new ArrayList\u003c\u003e(Arrays.asList(words).subList(1, words.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" String des \u003d String.join(\" \", desWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" return new Todo(des);","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" return \"T|\" + super.getDataRepresentation();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":59}},{"path":"src/main/java/bellcurvegod/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.tasklist;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.EmptyDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.InvalidCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the taskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" protected static ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" protected static int numOfTasks \u003d 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" public static ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" public static void incrementNumOfTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" numOfTasks++;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" * Adds a task to the storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" * @param input Description of the task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" * @throws InvalidCommandException If the input does not start with any of the Task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" * @throws EmptyDescriptionException If description is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" public static String addTask(String input) throws InvalidCommandException, EmptyDescriptionException {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" String cmd \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" if (!(cmd.equals(\"todo\") || cmd.equals(\"deadline\") || cmd.equals(\"event\"))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" throw new InvalidCommandException(\"You have entered an invalid command word!\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" + \"To add a new Task, use \\\"todo\\\", \\\" deadline\\\", or \\\"event\\\".\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" if (cmd.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" newTask \u003d Deadline.generateDeadlineFromInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" } else if (cmd.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" newTask \u003d Event.generateEventFromInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" newTask \u003d Todo.generateTodoFromInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" if (!newTask.getDescription().equals(\"__Faulty\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" numOfTasks++;","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" return Gui.getAddTaskMessage(newTask, numOfTasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" return \"Failed to add this task. Please check your input.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" * Deletes the task from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":" * @param task Task to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" public static String delete(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" tasks.remove(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" numOfTasks--;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" return Gui.getDeleteTaskMessage(task, numOfTasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":71}},{"path":"src/main/java/bellcurvegod/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the UI.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" private static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" private static final String LOGO \u003d \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" + \" ____ _ _ _____ _____ _ \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" + \" | _ \\\\ | | | / ____| / ____| | |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" + \" | |_) | ___| | | | | _ _ _ ____ _____ | | __ ___ __| |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" + \" | _ \u003c / _ \\\\ | | | | | | | | \u0027__\\\\ \\\\ / / _ \\\\ | | |_ |/ _ \\\\ / _` |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" + \" | |_) | __/ | | | |___| |_| | | \\\\ V / __/ | |__| | (_) | (_| |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" + \" |____/ \\\\___|_|_| \\\\_____\\\\__,_|_| \\\\_/ \\\\___| \\\\_____|\\\\___/ \\\\__,_|\";","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * Greets the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" public static void greet() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" System.out.println(LOGO);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Hello! I\u0027m Bell Curve God.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" public static String getLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" return HORIZONTAL_LINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" public static void showLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" public static void showExitMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" public static void showFindMessage(ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" if (!matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" System.out.println((i + 1) + \".\" + matchingTasks.get(i));","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"There is no task in your list that matches this keyword.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" public static void showListMessage(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" System.out.println((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"There is no task in your list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":" public static void showMarkMessage(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"jibtaf"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"jibtaf"},"content":" public static void showUnmarkMessage(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"jibtaf"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"jibtaf"},"content":" public static void showAddTaskMessage(Task newTask, int numOfTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"jibtaf"},"content":" System.out.println(newTask);","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"jibtaf"},"content":" public static void showDeleteTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"jibtaf"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"jibtaf"},"content":" public static void showWrongDateFormatMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Please enter your time in the following format:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"yyyy-mm-dd\");","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"E.g. 2019-10-15\");","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":107,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":108}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"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-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/19.0.4\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" fx:controller\u003d\"bellcurvegod.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" AnchorPane.bottomAnchor\u003d\"1.0\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":23}},{"path":"src/test/java/bellcurvegod/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" public void parse_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":11}},{"path":"src/test/java/bellcurvegod/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" public void generateTodoFromInput_emptyDescription_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" assertEquals(new Todo(\"null\"), Todo.generateTodoFromInput(\"todo\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" assertEquals(Ui.getLine() + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" \"You did not provide any description to this Todo.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" \"To add a Todo, enter \\\"todo \u003cdescription\u003e\\\".\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" Ui.getLine(), e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":22}},{"path":"src/test/java/bellcurvegod/tasklist/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.tasklist;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" public void addTask_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" TaskList.addTask(\"hello\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" assertEquals(Ui.getLine() + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" \"You have entered an invalid bellcurvegod.command word!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" \"To add a new Task, use \\\"todo\\\", \\\" deadline\\\", or \\\"event\\\".\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" Ui.getLine(), e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"todo eat breakfast","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"deadline finish week2 quiz /by tomorrow","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"event zoom meeting /from 1900 /to 2000","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":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":"jibtaf"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"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":"jibtaf"},"content":" mainClass.set(\"bellcurvegod.gui.Main\")","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"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":"jibtaf"},"content":" archiveBaseName \u003d \"bellCurveGod\"","lastModifiedDate":"2023-09-03"},{"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":"jibtaf"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"jibtaf":23,"-":40}},{"path":"src/main/java/bellcurvegod/BellCurveGod.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.BellCurveGodException;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" * Main class.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"public class BellCurveGod {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" private static final String DATA_FILE_PATH \u003d \"./data/tasks.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" private String filePath;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" public BellCurveGod(String path) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" filePath \u003d path;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" public BellCurveGod() {","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" this(DATA_FILE_PATH);","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" Storage.loadTasks(filePath);","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" return Parser.parse(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" } catch (BellCurveGodException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jibtaf":36,"-":2}},{"path":"src/main/java/bellcurvegod/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import static bellcurvegod.storage.Storage.updateData;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the exitCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"public class ExitCommand implements Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" * Says goodbye to the user and exits.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" public static String run() {","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" updateData();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" return Gui.getExitMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":25}},{"path":"src/main/java/bellcurvegod/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.tasklist.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the findCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"public class FindCommand implements Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" * Lists all tasks in the taskList that","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" * contains the keyword that the user is searching for.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" public static String run(String keyword) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cTask\u003e tasks \u003d TaskList.getTaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" if (t.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" matchingTasks.add(t);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" return Gui.getFindMessage(matchingTasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":29}},{"path":"src/main/java/bellcurvegod/command/ListTasksCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.tasklist.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the listTaskCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"public class ListTasksCommand implements Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" * Lists all tasks stored.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" public static String run() {","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cTask\u003e tasks \u003d TaskList.getTaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" return Gui.getListMessage(tasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":20}},{"path":"src/main/java/bellcurvegod/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the markCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"public class MarkCommand implements Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" * Marks the given task as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * @param task task to be marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" public static String run(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" return Gui.getMarkMessage(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":19}},{"path":"src/main/java/bellcurvegod/command/Runnable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the interface for all commands.","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"interface Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" static String run() {","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" return null;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the unmarkCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"public class UnmarkCommand implements Runnable {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" * Marks the given task as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * @param task task to be marked as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" public static String run(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" return Gui.getUnmarkMessage(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":19}},{"path":"src/main/java/bellcurvegod/exception/BellCurveGodException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates all exceptions in this app.","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class BellCurveGodException extends Exception {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public BellCurveGodException(String message) {","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyByTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when by time of deadline is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyByTimeException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyByTimeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyDeadlineDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when description of deadline is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyDeadlineDescriptionException extends EmptyDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyDeadlineDescriptionException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when description of task is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyDescriptionException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyEventDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when description of event is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyEventDescriptionException extends EmptyDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyEventDescriptionException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyFromTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when from time of event is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyFromTimeException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyFromTimeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyToTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when to time of event is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyToTimeException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyToTimeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/EmptyTodoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when description of todo is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class EmptyTodoDescriptionException extends EmptyDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public EmptyTodoDescriptionException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when input is invalid.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class InvalidCommandException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/exception/WrongDataFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates an exception thrown when data is in the wrong format.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class WrongDataFormatException extends BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" public WrongDataFormatException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" super(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"jibtaf":10}},{"path":"src/main/java/bellcurvegod/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" private Label dialog;","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" private void flip() {","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" public static DialogBox getBellCurveGodDialog(String text, Image img) {","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" db.flip();","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" return db;","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":61}},{"path":"src/main/java/bellcurvegod/gui/Gui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" * Encapsulates all messages shown by the GUI.","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"public class Gui {","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * Greets the user.","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" public static String getWelcomeMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" return \"Hello! I\u0027m Bell Curve God.\\n\" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" public static String getExitMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" return \"Bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" public static String getFindMessage(ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" if (!matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" message +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" message +\u003d (i + 1) + \".\" + matchingTasks.get(i) + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" return \"There is no task in your list that matches this keyword.\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" public static String getListMessage(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" message +\u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" message +\u003d (i + 1) + \".\" + tasks.get(i) + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" return \"There is no task in your list.\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" public static String getMarkMessage(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" public static String getUnmarkMessage(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" public static String getAddTaskMessage(Task newTask, int numOfTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" message +\u003d \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" + newTask + \"\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" + \"Now you have \" + numOfTasks + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" public static String getDeleteTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" message +\u003d \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" + task + \"\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" + \"Now you have \" + numOfTasks + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"jibtaf"},"content":" public static String getWrongDateFormatMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"jibtaf"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"jibtaf"},"content":" message +\u003d \"Please enter your time in the following format:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"jibtaf"},"content":" + \"yyyy-mm-dd\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"jibtaf"},"content":" + \"E.g. 2019-10-15\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"jibtaf"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":80}},{"path":"src/main/java/bellcurvegod/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"public class Launcher {","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":13}},{"path":"src/main/java/bellcurvegod/gui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.BellCurveGod;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * A GUI for BellCurveGod using FXML.","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" private final BellCurveGod bellCurveGod \u003d new BellCurveGod();","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setBellCurveGod(bellCurveGod);","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" stage.show();","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":33}},{"path":"src/main/java/bellcurvegod/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.BellCurveGod;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" private BellCurveGod bellCurveGod;","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" private final Image bellCurveGodImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/bellCurveGod.png\"));","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" public void initialize() {","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" public void setBellCurveGod(BellCurveGod b) {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" bellCurveGod \u003d b;","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" // greets the user","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" printMessage(Gui.getWelcomeMessage());","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" public void printMessage(String message) {","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" dialogContainer.getChildren().add(DialogBox.getBellCurveGodDialog(message, bellCurveGodImage));","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"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":47,"author":{"gitId":"jibtaf"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" @FXML","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" String response \u003d bellCurveGod.getResponse(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" DialogBox.getBellCurveGodDialog(response, bellCurveGodImage)","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" );","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" userInput.clear();","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":59}},{"path":"src/main/java/bellcurvegod/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.command.FindCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.command.ListTasksCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.BellCurveGodException;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.EmptyDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.InvalidCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.tasklist.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the parser to parse user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * Parses commands entered by the user,","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" * and exits when the user types the command bye.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" public static String parse(String input) throws BellCurveGodException {","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cTask\u003e tasks \u003d TaskList.getTaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" return ExitCommand.run();","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" return ListTasksCommand.run();","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" } else if (words[0].equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" return FindCommand.run(words[1]);","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" } else if (words[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" return MarkCommand.run(tasks.get(Integer.parseInt(words[1]) - 1));","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" } else if (words[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" return UnmarkCommand.run(tasks.get(Integer.parseInt(words[1]) - 1));","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" } else if (words[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" return TaskList.delete(tasks.get(Integer.parseInt(words[1]) - 1));","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" return TaskList.addTask(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":52}},{"path":"src/main/java/bellcurvegod/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.WrongDataFormatException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.tasklist.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the storage to store and manipulate data.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" private static final String DATA_DIRECTORY_PATH \u003d \"./data\";","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" private static final String DATA_FILE_PATH \u003d \"./data/tasks.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" private static final ArrayList\u003cTask\u003e TASKS \u003d TaskList.getTaskList();","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" private static void writeToFile(String filePath, String textToAdd) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" fw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" private static void appendToFile(String filePath, String textToAppend) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" FileWriter fw \u003d new FileWriter(filePath, true); // create a FileWriter in append mode","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" fw.write(textToAppend);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" fw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" * Loads the tasks data stored on the disk.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" * @param filePath Path of the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" * @throws IOException If unable to create missing file.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" public static void loadTasks(String filePath) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" readFile(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" createMissingFile(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" * Reads data from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" * @param filePath Path of the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" * @throws FileNotFoundException If file not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" public static void readFile(String filePath) throws FileNotFoundException {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":" handleTaskData(sc.nextLine());","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" } catch (WrongDataFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" sc.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jibtaf"},"content":" * Creates missing file (and directory if not found).","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"jibtaf"},"content":" * @param filePath Path to create missing file at.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jibtaf"},"content":" * @throws IOException If unable to create file.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"jibtaf"},"content":" public static void createMissingFile(String filePath) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jibtaf"},"content":" // System.out.println(\"File not found!\\nFile has been created!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"jibtaf"},"content":" File dir \u003d new File(DATA_DIRECTORY_PATH);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"jibtaf"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"jibtaf"},"content":" dir.mkdir();","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jibtaf"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jibtaf"},"content":" f.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"jibtaf"},"content":" * Adds new tasks to the taskList from parsing the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"jibtaf"},"content":" * @param taskData Data in the data file.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jibtaf"},"content":" * @throws WrongDataFormatException If data is in the wrong format.","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"jibtaf"},"content":" public static void handleTaskData(String taskData) throws WrongDataFormatException {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"jibtaf"},"content":" String[] words \u003d taskData.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"jibtaf"},"content":" String taskType \u003d words[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"jibtaf"},"content":" String status \u003d words[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"jibtaf"},"content":" String description \u003d words[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"jibtaf"},"content":" boolean isDone \u003d status.equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"jibtaf"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"jibtaf"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"jibtaf"},"content":" TASKS.add(new Todo(description, isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"jibtaf"},"content":" TaskList.incrementNumOfTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"jibtaf"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"jibtaf"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"jibtaf"},"content":" String ddl \u003d words[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"jibtaf"},"content":" TASKS.add(new Deadline(description, LocalDate.parse(ddl), isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":110,"author":{"gitId":"jibtaf"},"content":" TaskList.incrementNumOfTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"jibtaf"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"jibtaf"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"jibtaf"},"content":" String fromTime \u003d words[4];","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"jibtaf"},"content":" String toTime \u003d words[5];","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"jibtaf"},"content":" TASKS.add(new Event(description, LocalDate.parse(fromTime), LocalDate.parse(toTime), isDone));","lastModifiedDate":"2023-09-14"},{"lineNumber":117,"author":{"gitId":"jibtaf"},"content":" TaskList.incrementNumOfTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"jibtaf"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"jibtaf"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"jibtaf"},"content":" throw new WrongDataFormatException(\"The tasks stored in your local disk have wrong format!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"jibtaf"},"content":" * Rewrites the data file with current content in the taskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"jibtaf"},"content":" * @throws IOException If unable to write to the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"jibtaf"},"content":" public static void updateData() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"jibtaf"},"content":" String data \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"jibtaf"},"content":" for (Task t : TASKS) {","lastModifiedDate":"2023-09-14"},{"lineNumber":132,"author":{"gitId":"jibtaf"},"content":" data +\u003d t.getDataRepresentation() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"jibtaf"},"content":" writeToFile(DATA_FILE_PATH, data);","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":136}},{"path":"src/main/java/bellcurvegod/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.EmptyDeadlineDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" * Encapsulates a task with deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" protected LocalDate by;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" * Creates a Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" * @param description Description of the Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * @param by Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" * Creates a Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" * @param description Description of the Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" * @param by Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" * @param isDone Whether the Deadline is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" public Deadline(String description, LocalDate by, boolean isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" * Generates a Deadline with description given in the input.","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" * @param input Input entered by user.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" * @return A Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" * @throws EmptyDeadlineDescriptionException If deadline is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" public static Deadline generateDeadlineFromInput(String input) throws EmptyDeadlineDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" if (input.split(\" \").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" throw new EmptyDeadlineDescriptionException(\"You did not provide any description to this Deadline.\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" + \"To add a Deadline, enter \\\"deadline \u003cdescription\u003e /by \u003cyyyy-mm-dd\u003e\\\".\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" String front \u003d input.split(\"/\")[0];","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" String[] frontWords \u003d front.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e desWords \u003d new ArrayList\u003c\u003e(Arrays.asList(frontWords).subList(1, frontWords.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" String des \u003d String.join(\" \", desWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" String back \u003d input.split(\"/\")[1];","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" String[] backWords \u003d back.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e ddlWords \u003d new ArrayList\u003c\u003e(Arrays.asList(backWords).subList(1, backWords.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" String ddl \u003d String.join(\" \", ddlWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":" LocalDate deadline \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" deadline \u003d LocalDate.parse(ddl);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" Ui.showWrongDateFormatMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" return new Deadline(\"__Faulty\", deadline);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"jibtaf"},"content":" return new Deadline(des, deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"jibtaf"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"jibtaf"},"content":" return \"D|\" + super.getDataRepresentation() + \"|\" + this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"jibtaf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"jibtaf"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":84}},{"path":"src/main/java/bellcurvegod/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.EmptyEventDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" * Encapsulates a task with a duration.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" protected LocalDate from;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" protected LocalDate to;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" * Creates an event.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * @param description Description of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" * @param from From time of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" * @param to To time of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" * Creates an event.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" * @param description Description of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" * @param from From time of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" * @param to To time of event.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" * @param isDone Whether the event is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" public Event(String description, LocalDate from, LocalDate to, boolean isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" * Generates an Event with description given in the input.","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" * @param input Input entered by user.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" * @return An Event.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" * @throws EmptyEventDescriptionException If description is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" public static Event generateEventFromInput(String input) throws EmptyEventDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" if (input.split(\" \").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" throw new EmptyEventDescriptionException(\"You did not provide any description to this Event.\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" + \"To add an Event, enter \\\"event \u003cdescription\u003e /from \u003cstartTime\u003e /to \u003cendTime\u003e\\\".\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" String[] wordsSplitBySlash \u003d input.split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" String front \u003d wordsSplitBySlash[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" String[] frontWords \u003d front.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e desWords \u003d new ArrayList\u003c\u003e(Arrays.asList(frontWords).subList(1, frontWords.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" String des \u003d String.join(\" \", desWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" String middle \u003d wordsSplitBySlash[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" String[] midWords \u003d middle.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e startWords \u003d new ArrayList\u003c\u003e(Arrays.asList(midWords).subList(1, midWords.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" String start \u003d String.join(\" \", startWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" String back \u003d wordsSplitBySlash[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":" String[] backWords \u003d back.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e endWords \u003d new ArrayList\u003c\u003e(Arrays.asList(backWords).subList(1, backWords.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"jibtaf"},"content":" String end \u003d String.join(\" \", endWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"jibtaf"},"content":" LocalDate from \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"jibtaf"},"content":" LocalDate to \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"jibtaf"},"content":" from \u003d LocalDate.parse(start);","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"jibtaf"},"content":" to \u003d LocalDate.parse(end);","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"jibtaf"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"jibtaf"},"content":" Ui.showWrongDateFormatMessage();","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"jibtaf"},"content":" return new Event(\"__Faulty\", from, to);","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"jibtaf"},"content":" return new Event(des, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"jibtaf"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"jibtaf"},"content":" return \"D|\" + super.getDataRepresentation() + \"|\" + this.from + \"|\" + this.to;","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"jibtaf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"jibtaf"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":97}},{"path":"src/main/java/bellcurvegod/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":" * Encapsulates tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" * Creates a Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * Returns the description.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" * @return Description.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" * Returns the status icon depending on whether the task is done.","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" * @return \"X\" if the task is done; \" \" otherwise.","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" return this.isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" * Returns a string representing the task for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" * @return A string representing the task for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" String binaryStatus \u003d this.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" return binaryStatus + \"|\" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" * Returns the string representation of a task.","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" * @return String representation of a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":71}},{"path":"src/main/java/bellcurvegod/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.EmptyTodoDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" * Encapsulates a task with description only.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" * Creates a Todo.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" * @param description Description of the Todo.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * @param isDone Whether the Todo is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" public Todo(String description, boolean isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" * Generates a Todo with description given in the input.","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" * @param input Input entered by user.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" * @return A Todo.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" * @throws EmptyTodoDescriptionException If the description is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" public static Todo generateTodoFromInput(String input) throws EmptyTodoDescriptionException {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" if (words.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":" throw new EmptyTodoDescriptionException(","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" Ui.getLine() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" + \"You did not provide any description to this Todo.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" + \"To add a Todo, enter \\\"todo \u003cdescription\u003e\\\".\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" + Ui.getLine());","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" ArrayList\u003cString\u003e desWords \u003d new ArrayList\u003c\u003e(Arrays.asList(words).subList(1, words.length));","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" String des \u003d String.join(\" \", desWords);","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" return new Todo(des);","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" public String getDataRepresentation() {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" return \"T|\" + super.getDataRepresentation();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":59}},{"path":"src/main/java/bellcurvegod/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.tasklist;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.EmptyDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.exception.InvalidCommandException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.gui.Gui;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the taskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" protected static ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" protected static int numOfTasks \u003d 0;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" public static ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" public static void incrementNumOfTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" numOfTasks++;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" * Adds a task to the storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" * @param input Description of the task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" * @throws InvalidCommandException If the input does not start with any of the Task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" * @throws EmptyDescriptionException If description is missing.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" public static String addTask(String input) throws InvalidCommandException, EmptyDescriptionException {","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" String cmd \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" if (!(cmd.equals(\"todo\") || cmd.equals(\"deadline\") || cmd.equals(\"event\"))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" throw new InvalidCommandException(\"You have entered an invalid command word!\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" + \"To add a new Task, use \\\"todo\\\", \\\" deadline\\\", or \\\"event\\\".\\n\");","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":" if (cmd.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" newTask \u003d Deadline.generateDeadlineFromInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" } else if (cmd.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" newTask \u003d Event.generateEventFromInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" newTask \u003d Todo.generateTodoFromInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" if (!newTask.getDescription().equals(\"__Faulty\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" numOfTasks++;","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" return Gui.getAddTaskMessage(newTask, numOfTasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" return \"Failed to add this task. Please check your input.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" * Deletes the task from the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":" * @param task Task to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" public static String delete(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" tasks.remove(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" numOfTasks--;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" return Gui.getDeleteTaskMessage(task, numOfTasks);","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":71}},{"path":"src/main/java/bellcurvegod/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" * Encapsulates the UI.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" private static final String HORIZONTAL_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" private static final String LOGO \u003d \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" + \" ____ _ _ _____ _____ _ \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" + \" | _ \\\\ | | | / ____| / ____| | |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" + \" | |_) | ___| | | | | _ _ _ ____ _____ | | __ ___ __| |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" + \" | _ \u003c / _ \\\\ | | | | | | | | \u0027__\\\\ \\\\ / / _ \\\\ | | |_ |/ _ \\\\ / _` |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" + \" | |_) | __/ | | | |___| |_| | | \\\\ V / __/ | |__| | (_) | (_| |\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" + \" |____/ \\\\___|_|_| \\\\_____\\\\__,_|_| \\\\_/ \\\\___| \\\\_____|\\\\___/ \\\\__,_|\";","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" * Greets the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":" public static void greet() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jibtaf"},"content":" System.out.println(LOGO);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Hello! I\u0027m Bell Curve God.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jibtaf"},"content":" public static String getLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jibtaf"},"content":" return HORIZONTAL_LINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jibtaf"},"content":" public static void showLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jibtaf"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"jibtaf"},"content":" public static void showExitMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"jibtaf"},"content":" public static void showFindMessage(ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"jibtaf"},"content":" if (!matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"jibtaf"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"jibtaf"},"content":" System.out.println((i + 1) + \".\" + matchingTasks.get(i));","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"There is no task in your list that matches this keyword.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"jibtaf"},"content":" public static void showListMessage(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"jibtaf"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"jibtaf"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"jibtaf"},"content":" System.out.println((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"jibtaf"},"content":" } else {","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"There is no task in your list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"jibtaf"},"content":" public static void showMarkMessage(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"jibtaf"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"jibtaf"},"content":" public static void showUnmarkMessage(Task task) {","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"jibtaf"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"jibtaf"},"content":" public static void showAddTaskMessage(Task newTask, int numOfTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"jibtaf"},"content":" System.out.println(newTask);","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"jibtaf"},"content":" public static void showDeleteTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"jibtaf"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Now you have \" + numOfTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"jibtaf"},"content":" public static void showWrongDateFormatMessage() {","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"Please enter your time in the following format:\");","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"yyyy-mm-dd\");","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"jibtaf"},"content":" System.out.println(\"E.g. 2019-10-15\");","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"jibtaf"},"content":" showLine();","lastModifiedDate":"2023-09-14"},{"lineNumber":107,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":108}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"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-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/19.0.4\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" fx:controller\u003d\"bellcurvegod.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" AnchorPane.bottomAnchor\u003d\"1.0\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\"/\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"jibtaf"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"jibtaf":23}},{"path":"src/test/java/bellcurvegod/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":" public void parse_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":11}},{"path":"src/test/java/bellcurvegod/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" public void generateTodoFromInput_emptyDescription_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" assertEquals(new Todo(\"null\"), Todo.generateTodoFromInput(\"todo\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" assertEquals(Ui.getLine() + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" \"You did not provide any description to this Todo.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" \"To add a Todo, enter \\\"todo \u003cdescription\u003e\\\".\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" Ui.getLine(), e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":22}},{"path":"src/test/java/bellcurvegod/tasklist/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"package bellcurvegod.tasklist;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"import bellcurvegod.ui.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":" public void addTask_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":" TaskList.addTask(\"hello\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":" fail();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":" assertEquals(Ui.getLine() + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jibtaf"},"content":" \"You have entered an invalid bellcurvegod.command word!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jibtaf"},"content":" \"To add a new Task, use \\\"todo\\\", \\\" deadline\\\", or \\\"event\\\".\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jibtaf"},"content":" Ui.getLine(), e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jibtaf"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jibtaf"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jibtaf":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"jibtaf"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"jibtaf"},"content":"todo eat breakfast","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"jibtaf"},"content":"deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"jibtaf"},"content":"deadline finish week2 quiz /by tomorrow","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jibtaf"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jibtaf"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"jibtaf"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"jibtaf"},"content":"event zoom meeting /from 1900 /to 2000","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"jibtaf"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"jibtaf"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"jibtaf"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jibtaf":16}}] diff --git a/jibtaf_ip_master/commits.json b/jibtaf_ip_master/commits.json index cccbca45..21def849 100644 --- a/jibtaf_ip_master/commits.json +++ b/jibtaf_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jibtaf":[{"date":"2023-08-23","commitResults":[{"hash":"be3eee06b9b5fc096b5f190d0a5bc50099f5b658","isMergeCommit":false,"messageTitle":"Complete Level 0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":6}}},{"hash":"9be56a023031444d81fda78ca7f578eb3763e186","isMergeCommit":false,"messageTitle":"Complete Level 1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":1}}},{"hash":"c5bf49e26620097e939e01fe4ce579b3a28d6924","isMergeCommit":false,"messageTitle":"Complete Level 2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":6}}},{"hash":"a15d50fa072ef0bc628d262b9e61dbe2e886fa8a","isMergeCommit":false,"messageTitle":"Complete Level 3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":5}}},{"hash":"a3c6c18c8a68980b9ebd4f26131b44f2d3a2ad86","isMergeCommit":false,"messageTitle":"Complete Level 4: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":2}}},{"hash":"4e17b87d3261cfedeb90e3d5e85a4510bda21d87","isMergeCommit":false,"messageTitle":"Complete Level 5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":7}}},{"hash":"1aaae92dfc529dfb3f70d763309d29ed3b3acc31","isMergeCommit":false,"messageTitle":"Complete Level 6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"a655e6ff3e85334af87681bf556d8c1aee3653c0","isMergeCommit":false,"messageTitle":"Complete I/O redirection Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"sh":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"3bf51ce4cd9baab796225ff77f1590c26d25881d","isMergeCommit":false,"messageTitle":"Complete save feature","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":101,"deletions":0},"java":{"insertions":178,"deletions":27}}},{"hash":"995fa483ce9a4fda7d0c4d72a73f66906f3d5155","isMergeCommit":false,"messageTitle":"Delete unused imports","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"a20066b9f9a4038c91c58f0c66c107e79fcb3aca","isMergeCommit":false,"messageTitle":"Format Dates and Time","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":62,"deletions":27}}},{"hash":"aa91e6daacb8e6d887d1005299d7d310c0edd5c5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"a97dafb053bff5b8388de79b617e1ae0c0d5cec3","isMergeCommit":false,"messageTitle":"Add more oop and Organize classes in packages","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":288}}},{"hash":"0e2c219c76245c80cccb6654bea6b218b5d236eb","isMergeCommit":false,"messageTitle":"Modify the way to represent tasks as data","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":425,"deletions":12}}},{"hash":"5f2f75fa0ef0812c6b1a8ffd3c28e1966bf0336c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a9658eca5560a956c8f79f9ccf4886e87a822c4e","isMergeCommit":false,"messageTitle":"Add Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":1}}},{"hash":"3e8cfbbce82992c446f11121e4490ebb9553987e","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":0}}},{"hash":"2ec5a250368d3b3a8e5302fd333d187aced34d80","isMergeCommit":false,"messageTitle":"Create a JAR file","messageBody":"","tags":["v0.1","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"71b160dfe7e16e74217cc4f964c9d67e7534a092","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":99},"java":{"insertions":98,"deletions":26}}},{"hash":"411b2bc28e2ad4db8a9ac28b33d14e6de25827a4","isMergeCommit":false,"messageTitle":"Use CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":188,"deletions":56}}},{"hash":"a3fc4cc6ee54f666e7d370f74db4e68e88a98fb7","isMergeCommit":false,"messageTitle":"Remove file not found at start of program","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"2bce58bcaf9b78c091f7fe54ae6d2e8eec6b8cc3","isMergeCommit":false,"messageTitle":"Fix adding task without time bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":22}}}]},{"date":"2023-09-14","commitResults":[{"hash":"8e743187a113b4cdb0a662b476cd57cf4112c147","isMergeCommit":false,"messageTitle":"Add more methods under Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":52}}},{"hash":"35d656416c464cc578619deaa51d389f39cdbb84","isMergeCommit":false,"messageTitle":"Complete GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"fxml":{"insertions":39,"deletions":0},"java":{"insertions":355,"deletions":96}}},{"hash":"ec0a0ca41e5004fecb6fe80f13e59deb7d16df96","isMergeCommit":false,"messageTitle":"Add header comments for Gui.java and BCGException.java","messageBody":"","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":9}}}]}]},"authorFileTypeContributionMap":{"jibtaf":{"java":1237,"md":0,"fxml":39,"sh":0,"bat":0,"gradle":23,"txt":16}},"authorContributionVariance":{"jibtaf":75764.68},"authorDisplayNameMap":{"jibtaf":"CS2103T-W12-2 HE Y..IFAN"}} +{"authorDailyContributionsMap":{"jibtaf":[{"date":"2023-08-23","commitResults":[{"hash":"be3eee06b9b5fc096b5f190d0a5bc50099f5b658","isMergeCommit":false,"messageTitle":"Complete Level 0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":6}}},{"hash":"9be56a023031444d81fda78ca7f578eb3763e186","isMergeCommit":false,"messageTitle":"Complete Level 1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":1}}},{"hash":"c5bf49e26620097e939e01fe4ce579b3a28d6924","isMergeCommit":false,"messageTitle":"Complete Level 2: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":6}}},{"hash":"a15d50fa072ef0bc628d262b9e61dbe2e886fa8a","isMergeCommit":false,"messageTitle":"Complete Level 3: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":5}}},{"hash":"a3c6c18c8a68980b9ebd4f26131b44f2d3a2ad86","isMergeCommit":false,"messageTitle":"Complete Level 4: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":2}}},{"hash":"4e17b87d3261cfedeb90e3d5e85a4510bda21d87","isMergeCommit":false,"messageTitle":"Complete Level 5: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":7}}},{"hash":"1aaae92dfc529dfb3f70d763309d29ed3b3acc31","isMergeCommit":false,"messageTitle":"Complete Level 6: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"a655e6ff3e85334af87681bf556d8c1aee3653c0","isMergeCommit":false,"messageTitle":"Complete I/O redirection Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"sh":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"3bf51ce4cd9baab796225ff77f1590c26d25881d","isMergeCommit":false,"messageTitle":"Complete save feature","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":101,"deletions":0},"java":{"insertions":178,"deletions":27}}},{"hash":"995fa483ce9a4fda7d0c4d72a73f66906f3d5155","isMergeCommit":false,"messageTitle":"Delete unused imports","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"a20066b9f9a4038c91c58f0c66c107e79fcb3aca","isMergeCommit":false,"messageTitle":"Format Dates and Time","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":62,"deletions":27}}},{"hash":"aa91e6daacb8e6d887d1005299d7d310c0edd5c5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"a97dafb053bff5b8388de79b617e1ae0c0d5cec3","isMergeCommit":false,"messageTitle":"Add more oop and Organize classes in packages","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":288}}},{"hash":"0e2c219c76245c80cccb6654bea6b218b5d236eb","isMergeCommit":false,"messageTitle":"Modify the way to represent tasks as data","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":425,"deletions":12}}},{"hash":"5f2f75fa0ef0812c6b1a8ffd3c28e1966bf0336c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a9658eca5560a956c8f79f9ccf4886e87a822c4e","isMergeCommit":false,"messageTitle":"Add Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"txt":{"insertions":0,"deletions":0},"java":{"insertions":0,"deletions":1}}},{"hash":"3e8cfbbce82992c446f11121e4490ebb9553987e","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":0}}},{"hash":"2ec5a250368d3b3a8e5302fd333d187aced34d80","isMergeCommit":false,"messageTitle":"Create a JAR file","messageBody":"","tags":["v0.1","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"71b160dfe7e16e74217cc4f964c9d67e7534a092","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":99},"java":{"insertions":98,"deletions":26}}},{"hash":"411b2bc28e2ad4db8a9ac28b33d14e6de25827a4","isMergeCommit":false,"messageTitle":"Use CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":188,"deletions":56}}},{"hash":"a3fc4cc6ee54f666e7d370f74db4e68e88a98fb7","isMergeCommit":false,"messageTitle":"Remove file not found at start of program","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"2bce58bcaf9b78c091f7fe54ae6d2e8eec6b8cc3","isMergeCommit":false,"messageTitle":"Fix adding task without time bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":22}}}]},{"date":"2023-09-14","commitResults":[{"hash":"8e743187a113b4cdb0a662b476cd57cf4112c147","isMergeCommit":false,"messageTitle":"Add more methods under Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":52}}},{"hash":"35d656416c464cc578619deaa51d389f39cdbb84","isMergeCommit":false,"messageTitle":"Complete GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"fxml":{"insertions":39,"deletions":0},"java":{"insertions":355,"deletions":96}}},{"hash":"ec0a0ca41e5004fecb6fe80f13e59deb7d16df96","isMergeCommit":false,"messageTitle":"Add header comments for Gui.java and BCGException.java","messageBody":"","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":9}}}]},{"date":"2023-09-16","commitResults":[{"hash":"2ce057586711e27223444d66a4abc425c9e83667","isMergeCommit":false,"messageTitle":"refactor: Change Main class in build.gradle","messageBody":"- change main class from bellcurvegod.BellCurveGod to\nbellcurvegod.gui.Main\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"jibtaf":{"java":1237,"md":0,"fxml":39,"sh":0,"bat":0,"gradle":23,"txt":16}},"authorContributionVariance":{"jibtaf":71328.46},"authorDisplayNameMap":{"jibtaf":"CS2103T-W12-2 HE Y..IFAN"}} diff --git a/jingyu987_ip_master/authorship.json b/jingyu987_ip_master/authorship.json index daa25066..e3d2db1c 100644 --- a/jingyu987_ip_master/authorship.json +++ b/jingyu987_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":"jingyu987"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"jingyu987"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" testImplementation \u0027org.junit.jupiter:junit-jupiter:5.8.1\u0027","lastModifiedDate":"2023-09-02"},{"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":"jingyu987"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" mainClass.set(\"fishron.Fishron\")","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" archiveFileName \u003d \u0027fishron.jar\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":"checkstyle {","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":23,"-":38}},{"path":"data/fishron.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"T | 0 | asdas","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"T | 0 | lol","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"D | 0 | lol | 12-12-1234 1234","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"T | 0 | lol","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"E | 0 | lol | 12-12-1234 1234 | 12-12-1234 2222","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"T | 0 | lol","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":6}},{"path":"src/main/java/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" * Represents a command to add a task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" * The task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" private Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" * Constructs an AddCommand with the specified task.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * Executes the AddCommand to add the task to the task list and displays a message.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" * @return A message indicating the task was successfully added.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" return ui.showTaskAdded(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":41}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command that can be executed.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * A flag indicating whether this command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" * Constructs a command.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * @param isExit A flag indicating whether this command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" public Command(boolean isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * Executes the command with the given task list, user interface, and storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @param taskList The task list to perform the command on.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to read from or write to.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" public abstract String execute(TaskList taskList, Ui ui, Storage storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" * Checks if this command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" * @return True if this command is an exit command, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" return this.isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":43}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" * Represents a command to delete a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" private int taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" * Initializes a new DeleteCommand instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" * @param taskNum The index of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * Executes the delete command by removing the specified task from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @param taskList The task list to which the task will be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" * @return A message indicating the task was successfully deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" Task deleted \u003d taskList.getTask(taskNum);","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" taskList.deleteTask(taskNum);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" return ui.showTaskDeleted(taskList, deleted);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":38}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * Initializes a new ExitCommand instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" super(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * Executes the exit command, saving tasks to a file and displaying a goodbye message.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * @return A goodbye message.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" storage.saveTasksToFile(taskList.getList());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" return ui.showGoodbyeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":32}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to find tasks containing a specific keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" private String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" * Initializes a new instance of the FindCommand class with the specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" * @param keyword The keyword to search for in tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * Executes the FindCommand, searching for tasks containing the specified keyword and displaying the results.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks to search within.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @return A list of the matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" return ui.showMatchingTasks(taskList, keyword);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":35}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * Constructs a new ListCommand.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * Executes the list command to display all tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" return ui.showTaskList(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":31}},{"path":"src/main/java/commands/MarkDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class MarkDoneCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" private int taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" * Constructs a new MarkDoneCommand with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" * @param taskNum The index of the task to be marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" public MarkDoneCommand(int taskNum) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * Executes the mark done command to mark a task as done and display it.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @return A message indicating the task was successfully marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" taskList.markAsDone(taskNum);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" return ui.showDoneTask(taskList.getTask(taskNum));","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":36}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to unmark a task as done in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" private int taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" * Initializes a new instance of the UnmarkCommand class.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" * @param taskNum The index of the task to be unmarked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * Executes the UnmarkCommand, marking the specified task as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" * @return A message indicating the task was successfully unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" taskList.markAsUndone(taskNum);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" return ui.showUnmarkTask(taskList.getTask(taskNum));","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":37}},{"path":"src/main/java/commands/UnsureCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to display an unknown command error.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class UnsureCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * Initializes a new UnsureCommand instance.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public UnsureCommand() {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * Executes the unsure command, returning an error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * @return A message indicating that the input was unknown.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" return \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":31}},{"path":"src/main/java/exceptions/FishronException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package exceptions;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":" * Custom exception class for the Fishron application.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"public class FishronException extends Exception {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Constructs a new FishronException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" * @param message The detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" public FishronException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jingyu987":15}},{"path":"src/main/java/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package gui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" * The `DialogBox` class represents a chat dialog box in the Fishron application\u0027s user interface.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * It contains a label for text and an image view for displaying an avatar or profile picture.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" private Label text;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * Constructs a new `DialogBox` with the provided label and image view.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param l The label containing text to display in the dialog.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * @param iv The image view displaying an avatar or profile picture.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" text \u003d l;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" * Flips the dialog box to change the alignment, placing the image view on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" * This is useful for displaying messages from the user and the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" * Creates and returns a `DialogBox` for representing a user\u0027s message.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" * @param l The label containing the user\u0027s message text.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" * @param iv The image view displaying the user\u0027s avatar or profile picture.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" * @return A `DialogBox` for the user\u0027s message.","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" * Creates and returns a `DialogBox` for representing a message from Duke (the application).","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" * The dialog box is flipped to show Duke\u0027s message on the left side.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" * @param l The label containing Duke\u0027s message text.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" * @param iv The image view displaying Duke\u0027s avatar or profile picture.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":" * @return A flipped `DialogBox` for Duke\u0027s message.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":73}},{"path":"src/main/java/gui/Fishron.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package gui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import commands.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * The main class for the Fishron task management application.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":"public class Fishron extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" // Fields","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" private Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" private Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" private Scene scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" * Initializes a new instance of the Fishron class.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" * @param filePath The file path for storing task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" public Fishron(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" this.taskList \u003d storage.loadTasksFromFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" * Initializes a new instance of the Fishron class with a default file path.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" public Fishron() {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" this.storage \u003d new Storage(\"./data/fishron.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" this.taskList \u003d storage.loadTasksFromFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" // Step 1. Setting up required components","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" // The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"jingyu987"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"jingyu987"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"jingyu987"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"jingyu987"},"content":" // Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"jingyu987"},"content":" stage.setTitle(\"Fishron\");","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"jingyu987"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"jingyu987"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"jingyu987"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"jingyu987"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"jingyu987"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"jingyu987"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"jingyu987"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"jingyu987"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"jingyu987"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"jingyu987"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"jingyu987"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"jingyu987"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"jingyu987"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"jingyu987"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"jingyu987"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"jingyu987"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"jingyu987"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"jingyu987"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"jingyu987"},"content":" // Step 3. Add functionality to handle user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"jingyu987"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jingyu987"},"content":" handleUserInput();","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"jingyu987"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"jingyu987"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"jingyu987"},"content":" handleUserInput();","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"jingyu987"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"jingyu987"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"jingyu987"},"content":" Label welcomeMessage \u003d new Label(ui.showWelcomeMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"jingyu987"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"jingyu987"},"content":" DialogBox.getDukeDialog(welcomeMessage, new ImageView(duke))","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"jingyu987"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"jingyu987"},"content":" * Handles user input by processing it and displaying the appropriate response in the chat.","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"jingyu987"},"content":" * This method is called when the user clicks the \"Send\" button or presses Enter after typing a message.","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"jingyu987"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"jingyu987"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"jingyu987"},"content":" String output \u003d getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"jingyu987"},"content":" Label userText \u003d new Label(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"jingyu987"},"content":" Label dukeText \u003d new Label(output);","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"jingyu987"},"content":" if (input.toLowerCase().equals(\"bye\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"jingyu987"},"content":" closeProgram();","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"jingyu987"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"jingyu987"},"content":" DialogBox.getUserDialog(userText, new ImageView(user)),","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"jingyu987"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(duke))","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"jingyu987"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"jingyu987"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"jingyu987"},"content":" * Generates a response to user input by parsing and executing a command.","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"jingyu987"},"content":" * @param input The user\u0027s input message.","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"jingyu987"},"content":" * @return The response message generated by the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"jingyu987"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"jingyu987"},"content":" Command command \u003d Parser.parse(input, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"jingyu987"},"content":" String output \u003d command.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"jingyu987"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"jingyu987"},"content":" } catch (FishronException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"jingyu987"},"content":" return ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"jingyu987"},"content":" * Closes the Fishron application by saving tasks to a file and exiting the program.","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"jingyu987"},"content":" private void closeProgram() {","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"jingyu987"},"content":" storage.saveTasksToFile(taskList.getList());","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"jingyu987"},"content":" System.exit(0);","lastModifiedDate":"2023-09-09"},{"lineNumber":168,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":170,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":171,"author":{"gitId":"jingyu987"},"content":" * Runs the Fishron application in console mode.","lastModifiedDate":"2023-09-09"},{"lineNumber":172,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"jingyu987"},"content":" public void run() {","lastModifiedDate":"2023-09-09"},{"lineNumber":174,"author":{"gitId":"jingyu987"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"jingyu987"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":177,"author":{"gitId":"jingyu987"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-09"},{"lineNumber":178,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":179,"author":{"gitId":"jingyu987"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":180,"author":{"gitId":"jingyu987"},"content":" ui.showLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":181,"author":{"gitId":"jingyu987"},"content":" Command command \u003d Parser.parse(fullCommand, this.taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":182,"author":{"gitId":"jingyu987"},"content":" command.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":183,"author":{"gitId":"jingyu987"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-09-09"},{"lineNumber":184,"author":{"gitId":"jingyu987"},"content":" } catch (FishronException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":185,"author":{"gitId":"jingyu987"},"content":" ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":186,"author":{"gitId":"jingyu987"},"content":" } finally {","lastModifiedDate":"2023-09-09"},{"lineNumber":187,"author":{"gitId":"jingyu987"},"content":" ui.showLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":188,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":189,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":190,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":191,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":192,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":193,"author":{"gitId":"jingyu987"},"content":" * The main entry point of the Fishron application.","lastModifiedDate":"2023-09-09"},{"lineNumber":194,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":195,"author":{"gitId":"jingyu987"},"content":" * @param args The command line arguments (not used in this application).","lastModifiedDate":"2023-09-09"},{"lineNumber":196,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":197,"author":{"gitId":"jingyu987"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":198,"author":{"gitId":"jingyu987"},"content":" new Fishron(\"./data/fishron.txt\").run();","lastModifiedDate":"2023-09-09"},{"lineNumber":199,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":200,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":200}},{"path":"src/main/java/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package gui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":" * The `Launcher` class serves as an entry point for launching the Fishron application.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":" * It\u0027s used to work around classpath issues and start the JavaFX application.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * The main method to start the Fishron application.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" // Launch the Fishron application using JavaFX Application.launch","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" Application.launch(Fishron.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":19}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import commands.AddCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import commands.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import commands.FindCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import commands.ListCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"import commands.MarkDoneCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"import commands.UnmarkCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"import commands.UnsureCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" * The Parser class is responsible for parsing user input and converting it into executable commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * Parses the user input and returns the corresponding Command object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" * @param input The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @param taskList The TaskList to operate on.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If there is an issue with parsing or an invalid command.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" public static Command parse(String input, TaskList taskList) throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" isValidCommands(input, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" if (input.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"find\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" String keyword \u003d parts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"mark\");","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" int taskIndex \u003d Integer.parseInt(parts[1].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" return new MarkDoneCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"unmark\");","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" int taskIndex \u003d Integer.parseInt(parts[1].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"delete\");","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":" int taskIndex \u003d Integer.parseInt(parts[1].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"todo\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" return new AddCommand(parseTodo(parts[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":" return new AddCommand(parseDeadline(parts[0].split(\"deadline\")[1].trim(), parts[1].trim()));","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"/from|/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":" return new AddCommand(parseEvent(parts[0].split(\"event\")[1].trim(), parts[1].trim(), parts[2].trim()));","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jingyu987"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jingyu987"},"content":" return new UnsureCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jingyu987"},"content":" * Validates whether the given command is valid and follows the required format.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jingyu987"},"content":" * @param command The command to validate.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jingyu987"},"content":" * @param taskList The TaskList to validate against.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jingyu987"},"content":" * @return True if the command is valid, otherwise throws an exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If the command is invalid or in an incorrect format.","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jingyu987"},"content":" public static boolean isValidCommands(String command, TaskList taskList) throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jingyu987"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jingyu987"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"find\") \u0026\u0026 command.split(\"find\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a task to find.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"mark\") \u0026\u0026 command.split(\"mark\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a task to be marked.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"unmark\") \u0026\u0026 command.split(\"unmark\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a task to be unmarked.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"mark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"jingyu987"},"content":" String taskIndexPart \u003d command.split(\"mark\")[1].trim();","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"jingyu987"},"content":" Integer.parseInt(taskIndexPart);","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"jingyu987"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"jingyu987"},"content":" if (Integer.parseInt(taskIndexPart) \u003c 1 || Integer.parseInt(taskIndexPart) \u003e taskList.getSize()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"jingyu987"},"content":" String taskIndexPart \u003d command.split(\"unmark\")[1].trim();","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"jingyu987"},"content":" Integer.parseInt(taskIndexPart);","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"jingyu987"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"jingyu987"},"content":" if (Integer.parseInt(taskIndexPart) \u003c 1 || Integer.parseInt(taskIndexPart) \u003e taskList.getSize()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"delete\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"jingyu987"},"content":" String taskIndexPart \u003d command.split(\"delete\")[1].trim();","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"jingyu987"},"content":" Integer.parseInt(taskIndexPart);","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"jingyu987"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"jingyu987"},"content":" if (Integer.parseInt(taskIndexPart) \u003c 1 || Integer.parseInt(taskIndexPart) \u003e taskList.getSize()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"todo\") \u0026\u0026 command.split(\"todo\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"deadline\") \u0026\u0026 command.split(\"deadline\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d command.split(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"jingyu987"},"content":" String emptyDesc \u003d parts[0].split(\"deadline\")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"jingyu987"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"deadline\")","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"jingyu987"},"content":" \u0026\u0026 (command.split(\"/by\").length !\u003d 2 || command.split(\"/by\")[1].trim().isEmpty())) {","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid deadline format.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"event\") \u0026\u0026 command.split(\"event\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d command.split(\"/from|/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"jingyu987"},"content":" String emptyDesc \u003d parts[0].split(\"event\")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"jingyu987"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"event\")","lastModifiedDate":"2023-09-09"},{"lineNumber":178,"author":{"gitId":"jingyu987"},"content":" \u0026\u0026 (command.split(\"/from|/to\").length !\u003d 3 || command.split(\"/from|/to\")[1].trim().isEmpty()","lastModifiedDate":"2023-09-09"},{"lineNumber":179,"author":{"gitId":"jingyu987"},"content":" || command.split(\"/from|/to\")[2].trim().isEmpty())) {","lastModifiedDate":"2023-09-09"},{"lineNumber":180,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid event format.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"jingyu987"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"jingyu987"},"content":" * Parses a description string and creates a ToDo object.","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"jingyu987"},"content":" * @return A ToDo object.","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"jingyu987"},"content":" public static ToDo parseTodo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"jingyu987"},"content":" return new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"jingyu987"},"content":" * Parses a description and a deadline string and creates a Deadline object.","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"jingyu987"},"content":" * @param by The deadline in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"jingyu987"},"content":" * @return A Deadline object.","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If the deadline format is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"jingyu987"},"content":" public static Deadline parseDeadline(String description, String by) throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"jingyu987"},"content":" return new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"jingyu987"},"content":" * Parses a description, a \"from\" string, and a \"to\" string and creates an Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"jingyu987"},"content":" * @param from The starting date and time in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"jingyu987"},"content":" * @param to The ending date and time in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"jingyu987"},"content":" * @return An Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If the date/time format is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"jingyu987"},"content":" public static Event parseEvent(String description, String from, String to) throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"jingyu987"},"content":" return new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":220}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" * The Storage class handles loading and saving tasks to/from a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" private File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param filePath The path to the file where tasks will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" * Loads tasks from the file and returns a TaskList containing them.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" * @return A TaskList containing tasks loaded from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" public TaskList loadTasksFromFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" if (parts.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" Task task \u003d Parser.parseTodo(description.trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" Task task \u003d Parser.parseDeadline(description.trim(), by.trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" Task task \u003d Parser.parseEvent(description.trim(), from.trim(), to.trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":" System.out.println(\"No saved tasks found.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":" } catch (FishronException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jingyu987"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jingyu987"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jingyu987"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jingyu987"},"content":" return new TaskList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jingyu987"},"content":" * Saves the provided task list to the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jingyu987"},"content":" public void saveTasksToFile(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jingyu987"},"content":" PrintWriter printWriter \u003d new PrintWriter(\"./data/fishron.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jingyu987"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jingyu987"},"content":" printWriter.println(task.toFileString());","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jingyu987"},"content":" printWriter.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jingyu987"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jingyu987"},"content":" System.out.println(\"Error saving tasks to file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":97}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" * Constructs a deadline task with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * @param by The deadline in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If the provided date/time format is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" public Deadline(String description, String by) throws FishronException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid date/time format. e.g. 21-05-2023 1200\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" * Converts the deadline task to a string representation for storing in a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" * @return The string representation of the deadline task for storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" return \"D | \" + super.toFileString() + \" | \" + by.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" * Converts the deadline task to a user-friendly string representation.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" * @return The user-friendly string representation of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mma\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jingyu987":52}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * Represents an event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" * Initializes a new Event instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * @param from The starting date and time of the event in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param to The ending date and time of the event in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If the date/time format is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" public Event(String description, String from, String to) throws FishronException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid date/time format. e.g. 21-05-2023 1200\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" * Converts the event task to a string in the file format.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" * @return A string representation of the event task in the file format.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" return \"E | \" + super.toFileString() + \" | \" + from.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"))","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" + \" | \"","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" + to.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" * Converts the event task to a string representation.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mma\")) + \" to: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" + to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mma\")) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jingyu987":58}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":" * Represents a task with a description and status.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * Constructs a task with the given description and marks it as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" * Converts the task to a formatted string for saving to a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" * @return A string representation of the task for file storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" return (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" * @return The task\u0027s description.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" return description;","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" * Gets an icon representing the status of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" * @return A string containing an icon ([X] for done, [ ] for undone).","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" return getStatusIcon().trim() + \" \" + getDescription().trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jingyu987":65}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * Constructs an empty task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * Constructs a task list with the given initial list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param taskList The initial list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" * Deletes a task from the task list at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" this.taskList.remove(index - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" * Gets the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" return this.taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" * Gets the number of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" * Marks a task as done at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":" public void markAsDone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" this.taskList.get(index - 1).markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jingyu987"},"content":" * Marks a task as undone at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jingyu987"},"content":" * @param index The index of the task to be marked as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jingyu987"},"content":" public void markAsUndone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jingyu987"},"content":" this.taskList.get(index - 1).markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jingyu987"},"content":" * Gets the task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jingyu987"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jingyu987"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jingyu987"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jingyu987"},"content":" return this.taskList.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jingyu987"},"content":" * Finds tasks containing a specific keyword in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jingyu987"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jingyu987"},"content":" * @return An ArrayList of tasks containing the specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"jingyu987"},"content":" public ArrayList\u003cTask\u003e findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"jingyu987"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"jingyu987"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"jingyu987"},"content":" if (task.getDescription().toLowerCase().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"jingyu987"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"jingyu987"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":107}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" * Constructs a ToDo task with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" * Converts the ToDo task to a string format suitable for saving to a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * @return A string representation of the tToDo task for file storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" return \"T | \" + super.toFileString();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * Converts the ToDo task to a user-friendly string format for display.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" * @return A user-friendly string representation of the ToDo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jingyu987":36}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" * The `Ui` class handles user interaction and displays messages to the console.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * It provides methods for showing welcome and goodbye messages, reading user commands,","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" * displaying task-related information, and showing error messages.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"public class Ui {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" * Creates a new `Ui` object and initializes the scanner for user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" public Ui() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" * Displays a welcome message to the user when the application starts.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @return The welcome message as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" public String showWelcomeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" return \"Hello! I\u0027m Fishron\\n\" + \"What can I do for you?\";","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" * Displays a goodbye message to the user when the application exits.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" * @return The goodbye message as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" public String showGoodbyeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" * Displays a horizontal line as a separator in the console.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" * @return The horizontal line as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" public String showLine() {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" return \"___________________________________________________________\";","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" * Reads a user command from the console and returns it as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" * @return The user-entered command.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" String userCommand \u003d sc.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" return userCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" * @param errorMsg The error message to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" * @return The error message as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" public String showErrorMessage(String errorMsg) {","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":" return errorMsg;","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" * Displays a message to indicate that a task has been successfully added.","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":" * @param taskList The task list containing the added task.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":" * @return A string to indicate that a task has been successfully added.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"jingyu987"},"content":" public String showTaskAdded(TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"jingyu987"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"jingyu987"},"content":" + \" \" + taskList.getList().get(taskList.getSize() - 1).toString() + \"\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"jingyu987"},"content":" + \"Now you have \" + taskList.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"jingyu987"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"jingyu987"},"content":" * @param taskList The task list to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"jingyu987"},"content":" * @return The list of tasks as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"jingyu987"},"content":" public String showTaskList(TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"jingyu987"},"content":" String taskListString \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"jingyu987"},"content":" ArrayList\u003cTask\u003e list \u003d taskList.getList();","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"jingyu987"},"content":" int start \u003d 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"jingyu987"},"content":" for (Task listItems : list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"jingyu987"},"content":" taskListString +\u003d String.format(\"%d. %s\\n\", start, listItems.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"jingyu987"},"content":" start++;","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"jingyu987"},"content":" return taskListString;","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"jingyu987"},"content":" * Displays a message to indicate that a task has been successfully deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"jingyu987"},"content":" * @param tasklist The task list containing the deleted task.","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"jingyu987"},"content":" * @param deleted The deleted task.","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"jingyu987"},"content":" * @return A string to indicate that a task has been successfully deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"jingyu987"},"content":" public String showTaskDeleted(TaskList tasklist, Task deleted) {","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"jingyu987"},"content":" String message \u003d \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"jingyu987"},"content":" + \" \" + deleted + \"\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"jingyu987"},"content":" + \"Now you have \" + tasklist.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"jingyu987"},"content":" return message;","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"jingyu987"},"content":" * Displays a message to indicate that a task has been marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"jingyu987"},"content":" * @param task The task that has been marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"jingyu987"},"content":" * @return A string to indicate that a task has been successfully marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"jingyu987"},"content":" public String showDoneTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"jingyu987"},"content":" String message \u003d \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"jingyu987"},"content":" + \" \" + task.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"jingyu987"},"content":" return message;","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"jingyu987"},"content":" * Displays a message to indicate that a task has been marked as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"jingyu987"},"content":" * @param task The task that has been marked as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"jingyu987"},"content":" * @return A string to indicate that a task has been successfully unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"jingyu987"},"content":" public String showUnmarkTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"jingyu987"},"content":" String message \u003d \"I\u0027ve marked this task as undone:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"jingyu987"},"content":" + \" \" + task.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"jingyu987"},"content":" return message;","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"jingyu987"},"content":" * Displays tasks that contains the keyWord.","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"jingyu987"},"content":" * @param matchingTasks The task list to search on.","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"jingyu987"},"content":" * @param keyWord Keyword to be searched.","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"jingyu987"},"content":" * @return A list of matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"jingyu987"},"content":" public String showMatchingTasks(TaskList matchingTasks, String keyWord) {","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"jingyu987"},"content":" ArrayList\u003cTask\u003e taskList \u003d matchingTasks.findTasksByKeyword(keyWord);","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"jingyu987"},"content":" String output \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"jingyu987"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"jingyu987"},"content":" output +\u003d task.toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"jingyu987"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":156}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"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-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"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.Fishron\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"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-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"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-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"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-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":19}},{"path":"src/test/java/gui/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package gui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"import commands.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public void execute_addTodo_success() throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" Command addCommand \u003d parser.parse(\"todo Buy groceries\", taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" addCommand.execute(taskList, new Ui(), new Storage(\"./data/fishron.txt\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" assertEquals(\"[T][ ] Buy groceries\", taskList.getTask(1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":25}},{"path":"src/test/java/gui/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package gui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" public void testParseTodo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" String description \u003d \"todo Buy milk\";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" ToDo todo \u003d Parser.parseTodo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" String expectedDescription \u003d \"[T][ ] todo Buy milk\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" assertEquals(expectedDescription, todo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" public void testParseDeadline() throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" String description \u003d \"sleep\";","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" Deadline deadline \u003d Parser.parseDeadline(description, \"12-05-2023 2300\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" String expectedDescription \u003d \"[D][ ] sleep (by: May 12 2023 11:00PM)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" assertEquals(expectedDescription, deadline.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":27}},{"path":"src/test/java/gui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package gui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import commands.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import commands.MarkDoneCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":"public class UiTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" public void showDoneTaskTest() throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" ToDo todo \u003d new ToDo(\"Buy milk\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" Command markCommand \u003d new MarkDoneCommand(taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" markCommand.execute(taskList, ui, new Storage(\"./data/fishron.txt\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" String expectedDesc \u003d \"___________________________________________________________\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" \"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" \" \" + todo.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" String printedOutput \u003d outContent.toString().trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" expectedDesc \u003d expectedDesc.replaceAll(\"\\\\r\\\\n\", \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" printedOutput \u003d printedOutput.replaceAll(\"\\\\r\\\\n\", \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" assertEquals(expectedDesc, printedOutput);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":46}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"todo Read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"deadline Return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"event Project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jingyu987":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"java -classpath ..\\bin Fishron \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":{"jingyu987":1,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"jingyu987"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" testImplementation \u0027org.junit.jupiter:junit-jupiter:5.8.1\u0027","lastModifiedDate":"2023-09-02"},{"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":"jingyu987"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" mainClass.set(\"gui.Launcher\")","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" archiveFileName \u003d \u0027fishron.jar\u0027","lastModifiedDate":"2023-09-02"},{"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":"jingyu987"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":"checkstyle {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":24,"-":38}},{"path":"data/fishron.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"T | 0 | asdas","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"T | 0 | lol","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"D | 0 | lol | 12-12-1234 1234","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"T | 0 | lol","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"E | 0 | lol | 12-12-1234 1234 | 12-12-1234 2222","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"T | 0 | lol","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":6}},{"path":"src/main/java/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" * Represents a command to add a task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" * The task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" private Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" * Constructs an AddCommand with the specified task.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * Executes the AddCommand to add the task to the task list and displays a message.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" * @return A message indicating the task was successfully added.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" return ui.showTaskAdded(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":41}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command that can be executed.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * A flag indicating whether this command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" * Constructs a command.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * @param isExit A flag indicating whether this command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" public Command(boolean isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * Executes the command with the given task list, user interface, and storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @param taskList The task list to perform the command on.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to read from or write to.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" public abstract String execute(TaskList taskList, Ui ui, Storage storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" * Checks if this command is an exit command.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" * @return True if this command is an exit command, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" return this.isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":43}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" * Represents a command to delete a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" private int taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" * Initializes a new DeleteCommand instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" * @param taskNum The index of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * Executes the delete command by removing the specified task from the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @param taskList The task list to which the task will be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" * @return A message indicating the task was successfully deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" Task deleted \u003d taskList.getTask(taskNum);","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" taskList.deleteTask(taskNum);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" return ui.showTaskDeleted(taskList, deleted);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":38}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * Initializes a new ExitCommand instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" super(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * Executes the exit command, saving tasks to a file and displaying a goodbye message.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * @return A goodbye message.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" storage.saveTasksToFile(taskList.getList());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" return ui.showGoodbyeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":32}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to find tasks containing a specific keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" private String keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" * Initializes a new instance of the FindCommand class with the specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" * @param keyword The keyword to search for in tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * Executes the FindCommand, searching for tasks containing the specified keyword and displaying the results.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks to search within.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @return A list of the matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" return ui.showMatchingTasks(taskList, keyword);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":35}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to display the help list.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * Constructs a new HelpCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public HelpCommand() {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * Executes the HelpCommand, displaying the list of inputs available.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks to search within.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * @return A String of the inputs available.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" return ui.showHelp();","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"jingyu987":31}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * Constructs a new ListCommand.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * Executes the list command to display all tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" return ui.showTaskList(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":31}},{"path":"src/main/java/commands/MarkDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class MarkDoneCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" private int taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" * Constructs a new MarkDoneCommand with the given task number.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" * @param taskNum The index of the task to be marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" public MarkDoneCommand(int taskNum) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * Executes the mark done command to mark a task as done and display it.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @return A message indicating the task was successfully marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" taskList.markAsDone(taskNum);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" return ui.showDoneTask(taskList.getTask(taskNum));","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":36}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to unmark a task as done in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" private int taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" * Initializes a new instance of the UnmarkCommand class.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" * @param taskNum The index of the task to be unmarked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * Executes the UnmarkCommand, marking the specified task as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" * @return A message indicating the task was successfully unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" taskList.markAsUndone(taskNum);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" return ui.showUnmarkTask(taskList.getTask(taskNum));","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":37}},{"path":"src/main/java/commands/UnsureCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Represents a command to display an unknown command error.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"public class UnsureCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * Initializes a new UnsureCommand instance.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public UnsureCommand() {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" super(false);","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * Executes the unsure command, returning an error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param ui The user interface to display messages.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * @param storage The storage to save the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" * @return A message indicating that the input was unknown.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" return ui.showUnrecognisedInput();","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":31}},{"path":"src/main/java/exceptions/FishronException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package exceptions;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":" * Custom exception class for the Fishron application.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"public class FishronException extends Exception {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" * Constructs a new FishronException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" * @param message The detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" public FishronException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jingyu987":15}},{"path":"src/main/java/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package gui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" * The `DialogBox` class represents a chat dialog box in the Fishron application\u0027s user interface.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * It contains a label for text and an image view for displaying an avatar or profile picture.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" private Label text;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * Constructs a new `DialogBox` with the provided label and image view.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param l The label containing text to display in the dialog.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" * @param iv The image view displaying an avatar or profile picture.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" text \u003d l;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" * Flips the dialog box to change the alignment, placing the image view on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" * This is useful for displaying messages from the user and the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" * Creates and returns a `DialogBox` for representing a user\u0027s message.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" * @param l The label containing the user\u0027s message text.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" * @param iv The image view displaying the user\u0027s avatar or profile picture.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" * @return A `DialogBox` for the user\u0027s message.","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" * Creates and returns a `DialogBox` for representing a message from Duke (the application).","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" * The dialog box is flipped to show Duke\u0027s message on the left side.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" * @param l The label containing Duke\u0027s message text.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" * @param iv The image view displaying Duke\u0027s avatar or profile picture.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":" * @return A flipped `DialogBox` for Duke\u0027s message.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":73}},{"path":"src/main/java/gui/Fishron.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package gui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import commands.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * The main class for the Fishron task management application.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":"public class Fishron extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" private Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" private Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" private Scene scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" * Initializes a new instance of the Fishron class.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" * @param filePath The file path for storing task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" public Fishron(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" this.taskList \u003d storage.loadTasksFromFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" * Initializes a new instance of the Fishron class with a default file path.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" public Fishron() {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" this.storage \u003d new Storage(\"./data/fishron.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" this.taskList \u003d storage.loadTasksFromFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"jingyu987"},"content":" stage.setTitle(\"Fishron\");","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"jingyu987"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"jingyu987"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"jingyu987"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"jingyu987"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"jingyu987"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"jingyu987"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"jingyu987"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"jingyu987"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"jingyu987"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"jingyu987"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"jingyu987"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"jingyu987"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"jingyu987"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"jingyu987"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"jingyu987"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"jingyu987"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"jingyu987"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"jingyu987"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"jingyu987"},"content":" handleUserInput();","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"jingyu987"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"jingyu987"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"jingyu987"},"content":" handleUserInput();","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"jingyu987"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"jingyu987"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"jingyu987"},"content":" Label welcomeMessage \u003d new Label(ui.showWelcomeMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"jingyu987"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"jingyu987"},"content":" DialogBox.getDukeDialog(welcomeMessage, new ImageView(duke))","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"jingyu987"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"jingyu987"},"content":" * Handles user input by processing it and displaying the appropriate response in the chat.","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"jingyu987"},"content":" * This method is called when the user clicks the \"Send\" button or presses Enter after typing a message.","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"jingyu987"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"jingyu987"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"jingyu987"},"content":" String output \u003d getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"jingyu987"},"content":" Label userText \u003d new Label(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"jingyu987"},"content":" Label dukeText \u003d new Label(output);","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"jingyu987"},"content":" if (input.toLowerCase().equals(\"bye\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"jingyu987"},"content":" closeProgram();","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"jingyu987"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"jingyu987"},"content":" DialogBox.getUserDialog(userText, new ImageView(user)),","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"jingyu987"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(duke))","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"jingyu987"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"jingyu987"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"jingyu987"},"content":" * Generates a response to user input by parsing and executing a command.","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"jingyu987"},"content":" * @param input The user\u0027s input message.","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"jingyu987"},"content":" * @return The response message generated by the application.","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"jingyu987"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"jingyu987"},"content":" Command command \u003d Parser.parse(input, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"jingyu987"},"content":" String output \u003d command.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"jingyu987"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"jingyu987"},"content":" } catch (FishronException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"jingyu987"},"content":" return ui.showErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"jingyu987"},"content":" * Closes the Fishron application by saving tasks to a file and exiting the program.","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"jingyu987"},"content":" private void closeProgram() {","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"jingyu987"},"content":" storage.saveTasksToFile(taskList.getList());","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"jingyu987"},"content":" System.exit(0);","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"jingyu987"},"content":" * The main entry point of the Fishron application.","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"jingyu987"},"content":" * @param args The command line arguments (not used in this application).","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"jingyu987"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":168,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":169}},{"path":"src/main/java/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package gui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":" * The `Launcher` class serves as an entry point for launching the Fishron application.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":" * It\u0027s used to work around classpath issues and start the JavaFX application.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * The main method to start the Fishron application.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" Application.launch(Fishron.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":18}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import commands.*;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * The Parser class is responsible for parsing user input and converting it into executable commands.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" * Parses the user input and returns the corresponding Command object.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" * @param input The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" * @param taskList The TaskList to operate on.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If there is an issue with parsing or an invalid command.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" public static Command parse(String input, TaskList taskList) throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" isValidCommands(input, taskList);","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" if (input.equalsIgnoreCase(\"help\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" return new HelpCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" if (input.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"find\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" String keyword \u003d parts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"mark\");","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" int taskIndex \u003d Integer.parseInt(parts[1].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" return new MarkDoneCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"unmark\");","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" int taskIndex \u003d Integer.parseInt(parts[1].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"delete\");","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" int taskIndex \u003d Integer.parseInt(parts[1].trim());","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"todo\");","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":" return new AddCommand(parseTodo(parts[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" return new AddCommand(parseDeadline(parts[0].split(\"deadline\")[1].trim(), parts[1].trim()));","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" } else if (input.toLowerCase().startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d input.split(\"/from|/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" return new AddCommand(parseEvent(parts[0].split(\"event\")[1].trim(), parts[1].trim(), parts[2].trim()));","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" return new UnsureCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jingyu987"},"content":" * Validates whether the given command is valid and follows the required format.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jingyu987"},"content":" * @param command The command to validate.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jingyu987"},"content":" * @param taskList The TaskList to validate against.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jingyu987"},"content":" * @return True if the command is valid, otherwise throws an exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If the command is invalid or in an incorrect format.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jingyu987"},"content":" public static boolean isValidCommands(String command, TaskList taskList) throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jingyu987"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jingyu987"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"find\") \u0026\u0026 command.split(\"find\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a task to find.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"mark\") \u0026\u0026 command.split(\"mark\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a task to be marked.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"unmark\") \u0026\u0026 command.split(\"unmark\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a task to be unmarked.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"mark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"jingyu987"},"content":" String taskIndexPart \u003d command.split(\"mark\")[1].trim();","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"jingyu987"},"content":" Integer.parseInt(taskIndexPart);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"jingyu987"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"jingyu987"},"content":" if (Integer.parseInt(taskIndexPart) \u003c 1 || Integer.parseInt(taskIndexPart) \u003e taskList.getSize()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"jingyu987"},"content":" String taskIndexPart \u003d command.split(\"unmark\")[1].trim();","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"jingyu987"},"content":" Integer.parseInt(taskIndexPart);","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"jingyu987"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"jingyu987"},"content":" if (Integer.parseInt(taskIndexPart) \u003c 1 || Integer.parseInt(taskIndexPart) \u003e taskList.getSize()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"delete\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"jingyu987"},"content":" String taskIndexPart \u003d command.split(\"delete\")[1].trim();","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"jingyu987"},"content":" Integer.parseInt(taskIndexPart);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"jingyu987"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"jingyu987"},"content":" if (Integer.parseInt(taskIndexPart) \u003c 1 || Integer.parseInt(taskIndexPart) \u003e taskList.getSize()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid task index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"todo\") \u0026\u0026 command.split(\"todo\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"deadline\") \u0026\u0026 command.split(\"deadline\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d command.split(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"jingyu987"},"content":" String emptyDesc \u003d parts[0].split(\"deadline\")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"jingyu987"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"deadline\")","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"jingyu987"},"content":" \u0026\u0026 (command.split(\"/by\").length !\u003d 2 || command.split(\"/by\")[1].trim().isEmpty())) {","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid deadline format.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"event\") \u0026\u0026 command.split(\"event\").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d command.split(\"/from|/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"jingyu987"},"content":" String emptyDesc \u003d parts[0].split(\"event\")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"jingyu987"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"jingyu987"},"content":" if (command.toLowerCase().startsWith(\"event\")","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"jingyu987"},"content":" \u0026\u0026 (command.split(\"/from|/to\").length !\u003d 3 || command.split(\"/from|/to\")[1].trim().isEmpty()","lastModifiedDate":"2023-09-09"},{"lineNumber":174,"author":{"gitId":"jingyu987"},"content":" || command.split(\"/from|/to\")[2].trim().isEmpty())) {","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid event format.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"jingyu987"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"jingyu987"},"content":" * Parses a description string and creates a ToDo object.","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"jingyu987"},"content":" * @return A ToDo object.","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"jingyu987"},"content":" public static ToDo parseTodo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"jingyu987"},"content":" return new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"jingyu987"},"content":" * Parses a description and a deadline string and creates a Deadline object.","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"jingyu987"},"content":" * @param by The deadline in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"jingyu987"},"content":" * @return A Deadline object.","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If the deadline format is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"jingyu987"},"content":" public static Deadline parseDeadline(String description, String by) throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"jingyu987"},"content":" assert description !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":201,"author":{"gitId":"jingyu987"},"content":" assert by !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":202,"author":{"gitId":"jingyu987"},"content":" return new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"jingyu987"},"content":" * Parses a description, a \"from\" string, and a \"to\" string and creates an Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"jingyu987"},"content":" * @param from The starting date and time in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"jingyu987"},"content":" * @param to The ending date and time in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"jingyu987"},"content":" * @return An Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If the date/time format is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"jingyu987"},"content":" public static Event parseEvent(String description, String from, String to) throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"jingyu987"},"content":" assert description !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"jingyu987"},"content":" assert from !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"jingyu987"},"content":" assert to !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":218,"author":{"gitId":"jingyu987"},"content":" return new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":220}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" * The Storage class handles loading and saving tasks to/from a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" private File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @param filePath The path to the file where tasks will be stored.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" assert filePath !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" * Loads tasks from the file and returns a TaskList containing them.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" * @return A TaskList containing tasks loaded from the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" public TaskList loadTasksFromFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" if (parts.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" Task task \u003d Parser.parseTodo(description.trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" Task task \u003d Parser.parseDeadline(description.trim(), by.trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" Task task \u003d Parser.parseEvent(description.trim(), from.trim(), to.trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":" System.out.println(\"No saved tasks found.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"jingyu987"},"content":" } catch (FishronException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jingyu987"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jingyu987"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jingyu987"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jingyu987"},"content":" return new TaskList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jingyu987"},"content":" * Saves the provided task list to the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jingyu987"},"content":" * @param taskList The list of tasks to be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jingyu987"},"content":" public void saveTasksToFile(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jingyu987"},"content":" PrintWriter printWriter \u003d new PrintWriter(\"./data/fishron.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jingyu987"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jingyu987"},"content":" printWriter.println(task.toFileString());","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jingyu987"},"content":" printWriter.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jingyu987"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"jingyu987"},"content":" System.out.println(\"Error saving tasks to file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":98}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" * Constructs a deadline task with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * @param by The deadline in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If the provided date/time format is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" public Deadline(String description, String by) throws FishronException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid date/time format. e.g. 21-05-2023 1200\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" * Converts the deadline task to a string representation for storing in a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" * @return The string representation of the deadline task for storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" return \"D | \" + super.toFileString() + \" | \" + by.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" * Converts the deadline task to a user-friendly string representation.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" * @return The user-friendly string representation of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mma\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jingyu987":52}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * Represents an event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" * Initializes a new Event instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * @param from The starting date and time of the event in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param to The ending date and time of the event in the format \"dd-MM-yyyy HHmm\".","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" * @throws FishronException If the date/time format is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" public Event(String description, String from, String to) throws FishronException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" this.from \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" this.to \u003d LocalDateTime.parse(to, DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" throw new FishronException(\"☹ OOPS!!! Please provide a valid date/time format. e.g. 21-05-2023 1200\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" * Converts the event task to a string in the file format.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" * @return A string representation of the event task in the file format.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" return \"E | \" + super.toFileString() + \" | \" + from.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"))","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" + \" | \"","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" + to.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" * Converts the event task to a string representation.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mma\")) + \" to: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" + to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mma\")) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jingyu987":58}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":" * Represents a task with a description and status.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * Constructs a task with the given description and marks it as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" * Converts the task to a formatted string for saving to a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" * @return A string representation of the task for file storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" return (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" * @return The task\u0027s description.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" return description;","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" * Gets an icon representing the status of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" * @return A string containing an icon ([X] for done, [ ] for undone).","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" return getStatusIcon().trim() + \" \" + getDescription().trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"jingyu987":65}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" * Constructs an empty task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * Constructs a task list with the given initial list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" * @param taskList The initial list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" assert taskList !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" * Deletes a task from the task list at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" assert taskList !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" this.taskList.remove(index - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":" * Gets the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" return this.taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" * Gets the number of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" assert taskList !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":" * Marks a task as done at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":" public void markAsDone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":" assert taskList !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"jingyu987"},"content":" this.taskList.get(index - 1).markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"jingyu987"},"content":" * Marks a task as undone at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"jingyu987"},"content":" * @param index The index of the task to be marked as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"jingyu987"},"content":" public void markAsUndone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"jingyu987"},"content":" assert taskList !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"jingyu987"},"content":" this.taskList.get(index - 1).markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"jingyu987"},"content":" * Gets the task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"jingyu987"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"jingyu987"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"jingyu987"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"jingyu987"},"content":" assert taskList !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"jingyu987"},"content":" return this.taskList.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"jingyu987"},"content":" * Finds tasks containing a specific keyword in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"jingyu987"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"jingyu987"},"content":" * @return An ArrayList of tasks containing the specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"jingyu987"},"content":" public ArrayList\u003cTask\u003e findTasksByKeyword(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"jingyu987"},"content":" assert taskList !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"jingyu987"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"jingyu987"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"jingyu987"},"content":" if (task.getDescription().toLowerCase().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"jingyu987"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"jingyu987"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":114}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" * Constructs a ToDo task with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * @param description The description of the ToDo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" * Converts the ToDo task to a string format suitable for saving to a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" * @return A string representation of the tToDo task for file storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" return \"T | \" + super.toFileString();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" * Converts the ToDo task to a user-friendly string format for display.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" * @return A user-friendly string representation of the ToDo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jingyu987":36}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" * The `Ui` class handles user interaction and displays messages to the console.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" * It provides methods for showing welcome and goodbye messages, reading user commands,","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" * displaying task-related information, and showing error messages.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"public class Ui {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" * Creates a new `Ui` object and initializes the scanner for user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" public Ui() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" * Displays a welcome message to the user when the application starts.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":" * @return The welcome message as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" public String showWelcomeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" return \"Hello! I\u0027m Fishron\\n\" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":" + showHelp();","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jingyu987"},"content":" * Displays a goodbye message to the user when the application exits.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jingyu987"},"content":" * @return The goodbye message as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jingyu987"},"content":" public String showGoodbyeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jingyu987"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jingyu987"},"content":" * Displays a horizontal line as a separator in the console.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jingyu987"},"content":" * @return The horizontal line as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jingyu987"},"content":" public String showLine() {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"jingyu987"},"content":" return \"___________________________________________________________\";","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jingyu987"},"content":" * Reads a user command from the console and returns it as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"jingyu987"},"content":" * @return The user-entered command.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jingyu987"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jingyu987"},"content":" String userCommand \u003d sc.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jingyu987"},"content":" return userCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jingyu987"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jingyu987"},"content":" * @param errorMsg The error message to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jingyu987"},"content":" * @return The error message as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"jingyu987"},"content":" public String showErrorMessage(String errorMsg) {","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"jingyu987"},"content":" return errorMsg;","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"jingyu987"},"content":" * Displays a message to indicate that a task has been successfully added.","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"jingyu987"},"content":" * @param taskList The task list containing the added task.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"jingyu987"},"content":" * @return A string to indicate that a task has been successfully added.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"jingyu987"},"content":" public String showTaskAdded(TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"jingyu987"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"jingyu987"},"content":" + \" \" + taskList.getList().get(taskList.getSize() - 1).toString() + \"\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"jingyu987"},"content":" + \"Now you have \" + taskList.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"jingyu987"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"jingyu987"},"content":" * @param taskList The task list to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"jingyu987"},"content":" * @return The list of tasks as a string.","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"jingyu987"},"content":" public String showTaskList(TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"jingyu987"},"content":" String taskListString \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"jingyu987"},"content":" ArrayList\u003cTask\u003e list \u003d taskList.getList();","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"jingyu987"},"content":" int start \u003d 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"jingyu987"},"content":" for (Task listItems : list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"jingyu987"},"content":" taskListString +\u003d String.format(\"%d. %s\\n\", start, listItems.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"jingyu987"},"content":" start++;","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"jingyu987"},"content":" return taskListString;","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"jingyu987"},"content":" * Displays a message to indicate that a task has been successfully deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"jingyu987"},"content":" * @param tasklist The task list containing the deleted task.","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"jingyu987"},"content":" * @param deleted The deleted task.","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"jingyu987"},"content":" * @return A string to indicate that a task has been successfully deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"jingyu987"},"content":" public String showTaskDeleted(TaskList tasklist, Task deleted) {","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"jingyu987"},"content":" String message \u003d \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"jingyu987"},"content":" + \" \" + deleted + \"\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"jingyu987"},"content":" + \"Now you have \" + tasklist.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"jingyu987"},"content":" return message;","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"jingyu987"},"content":" * Displays a message to indicate that a task has been marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"jingyu987"},"content":" * @param task The task that has been marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"jingyu987"},"content":" * @return A string to indicate that a task has been successfully marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"jingyu987"},"content":" public String showDoneTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"jingyu987"},"content":" String message \u003d \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"jingyu987"},"content":" + \" \" + task.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"jingyu987"},"content":" return message;","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"jingyu987"},"content":" * Displays a message to indicate that a task has been marked as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"jingyu987"},"content":" * @param task The task that has been marked as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"jingyu987"},"content":" * @return A string to indicate that a task has been successfully unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"jingyu987"},"content":" public String showUnmarkTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"jingyu987"},"content":" String message \u003d \"I\u0027ve marked this task as undone:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"jingyu987"},"content":" + \" \" + task.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"jingyu987"},"content":" return message;","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"jingyu987"},"content":" * Displays tasks that contains the keyWord.","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"jingyu987"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"jingyu987"},"content":" * @param matchingTasks The task list to search on.","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"jingyu987"},"content":" * @param keyWord Keyword to be searched.","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"jingyu987"},"content":" * @return A list of matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"jingyu987"},"content":" public String showMatchingTasks(TaskList matchingTasks, String keyWord) {","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"jingyu987"},"content":" ArrayList\u003cTask\u003e taskList \u003d matchingTasks.findTasksByKeyword(keyWord);","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"jingyu987"},"content":" String output \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"jingyu987"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"jingyu987"},"content":" output +\u003d task.toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"jingyu987"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"jingyu987"},"content":" * Displays a message to indicate that the input is unrecognised.","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"jingyu987"},"content":" * @return A String to represent an error for an invalid input.","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"jingyu987"},"content":" public String showUnrecognisedInput() {","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"jingyu987"},"content":" return \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"jingyu987"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"jingyu987"},"content":" * Displays a message to indicate the available inputs.","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"jingyu987"},"content":" * @return A String to represent the inputs available.","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"jingyu987"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"jingyu987"},"content":" public String showHelp() {","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"jingyu987"},"content":" String message \u003d \"These are the functions that I support. \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"jingyu987"},"content":" + \"Remember to input dates in this format dd-MM-yyyy HHmm.\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"jingyu987"},"content":" + \"1. todo (Description)\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"jingyu987"},"content":" + \"2. deadline (Description) /by DATE\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"jingyu987"},"content":" + \"3. event (Description) /from DATE /to DATE\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"jingyu987"},"content":" + \"4. mark (TaskNumber)\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":177,"author":{"gitId":"jingyu987"},"content":" + \"5. unmark (TaskNumber)\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"jingyu987"},"content":" + \"6. delete (TaskNumber)\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"jingyu987"},"content":" + \"7. list\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":180,"author":{"gitId":"jingyu987"},"content":" + \"8. bye\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"jingyu987"},"content":" + \"9. find (Keyword)\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":182,"author":{"gitId":"jingyu987"},"content":" + \"10. help\";","lastModifiedDate":"2023-09-16"},{"lineNumber":183,"author":{"gitId":"jingyu987"},"content":" return message;","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":185,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":185}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"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-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"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.Fishron\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"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-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"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-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"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-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jingyu987":19}},{"path":"src/test/java/tests/AddCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tests;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import commands.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" public void execute_addTodo_success() throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" Command addCommand \u003d parser.parse(\"todo Buy groceries\", taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":" addCommand.execute(taskList, new Ui(), new Storage(\"./data/fishron.txt\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" assertEquals(\"[T][ ] Buy groceries\", taskList.getTask(1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":27}},{"path":"src/test/java/tests/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"package tests;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"import exceptions.FishronException;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"jingyu987"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jingyu987"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"jingyu987"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"jingyu987"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"jingyu987"},"content":" public void testParseTodo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"jingyu987"},"content":" String description \u003d \"todo Buy milk\";","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"jingyu987"},"content":" ToDo todo \u003d Parser.parseTodo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"jingyu987"},"content":" String expectedDescription \u003d \"[T][ ] todo Buy milk\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"jingyu987"},"content":" assertEquals(expectedDescription, todo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"jingyu987"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"jingyu987"},"content":" public void testParseDeadline() throws FishronException {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"jingyu987"},"content":" String description \u003d \"sleep\";","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"jingyu987"},"content":" Deadline deadline \u003d Parser.parseDeadline(description, \"12-05-2023 2300\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"jingyu987"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"jingyu987"},"content":" String expectedDescription \u003d \"[D][ ] sleep (by: May 12 2023 11:00PM)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"jingyu987"},"content":" assertEquals(expectedDescription, deadline.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"jingyu987"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"jingyu987"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"jingyu987":31}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jingyu987"},"content":"todo Read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"jingyu987"},"content":"deadline Return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jingyu987"},"content":"event Project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jingyu987"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jingyu987"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jingyu987"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jingyu987"},"content":"delete 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jingyu987"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"jingyu987":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"jingyu987"},"content":"java -classpath ..\\bin Fishron \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":{"jingyu987":1,"-":20}}] diff --git a/jingyu987_ip_master/commits.json b/jingyu987_ip_master/commits.json index 98277ab5..f7cc2a68 100644 --- a/jingyu987_ip_master/commits.json +++ b/jingyu987_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jingyu987":[{"date":"2023-08-23","commitResults":[{"hash":"e4d0ddcb2e3c600658d8ef7524b783ce7a9d2def","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit (a) Give your chatbot a new name, to differentiate it from the placeholder name Duke.","messageBody":"(b) Implement an initial skeletal version of the it that simply greets the user and exits.\nExample:\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"8f9bc1333933e4892f51c92d64cf64c0a92f271b","isMergeCommit":false,"messageTitle":"Level 1. Echo Improve the skeletal version of Duke so that it echos commands entered by the user, and exits when the user types the command bye.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"02f2b5b29e462d793962ce601eb3bf2607872f96","isMergeCommit":false,"messageTitle":"Level 2. Add, List Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}},{"hash":"916a81fda29c76314ccdbeaec2d0e135f7d121b0","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done Add the ability to mark tasks as done. Optionally, add the ability to change the status back to not done.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2e699e6c67d321d19b499fe5e787e20e356fffee","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors Teach the chatbot to deal with errors such as incorrect inputs entered by the user.","messageBody":"","tags":["Level-5","Level-4/Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":7},"bat":{"insertions":1,"deletions":1}}},{"hash":"b610d46d021552338818cd3ecc8ba6a743d29841","isMergeCommit":false,"messageTitle":"Level 6. Delete Add support for deleting tasks from the list. Added more error handling as well.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":16}}},{"hash":"2ae1fb4347f2554ad53b732b414a31a4c5ec322f","isMergeCommit":false,"messageTitle":"A-TextUiTesting ↳ Test using the I/O redirection technique","messageBody":"Use the input/output redirection technique to semi-automate the testing of Duke.\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":5,"deletions":5}}},{"hash":"dd418e8375f6d6fd94776bdfe0a5d0079f7cbaa5","isMergeCommit":false,"messageTitle":"Level 4/5. ToDos, Events, Deadlines Add support for tracking three types of tasks:","messageBody":"ToDos: tasks without any date/time attached to it e.g., visit new theme park\nDeadlines: tasks that need to be done before a specific date/time e.g., submit report by 11/10/2019 5pm\nEvents: tasks that start at a specific date/time and ends at a specific date/time\ne.g., (a) team project meeting 2/10/2019 2-4pm (b) orientation week 4/10/2019 to 11/10/2019\n\nHandle Errors\nTeach the chatbot to deal with errors such as incorrect inputs entered by the user.\n","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":7},"bat":{"insertions":1,"deletions":1}}},{"hash":"8138bcc47d9ca01abf10b6c771daff83ecc27e42","isMergeCommit":false,"messageTitle":"Level 6. Delete Add support for deleting tasks from the list. Added more error handling as well.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":16}}},{"hash":"b10218e10aec097fd3addc23d99d8088d889762e","isMergeCommit":false,"messageTitle":"A-TextUiTesting ↳ Test using the I/O redirection technique","messageBody":"Use the input/output redirection technique to semi-automate the testing of Duke.\n","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-09-01","commitResults":[{"hash":"9efbcc1da18f6accd275259d491280b8338f22b2","isMergeCommit":false,"messageTitle":"Add Increments as branches: Level-7, Level-8 Do Level 7 in a branch named branch-Level-7. Here are the steps: Start a branch branch-Level-7. Implement Level 7 while committing to that branch at appropriate points, Merge the branch back to the master branch (remember to create a merge commit i.e., no fast-forward). Git tag the merge commit in the master branch as usual (i.e., add the tag Level-7). Push the master branch, push the branch-Level-7, and push the tag, to your fork. Advanced git users: do not delete the branch after merging. Only merged branches are detected by the script. After merging a branch b1 to the master branch, you need to push both the master and the b1 branches to the fork. Pushing the master branch does not automatically take the b1 branch along with it just because it is already merged to the master branch.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":80,"deletions":2}}},{"hash":"8362648db4a871bcb76fd3f76c0e865fe68065c9","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times Teach the chatbot how to understand dates and times. For example, if the command is deadline return book /by 2/12/2019 1800, the chatbot should understand 2/12/2019 1800 as 2nd of December 2019, 6pm, instead of treating it as just a String.","messageBody":"Minimal: Store deadline dates as a java.time.LocalDate (or java.time.LocalDateTime) in your task objects. Accept dates in a format such as yyyy-mm-dd format (e.g., 2019-10-15) and print in a different format such as MMM dd yyyy e.g., (Oct 15 2019).\nStretch goal: Use dates and times in more meaningful ways. e.g., add a command to print deadlines/events occurring on a specific date.\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":40,"deletions":19}}}]},{"date":"2023-09-02","commitResults":[{"hash":"2f6c1a75250191dc5a6f39e98fb226d01c549f3f","isMergeCommit":false,"messageTitle":"A-MoreOOP ↳ Make the code more OOP","messageBody":"Refactor the code to extract out closely related code as classes.\n\nMinimal: Extract the following classes:\nUi: deals with interactions with the user\nStorage: deals with loading tasks from the file and saving tasks in the file\nParser: deals with making sense of the user command\nTaskList: contains the task list e.g., it has operations to add/delete tasks in the list\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":435,"deletions":189}}},{"hash":"98848936bdebb226e1822c5f5d0383766cfdcedd","isMergeCommit":false,"messageTitle":"A-Packages ↳ Divide classes into packages","messageBody":"Organize the classes into suitable java packages.\n\nMinimal: put all classes in one package e.g., duke\nStretch goal: divide into multiple packages as the number of classes increase e.g., duke.task, duke.command\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":34,"deletions":4},"md":{"insertions":2,"deletions":2}}},{"hash":"6c7cec6ae08202689b76216098ffee78b378bca6","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"c3fac9411e829f5827830d0402f86511ca5cb08d","isMergeCommit":true,"messageTitle":"Merge commit \u00272ae1fb4347f2554ad53b732b414a31a4c5ec322f\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Fishron.java\n#\ttext-ui-test/EXPECTED.TXT\n","fileTypesAndContributionMap":{}},{"hash":"e4bfdb432e4908f2377c6527e67c15892a983a2e","isMergeCommit":false,"messageTitle":"A-JUnit ↳ Add JUnit tests","messageBody":"Add JUnit tests to test the behavior of the code.\n\nMinimal: Use JUnit to at least two non-trivial methods, from two different classes (if you have multiple classes),\nand, ensure they are tested reasonably well (i.e., the test code should try to catch most potential bugs in the target methods).\nStretch goal: Use JUnit to test all non-trivial public methods of all classes.\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0},"txt":{"insertions":0,"deletions":2},"java":{"insertions":78,"deletions":0}}},{"hash":"c51ee89756a5ec32f4513c2bac967f3daded2f4e","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"Add JavaDoc comments to the code.\n\nMinimal: Add header comments to at least half of the non-private classes/methods.\nStretch goal: Add header comments to all non-private classes/methods, and non-trivial private methods.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":4},"java":{"insertions":417,"deletions":29}}},{"hash":"5b8b63c306e5b71dbe701dc158bda1dffcf4ddb5","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"Add JavaDoc comments to the code.\n\nMinimal: Add header comments to at least half of the non-private classes/methods.\nStretch goal: Add header comments to all non-private classes/methods, and non-trivial private methods.\n","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":4},"java":{"insertions":417,"deletions":29}}},{"hash":"98665de4565cff3e73532f2b75084bb523445129","isMergeCommit":false,"messageTitle":"A-CodingStandard ↳ Tweak the code to comply with a coding standard","messageBody":"Tweak the code to comply with a given coding standard. From this point onward, ensure any new code added are compliant with the given coding standard.\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"47b29e1b78129fbeb5e6078975a51e6a84ffe375","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b30a4ff588290a435b58ebb199166b57bdbdcb08","isMergeCommit":false,"messageTitle":"Level 9. Find Give users a way to find a task by searching for a keyword.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":76,"deletions":8}}},{"hash":"83ca0b2a0eaae170b1f05460c302be5861ee4d8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"4e6be4f0677ed2ae4e194c0612c01fc68e7aaf2e","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Signed-off-by: Jing Yu \u003c123240462+jingyu987@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":16,"deletions":20}}},{"hash":"de187731a62cdb4043cf123c0a2e4c31ab23cad3","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Signed-off-by: Jing Yu \u003c123240462+jingyu987@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":20,"deletions":16}}},{"hash":"3068fea455d47544ac957b5338f7c4811ffd35d4","isMergeCommit":false,"messageTitle":"Add checkStyle to detect coding style violations.","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"1597e78f521cd955535869b0fa389d0aabbd4aea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1ee155bbd150fd8651e749d1de4237c03b1e4772","isMergeCommit":false,"messageTitle":"Add GUI and proper packaging","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":13,"deletions":0},"txt":{"insertions":3,"deletions":3},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":650,"deletions":260},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-14","commitResults":[{"hash":"c6780bc931ad96d095dfed496e9e54ad1852faeb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"# Conflicts:\n#\tREADME.md\n","fileTypesAndContributionMap":{}},{"hash":"e354d7d01145c9e1fa7bdcf6255ed9bc98250d50","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Signed-off-by: Jing Yu \u003c123240462+jingyu987@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":0,"deletions":7}}},{"hash":"8054277760450906471c59dda94241214d0d2ff1","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Signed-off-by: Jing Yu \u003c123240462+jingyu987@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"jingyu987":{"java":1520,"md":0,"fxml":35,"sh":0,"bat":1,"gradle":23,"txt":14}},"authorContributionVariance":{"jingyu987":138683.66},"authorDisplayNameMap":{"jingyu987":"CS2103T-T15-2 HUAN..G YU"}} +{"authorDailyContributionsMap":{"jingyu987":[{"date":"2023-08-23","commitResults":[{"hash":"e4d0ddcb2e3c600658d8ef7524b783ce7a9d2def","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit (a) Give your chatbot a new name, to differentiate it from the placeholder name Duke.","messageBody":"(b) Implement an initial skeletal version of the it that simply greets the user and exits.\nExample:\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"8f9bc1333933e4892f51c92d64cf64c0a92f271b","isMergeCommit":false,"messageTitle":"Level 1. Echo Improve the skeletal version of Duke so that it echos commands entered by the user, and exits when the user types the command bye.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"02f2b5b29e462d793962ce601eb3bf2607872f96","isMergeCommit":false,"messageTitle":"Level 2. Add, List Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}},{"hash":"916a81fda29c76314ccdbeaec2d0e135f7d121b0","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done Add the ability to mark tasks as done. Optionally, add the ability to change the status back to not done.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"2e699e6c67d321d19b499fe5e787e20e356fffee","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors Teach the chatbot to deal with errors such as incorrect inputs entered by the user.","messageBody":"","tags":["Level-5","Level-4/Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":7},"bat":{"insertions":1,"deletions":1}}},{"hash":"b610d46d021552338818cd3ecc8ba6a743d29841","isMergeCommit":false,"messageTitle":"Level 6. Delete Add support for deleting tasks from the list. Added more error handling as well.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":16}}},{"hash":"2ae1fb4347f2554ad53b732b414a31a4c5ec322f","isMergeCommit":false,"messageTitle":"A-TextUiTesting ↳ Test using the I/O redirection technique","messageBody":"Use the input/output redirection technique to semi-automate the testing of Duke.\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":5,"deletions":5}}},{"hash":"dd418e8375f6d6fd94776bdfe0a5d0079f7cbaa5","isMergeCommit":false,"messageTitle":"Level 4/5. ToDos, Events, Deadlines Add support for tracking three types of tasks:","messageBody":"ToDos: tasks without any date/time attached to it e.g., visit new theme park\nDeadlines: tasks that need to be done before a specific date/time e.g., submit report by 11/10/2019 5pm\nEvents: tasks that start at a specific date/time and ends at a specific date/time\ne.g., (a) team project meeting 2/10/2019 2-4pm (b) orientation week 4/10/2019 to 11/10/2019\n\nHandle Errors\nTeach the chatbot to deal with errors such as incorrect inputs entered by the user.\n","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":7},"bat":{"insertions":1,"deletions":1}}},{"hash":"8138bcc47d9ca01abf10b6c771daff83ecc27e42","isMergeCommit":false,"messageTitle":"Level 6. Delete Add support for deleting tasks from the list. Added more error handling as well.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":16}}},{"hash":"b10218e10aec097fd3addc23d99d8088d889762e","isMergeCommit":false,"messageTitle":"A-TextUiTesting ↳ Test using the I/O redirection technique","messageBody":"Use the input/output redirection technique to semi-automate the testing of Duke.\n","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-09-01","commitResults":[{"hash":"9efbcc1da18f6accd275259d491280b8338f22b2","isMergeCommit":false,"messageTitle":"Add Increments as branches: Level-7, Level-8 Do Level 7 in a branch named branch-Level-7. Here are the steps: Start a branch branch-Level-7. Implement Level 7 while committing to that branch at appropriate points, Merge the branch back to the master branch (remember to create a merge commit i.e., no fast-forward). Git tag the merge commit in the master branch as usual (i.e., add the tag Level-7). Push the master branch, push the branch-Level-7, and push the tag, to your fork. Advanced git users: do not delete the branch after merging. Only merged branches are detected by the script. After merging a branch b1 to the master branch, you need to push both the master and the b1 branches to the fork. Pushing the master branch does not automatically take the b1 branch along with it just because it is already merged to the master branch.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":80,"deletions":2}}},{"hash":"8362648db4a871bcb76fd3f76c0e865fe68065c9","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times Teach the chatbot how to understand dates and times. For example, if the command is deadline return book /by 2/12/2019 1800, the chatbot should understand 2/12/2019 1800 as 2nd of December 2019, 6pm, instead of treating it as just a String.","messageBody":"Minimal: Store deadline dates as a java.time.LocalDate (or java.time.LocalDateTime) in your task objects. Accept dates in a format such as yyyy-mm-dd format (e.g., 2019-10-15) and print in a different format such as MMM dd yyyy e.g., (Oct 15 2019).\nStretch goal: Use dates and times in more meaningful ways. e.g., add a command to print deadlines/events occurring on a specific date.\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":40,"deletions":19}}}]},{"date":"2023-09-02","commitResults":[{"hash":"2f6c1a75250191dc5a6f39e98fb226d01c549f3f","isMergeCommit":false,"messageTitle":"A-MoreOOP ↳ Make the code more OOP","messageBody":"Refactor the code to extract out closely related code as classes.\n\nMinimal: Extract the following classes:\nUi: deals with interactions with the user\nStorage: deals with loading tasks from the file and saving tasks in the file\nParser: deals with making sense of the user command\nTaskList: contains the task list e.g., it has operations to add/delete tasks in the list\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":435,"deletions":189}}},{"hash":"98848936bdebb226e1822c5f5d0383766cfdcedd","isMergeCommit":false,"messageTitle":"A-Packages ↳ Divide classes into packages","messageBody":"Organize the classes into suitable java packages.\n\nMinimal: put all classes in one package e.g., duke\nStretch goal: divide into multiple packages as the number of classes increase e.g., duke.task, duke.command\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":34,"deletions":4},"md":{"insertions":2,"deletions":2}}},{"hash":"6c7cec6ae08202689b76216098ffee78b378bca6","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"c3fac9411e829f5827830d0402f86511ca5cb08d","isMergeCommit":true,"messageTitle":"Merge commit \u00272ae1fb4347f2554ad53b732b414a31a4c5ec322f\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Fishron.java\n#\ttext-ui-test/EXPECTED.TXT\n","fileTypesAndContributionMap":{}},{"hash":"e4bfdb432e4908f2377c6527e67c15892a983a2e","isMergeCommit":false,"messageTitle":"A-JUnit ↳ Add JUnit tests","messageBody":"Add JUnit tests to test the behavior of the code.\n\nMinimal: Use JUnit to at least two non-trivial methods, from two different classes (if you have multiple classes),\nand, ensure they are tested reasonably well (i.e., the test code should try to catch most potential bugs in the target methods).\nStretch goal: Use JUnit to test all non-trivial public methods of all classes.\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0},"txt":{"insertions":0,"deletions":2},"java":{"insertions":78,"deletions":0}}},{"hash":"c51ee89756a5ec32f4513c2bac967f3daded2f4e","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"Add JavaDoc comments to the code.\n\nMinimal: Add header comments to at least half of the non-private classes/methods.\nStretch goal: Add header comments to all non-private classes/methods, and non-trivial private methods.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":4},"java":{"insertions":417,"deletions":29}}},{"hash":"5b8b63c306e5b71dbe701dc158bda1dffcf4ddb5","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"Add JavaDoc comments to the code.\n\nMinimal: Add header comments to at least half of the non-private classes/methods.\nStretch goal: Add header comments to all non-private classes/methods, and non-trivial private methods.\n","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":4},"java":{"insertions":417,"deletions":29}}},{"hash":"98665de4565cff3e73532f2b75084bb523445129","isMergeCommit":false,"messageTitle":"A-CodingStandard ↳ Tweak the code to comply with a coding standard","messageBody":"Tweak the code to comply with a given coding standard. From this point onward, ensure any new code added are compliant with the given coding standard.\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"47b29e1b78129fbeb5e6078975a51e6a84ffe375","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b30a4ff588290a435b58ebb199166b57bdbdcb08","isMergeCommit":false,"messageTitle":"Level 9. Find Give users a way to find a task by searching for a keyword.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":76,"deletions":8}}},{"hash":"83ca0b2a0eaae170b1f05460c302be5861ee4d8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"4e6be4f0677ed2ae4e194c0612c01fc68e7aaf2e","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Signed-off-by: Jing Yu \u003c123240462+jingyu987@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":16,"deletions":20}}},{"hash":"de187731a62cdb4043cf123c0a2e4c31ab23cad3","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Signed-off-by: Jing Yu \u003c123240462+jingyu987@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":20,"deletions":16}}},{"hash":"3068fea455d47544ac957b5338f7c4811ffd35d4","isMergeCommit":false,"messageTitle":"Add checkStyle to detect coding style violations.","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"1597e78f521cd955535869b0fa389d0aabbd4aea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1ee155bbd150fd8651e749d1de4237c03b1e4772","isMergeCommit":false,"messageTitle":"Add GUI and proper packaging","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":13,"deletions":0},"txt":{"insertions":3,"deletions":3},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":650,"deletions":260},"md":{"insertions":2,"deletions":2}}},{"hash":"4d00b9eb5479de3e0d3d516c77c08d42a91ee94f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"c6780bc931ad96d095dfed496e9e54ad1852faeb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"# Conflicts:\n#\tREADME.md\n","fileTypesAndContributionMap":{}},{"hash":"e354d7d01145c9e1fa7bdcf6255ed9bc98250d50","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Signed-off-by: Jing Yu \u003c123240462+jingyu987@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":0,"deletions":7}}},{"hash":"8054277760450906471c59dda94241214d0d2ff1","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Signed-off-by: Jing Yu \u003c123240462+jingyu987@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":2}}}]},{"date":"2023-09-16","commitResults":[{"hash":"65c5e313a2191c3cc0618558eee2b165d6a444c1","isMergeCommit":false,"messageTitle":"Add assertions.","messageBody":"Added assertions in some key places.\n\nEnsures that important assumptions hold at various points in the code.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":16,"deletions":55}}},{"hash":"a9ca75b45aeb69fbe17cdbbe67bbfc345799bb54","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Added assertions in some key places.\n\nEnsures that important assumptions hold at various points in the code.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":16,"deletions":55}}},{"hash":"6c7dc1dd44f952adaee7447d24660c01f5da45b0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jingyu987/branch-A-Assertions","messageBody":"Branch a assertions","fileTypesAndContributionMap":{}},{"hash":"f0ad228c88f5e1c2ed2fa630694eecc9dab9ac75","isMergeCommit":false,"messageTitle":"Update readme","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"d159db00ab452a5eef3a2c7da41fe85f4abf813b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/jingyu987/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5b7b3a3cf5059c6bdc65c04f3df99d1e07df6c69","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Improved the general code quality of the project.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":21,"deletions":33}}},{"hash":"9371506c35beccb9ec3eb5a918ec1ec9e41e4e5b","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jingyu987/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"663366e3036dd921cf0da8c9e17dcc69650077ec","isMergeCommit":false,"messageTitle":"Add help command","messageBody":"A user currently does not have a way to view the functions\navailable and how to use them.\n\nA user will be unsure how to use the program, not knowing the\ncommands available.\n\nLets add a \"help\" command that allows users to view the commands\navailable to them.\n\nUsing a help command is a simple way for users to easily\nunderstand how to use the program.\n","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":11}}}]}]},"authorFileTypeContributionMap":{"jingyu987":{"java":1516,"md":0,"fxml":35,"sh":0,"bat":1,"gradle":24,"txt":14}},"authorContributionVariance":{"jingyu987":130704.38},"authorDisplayNameMap":{"jingyu987":"CS2103T-T15-2 HUAN..G YU"}} diff --git a/jinyang628_ip_master/authorship.json b/jinyang628_ip_master/authorship.json index 03f88414..1b41bbb4 100644 --- a/jinyang628_ip_master/authorship.json +++ b/jinyang628_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-27"},{"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":"jinyang628"},"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-27"},{"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":{"jinyang628":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":"jinyang628"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.11\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" id \u0027checkstyle\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":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":"javafx {","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" version \u003d \u002717\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":"run {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":"tasks.build.dependsOn shadowJar","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":72,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":73,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"jinyang628":33}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"E|X|project meeting|2019-02-15|2019-03-30","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"T| |borrow book","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"D|X|return book|2019-01-15","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jinyang628":3}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"# Duke","lastModifiedDate":"2023-09-15"},{"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":"### Feature-ABC","lastModifiedDate":"2021-07-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Description of the feature.","lastModifiedDate":"2021-07-17"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":9,"author":{"gitId":"-"},"content":"### Feature-XYZ","lastModifiedDate":"2021-07-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"Description of the feature.","lastModifiedDate":"2021-07-17"},{"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":"-"},"content":"### `Keyword` - Describe action","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"Describe the action and its outcome.","lastModifiedDate":"2021-07-17"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2019-07-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":"`keyword (optional arguments)`","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":23,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":25,"author":{"gitId":"-"},"content":"Description of the outcome.","lastModifiedDate":"2021-07-17"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":27,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":28,"author":{"gitId":"-"},"content":"expected output","lastModifiedDate":"2021-07-17"},{"lineNumber":29,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"jinyang628":1,"-":28}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"/** Class representing a task which has a deadline */","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" * Class constructor specifying the description of the deadline task.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * @param description the string description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" * @param by the deadline of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" * Returns a string description which contains the deadline of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" if (!(obj instanceof Deadline)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" Deadline task \u003d (Deadline) obj;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" int indexOfTaskDescription \u003d 7;","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" if (this.toString().substring(indexOfTaskDescription).equals(","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" task.toString().substring(indexOfTaskDescription))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" return true;","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" * Returns the information associated with the deadline to be stored on local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" * @return the string representation of the deadline saved onto the local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" return \"D|\" + (this.isDone() ? \"X|\" : \" |\") + this.getDescription() + \"|\" + this.by;","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":50}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"/** Chatbot to assist individuals in keeping track of pending tasks. */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" private enum SpecialTaskKeyword {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" TODO,","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" DEADLINE,","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" EVENT","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" private SpecialTaskKeyword[] specialTasksKeywords \u003d SpecialTaskKeyword.values();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" private Parser parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" /** Constructor to initialise the chatbot */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" this.taskList \u003d new TaskList(this.storage.load(), this.ui);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" } catch (NoTasksStoredException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" this.taskList \u003d new TaskList(this.ui);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" * Returns Duke\u0027s response to the user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" * @param input a string representation of the user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" * @return a string message representing Duke\u0027s response.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" String actionWord \u003d this.parser.parseActionWord(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" int taskNumber \u003d -1;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" switch (actionWord) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" case \"bye\":","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" this.taskList.save(this.storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" Platform.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" case \"list\":","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" return this.taskList.listTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" case \"mark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" taskNumber \u003d this.parser.parseTaskNumber(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" return this.taskList.markTaskAsDone(taskNumber);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" taskNumber \u003d this.parser.parseTaskNumber(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" return this.taskList.unmarkTask(taskNumber);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" case \"delete\":","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" taskNumber \u003d this.parser.parseTaskNumber(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" return this.taskList.deleteTask(taskNumber);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" case \"find\":","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" String description \u003d this.parser.parseFindDescription(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" return this.taskList.filterTasks(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" if (Arrays.stream(this.specialTasksKeywords)","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" .anyMatch(keyword -\u003e keyword.toString().toLowerCase().equals(actionWord))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" Task task \u003d this.parser.parseAddTaskInput(input, actionWord);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" return this.taskList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" throw new InvalidInputException(\"ERROR: Invalid input\");","lastModifiedDate":"2023-08-19"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidInputException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":" return \"ERROR\";","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jinyang628":77,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":" * Parent class of all the checked duke.exceptions to be implemented for duke.Duke","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" * Class constructor containing the message of the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" * @param message the string message associated with the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" super(message);","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":15}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"/** Task which contains a date to start and date to finish. */","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * Class constructor specifying the description of the event task.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" * @param description the string description of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" * @param from the string description of the date to begin the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" * @param to the string description of the date to end the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" * Returns a string description which contains the starting and ending time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" assert this.from !\u003d null;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" assert this.to !\u003d null;","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" String startingDate \u003d this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" String endingDate \u003d this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), startingDate, endingDate);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" if (!(obj instanceof Event)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" Event task \u003d (Event) obj;","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" int indexOfTaskDescription \u003d 7;","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" if (this.toString().substring(indexOfTaskDescription).equals(","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" task.toString().substring(indexOfTaskDescription))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" return true;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" * Returns the information associated with the event to be stored on the local hard disk.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" * @return the string representation of the event saved onto the local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" String isDoneMarker \u003d this.isDone() ? \"X\" : \" \";","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" return String.format(\"E|%s|%s|%s|%s\", isDoneMarker, this.getDescription(), this.from, this.to);","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":58}},{"path":"src/main/java/duke/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/** Exception which occurs when the user input is invalid. */","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"public class InvalidInputException extends DukeException {","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" * Class constructor containing the message of the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" * @param message the string message associated with the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" public InvalidInputException(String message) {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" super(message);","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":13}},{"path":"src/main/java/duke/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/** Exception which occurs when the description of the task is empty. */","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"public class InvalidTaskException extends DukeException {","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" * Class constructor containing the message of the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" * @param message the string message associated with the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" public InvalidTaskException(String message) {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" super(message);","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":13}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" private final Duke duke \u003d new Duke(\"data/tasks.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/happy1.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/happy2.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" * Initialises the Duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" // Display a greeting message when the GUI initializes","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" String greeting \u003d \"Hello! I\u0027m Duke. How can I assist you today?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(greeting, dukeImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":57}},{"path":"src/main/java/duke/NoTasksStoredException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/** Exception which occurs when the description of the task is empty. */","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"public class NoTasksStoredException extends DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" * Class constructor containing the message of the exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" * @param message the string message associated with the exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" public NoTasksStoredException(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" super(message);","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":12}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"/** Class that deals with making sense of the user command. */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" * Returns the description of the task the user is trying to filter for.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" * @param userInput the entire user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * @return a String value containing the desired description.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" public String parseFindDescription(String userInput) {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" String[] userInputSegmented \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" StringBuilder description \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 1; i \u003c userInputSegmented.length; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" description.append(userInputSegmented[i] + \" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" return description.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" * Returns a string representation of the type of command the user inputted.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" * @param userInput the entire user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" * @return a String value indicating the type of user command.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" public String parseActionWord(String userInput) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" String[] userInputSegmented \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" return userInputSegmented[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" * Returns the task number associated with the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" * @param userInput the entire user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" * @return an integer indicating the number associated with the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" public int parseTaskNumber(String userInput) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" String[] userInputSegmented \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" return Integer.parseInt(userInputSegmented[1]) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" * Returns the Task the user wants to add into Duke.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" * @param userInput the entire user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" * @param actionWord the type of task the user wants to add.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" * @return the Task the user wants to add into Duke.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" * @throws InvalidTaskException if a part of the task description is missing or the task type is invalid.","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" public Task parseAddTaskInput(String userInput, String actionWord) throws InvalidTaskException {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" String[] userInputSegmented \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" if (userInputSegmented.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" throw new InvalidTaskException(\"ERROR: The description of a \" + userInputSegmented[0]","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" + \" cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" switch (actionWord) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" case \"todo\":","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" return parseTodoInput(userInputSegmented);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" return parseDeadlineInput(userInputSegmented);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" case \"event\":","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" return parseEventInput(userInputSegmented);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" throw new InvalidTaskException(\"ERROR: The task is not of a valid type\");","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":" private Deadline parseDeadlineInput(String[] userInputSegmented) throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" int startIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":" assert Arrays.asList(userInputSegmented).contains(\"/by\");","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" while (true) {","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"jinyang628"},"content":" startIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"jinyang628"},"content":" if (startIndex \u003d\u003d userInputSegmented.length) {","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"jinyang628"},"content":" throw new InvalidTaskException(\"ERROR: Missing the /by marker\");","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"jinyang628"},"content":" if (userInputSegmented[startIndex].equals(\"/by\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":" startIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"jinyang628"},"content":" return new Deadline(","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"jinyang628"},"content":" String.join(\" \", Arrays.copyOfRange(userInputSegmented, 1, startIndex - 1)),","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"jinyang628"},"content":" String.join(\" \", Arrays.copyOfRange(userInputSegmented, startIndex, userInputSegmented.length)));","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"jinyang628"},"content":" private Event parseEventInput(String[] userInputSegmented) throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"jinyang628"},"content":" int fromIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"jinyang628"},"content":" int toIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"jinyang628"},"content":" while (fromIndex \u003c userInputSegmented.length) {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"jinyang628"},"content":" fromIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"jinyang628"},"content":" toIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"jinyang628"},"content":" if (fromIndex \u003d\u003d userInputSegmented.length) {","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"jinyang628"},"content":" throw new InvalidTaskException(\"ERROR: Missing the /from marker\");","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"jinyang628"},"content":" if (userInputSegmented[fromIndex].equals(\"/from\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"jinyang628"},"content":" fromIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"jinyang628"},"content":" toIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jinyang628"},"content":" while (toIndex \u003c userInputSegmented.length) {","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"jinyang628"},"content":" toIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"jinyang628"},"content":" if (toIndex \u003d\u003d userInputSegmented.length) {","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"jinyang628"},"content":" throw new InvalidTaskException(\"ERROR: Missing the /to marker\");","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"jinyang628"},"content":" if (userInputSegmented[toIndex].equals(\"/to\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"jinyang628"},"content":" toIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"jinyang628"},"content":" return new Event(","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"jinyang628"},"content":" String.join(\" \", Arrays.copyOfRange(userInputSegmented, 1, fromIndex - 1)),","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"jinyang628"},"content":" String.join(\" \", Arrays.copyOfRange(userInputSegmented, fromIndex, toIndex - 1)),","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"jinyang628"},"content":" String.join(\" \", Arrays.copyOfRange(userInputSegmented, toIndex, userInputSegmented.length))","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"jinyang628"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"jinyang628"},"content":" private Todo parseTodoInput(String[] userInputSegmented) {","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"jinyang628"},"content":" return new Todo(String.join(\" \", Arrays.copyOfRange(userInputSegmented, 1,","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"jinyang628"},"content":" userInputSegmented.length)));","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":134}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"/** Class which deals with loading tasks from the file and saving tasks in the file. */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" private String dataFolderName;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" private String fileName;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" * Class constructor specifying the filePath to load and save data.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" * @param filePath string representation of the required filePath.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" String[] filePathSegmented \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" this.dataFolderName \u003d filePathSegmented[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" this.fileName \u003d filePathSegmented[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" * Loads the tasks stored in the local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" * @return an ArrayList containing the stored tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" * @throws NoTasksStoredException","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" public ArrayList\u003cTask\u003e load() throws NoTasksStoredException {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" ArrayList\u003cTask\u003e storedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" File dataFolder \u003d new File(this.dataFolderName);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" if (!dataFolder.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" dataFolder.mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" File file \u003d new File(dataFolder, this.fileName);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" String line;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" String[] lineSegmented \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" String taskType \u003d lineSegmented[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" String isDone \u003d lineSegmented[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" switch (isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" case \"X\":","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" Todo todoTask \u003d new Todo(lineSegmented[2]);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" todoTask.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(todoTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" Deadline deadlineTask \u003d new Deadline(lineSegmented[2], lineSegmented[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" deadlineTask.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(deadlineTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":" Event eventTask \u003d new Event(lineSegmented[2], lineSegmented[3], lineSegmented[4]);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" eventTask.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(eventTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" System.out.println(\"Unknown duke.Task Type\");","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" case \" \":","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":" Todo todoTask \u003d new Todo(lineSegmented[2]);","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(todoTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":" Deadline deadlineTask \u003d new Deadline(lineSegmented[2], lineSegmented[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(deadlineTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"jinyang628"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"jinyang628"},"content":" Event eventTask \u003d new Event(lineSegmented[2], lineSegmented[3], lineSegmented[4]);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(eventTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"jinyang628"},"content":" System.out.println(\"Unknown duke.Task Type\");","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"jinyang628"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"jinyang628"},"content":" System.out.println(\"Unknown isDone marker\");","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"jinyang628"},"content":" reader.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"jinyang628"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"jinyang628"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"jinyang628"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"jinyang628"},"content":" throw new NoTasksStoredException(\"No stored tasks detected\");","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"jinyang628"},"content":" return storedTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"jinyang628"},"content":" * Saves the tasks onto the local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"jinyang628"},"content":" * @param tasks an ArrayList containing the tasks to be stored.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"jinyang628"},"content":" public void save(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"jinyang628"},"content":" System.out.println(this.dataFolderName + \"/\" + this.fileName);","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jinyang628"},"content":" FileWriter writer \u003d new FileWriter(this.dataFolderName + \"/\" + this.fileName);","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"jinyang628"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"jinyang628"},"content":" writer.write(task.saveTask());","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"jinyang628"},"content":" if (i \u003c tasks.size() - 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"jinyang628"},"content":" writer.write(System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"jinyang628"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"jinyang628"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"jinyang628"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":126}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":" * Abstract class which all the different types of tasks inherit from","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" * Class constructor specifying the description of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * @param description the string description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" * @return the string description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" return this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" * Returns a boolean indicator of whether the task is done.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" * @return a boolean indicator of whether the task is done.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" return this.isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" * Marks the task as completed","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" * Marks the task as incomplete","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" public void unmark() {","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" * Returns the information associated with the task","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" String prefix \u003d \"\";","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" prefix \u003d \"[X]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" } else {","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" prefix \u003d \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" return prefix + \" \" + this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" public abstract String saveTask();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":64}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"/** Task List to store all the tasks. */","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * Class constructor when there are previously stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" * @param tasks list of tasks stored previously.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" * @param ui the UI containing the message responses.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks, Ui ui) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" * Class constructor when there are no previously stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" * @param ui the UI containing the message responses.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" public TaskList(Ui ui) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" * Returns a string message containing the tasks which match","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" * the description inputted by the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" * @param description the description inputted by the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" * @return a string message containing the filtered tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" public String filterTasks(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" List\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" if (task.getDescription().contains(description)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" return this.ui.listFoundTasks(filteredTasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" * Saves the tasks currently tracked by Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" * @param storage the storage class which stores the tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" public void save(Storage storage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" storage.save(this.tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" * Lists the tasks currently tracked by Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" * @return a string message containing the list of tasks tracked.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" return this.ui.listMessage(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is successfully","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" * marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" * @param taskNumber the index of the task to be marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" public String markTaskAsDone(int taskNumber) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" Task task \u003d this.tasks.get(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" return this.ui.markTaskAsDoneMessage(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is marked as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":" * @param taskNumber the index of the task to be marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is marked as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"jinyang628"},"content":" public String unmarkTask(int taskNumber) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"jinyang628"},"content":" Task task \u003d this.tasks.get(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"jinyang628"},"content":" task.unmark();","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":" return this.ui.unmarkTaskMessage(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":" * Deletes a task from the stored list.","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"jinyang628"},"content":" * @param taskNumber the index of the task to be deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"jinyang628"},"content":" public String deleteTask(int taskNumber) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jinyang628"},"content":" Task task \u003d this.tasks.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"jinyang628"},"content":" return this.ui.deleteTaskMessage(task, this.tasks.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"jinyang628"},"content":" * Adds a task into the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"jinyang628"},"content":" * @param task the Task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is added.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"jinyang628"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"jinyang628"},"content":" int startOfDescriptionIndex \u003d 7;","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"jinyang628"},"content":" if (this.containsTask(task)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"jinyang628"},"content":" return this.ui.duplicateTaskMessage(task, startOfDescriptionIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"jinyang628"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"jinyang628"},"content":" return this.ui.addTaskMessage(task, this.tasks.size(), startOfDescriptionIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"jinyang628"},"content":" private boolean containsTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jinyang628"},"content":" if (this.tasks.get(i).equals(task)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"jinyang628"},"content":" return true;","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":118}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/** Task which contains only a description */","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" * Class constructor specifying the description of the _todo task.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" * @param description the string description of the _todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" * Returns the information associated with the _todo task.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" if (!(obj instanceof Todo)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" Todo task \u003d (Todo) obj;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" int indexOfTaskDescription \u003d 7;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" if (this.toString().substring(indexOfTaskDescription).equals(","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" task.toString().substring(indexOfTaskDescription))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" return true;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" * Returns the information associated with the _todo to be stored on local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" * @return the string representation of the _todo saved onto the local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" return \"T|\" + (this.isDone() ? \"X|\" : \" |\") + this.getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":43}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"/** The UI managing the message responses of Duke. */","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" * Lists the tasks that matches the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" * @param filteredTasks the filtered list of tasks that matches the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * @return a String message containing the list of tasks that matches the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" public String listFoundTasks(List\u003cTask\u003e filteredTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" sb.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 0; i \u003c filteredTasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%d.%s\\n\", i + 1, filteredTasks.get(i).toString()));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" * Lists the tasks currently stored in Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" * @param tasks the list of tasks currently stored.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" * @return a string message containing the list of tasks currently stored in Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" public String listMessage(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" sb.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%d.%s%n\", i + 1, task));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is successfully marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" * @param task the task that is marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" public String markTaskAsDoneMessage(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" sb.append(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%s%n\", task));","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is unmarked as incomplete.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" * @param task the task to be unmarked as incomplete.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is unmarked as incomplete.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" public String unmarkTaskMessage(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" sb.append(\"OK, I\u0027ve marked this task as not done yet:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%s%n\", task));","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" * @param task the task to be deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" * @param numOfTasks the number of tasks left.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is deleted and the number of tasks left.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" public String deleteTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" sb.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%s\\n\", task));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"Now you have %d tasks in the list.%n\", numOfTasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is added.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":" * @param task the task that is added.","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" * @param numOfTasks the number of tasks now stored in Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is added and the number of tasks stored.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"jinyang628"},"content":" public String addTaskMessage(Task task, int numOfTasks, int startOfDescriptionIndex) {","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jinyang628"},"content":" sb.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%s\\n\", task.toString().substring(startOfDescriptionIndex)));","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"Now you have %d tasks in the list.%n\", numOfTasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"jinyang628"},"content":" public String duplicateTaskMessage(Task task, int startOfDescriptionIndex) {","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"jinyang628"},"content":" return String.format(\"%s is already added before!\", task.toString().substring(startOfDescriptionIndex));","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":93}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_successTodo() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"todo read book\", \"todo\");","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[T][ ] read book\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_successDeadline() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"deadline return book /by 2019-01-15\", \"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[D][X] return book (by: Jan 15 2019)\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_successEvent() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"event project meeting /from 2019-02-15 /to 2019-03-30\", \"event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[E][ ] project meeting (from: Feb 15 2019 to: Mar 30 2019)\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_failureDeadline1() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"deadline return book /by 2019-01-150\", \"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[D][X] return book (by: Jan 15 2019)\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"Text \u00272019-01-150\u0027 could not be parsed, unparsed text found at index 10\",","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_failureDeadline2() {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"deadline return book byebye 2019-01-150\", \"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[D][X] return book (by: Jan 15 2019)\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"ERROR: Missing the /by marker\", e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_failureEvent() {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"event project meeting /to 2019-02-15 /from 2019-03-30\", \"event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"jinyang628"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[E][X] project meeting (from: Feb 15 2019 to: Mar 30 2019)\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"Index 7 out of bounds for length 7\", e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":89}},{"path":"src/test/java/duke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" public void todoMarkAsDone_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" Todo todoTask \u003d new Todo(\"Read Book\");","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" todoTask.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[T][X] Read Book\", todoTask.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" public void todoUnmark_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" Todo todoTask \u003d new Todo(\"Read Book\");","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" todoTask.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" todoTask.unmark();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[T][ ] Read Book\", todoTask.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" public void todoComplicatedName_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" Todo todoTask \u003d new Todo(\"1234567890-\u003d+qwertyuiop[]\u0027;.,/asdfghkl\u0027\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[T][ ] 1234567890-\u003d+qwertyuiop[]\u0027;.,/asdfghkl\u0027\", todoTask.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":34}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"todo borrow book","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"deadline return book /by 2019-01-15","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"mark 2","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"event project meeting /from 2019-02-15 /to 2019-03-30","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"unmark 2","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"delete 1","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"javac -cp ..\\src\\main\\java\\duke -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"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":19,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"jinyang628":2}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-27"},{"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":"jinyang628"},"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-27"},{"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":{"jinyang628":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":"jinyang628"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.11\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" id \u0027checkstyle\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":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":"javafx {","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" version \u003d \u002717\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":"run {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":"tasks.build.dependsOn shadowJar","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":72,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":73,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"jinyang628":33}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"E|X|project meeting|2019-02-15|2019-03-30","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"D|X|return book|2019-01-15","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"jinyang628":2}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"# Duke","lastModifiedDate":"2023-09-15"},{"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":"jinyang628"},"content":"1. Add a task","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"2. Delete a task","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"3. Mark a task as done","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"4. Unmark a task as incomplete","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"5. List the tasks stored","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":"6. Filter the tasks stored","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":"7. Save the tasks onto local hard disk","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":"## Adding a task: `todo` `deadline` `event`","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":"**Adds a todo task into the list**","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":"Format for todo: `todo ACTION`","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":"`todo borrow book`","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":"****","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":"**Adds a deadline task into the list**","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":"Format for deadline: `deadline ACTION /by YYYY-MM-DD`","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":"`deadline return book /by 2019-01-15`","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":"****","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":"**Adds an event task into the list**","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":"Format for event: `event ACTION /from YYYY-MM-DD /to YYYY-MM-DD`","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":"`event project meeting /from 2019-02-15 /to 2019-03-30`","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":"****","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":"## Deleting a task: `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":"**Deletes a task (using its associated number) from the list**","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":"Format for delete: `delete NUMBER`","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":"`delete 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":"****","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":"## Marking a task: `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":"**Marks a task (using its associated number) as done**","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":"Format for mark: `mark NUMBER`","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":"`mark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":"****","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":"## Unmarking a task: `unmark`","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":"**Unmarks a task (using its associated number) as incomplete**","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":"Format for mark: `unmark NUMBER`","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":81,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":"`unmark 3`","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":"****","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":"## Listing tasks: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":"**Lists the tasks stored in Duke**","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"jinyang628"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"jinyang628"},"content":"`list`","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"jinyang628"},"content":"Example outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":97,"author":{"gitId":"jinyang628"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"jinyang628"},"content":" 1.[T][ ] borrow book","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"jinyang628"},"content":" 2.[D][ ] return book (by: Jan 15 2019)","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"jinyang628"},"content":" 3.[E][ ] project meeting (from: Feb 15 2019 to: Mar 30 2019)","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":102,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"jinyang628"},"content":"****","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"jinyang628"},"content":"## Filtering tasks: `find`","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"jinyang628"},"content":"**Finds all tasks whose names contain the user input**","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"jinyang628"},"content":"Format for mark: `find NAME`","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"jinyang628"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"jinyang628"},"content":"`find reading`","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"jinyang628"},"content":"****","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"jinyang628"},"content":"## Saving tasks: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"jinyang628"},"content":"**Saves the tasks onto the local hard disk and exits Duke**","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"jinyang628"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"jinyang628"},"content":"`bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"jinyang628"},"content":"****","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"jinyang628":103,"-":22}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"/** Class representing a task which has a deadline */","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" * Class constructor specifying the description of the deadline task.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * @param description the string description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" * @param by the deadline of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" * Returns a string description which contains the deadline of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" if (!(obj instanceof Deadline)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" Deadline task \u003d (Deadline) obj;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" int indexOfTaskDescription \u003d 7;","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" if (this.toString().substring(indexOfTaskDescription).equals(","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" task.toString().substring(indexOfTaskDescription))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" return true;","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" * Returns the information associated with the deadline to be stored on local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" * @return the string representation of the deadline saved onto the local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" return \"D|\" + (this.isDone() ? \"X|\" : \" |\") + this.getDescription() + \"|\" + this.by;","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":50}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"/** Chatbot to assist individuals in keeping track of pending tasks. */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" private enum SpecialTaskKeyword {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" TODO,","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" DEADLINE,","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" EVENT","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" private SpecialTaskKeyword[] specialTasksKeywords \u003d SpecialTaskKeyword.values();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" private Parser parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" /** Constructor to initialise the chatbot */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" this.taskList \u003d new TaskList(this.storage.load(), this.ui);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" } catch (NoTasksStoredException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" this.taskList \u003d new TaskList(this.ui);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" * Returns Duke\u0027s response to the user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" * @param input a string representation of the user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" * @return a string message representing Duke\u0027s response.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" String actionWord \u003d this.parser.parseActionWord(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" int taskNumber \u003d -1;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" switch (actionWord) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" case \"bye\":","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" this.taskList.save(this.storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" Platform.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" case \"list\":","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" return this.taskList.listTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" case \"mark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" taskNumber \u003d this.parser.parseTaskNumber(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" return this.taskList.markTaskAsDone(taskNumber);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" taskNumber \u003d this.parser.parseTaskNumber(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" return this.taskList.unmarkTask(taskNumber);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" case \"delete\":","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" taskNumber \u003d this.parser.parseTaskNumber(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" return this.taskList.deleteTask(taskNumber);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" case \"find\":","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" String description \u003d this.parser.parseFindDescription(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" return this.taskList.filterTasks(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" if (Arrays.stream(this.specialTasksKeywords)","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" .anyMatch(keyword -\u003e keyword.toString().toLowerCase().equals(actionWord))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" Task task \u003d this.parser.parseAddTaskInput(input, actionWord);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" return this.taskList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" throw new InvalidInputException(\"ERROR: Invalid input\");","lastModifiedDate":"2023-08-19"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidInputException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":" return \"ERROR\";","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"jinyang628":77,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":" * Parent class of all the checked duke.exceptions to be implemented for duke.Duke","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" * Class constructor containing the message of the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" * @param message the string message associated with the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" super(message);","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":15}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"/** Task which contains a date to start and date to finish. */","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * Class constructor specifying the description of the event task.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" * @param description the string description of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" * @param from the string description of the date to begin the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" * @param to the string description of the date to end the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" * Returns a string description which contains the starting and ending time of the event.","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" assert this.from !\u003d null;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" assert this.to !\u003d null;","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" String startingDate \u003d this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" String endingDate \u003d this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), startingDate, endingDate);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" if (!(obj instanceof Event)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" Event task \u003d (Event) obj;","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" int indexOfTaskDescription \u003d 7;","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" if (this.toString().substring(indexOfTaskDescription).equals(","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" task.toString().substring(indexOfTaskDescription))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" return true;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" * Returns the information associated with the event to be stored on the local hard disk.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" * @return the string representation of the event saved onto the local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" String isDoneMarker \u003d this.isDone() ? \"X\" : \" \";","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" return String.format(\"E|%s|%s|%s|%s\", isDoneMarker, this.getDescription(), this.from, this.to);","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":58}},{"path":"src/main/java/duke/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/** Exception which occurs when the user input is invalid. */","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"public class InvalidInputException extends DukeException {","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" * Class constructor containing the message of the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" * @param message the string message associated with the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" public InvalidInputException(String message) {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" super(message);","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":13}},{"path":"src/main/java/duke/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/** Exception which occurs when the description of the task is empty. */","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"public class InvalidTaskException extends DukeException {","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" * Class constructor containing the message of the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" * @param message the string message associated with the exception","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" public InvalidTaskException(String message) {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" super(message);","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":13}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" private final Duke duke \u003d new Duke(\"data/tasks.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/happy1.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/happy2.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" * Initialises the Duke GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" // Display a greeting message when the GUI initializes","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" String greeting \u003d \"Hello! I\u0027m Duke. How can I assist you today?\";","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(greeting, dukeImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":57}},{"path":"src/main/java/duke/NoTasksStoredException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/** Exception which occurs when the description of the task is empty. */","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"public class NoTasksStoredException extends DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" * Class constructor containing the message of the exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" * @param message the string message associated with the exception.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" public NoTasksStoredException(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" super(message);","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":12}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"/** Class that deals with making sense of the user command. */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" * Returns the description of the task the user is trying to filter for.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" * @param userInput the entire user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * @return a String value containing the desired description.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" public String parseFindDescription(String userInput) {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" String[] userInputSegmented \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" StringBuilder description \u003d new StringBuilder();","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 1; i \u003c userInputSegmented.length; i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" description.append(userInputSegmented[i] + \" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" return description.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" * Returns a string representation of the type of command the user inputted.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" * @param userInput the entire user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" * @return a String value indicating the type of user command.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" public String parseActionWord(String userInput) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" String[] userInputSegmented \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" return userInputSegmented[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" * Returns the task number associated with the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" * @param userInput the entire user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" * @return an integer indicating the number associated with the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" public int parseTaskNumber(String userInput) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" String[] userInputSegmented \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" return Integer.parseInt(userInputSegmented[1]) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" * Returns the Task the user wants to add into Duke.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" * @param userInput the entire user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" * @param actionWord the type of task the user wants to add.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" * @return the Task the user wants to add into Duke.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" * @throws InvalidTaskException if a part of the task description is missing or the task type is invalid.","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" public Task parseAddTaskInput(String userInput, String actionWord) throws InvalidTaskException {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" String[] userInputSegmented \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" if (userInputSegmented.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" throw new InvalidTaskException(\"ERROR: The description of a \" + userInputSegmented[0]","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" + \" cannot be empty.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" switch (actionWord) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" case \"todo\":","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" return parseTodoInput(userInputSegmented);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" return parseDeadlineInput(userInputSegmented);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" case \"event\":","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" return parseEventInput(userInputSegmented);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" throw new InvalidTaskException(\"ERROR: The task is not of a valid type\");","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":" private Deadline parseDeadlineInput(String[] userInputSegmented) throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" int startIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":" assert Arrays.asList(userInputSegmented).contains(\"/by\");","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" while (true) {","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"jinyang628"},"content":" startIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"jinyang628"},"content":" if (startIndex \u003d\u003d userInputSegmented.length) {","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"jinyang628"},"content":" throw new InvalidTaskException(\"ERROR: Missing the /by marker\");","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"jinyang628"},"content":" if (userInputSegmented[startIndex].equals(\"/by\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":" startIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"jinyang628"},"content":" return new Deadline(","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"jinyang628"},"content":" String.join(\" \", Arrays.copyOfRange(userInputSegmented, 1, startIndex - 1)),","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"jinyang628"},"content":" String.join(\" \", Arrays.copyOfRange(userInputSegmented, startIndex, userInputSegmented.length)));","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"jinyang628"},"content":" private Event parseEventInput(String[] userInputSegmented) throws InvalidTaskException {","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"jinyang628"},"content":" int fromIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"jinyang628"},"content":" int toIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"jinyang628"},"content":" while (fromIndex \u003c userInputSegmented.length) {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"jinyang628"},"content":" fromIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"jinyang628"},"content":" toIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"jinyang628"},"content":" if (fromIndex \u003d\u003d userInputSegmented.length) {","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"jinyang628"},"content":" throw new InvalidTaskException(\"ERROR: Missing the /from marker\");","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"jinyang628"},"content":" if (userInputSegmented[fromIndex].equals(\"/from\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"jinyang628"},"content":" fromIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"jinyang628"},"content":" toIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jinyang628"},"content":" while (toIndex \u003c userInputSegmented.length) {","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"jinyang628"},"content":" toIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"jinyang628"},"content":" if (toIndex \u003d\u003d userInputSegmented.length) {","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"jinyang628"},"content":" throw new InvalidTaskException(\"ERROR: Missing the /to marker\");","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"jinyang628"},"content":" if (userInputSegmented[toIndex].equals(\"/to\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"jinyang628"},"content":" toIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"jinyang628"},"content":" return new Event(","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"jinyang628"},"content":" String.join(\" \", Arrays.copyOfRange(userInputSegmented, 1, fromIndex - 1)),","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"jinyang628"},"content":" String.join(\" \", Arrays.copyOfRange(userInputSegmented, fromIndex, toIndex - 1)),","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"jinyang628"},"content":" String.join(\" \", Arrays.copyOfRange(userInputSegmented, toIndex, userInputSegmented.length))","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"jinyang628"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"jinyang628"},"content":" private Todo parseTodoInput(String[] userInputSegmented) {","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"jinyang628"},"content":" return new Todo(String.join(\" \", Arrays.copyOfRange(userInputSegmented, 1,","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"jinyang628"},"content":" userInputSegmented.length)));","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":134}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"/** Class which deals with loading tasks from the file and saving tasks in the file. */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" private String dataFolderName;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" private String fileName;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" * Class constructor specifying the filePath to load and save data.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" * @param filePath string representation of the required filePath.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" String[] filePathSegmented \u003d filePath.split(\"/\");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" this.dataFolderName \u003d filePathSegmented[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" this.fileName \u003d filePathSegmented[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" * Loads the tasks stored in the local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" * @return an ArrayList containing the stored tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" * @throws NoTasksStoredException","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" public ArrayList\u003cTask\u003e load() throws NoTasksStoredException {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" ArrayList\u003cTask\u003e storedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" File dataFolder \u003d new File(this.dataFolderName);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" if (!dataFolder.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" dataFolder.mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" File file \u003d new File(dataFolder, this.fileName);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" String line;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" String[] lineSegmented \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" String taskType \u003d lineSegmented[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" String isDone \u003d lineSegmented[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" switch (isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" case \"X\":","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" Todo todoTask \u003d new Todo(lineSegmented[2]);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" todoTask.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(todoTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" Deadline deadlineTask \u003d new Deadline(lineSegmented[2], lineSegmented[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" deadlineTask.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(deadlineTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":" Event eventTask \u003d new Event(lineSegmented[2], lineSegmented[3], lineSegmented[4]);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" eventTask.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(eventTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" System.out.println(\"Unknown duke.Task Type\");","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" case \" \":","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":" Todo todoTask \u003d new Todo(lineSegmented[2]);","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(todoTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":" Deadline deadlineTask \u003d new Deadline(lineSegmented[2], lineSegmented[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(deadlineTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"jinyang628"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"jinyang628"},"content":" Event eventTask \u003d new Event(lineSegmented[2], lineSegmented[3], lineSegmented[4]);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":" storedTasks.add(eventTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"jinyang628"},"content":" System.out.println(\"Unknown duke.Task Type\");","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"jinyang628"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"jinyang628"},"content":" System.out.println(\"Unknown isDone marker\");","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"jinyang628"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"jinyang628"},"content":" reader.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"jinyang628"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"jinyang628"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"jinyang628"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"jinyang628"},"content":" throw new NoTasksStoredException(\"No stored tasks detected\");","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"jinyang628"},"content":" return storedTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"jinyang628"},"content":" * Saves the tasks onto the local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"jinyang628"},"content":" * @param tasks an ArrayList containing the tasks to be stored.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"jinyang628"},"content":" public void save(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"jinyang628"},"content":" System.out.println(this.dataFolderName + \"/\" + this.fileName);","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jinyang628"},"content":" FileWriter writer \u003d new FileWriter(this.dataFolderName + \"/\" + this.fileName);","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"jinyang628"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"jinyang628"},"content":" writer.write(task.saveTask());","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"jinyang628"},"content":" if (i \u003c tasks.size() - 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"jinyang628"},"content":" writer.write(System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"jinyang628"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"jinyang628"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"jinyang628"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":126}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":" * Abstract class which all the different types of tasks inherit from","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" private String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" * Class constructor specifying the description of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * @param description the string description of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" * @return the string description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" return this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" * Returns a boolean indicator of whether the task is done.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" * @return a boolean indicator of whether the task is done.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" return this.isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" * Marks the task as completed","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" * Marks the task as incomplete","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" public void unmark() {","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" * Returns the information associated with the task","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" String prefix \u003d \"\";","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" prefix \u003d \"[X]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" } else {","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" prefix \u003d \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" return prefix + \" \" + this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" public abstract String saveTask();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":64}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"/** Task List to store all the tasks. */","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * Class constructor when there are previously stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" * @param tasks list of tasks stored previously.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" * @param ui the UI containing the message responses.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks, Ui ui) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" * Class constructor when there are no previously stored tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" * @param ui the UI containing the message responses.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" public TaskList(Ui ui) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" * Returns a string message containing the tasks which match","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" * the description inputted by the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" * @param description the description inputted by the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" * @return a string message containing the filtered tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" public String filterTasks(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" List\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" if (task.getDescription().trim().toLowerCase().contains(description.trim().toLowerCase())) {","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" return this.ui.listFoundTasks(filteredTasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" * Saves the tasks currently tracked by Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" * @param storage the storage class which stores the tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" public void save(Storage storage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" storage.save(this.tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" * Lists the tasks currently tracked by Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" * @return a string message containing the list of tasks tracked.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" public String listTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" return this.ui.listMessage(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is successfully","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" * marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" * @param taskNumber the index of the task to be marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" public String markTaskAsDone(int taskNumber) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" Task task \u003d this.tasks.get(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" return this.ui.markTaskAsDoneMessage(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is marked as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":" * @param taskNumber the index of the task to be marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is marked as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"jinyang628"},"content":" public String unmarkTask(int taskNumber) {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"jinyang628"},"content":" Task task \u003d this.tasks.get(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"jinyang628"},"content":" task.unmark();","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":" return this.ui.unmarkTaskMessage(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":" * Deletes a task from the stored list.","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"jinyang628"},"content":" * @param taskNumber the index of the task to be deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"jinyang628"},"content":" public String deleteTask(int taskNumber) {","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"jinyang628"},"content":" Task task \u003d this.tasks.remove(taskNumber);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"jinyang628"},"content":" return this.ui.deleteTaskMessage(task, this.tasks.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"jinyang628"},"content":" * Adds a task into the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"jinyang628"},"content":" * @param task the Task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is added.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"jinyang628"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"jinyang628"},"content":" int startOfDescriptionIndex \u003d 7;","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"jinyang628"},"content":" if (this.containsTask(task)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"jinyang628"},"content":" return this.ui.duplicateTaskMessage(task, startOfDescriptionIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"jinyang628"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"jinyang628"},"content":" return this.ui.addTaskMessage(task, this.tasks.size(), startOfDescriptionIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"jinyang628"},"content":" private boolean containsTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"jinyang628"},"content":" if (this.tasks.get(i).equals(task)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"jinyang628"},"content":" return true;","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":118}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"/** Task which contains only a description */","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":" * Class constructor specifying the description of the _todo task.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":" * @param description the string description of the _todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" * Returns the information associated with the _todo task.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" if (!(obj instanceof Todo)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" Todo task \u003d (Todo) obj;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" int indexOfTaskDescription \u003d 7;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" if (this.toString().substring(indexOfTaskDescription).equals(","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" task.toString().substring(indexOfTaskDescription))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" return true;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" * Returns the information associated with the _todo to be stored on local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" * @return the string representation of the _todo saved onto the local hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" return \"T|\" + (this.isDone() ? \"X|\" : \" |\") + this.getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":43}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"/** The UI managing the message responses of Duke. */","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" * Lists the tasks that matches the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" * @param filteredTasks the filtered list of tasks that matches the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" * @return a String message containing the list of tasks that matches the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" public String listFoundTasks(List\u003cTask\u003e filteredTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" sb.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 0; i \u003c filteredTasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%d.%s\\n\", i + 1, filteredTasks.get(i).toString()));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" * Lists the tasks currently stored in Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" * @param tasks the list of tasks currently stored.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" * @return a string message containing the list of tasks currently stored in Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" public String listMessage(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" sb.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%d.%s%n\", i + 1, task));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is successfully marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" * @param task the task that is marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" public String markTaskAsDoneMessage(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":" sb.append(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%s%n\", task));","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is unmarked as incomplete.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" * @param task the task to be unmarked as incomplete.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is unmarked as incomplete.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" public String unmarkTaskMessage(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" sb.append(\"OK, I\u0027ve marked this task as not done yet:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%s%n\", task));","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" * @param task the task to be deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" * @param numOfTasks the number of tasks left.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is deleted and the number of tasks left.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" public String deleteTaskMessage(Task task, int numOfTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" sb.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%s\\n\", task));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"Now you have %d tasks in the list.%n\", numOfTasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":" * Returns a string message indicating that the task is added.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":" * @param task the task that is added.","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" * @param numOfTasks the number of tasks now stored in Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"jinyang628"},"content":" * @return a string message indicating that the task is added and the number of tasks stored.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"jinyang628"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"jinyang628"},"content":" public String addTaskMessage(Task task, int numOfTasks, int startOfDescriptionIndex) {","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"jinyang628"},"content":" sb.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"%s\\n\", task.toString().substring(startOfDescriptionIndex)));","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"jinyang628"},"content":" sb.append(String.format(\"Now you have %d tasks in the list.%n\", numOfTasks));","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":" return sb.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"jinyang628"},"content":" public String duplicateTaskMessage(Task task, int startOfDescriptionIndex) {","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"jinyang628"},"content":" return String.format(\"%s is already added before!\", task.toString().substring(startOfDescriptionIndex));","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":93}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"jinyang628":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_successTodo() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"todo read book\", \"todo\");","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[T][ ] read book\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_successDeadline() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"deadline return book /by 2019-01-15\", \"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[D][X] return book (by: Jan 15 2019)\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_successEvent() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"event project meeting /from 2019-02-15 /to 2019-03-30\", \"event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[E][ ] project meeting (from: Feb 15 2019 to: Mar 30 2019)\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_failureDeadline1() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"deadline return book /by 2019-01-150\", \"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"jinyang628"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[D][X] return book (by: Jan 15 2019)\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"jinyang628"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"Text \u00272019-01-150\u0027 could not be parsed, unparsed text found at index 10\",","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"jinyang628"},"content":" e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_failureDeadline2() {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"deadline return book byebye 2019-01-150\", \"deadline\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"jinyang628"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[D][X] return book (by: Jan 15 2019)\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"ERROR: Missing the /by marker\", e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"jinyang628"},"content":" public void parseAddTaskInput_failureEvent() {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"jinyang628"},"content":" Parser parse \u003d new Parser();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"jinyang628"},"content":" Task task \u003d parse.parseAddTaskInput(\"event project meeting /to 2019-02-15 /from 2019-03-30\", \"event\");","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"jinyang628"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[E][X] project meeting (from: Feb 15 2019 to: Mar 30 2019)\", task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"jinyang628"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"jinyang628"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"Index 7 out of bounds for length 7\", e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":89}},{"path":"src/test/java/duke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":" public void todoMarkAsDone_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"jinyang628"},"content":" Todo todoTask \u003d new Todo(\"Read Book\");","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"jinyang628"},"content":" todoTask.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[T][X] Read Book\", todoTask.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"jinyang628"},"content":" public void todoUnmark_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"jinyang628"},"content":" Todo todoTask \u003d new Todo(\"Read Book\");","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"jinyang628"},"content":" todoTask.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"jinyang628"},"content":" todoTask.unmark();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[T][ ] Read Book\", todoTask.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"jinyang628"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"jinyang628"},"content":" public void todoComplicatedName_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"jinyang628"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"jinyang628"},"content":" Todo todoTask \u003d new Todo(\"1234567890-\u003d+qwertyuiop[]\u0027;.,/asdfghkl\u0027\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"jinyang628"},"content":" assertEquals(\"[T][ ] 1234567890-\u003d+qwertyuiop[]\u0027;.,/asdfghkl\u0027\", todoTask.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"jinyang628"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"jinyang628"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"jinyang628"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"jinyang628"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"jinyang628":34}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"jinyang628"},"content":"todo borrow book","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"jinyang628"},"content":"deadline return book /by 2019-01-15","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"jinyang628"},"content":"mark 2","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"jinyang628"},"content":"event project meeting /from 2019-02-15 /to 2019-03-30","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"jinyang628"},"content":"unmark 2","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"jinyang628"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"jinyang628"},"content":"delete 1","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"jinyang628"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"jinyang628":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"jinyang628"},"content":"javac -cp ..\\src\\main\\java\\duke -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"jinyang628"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"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":19,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"jinyang628":2}}] diff --git a/jinyang628_ip_master/commits.json b/jinyang628_ip_master/commits.json index c08c55cf..d1ea4217 100644 --- a/jinyang628_ip_master/commits.json +++ b/jinyang628_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jinyang628":[{"date":"2023-08-19","commitResults":[{"hash":"edeb7f6ffcda410790757267e922ee7d725bbdb8","isMergeCommit":false,"messageTitle":"Level 6 done","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":209,"deletions":6}}}]},{"date":"2023-08-23","commitResults":[{"hash":"2ae6a037f2c3a5e8aa91bbee241f423561da4a4f","isMergeCommit":false,"messageTitle":"Removed unused imports","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"9141321a94446e6b7a2c8f460cda557e01668b10","isMergeCommit":false,"messageTitle":"Added Java Docs","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"0b5ae726ac2cc6141d131022c370fe6dd8929a51","isMergeCommit":false,"messageTitle":"Save tasks local hard disk","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":5}}},{"hash":"fd77343332567c7945f58ac7d7a4d6ce230480b7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"68d5fbdc018226c65d97b26a114213d4d789a533","isMergeCommit":false,"messageTitle":"Implement date recognition","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":15,"deletions":8}}},{"hash":"63bd1493a73d7010e8e6c7dfab8da1b5f1a3fee2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"4a0ca777739ef686bd6021674cef3b0acf65fb0e","isMergeCommit":false,"messageTitle":"Refactor code with more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":335,"deletions":193}}},{"hash":"75a972e34b0dc8f2c15db3bf3f76b2e55111cfc3","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":12},"bat":{"insertions":2,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"41d39166727e76666425fcc100200add1bd81554","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"390dbf74f39ae22fb8755d0f4814c2f79909925b","isMergeCommit":false,"messageTitle":"Automate project builds using Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":1}}},{"hash":"a83266cb080ea419d042e690852f80525fbf5e2a","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":126,"deletions":8}}},{"hash":"fa5fa33e23f4afe48f16b9942d19fc35f5229c2d","isMergeCommit":false,"messageTitle":"Add java docs to half the non-private methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":19}}},{"hash":"dcb5b67fb898406cbded0c210e92d6d2787a706c","isMergeCommit":false,"messageTitle":"Tweak the code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"80dca7fdebe371b3fadd02004c9dd01829511e94","isMergeCommit":false,"messageTitle":"Give users a way ton find a task by searching for a keyword","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"2246b5d1dc0e4d059415321b3ca7b558a171a608","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"d8e5d80d3820da85e687a58aa37dca5578c5beb7","isMergeCommit":false,"messageTitle":"Apply Java Docs changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":15}}},{"hash":"d95cb76885900dd31de7d8879f04aefce27ea35d","isMergeCommit":true,"messageTitle":"Apply Java Docs changes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"0559dfbccdee087952808da9d9defc0011c6e52c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"c2c0a9ebdcf0d38712263d7fcccd7328caf4a2e8","isMergeCommit":false,"messageTitle":"All changes rectified","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":2}}},{"hash":"275e3c7466274681fbdf0d92b54ee821eafe3a7d","isMergeCommit":false,"messageTitle":"Correct errors regarding testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":9}}}]},{"date":"2023-09-03","commitResults":[{"hash":"73e1b7abb1d96a771746efeac5aec4eff14899e3","isMergeCommit":false,"messageTitle":"Add more Javadocs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":3,"deletions":1},"java":{"insertions":4,"deletions":9}}},{"hash":"7a9ea5ad83ef51bc095fbae447dab47fbd729229","isMergeCommit":false,"messageTitle":"Implement checkstyle to detect coding style violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":36}}},{"hash":"ba7a0dbdb3e337d178f086a20250c7526c954b60","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"428b375a24833efe17871e1a9ee85b188d98bf9c","isMergeCommit":false,"messageTitle":"Replace Text UI with JFX GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":2,"deletions":3},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":242,"deletions":103}}},{"hash":"dd367574be44464ae1df147e0f487475c5482aeb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branchLevel10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"4a1b2fcdf360067b872a92ef7a11d1f6e376f8f6","isMergeCommit":false,"messageTitle":"Generate a new JAR file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":1},"txt":{"insertions":1,"deletions":2},"java":{"insertions":86,"deletions":3}}},{"hash":"60762cd194680266dbe3cf8c9e5e7d675653ed38","isMergeCommit":false,"messageTitle":"Implement assertion statements","messageBody":"There are no assertion statements throughout the program.\n\nAssertion statements are important in ensuring that certain key values\nare as expected to ensure that Duke runs properly.\n\nLet\u0027s write assertion statements in the Event and Deadline classes so\nthat we can ensure that the important variables get initialised and stored\nproperly.\n","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"txt":{"insertions":1,"deletions":1},"java":{"insertions":35,"deletions":28}}},{"hash":"3112fb95adf8f0ccc3b5e5ead8acfdbb60dc137d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jinyang628/branch-A-Assertions","messageBody":"Implement assertion statements","fileTypesAndContributionMap":{}},{"hash":"ca9bc23bfb791406202e06782f24f89c131a20c7","isMergeCommit":false,"messageTitle":"Correct JavaDocs","messageBody":"","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ebeccf9bfd2931b02538fc268c242331d2ed7d90","isMergeCommit":false,"messageTitle":"Improve code quality with proper logical structuring","messageBody":"Code is not segregated into logical paragraphs.\n\nIf code is not segregated properly, it decreases readability as users\nare not able to immediately understand the flow of the program.\n\nLeave empty spaces between each logical block.\n\nThese empty spaces demarcate logical blocks.\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"059a19ec4704bdfd1d907c1e5df4df6d3f280d79","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jinyang628/branch-A-CodeQuality","messageBody":"Improve code quality with proper logical structuring","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"c66d12ad48c827814703eb67027efafa7335d5bc","isMergeCommit":false,"messageTitle":"Detect duplicates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":62,"deletions":3}}},{"hash":"d1ebe8760a46d38baf26df8316dbde4a086afddc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Extension\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"b078728447c0cf8821e7a469532bd1688a86aa55","isMergeCommit":false,"messageTitle":"Insert a UI.png file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":11},"md":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"jinyang628":{"java":1101,"md":3,"fxml":35,"sh":0,"bat":2,"gradle":33,"txt":11}},"authorContributionVariance":{"jinyang628":50029.156},"authorDisplayNameMap":{"jinyang628":"CS2103T-W17-1 CHEN..YANG"}} +{"authorDailyContributionsMap":{"jinyang628":[{"date":"2023-08-19","commitResults":[{"hash":"edeb7f6ffcda410790757267e922ee7d725bbdb8","isMergeCommit":false,"messageTitle":"Level 6 done","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":209,"deletions":6}}}]},{"date":"2023-08-23","commitResults":[{"hash":"2ae6a037f2c3a5e8aa91bbee241f423561da4a4f","isMergeCommit":false,"messageTitle":"Removed unused imports","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"9141321a94446e6b7a2c8f460cda557e01668b10","isMergeCommit":false,"messageTitle":"Added Java Docs","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"0b5ae726ac2cc6141d131022c370fe6dd8929a51","isMergeCommit":false,"messageTitle":"Save tasks local hard disk","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":5}}},{"hash":"fd77343332567c7945f58ac7d7a4d6ce230480b7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"68d5fbdc018226c65d97b26a114213d4d789a533","isMergeCommit":false,"messageTitle":"Implement date recognition","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":15,"deletions":8}}},{"hash":"63bd1493a73d7010e8e6c7dfab8da1b5f1a3fee2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"4a0ca777739ef686bd6021674cef3b0acf65fb0e","isMergeCommit":false,"messageTitle":"Refactor code with more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":335,"deletions":193}}},{"hash":"75a972e34b0dc8f2c15db3bf3f76b2e55111cfc3","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":12},"bat":{"insertions":2,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"41d39166727e76666425fcc100200add1bd81554","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"390dbf74f39ae22fb8755d0f4814c2f79909925b","isMergeCommit":false,"messageTitle":"Automate project builds using Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":1}}},{"hash":"a83266cb080ea419d042e690852f80525fbf5e2a","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":126,"deletions":8}}},{"hash":"fa5fa33e23f4afe48f16b9942d19fc35f5229c2d","isMergeCommit":false,"messageTitle":"Add java docs to half the non-private methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":19}}},{"hash":"dcb5b67fb898406cbded0c210e92d6d2787a706c","isMergeCommit":false,"messageTitle":"Tweak the code to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"80dca7fdebe371b3fadd02004c9dd01829511e94","isMergeCommit":false,"messageTitle":"Give users a way ton find a task by searching for a keyword","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"2246b5d1dc0e4d059415321b3ca7b558a171a608","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"d8e5d80d3820da85e687a58aa37dca5578c5beb7","isMergeCommit":false,"messageTitle":"Apply Java Docs changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":15}}},{"hash":"d95cb76885900dd31de7d8879f04aefce27ea35d","isMergeCommit":true,"messageTitle":"Apply Java Docs changes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"0559dfbccdee087952808da9d9defc0011c6e52c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"c2c0a9ebdcf0d38712263d7fcccd7328caf4a2e8","isMergeCommit":false,"messageTitle":"All changes rectified","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":2}}},{"hash":"275e3c7466274681fbdf0d92b54ee821eafe3a7d","isMergeCommit":false,"messageTitle":"Correct errors regarding testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":9}}}]},{"date":"2023-09-03","commitResults":[{"hash":"73e1b7abb1d96a771746efeac5aec4eff14899e3","isMergeCommit":false,"messageTitle":"Add more Javadocs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":3,"deletions":1},"java":{"insertions":4,"deletions":9}}},{"hash":"7a9ea5ad83ef51bc095fbae447dab47fbd729229","isMergeCommit":false,"messageTitle":"Implement checkstyle to detect coding style violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":36}}},{"hash":"ba7a0dbdb3e337d178f086a20250c7526c954b60","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"428b375a24833efe17871e1a9ee85b188d98bf9c","isMergeCommit":false,"messageTitle":"Replace Text UI with JFX GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":2,"deletions":3},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":242,"deletions":103}}},{"hash":"dd367574be44464ae1df147e0f487475c5482aeb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branchLevel10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"4a1b2fcdf360067b872a92ef7a11d1f6e376f8f6","isMergeCommit":false,"messageTitle":"Generate a new JAR file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":1},"txt":{"insertions":1,"deletions":2},"java":{"insertions":86,"deletions":3}}},{"hash":"60762cd194680266dbe3cf8c9e5e7d675653ed38","isMergeCommit":false,"messageTitle":"Implement assertion statements","messageBody":"There are no assertion statements throughout the program.\n\nAssertion statements are important in ensuring that certain key values\nare as expected to ensure that Duke runs properly.\n\nLet\u0027s write assertion statements in the Event and Deadline classes so\nthat we can ensure that the important variables get initialised and stored\nproperly.\n","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"txt":{"insertions":1,"deletions":1},"java":{"insertions":35,"deletions":28}}},{"hash":"3112fb95adf8f0ccc3b5e5ead8acfdbb60dc137d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from jinyang628/branch-A-Assertions","messageBody":"Implement assertion statements","fileTypesAndContributionMap":{}},{"hash":"ca9bc23bfb791406202e06782f24f89c131a20c7","isMergeCommit":false,"messageTitle":"Correct JavaDocs","messageBody":"","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ebeccf9bfd2931b02538fc268c242331d2ed7d90","isMergeCommit":false,"messageTitle":"Improve code quality with proper logical structuring","messageBody":"Code is not segregated into logical paragraphs.\n\nIf code is not segregated properly, it decreases readability as users\nare not able to immediately understand the flow of the program.\n\nLeave empty spaces between each logical block.\n\nThese empty spaces demarcate logical blocks.\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"059a19ec4704bdfd1d907c1e5df4df6d3f280d79","isMergeCommit":true,"messageTitle":"Merge pull request #2 from jinyang628/branch-A-CodeQuality","messageBody":"Improve code quality with proper logical structuring","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"c66d12ad48c827814703eb67027efafa7335d5bc","isMergeCommit":false,"messageTitle":"Detect duplicates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":62,"deletions":3}}},{"hash":"d1ebe8760a46d38baf26df8316dbde4a086afddc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Extension\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"b078728447c0cf8821e7a469532bd1688a86aa55","isMergeCommit":false,"messageTitle":"Insert a UI.png file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":11},"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-16","commitResults":[{"hash":"63b54e11b244a2167fc6a6580cac142162e65a4a","isMergeCommit":false,"messageTitle":"Append User Guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":110,"deletions":12}}},{"hash":"b5b352dee9239cc77051bbe63800446d28df464b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{}},{"hash":"20f3931937e00e7de48b11872ba1839f54519fec","isMergeCommit":false,"messageTitle":"Remove undesirable styling for User Guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":8,"deletions":10}}},{"hash":"ba8b6fcdd3d6b890f7b6af89141434a6b8fef232","isMergeCommit":false,"messageTitle":"Remove bugs in find method","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"jinyang628":{"java":1101,"md":105,"fxml":35,"sh":0,"bat":2,"gradle":33,"txt":10}},"authorContributionVariance":{"jinyang628":48494.242},"authorDisplayNameMap":{"jinyang628":"CS2103T-W17-1 CHEN..YANG"}} diff --git a/joeng03_ip_master/authorship.json b/joeng03_ip_master/authorship.json index 2e6d1631..a84c221e 100644 --- a/joeng03_ip_master/authorship.json +++ b/joeng03_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":"joeng03"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"javafx {","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" version \u003d \"20\"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-07"},{"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":"joeng03"},"content":" implementation \u0027com.google.code.gson:gson:2.10.1\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" mainClass.set(\"linus.Launcher\")","lastModifiedDate":"2023-09-07"},{"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":"joeng03"},"content":" archiveBaseName \u003d \"linus\"","lastModifiedDate":"2023-08-31"},{"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":"joeng03"},"content":"jar {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" enabled \u003d true","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"-":42,"joeng03":32}},{"path":"data/linus.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"[{\"type\":\"linus.task.ToDo\",\"description\":\"AAA\",\"isDone\":false},{\"type\":\"linus.task.ToDo\",\"description\":\"TEST\",\"isDone\":false},{\"type\":\"linus.task.ToDo\",\"description\":\"TEST\",\"isDone\":false},{\"type\":\"linus.task.Deadline\",\"by\":\"2023-05-03\",\"description\":\"TEST\",\"isDone\":false}]","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"joeng03":1}},{"path":"data/linus_test.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"[{\u0027type\u0027:\u0027linus.task.ToDo\u0027,\u0027description\u0027:\u0027task 1\u0027, \u0027isDone\u0027:false},{\u0027type\u0027:\u0027linus.task.Deadline\u0027,\u0027description\u0027:\u0027task 2\u0027,\u0027isDone\u0027:false,\u0027by\u0027:\u00272023-08-31\u0027},{\u0027type\u0027:\u0027linus.task.Event\u0027,\u0027description\u0027:\u0027task 3\u0027,\u0027isDone\u0027:false,\u0027from\u0027:\u00272023-08-31\u0027,\u0027to\u0027:\u00272023-09-01\u0027}]","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"joeng03":1}},{"path":"src/main/java/linus/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":13}},{"path":"src/main/java/linus/Linus.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import linus.storage.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import linus.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import linus.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import linus.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import linus.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import linus.util.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import linus.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" * Represents a Linus Chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"public class Linus {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" private static final String FILE_PATH \u003d \"data/linus.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" private static enum Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" LIST,","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" MARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" UNMARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" DELETE,","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" FIND,","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" DEADLINE,","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" HELP,","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" BYE","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" private Storage storage \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" private TaskList tasks \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" private Ui ui \u003d null;","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" * Constructs a Linus Chatbot with the default file path.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" public Linus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" this(FILE_PATH);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" * Constructs a Linus Chatbot with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" * @param filePath The file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" public Linus(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" } catch (LinusException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" @Override public String toString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" return ui.printWelcomeMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" ui.resetOutput();","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" String[] items \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" int index \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" String[] commandAndData \u003d Parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" String command \u003d commandAndData[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" String data \u003d commandAndData[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" switch (Command.valueOf(command.toUpperCase())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":" case BYE:","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" ui.printExitMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" case HELP:","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":" ui.printHelpMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":" case LIST:","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"joeng03"},"content":" ui.printList(tasks.getList(), \"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"joeng03"},"content":" case MARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"joeng03"},"content":" index \u003d Integer.parseInt(data) - 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"joeng03"},"content":" tasks.mark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"joeng03"},"content":" ui.printMarkSuccessMessage(tasks.get(index), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"joeng03"},"content":" case UNMARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"joeng03"},"content":" index \u003d Integer.parseInt(data) - 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"joeng03"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"joeng03"},"content":" ui.printUnmarkSuccessMessage(tasks.get(index), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"joeng03"},"content":" case DELETE:","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"joeng03"},"content":" index \u003d Integer.parseInt(data) - 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"joeng03"},"content":" tasks.delete(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"joeng03"},"content":" ui.printDeleteSuccessMessage(tasks.get(index), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"joeng03"},"content":" case FIND:","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"joeng03"},"content":" ui.printFindSuccessMessage(tasks.find(data));","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"joeng03"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"joeng03"},"content":" if (data \u003d\u003d \"\") {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"joeng03"},"content":" description \u003d data;","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"joeng03"},"content":" tasks.add(new ToDo(description));","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"joeng03"},"content":" ui.printAddSuccessMessage(tasks.get(tasks.getList().size() - 1), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"joeng03"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"joeng03"},"content":" if (data \u003d\u003d \"\") {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"joeng03"},"content":" items \u003d data.split(\" /by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"joeng03"},"content":" if (items.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"joeng03"},"content":" throw new LinusException(","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"joeng03"},"content":" \"☹ OOPS!!! Please specify the deadline in the correct format: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"joeng03"},"content":" + \"deadline \u003cdescription\u003e /by \u003cdate\u003e\"","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"joeng03"},"content":" description \u003d items[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"joeng03"},"content":" String by \u003d items[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"joeng03"},"content":" tasks.add(new Deadline(description, by));","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"joeng03"},"content":" ui.printAddSuccessMessage(tasks.get(tasks.getList().size() - 1), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"joeng03"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"joeng03"},"content":" if (data \u003d\u003d \"\") {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"joeng03"},"content":" items \u003d data.split(\" /from | /to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"joeng03"},"content":" if (items.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"joeng03"},"content":" throw new LinusException(","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"joeng03"},"content":" \"☹ OOPS!!! Please specify the event in the correct format: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"joeng03"},"content":" + \"event \u003cdescription\u003e /from \u003cdate\u003e /to \u003cdate\u003e\"","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"joeng03"},"content":" description \u003d items[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"joeng03"},"content":" String from \u003d items[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"joeng03"},"content":" String to \u003d items[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"joeng03"},"content":" tasks.add(new Event(description, from, to));","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"joeng03"},"content":" ui.printAddSuccessMessage(tasks.get(tasks.getList().size() - 1), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":148,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"joeng03"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"joeng03"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"joeng03"},"content":" storage.store(tasks.getList());","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"joeng03"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"joeng03"},"content":" ui.print(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":155,"author":{"gitId":"joeng03"},"content":" + \"Please start your inputs with a valid command.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"joeng03"},"content":" } catch (LinusException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"joeng03"},"content":" ui.print(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":158,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"joeng03"},"content":" return ui.getOutput();","lastModifiedDate":"2023-09-07"},{"lineNumber":160,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":161,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":162}},{"path":"src/main/java/linus/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import linus.gui.MainWindow;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" * A GUI for Linus using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" private Linus linus \u003d new Linus();","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setLinus(linus);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":32}},{"path":"src/main/java/linus/exception/LinusException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":" * Represents a LinusException.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"public class LinusException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":" * Constructs a new LinusException with the specified detail message.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" * @param message The detail message (which is saved for later retrieval by the Throwable.getMessage() method)","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":" public LinusException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":15}},{"path":"src/main/java/linus/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.gui;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"import javafx.scene.text.Text;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"joeng03"},"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":21,"author":{"gitId":"joeng03"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" private Text dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" clipImage(displayPicture);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" * Clips the image to a circle.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" private void clipImage(ImageView picture) {","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" Circle clip \u003d new Circle(picture.getFitWidth() / 2, picture.getFitHeight() / 2,","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" Math.min(picture.getFitWidth(), picture.getFitHeight()) / 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" picture.setClip(clip);","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":74}},{"path":"src/main/java/linus/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.gui;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"import linus.Linus;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"import linus.util.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" private Linus linus;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Ayaya.gif\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" private Image linusImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Linus.jpg\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" private Image sendIcon \u003d new Image(this.getClass().getResourceAsStream(\"/images/sendIcon.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" * Initializes the MainWindow.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" ImageView sendIconImageView \u003d new ImageView(sendIcon);","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" sendIconImageView.setPreserveRatio(true);","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" sendIconImageView.setFitWidth(sendButton.getPrefWidth() * 0.8);","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" sendIconImageView.setFitHeight(sendButton.getPrefHeight() * 0.8);","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" sendButton.setGraphic(sendIconImageView);","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" * Sets the Linus object.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" * @param linus The Linus object.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" public void setLinus(Linus linus) {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" this.linus \u003d linus;","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" DialogBox.getDukeDialog(linus.toString(), linusImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Linus\u0027s reply and then appends them to","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" String response \u003d linus.getResponse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" DialogBox.getDukeDialog(response, linusImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" if (response.equals(Ui.BYE_MESSAGE)) {","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":" PauseTransition pause \u003d new PauseTransition(Duration.seconds(1.5));","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" pause.setOnFinished(event -\u003e Platform.exit());","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" pause.play();","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":82}},{"path":"src/main/java/linus/storage/LocalDateTypeAdapter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.lang.reflect.Type;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonDeserializationContext;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonDeserializer;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonElement;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonPrimitive;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonSerializationContext;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonSerializer;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" * Represents a LocalDateTypeAdapter object that implements JsonSerializer and JsonDeserializer.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" * @see \u003ca href\u003d\"https://howtodoinjava.com/gson/gson-typeadapter-for-inaccessibleobjectexception/\"\u003eGSON Type Adapter\u003c/a\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":"public class LocalDateTypeAdapter implements JsonSerializer\u003cLocalDate\u003e, JsonDeserializer\u003cLocalDate\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" * Gson invokes this call-back method during serialization when it encounters a field of the specified type.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" * @param date the object that needs to be converted to Json.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" * @param typeOfSrc the actual type (fully genericized version) of the source object.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" * @param context","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" * @return A JsonElement corresponding to the specified object.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" public JsonElement serialize(final LocalDate date, final Type typeOfSrc,","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" final JsonSerializationContext context) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" return new JsonPrimitive(date.format(formatter));","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" * Gson invokes this call-back method during deserialization when it encounters a field of the specified type.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" * @param json The Json data being deserialized.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" * @param typeOfT The type of the Object to deserialize to.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" * @param context","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" * @return LocalDate","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" * @throws JsonParseException","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" public LocalDate deserialize(final JsonElement json, final Type typeOfT,","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" final JsonDeserializationContext context) throws JsonParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" return LocalDate.parse(json.getAsString(), formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":53}},{"path":"src/main/java/linus/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import com.google.gson.Gson;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"import com.google.gson.GsonBuilder;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"import com.google.gson.reflect.TypeToken;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":"import linus.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":"import linus.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":"import linus.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":"import linus.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" * Represents a storage for the list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" private Gson gson \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" private File file \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" private String filePath \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" * @param filePath The file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" * Loads the list of tasks from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" public List\u003cTask\u003e load() throws LinusException {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" Path path \u003d Paths.get(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" String json \u003d Files.readString(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" // Deserialize the Json String into an ArrayList of Tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" TaskDeserializer deserializer \u003d new TaskDeserializer(\"type\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" deserializer.registerTaskType(\"linus.task.ToDo\", ToDo.class);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" deserializer.registerTaskType(\"linus.task.Deadline\", Deadline.class);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" deserializer.registerTaskType(\"linus.task.Event\", Event.class);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" gson \u003d new GsonBuilder()","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" .registerTypeAdapter(Task.class, deserializer)","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" .create();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" List\u003cTask\u003e tasks \u003d gson.fromJson(json, new TypeToken\u003cArrayList\u003cTask\u003e\u003e() {}.getType());","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" if (tasks \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"The file system experienced an unexpected error.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" * Stores the list of tasks into the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":" public void store(List\u003cTask\u003e tasks) throws LinusException {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" gson \u003d new GsonBuilder()","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" .registerTypeAdapter(LocalDate.class, new LocalDateTypeAdapter())","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" .create();","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" String json \u003d gson.toJson(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"joeng03"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"joeng03"},"content":" fileWriter.write(json);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"joeng03"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"joeng03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"The file system experienced an unexpected error.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":90}},{"path":"src/main/java/linus/storage/TaskDeserializer.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.lang.reflect.Type;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import com.google.gson.Gson;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import com.google.gson.GsonBuilder;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonDeserializationContext;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonDeserializer;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonElement;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonObject;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"import linus.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" * Represents a TaskDeserializer object that implements JsonDeserializer.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" * @see \u003ca href\u003d\"https://www.baeldung.com/gson-list\"\u003eGSON List\u003c/a\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":"public class TaskDeserializer implements JsonDeserializer\u003cTask\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" private String taskTypeElementName;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" private Gson gson;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" private Map\u003cString, Class\u003c? extends Task\u003e\u003e taskTypeRegistry;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" * Constructs a TaskDeserializer object with the specified task type element name.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" * @param taskTypeElementName The task type element name.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" public TaskDeserializer(String taskTypeElementName) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" this.taskTypeElementName \u003d taskTypeElementName;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" this.gson \u003d new GsonBuilder().registerTypeAdapter(LocalDate.class, new LocalDateTypeAdapter()).create();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" this.taskTypeRegistry \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" * Registers a task type with the specified task type name and task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" * @param taskTypeName The task type name.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" * @param taskType The task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" public void registerTaskType(String taskTypeName, Class\u003c? extends Task\u003e taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" taskTypeRegistry.put(taskTypeName, taskType);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" * Deserializes the specified Json element into a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" * @param json The Json element.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" * @param typeOfT The type of the Object to deserialize to.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" * @param context","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" * @return The deserialized Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" public Task deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" JsonObject taskObject \u003d json.getAsJsonObject();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" JsonElement taskTypeElement \u003d taskObject.get(taskTypeElementName);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" Class\u003c? extends Task\u003e taskType \u003d taskTypeRegistry.get(taskTypeElement.getAsString());","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" return gson.fromJson(taskObject, taskType);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":63}},{"path":"src/main/java/linus/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" protected String type \u003d \"linus.task.Deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" protected LocalDate by \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" * Constructs a Deadline object with the specified description and deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" public Deadline(String description, String by) throws LinusException {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" setDate(by);","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" * Sets the deadline of the task.","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" * @param by","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" private void setDate(String by) throws LinusException {","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"☹ OOPS!!! Please specify the deadline in the correct format: yyyy-mm-dd\");","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" * Returns the icon representing the type of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" * @return The icon representing the type of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" public String getTaskTypeIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" return \"[D]\";","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" * Returns a String representation of the Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" * @return A String representation of the Deadline object.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" assert this.by !\u003d null : \"Deadline object should have non-null deadline.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" return super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":62}},{"path":"src/main/java/linus/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" * Represents an Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" protected String type \u003d \"linus.task.Event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" protected LocalDate from \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" protected LocalDate to \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" * Constructs an Event object with the specified description, start date and end date.","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" * @param from The start date of the event.","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" * @param to The end date of the event.","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" public Event(String description, String from, String to) throws LinusException {","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" super(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" setDate(from, to);","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" * Sets the start date and end date of the event.","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" * @param from","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" * @param to","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" private void setDate(String from, String to) throws LinusException {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" LocalDate parsedFromDate \u003d LocalDate.parse(from);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" LocalDate parsedToDate \u003d LocalDate.parse(to);","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" if (parsedFromDate.isAfter(parsedToDate)) {","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" throw new LinusException(","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" \"☹ OOPS!!! Please specify the start date before/on the same day as the end date.\"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" this.from \u003d parsedFromDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" this.to \u003d parsedToDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" throw new LinusException(","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" \"☹ OOPS!!! Please specify the start and/or end dates in the correct format: yyyy-mm-dd\"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" * Returns the icon representing the type of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" * @return The icon representing the type of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" public String getTaskTypeIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" return \"[E]\";","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" * Returns a String representation of the Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" * @return A String representation of the Event object.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" assert this.from !\u003d null \u0026\u0026 this.to !\u003d null : \"Event object should have non-null start and end dates.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" return super.toString()","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" + \" (from: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":" + \" to: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":" + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":84,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":84}},{"path":"src/main/java/linus/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":" * Represents a Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" * Constructs a Task object with the specified description.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" public void mark() {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" * Unmarks the task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" public void unmark() {","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done linus.task with X","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" public abstract String getTaskTypeIcon();","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" assert this.description !\u003d null : \"Task object should have non-null description.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" return this.getTaskTypeIcon()","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" + this.getStatusIcon() + \" \"","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":49}},{"path":"src/main/java/linus/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" private List\u003cTask\u003e tasks \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" * Constructs a TaskList object with an empty list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" * Constructs a TaskList object with the specified list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" public List\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" return this.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" public int size() {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" return tasks.size();","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" * @param index The index of the task to be returned.","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" * Adds the specified task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" assert tasks.contains(task) : \"Task should be in list.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":" * Deletes the task at the specified index from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" public void delete(int index) throws LinusException {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"Cannot delete task. Please provide a valid index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" assert !tasks.contains(task) : \"Task should not be in list.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"joeng03"},"content":" * Marks the task at the specified index as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"joeng03"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"joeng03"},"content":" public void mark(int index) throws LinusException {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"joeng03"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"Cannot mark task. Please provide a valid index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"joeng03"},"content":" tasks.get(index).mark();","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"joeng03"},"content":" assert tasks.get(index).isDone : \"Task should be marked as done.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"joeng03"},"content":" * Unmarks the task at the specified index as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"joeng03"},"content":" * @param index The index of the task to be unmarked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"joeng03"},"content":" public void unmark(int index) throws LinusException {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"joeng03"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"Cannot unmark task. Please provide a valid index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"joeng03"},"content":" tasks.get(index).unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"joeng03"},"content":" assert !tasks.get(index).isDone : \"Task should be marked as not done.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":110,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"joeng03"},"content":" * Finds and prints the tasks that contain the specified keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"joeng03"},"content":" * @param keyword The keyword to be searched for.","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"joeng03"},"content":" public List\u003cTask\u003e find(String keyword) {","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"joeng03"},"content":" return tasks.stream()","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"joeng03"},"content":" .filter(task -\u003e task.description.contains(keyword))","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"joeng03"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":122}},{"path":"src/main/java/linus/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":" protected String type \u003d \"linus.task.ToDo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" * Constructs a ToDo object with the specified description.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" * Returns the icon representing the type of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" * @return The icon representing the type of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" public String getTaskTypeIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" return \"[T]\";","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":29}},{"path":"src/main/java/linus/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.util;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":" * Represents a Parser.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":" * A Parser object deals with making sense of the user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" * Parses the input string into a command and data.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":" * @param input The input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" * @return A string of size 2 containing the command and data.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" public static String[] parse(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" String[] inputSplit \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" String command \u003d inputSplit[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" String data \u003d inputSplit.length \u003d\u003d 2 ? inputSplit[1] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" return new String[]{command, data};","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":21}},{"path":"src/main/java/linus/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.util;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.util.List;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import linus.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":" * Represents a Ui.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":" * A Ui object deals with interactions with the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":" private static final String WELCOME_MESSAGE \u003d \"Hello from Linus!! \\n \"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" + \"What can I do for you uwu \\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" + \"Type \u0027help\u0027 to see the list of commands.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" private static final String HELP_MESSAGE \u003d \"Here are the list of commands:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" + \"todo \u003cdescription\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" + \"deadline \u003cdescription\u003e /by \u003cdate\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" + \"event \u003cdescription\u003e /from \u003cdate\u003e /to \u003cdate\u003e \\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" + \"delete \u003cindex\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" + \"mark \u003cindex\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" + \"unmark \u003cindex\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" + \"find \u003ckeyword\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" + \"list\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" + \"help\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" + \"bye\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" public static String BYE_MESSAGE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" public static final String ADD_TASK_MESSAGE \u003d \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" + \"\\t%s\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" + \"Now you have %d tasks in the list.\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" public static final String DELETE_TASK_MESSAGE \u003d \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" + \"\\t%s\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" + \"Now you have %d tasks in the list.\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" public static final String MARK_TASK_MESSAGE \u003d \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" + \"\\t%s\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" public static final String UNMARK_TASK_MESSAGE \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" + \"\\t%s\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" public static final String NO_MATCHING_TASKS_MESSAGE \u003d \"There are no matching tasks in your list.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" public static final String FIND_TASK_MESSAGE \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" public static final String NO_TASKS_MESSAGE \u003d \"There are no tasks in your list.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" public static final String LIST_TASK_MESSAGE \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" public static final String LOADING_ERROR_MESSAGE \u003d \"The file system experienced an unexpected error.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" private StringBuilder output \u003d null;","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" public Ui() {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" output \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" * Resets the output.","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" public void resetOutput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" output.setLength(0);","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" * Returns the output.","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" * @return The output.","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" public String getOutput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" return output.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":" * Appends the given string to the output.","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":" * @param str The string to be appended.","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" private void addToOutput(String str) {","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" output.append(str);","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" * Prints a success message after a task is successfully added to the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":" * @param size Current size of list after addition.","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":" public void printAddSuccessMessage(Task task, int size) {","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"joeng03"},"content":" addToOutput(String.format(ADD_TASK_MESSAGE, task, size));","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"joeng03"},"content":" * Prints a success message after a task is deleted from to the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"joeng03"},"content":" * @param task Task deleted from list.","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"joeng03"},"content":" * @param size Current size of list after deletion.","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"joeng03"},"content":" public void printDeleteSuccessMessage(Task task, int size) {","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"joeng03"},"content":" addToOutput(String.format(DELETE_TASK_MESSAGE, task, size));","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"joeng03"},"content":" * Prints a success message after a task is marked as done.","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"joeng03"},"content":" * @param task","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"joeng03"},"content":" * @param size","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"joeng03"},"content":" public void printMarkSuccessMessage(Task task, int size) {","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"joeng03"},"content":" addToOutput(String.format(MARK_TASK_MESSAGE, task, size));","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"joeng03"},"content":" * Prints a success message after a task is marked as not done yet.","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"joeng03"},"content":" * @param task","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"joeng03"},"content":" * @param size","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"joeng03"},"content":" public void printUnmarkSuccessMessage(Task task, int size) {","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"joeng03"},"content":" addToOutput(String.format(UNMARK_TASK_MESSAGE, task, size));","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"joeng03"},"content":" * Prints a success message after a task is found.","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"joeng03"},"content":" * @param tasks List of tasks found.","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"joeng03"},"content":" public void printFindSuccessMessage(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"joeng03"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"joeng03"},"content":" addToOutput(NO_MATCHING_TASKS_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":122,"author":{"gitId":"joeng03"},"content":" return;","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"joeng03"},"content":" printList(tasks, FIND_TASK_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":126,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"joeng03"},"content":" * Prints the list of tasks.","lastModifiedDate":"2023-09-14"},{"lineNumber":129,"author":{"gitId":"joeng03"},"content":" * @param tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":130,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":131,"author":{"gitId":"joeng03"},"content":" public void printList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":132,"author":{"gitId":"joeng03"},"content":" printList(tasks, LIST_TASK_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":133,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":134,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":136,"author":{"gitId":"joeng03"},"content":" * Prints the given list with formatting.","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"joeng03"},"content":" * @param tasks List of tasks to be printed.","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"joeng03"},"content":" * @param message The message to be printed before printing the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"joeng03"},"content":" public void printList(List\u003cTask\u003e tasks, String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":142,"author":{"gitId":"joeng03"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"joeng03"},"content":" addToOutput(NO_TASKS_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":144,"author":{"gitId":"joeng03"},"content":" return;","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"joeng03"},"content":" addToOutput(message + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":147,"author":{"gitId":"joeng03"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":148,"author":{"gitId":"joeng03"},"content":" int oneBasedIndex \u003d i + 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":149,"author":{"gitId":"joeng03"},"content":" String formattedOutput \u003d String.format(\"%d. %s\\n\", oneBasedIndex, tasks.get(i));","lastModifiedDate":"2023-09-07"},{"lineNumber":150,"author":{"gitId":"joeng03"},"content":" addToOutput(formattedOutput);","lastModifiedDate":"2023-09-07"},{"lineNumber":151,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":152,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":154,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":155,"author":{"gitId":"joeng03"},"content":" * Prints the welcome message.","lastModifiedDate":"2023-09-07"},{"lineNumber":156,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":157,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":158,"author":{"gitId":"joeng03"},"content":" public String printWelcomeMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":159,"author":{"gitId":"joeng03"},"content":" return WELCOME_MESSAGE;","lastModifiedDate":"2023-09-14"},{"lineNumber":160,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":161,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":162,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":163,"author":{"gitId":"joeng03"},"content":" * Prints the exit message.","lastModifiedDate":"2023-09-07"},{"lineNumber":164,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":165,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":166,"author":{"gitId":"joeng03"},"content":" public void printExitMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":167,"author":{"gitId":"joeng03"},"content":" addToOutput(BYE_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":168,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":169,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":170,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":171,"author":{"gitId":"joeng03"},"content":" * Prints the help message.","lastModifiedDate":"2023-09-07"},{"lineNumber":172,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":173,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":174,"author":{"gitId":"joeng03"},"content":" public void printHelpMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":175,"author":{"gitId":"joeng03"},"content":" addToOutput(HELP_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":176,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":177,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":178,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":179,"author":{"gitId":"joeng03"},"content":" * Prints the loading error message.","lastModifiedDate":"2023-09-07"},{"lineNumber":180,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":181,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":182,"author":{"gitId":"joeng03"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-07"},{"lineNumber":183,"author":{"gitId":"joeng03"},"content":" addToOutput(LOADING_ERROR_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":184,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":185,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":186,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":187,"author":{"gitId":"joeng03"},"content":" * Prints a given message with formatting.","lastModifiedDate":"2023-09-07"},{"lineNumber":188,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":189,"author":{"gitId":"joeng03"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-07"},{"lineNumber":190,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":191,"author":{"gitId":"joeng03"},"content":" public void print(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":192,"author":{"gitId":"joeng03"},"content":" addToOutput(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":193,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":195}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.text.Text?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"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\" stylesheets\u003d\"/css/DialogBox.css\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" \u003cText fx:id\u003d\"dialog\" styleClass\u003d\"text\"/\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"joeng03"},"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":12,"author":{"gitId":"joeng03"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"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\"linus.gui.MainWindow\" stylesheets\u003d\"/css/MainWindow.css\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"joeng03"},"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":"joeng03"},"content":" \u003cButton fx:id\u003d\"sendButton\" styleClass\u003d\"send-button\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"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":"joeng03"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":19}},{"path":"src/test/java/linus/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" public void add_addDifferentNewTasks_newTasksSuccesfullyAddedInOrder() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" Task toDo \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" Task deadline \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" Task event \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" toDo \u003d new ToDo(\"task 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" tasks.add(toDo);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" deadline \u003d new Deadline(\"task 2\", \"2023-08-31\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" event \u003d new Event(\"task 3\", \"2023-08-31\", \"2023-09-01\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" // length of TaskList is 3","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" List\u003cTask\u003e listOfTasks \u003d tasks.getList();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" assertEquals(3, listOfTasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" // the tasks are at their respective indices according to insertion order","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" assertEquals(toDo, listOfTasks.get(0));","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" assertEquals(deadline, listOfTasks.get(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" assertEquals(event, listOfTasks.get(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" } catch (LinusException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" fail(\"LinusException thrown while executing the test case\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":43}},{"path":"src/test/java/linus/util/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.util;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import linus.storage.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"import linus.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" public static final String SERIALIZED_LIST \u003d \"[\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" + \"{\u0027type\u0027:\u0027linus.task.ToDo\u0027,\u0027description\u0027:\u0027task 1\u0027, \u0027isDone\u0027:false},\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" + \"{\u0027type\u0027:\u0027linus.task.Deadline\u0027,\u0027description\u0027:\u0027task 2\u0027,\u0027isDone\u0027:false,\u0027by\u0027:\u00272023-08-31\u0027},\"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" + \"{\u0027type\u0027:\u0027linus.task.Event\u0027,\u0027description\u0027:\u0027task 3\u0027,\u0027isDone\u0027:false,\u0027from\u0027:\u00272023-08-31\u0027,\u0027to\u0027:\u00272023-09-01\u0027}\"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" + \"]\";","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" public void load_loadTextFile_objectsSuccessfullyDeserialized() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" FileWriter fileWriter \u003d new FileWriter(\"data/linus_test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" fileWriter.write(SERIALIZED_LIST);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" Storage storage \u003d new Storage(\"data/linus_test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" List\u003cTask\u003e tasks \u003d storage.load();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" assertEquals(3, tasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" assertEquals(\"[T][ ] task 1\", tasks.get(0).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" assertEquals(\"[D][ ] task 2 (by: Aug 31 2023)\", tasks.get(1).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" assertEquals(\"[E][ ] task 3 (from: Aug 31 2023 to: Sep 1 2023)\", tasks.get(2).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" fail(\"IOException thrown while executing the test case\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" } catch (LinusException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" fail(\"LinusException thrown while executing the test case\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":43}}] +[{"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":"joeng03"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"javafx {","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" version \u003d \"20\"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-07"},{"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":"joeng03"},"content":" implementation \u0027com.google.code.gson:gson:2.10.1\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" mainClass.set(\"linus.Launcher\")","lastModifiedDate":"2023-09-07"},{"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":"joeng03"},"content":" archiveBaseName \u003d \"linus\"","lastModifiedDate":"2023-08-31"},{"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":"joeng03"},"content":"jar {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" enabled \u003d true","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"-":42,"joeng03":32}},{"path":"data/linus.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"[{\"type\":\"linus.task.ToDo\",\"description\":\"TEST\",\"isDone\":true,\"createdOn\":\"2023-09-16\"},{\"type\":\"linus.task.ToDo\",\"description\":\"TEST\",\"isDone\":false,\"createdOn\":\"2023-09-16\"},{\"type\":\"linus.task.ToDo\",\"description\":\"TEST2\",\"isDone\":false,\"createdOn\":\"2023-09-16\"}]","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"joeng03":1}},{"path":"data/linus_test.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"[{\u0027type\u0027:\u0027linus.task.ToDo\u0027,\u0027description\u0027:\u0027task 1\u0027, \u0027isDone\u0027:false},{\u0027type\u0027:\u0027linus.task.Deadline\u0027,\u0027description\u0027:\u0027task 2\u0027,\u0027isDone\u0027:false,\u0027by\u0027:\u00272023-08-31\u0027},{\u0027type\u0027:\u0027linus.task.Event\u0027,\u0027description\u0027:\u0027task 3\u0027,\u0027isDone\u0027:false,\u0027from\u0027:\u00272023-08-31\u0027,\u0027to\u0027:\u00272023-09-01\u0027}]","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"joeng03":1}},{"path":"src/main/java/linus/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":13}},{"path":"src/main/java/linus/Linus.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import linus.storage.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import linus.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import linus.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import linus.task.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import linus.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import linus.util.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import linus.util.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" * Represents a Linus Chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":"public class Linus {","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" private static final String FILE_PATH \u003d \"data/linus.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" private static final String STATS_COMMAND_REGEX \u003d","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" \"/duration (\\\\d+)\"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" + \"( /task (todo|deadline|event))?\"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" + \"( /done)?\";","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" private static enum Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" LIST,","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" MARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" UNMARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" DELETE,","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" FIND,","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" DEADLINE,","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" STATS,","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" HELP,","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" BYE","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" private Storage storage \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" private TaskList tasks \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" private Ui ui \u003d null;","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" * Constructs a Linus Chatbot with the default file path.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" public Linus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" this(FILE_PATH);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" * Constructs a Linus Chatbot with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" * @param filePath The file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" public Linus(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" } catch (LinusException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":" public String toString() {","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" return ui.printWelcomeMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" ui.resetOutput();","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" String[] items \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" int index \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" String[] commandAndData \u003d Parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":" String command \u003d commandAndData[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"joeng03"},"content":" String data \u003d commandAndData[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"joeng03"},"content":" switch (Command.valueOf(command.toUpperCase())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"joeng03"},"content":" case BYE:","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"joeng03"},"content":" ui.printExitMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"joeng03"},"content":" case HELP:","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"joeng03"},"content":" ui.printHelpMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"joeng03"},"content":" case LIST:","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"joeng03"},"content":" ui.printList(tasks.getList(), \"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"joeng03"},"content":" case MARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"joeng03"},"content":" index \u003d Integer.parseInt(data) - 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"joeng03"},"content":" tasks.mark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"joeng03"},"content":" ui.printMarkSuccessMessage(tasks.get(index), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"joeng03"},"content":" case UNMARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"joeng03"},"content":" index \u003d Integer.parseInt(data) - 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"joeng03"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"joeng03"},"content":" ui.printUnmarkSuccessMessage(tasks.get(index), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"joeng03"},"content":" case DELETE:","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"joeng03"},"content":" index \u003d Integer.parseInt(data) - 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"joeng03"},"content":" tasks.delete(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"joeng03"},"content":" ui.printDeleteSuccessMessage(tasks.get(index), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"joeng03"},"content":" case FIND:","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"joeng03"},"content":" ui.printFindSuccessMessage(tasks.find(data));","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"joeng03"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"joeng03"},"content":" if (data \u003d\u003d \"\") {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"joeng03"},"content":" description \u003d data;","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"joeng03"},"content":" tasks.add(new ToDo(description));","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"joeng03"},"content":" ui.printAddSuccessMessage(tasks.get(tasks.getList().size() - 1), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"joeng03"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"joeng03"},"content":" items \u003d data.split(\" /by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"joeng03"},"content":" if (items.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"joeng03"},"content":" throw new LinusException(","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"joeng03"},"content":" \"☹ OOPS!!! Please specify the deadline in the correct format: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"joeng03"},"content":" + \"deadline \u003cdescription\u003e /by \u003cdate\u003e\"","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"joeng03"},"content":" description \u003d items[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"joeng03"},"content":" String by \u003d items[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"joeng03"},"content":" tasks.add(new Deadline(description, by));","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"joeng03"},"content":" ui.printAddSuccessMessage(tasks.get(tasks.getList().size() - 1), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"joeng03"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"joeng03"},"content":" items \u003d data.split(\" /from | /to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"joeng03"},"content":" if (items.length !\u003d 3) {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"joeng03"},"content":" throw new LinusException(","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"joeng03"},"content":" \"☹ OOPS!!! Please specify the event in the correct format: \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"joeng03"},"content":" + \"event \u003cdescription\u003e /from \u003cdate\u003e /to \u003cdate\u003e\"","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"joeng03"},"content":" description \u003d items[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"joeng03"},"content":" String from \u003d items[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"joeng03"},"content":" String to \u003d items[2];","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"joeng03"},"content":" tasks.add(new Event(description, from, to));","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"joeng03"},"content":" ui.printAddSuccessMessage(tasks.get(tasks.getList().size() - 1), tasks.getList().size());","lastModifiedDate":"2023-09-07"},{"lineNumber":150,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"joeng03"},"content":" case STATS:","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"joeng03"},"content":" Pattern pattern \u003d Pattern.compile(STATS_COMMAND_REGEX);","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"joeng03"},"content":" Matcher matcher \u003d pattern.matcher(data);","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"joeng03"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"joeng03"},"content":" int duration \u003d Integer.parseInt(matcher.group(1));","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"joeng03"},"content":" String taskType \u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"joeng03"},"content":" if (matcher.group(2) !\u003d null) {","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"joeng03"},"content":" taskType \u003d matcher.group(3);","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"joeng03"},"content":" boolean isFilterByDone \u003d matcher.group(4) !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"joeng03"},"content":" ui.printStats(tasks.showStats(duration, taskType, isFilterByDone));","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"joeng03"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"joeng03"},"content":" throw new LinusException(","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"joeng03"},"content":" \"☹ OOPS!!! Please specify the stats in the correct format: \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"joeng03"},"content":" + \"stats /duration \u003cnumber of days\u003e /task \u003ctaskType\u003e /done \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"joeng03"},"content":" + \"where /task \u003ctaskType\u003e and /done are optional\"","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"joeng03"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"joeng03"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"joeng03"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"joeng03"},"content":" storage.store(tasks.getList());","lastModifiedDate":"2023-09-07"},{"lineNumber":175,"author":{"gitId":"joeng03"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"joeng03"},"content":" ui.print(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":177,"author":{"gitId":"joeng03"},"content":" + \"Please start your inputs with a valid command.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"joeng03"},"content":" } catch (LinusException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"joeng03"},"content":" ui.print(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":180,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"joeng03"},"content":" return ui.getOutput();","lastModifiedDate":"2023-09-07"},{"lineNumber":182,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":183,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":184}},{"path":"src/main/java/linus/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import linus.gui.MainWindow;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" * A GUI for Linus using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" private Linus linus \u003d new Linus();","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setLinus(linus);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":32}},{"path":"src/main/java/linus/exception/LinusException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":" * Represents a LinusException.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"public class LinusException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":" * Constructs a new LinusException with the specified detail message.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" * @param message The detail message (which is saved for later retrieval by the Throwable.getMessage() method)","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":" public LinusException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":15}},{"path":"src/main/java/linus/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.gui;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"import javafx.scene.text.Text;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"joeng03"},"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":21,"author":{"gitId":"joeng03"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" private Text dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" clipImage(displayPicture);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" * Clips the image to a circle.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" private void clipImage(ImageView picture) {","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" Circle clip \u003d new Circle(picture.getFitWidth() / 2, picture.getFitHeight() / 2,","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" Math.min(picture.getFitWidth(), picture.getFitHeight()) / 2);","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" picture.setClip(clip);","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":74}},{"path":"src/main/java/linus/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.gui;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"import linus.Linus;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"import linus.util.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" private Linus linus;","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Ayaya.gif\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" private Image linusImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Linus.jpg\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" private Image sendIcon \u003d new Image(this.getClass().getResourceAsStream(\"/images/sendIcon.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" * Initializes the MainWindow.","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" ImageView sendIconImageView \u003d new ImageView(sendIcon);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" sendIconImageView.setPreserveRatio(true);","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" sendIconImageView.setFitWidth(sendButton.getPrefWidth() * 0.8);","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" sendIconImageView.setFitHeight(sendButton.getPrefHeight() * 0.8);","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" sendButton.setGraphic(sendIconImageView);","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" * Sets the Linus object.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" * @param linus The Linus object.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" public void setLinus(Linus linus) {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" this.linus \u003d linus;","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" DialogBox.getDukeDialog(linus.toString(), linusImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Linus\u0027s reply and then appends them to","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":" String response \u003d linus.getResponse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" DialogBox.getDukeDialog(response, linusImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":" if (response.equals(Ui.BYE_MESSAGE)) {","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" PauseTransition pause \u003d new PauseTransition(Duration.seconds(1.5));","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":" pause.setOnFinished(event -\u003e Platform.exit());","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" pause.play();","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":81}},{"path":"src/main/java/linus/storage/LocalDateTypeAdapter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.lang.reflect.Type;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonDeserializationContext;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonDeserializer;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonElement;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonPrimitive;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonSerializationContext;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonSerializer;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" * Represents a LocalDateTypeAdapter object that implements JsonSerializer and JsonDeserializer.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" * @see \u003ca href\u003d\"https://howtodoinjava.com/gson/gson-typeadapter-for-inaccessibleobjectexception/\"\u003eGSON Type Adapter\u003c/a\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":"public class LocalDateTypeAdapter implements JsonSerializer\u003cLocalDate\u003e, JsonDeserializer\u003cLocalDate\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" * Gson invokes this call-back method during serialization when it encounters a field of the specified type.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" * @param date the object that needs to be converted to Json.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" * @param typeOfSrc the actual type (fully genericized version) of the source object.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" * @param context","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" * @return A JsonElement corresponding to the specified object.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" public JsonElement serialize(final LocalDate date, final Type typeOfSrc,","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" final JsonSerializationContext context) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" return new JsonPrimitive(date.format(formatter));","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" * Gson invokes this call-back method during deserialization when it encounters a field of the specified type.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" * @param json The Json data being deserialized.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" * @param typeOfT The type of the Object to deserialize to.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" * @param context","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" * @return LocalDate","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" * @throws JsonParseException","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" public LocalDate deserialize(final JsonElement json, final Type typeOfT,","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" final JsonDeserializationContext context) throws JsonParseException {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" return LocalDate.parse(json.getAsString(), formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":53}},{"path":"src/main/java/linus/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import com.google.gson.Gson;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"import com.google.gson.GsonBuilder;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"import com.google.gson.reflect.TypeToken;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":"import linus.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":"import linus.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":"import linus.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":"import linus.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" * Represents a storage for the list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" private Gson gson \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" private File file \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" private String filePath \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" * @param filePath The file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" * Loads the list of tasks from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" public List\u003cTask\u003e load() throws LinusException {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" Path path \u003d Paths.get(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" String json \u003d Files.readString(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" // Deserialize the Json String into an ArrayList of Tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" TaskDeserializer deserializer \u003d new TaskDeserializer(\"type\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" deserializer.registerTaskType(\"linus.task.ToDo\", ToDo.class);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" deserializer.registerTaskType(\"linus.task.Deadline\", Deadline.class);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" deserializer.registerTaskType(\"linus.task.Event\", Event.class);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" gson \u003d new GsonBuilder()","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" .registerTypeAdapter(Task.class, deserializer)","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" .create();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" List\u003cTask\u003e tasks \u003d gson.fromJson(json, new TypeToken\u003cArrayList\u003cTask\u003e\u003e() {}.getType());","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" if (tasks \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"The file system experienced an unexpected error.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" * Stores the list of tasks into the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":" public void store(List\u003cTask\u003e tasks) throws LinusException {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" gson \u003d new GsonBuilder()","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" .registerTypeAdapter(LocalDate.class, new LocalDateTypeAdapter())","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" .create();","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" String json \u003d gson.toJson(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"joeng03"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"joeng03"},"content":" fileWriter.write(json);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"joeng03"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"joeng03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"The file system experienced an unexpected error.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":90}},{"path":"src/main/java/linus/storage/TaskDeserializer.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.lang.reflect.Type;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import com.google.gson.Gson;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import com.google.gson.GsonBuilder;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonDeserializationContext;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonDeserializer;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonElement;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import com.google.gson.JsonObject;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"import linus.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" * Represents a TaskDeserializer object that implements JsonDeserializer.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" * @see \u003ca href\u003d\"https://www.baeldung.com/gson-list\"\u003eGSON List\u003c/a\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":"public class TaskDeserializer implements JsonDeserializer\u003cTask\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" private String taskTypeElementName;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" private Gson gson;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" private Map\u003cString, Class\u003c? extends Task\u003e\u003e taskTypeRegistry;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" * Constructs a TaskDeserializer object with the specified task type element name.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" * @param taskTypeElementName The task type element name.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" public TaskDeserializer(String taskTypeElementName) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" this.taskTypeElementName \u003d taskTypeElementName;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" this.gson \u003d new GsonBuilder().registerTypeAdapter(LocalDate.class, new LocalDateTypeAdapter()).create();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" this.taskTypeRegistry \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" * Registers a task type with the specified task type name and task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" * @param taskTypeName The task type name.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" * @param taskType The task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" public void registerTaskType(String taskTypeName, Class\u003c? extends Task\u003e taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" taskTypeRegistry.put(taskTypeName, taskType);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" * Deserializes the specified Json element into a Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" * @param json The Json element.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" * @param typeOfT The type of the Object to deserialize to.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" * @param context","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" * @return The deserialized Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" public Task deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" JsonObject taskObject \u003d json.getAsJsonObject();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" JsonElement taskTypeElement \u003d taskObject.get(taskTypeElementName);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" Class\u003c? extends Task\u003e taskType \u003d taskTypeRegistry.get(taskTypeElement.getAsString());","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" return gson.fromJson(taskObject, taskType);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":63}},{"path":"src/main/java/linus/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" protected String type \u003d \"linus.task.Deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" protected LocalDate by \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" * Constructs a Deadline object with the specified description and deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" public Deadline(String description, String by) throws LinusException {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" setDate(by);","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" * Sets the deadline of the task.","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" * @param by","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" private void setDate(String by) throws LinusException {","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"☹ OOPS!!! Please specify the deadline in the correct format: yyyy-mm-dd\");","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" * Returns the icon representing the type of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" * @return The icon representing the type of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" public String getTaskTypeIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" return \"[D]\";","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" * Returns a String representation of the Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" * @return A String representation of the Deadline object.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" assert this.by !\u003d null : \"Deadline object should have non-null deadline.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" return super.toString() + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":62}},{"path":"src/main/java/linus/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" * Represents an Event task.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" protected String type \u003d \"linus.task.Event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" protected LocalDate from \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" protected LocalDate to \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" * Constructs an Event object with the specified description, start date and end date.","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" * @param from The start date of the event.","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" * @param to The end date of the event.","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" public Event(String description, String from, String to) throws LinusException {","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" super(description);","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" setDate(from, to);","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" * Sets the start date and end date of the event.","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" * @param from","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" * @param to","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" private void setDate(String from, String to) throws LinusException {","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" LocalDate parsedFromDate \u003d LocalDate.parse(from);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" LocalDate parsedToDate \u003d LocalDate.parse(to);","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" if (parsedFromDate.isAfter(parsedToDate)) {","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" throw new LinusException(","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" \"☹ OOPS!!! Please specify the start date before/on the same day as the end date.\"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" this.from \u003d parsedFromDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" this.to \u003d parsedToDate;","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" throw new LinusException(","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" \"☹ OOPS!!! Please specify the start and/or end dates in the correct format: yyyy-mm-dd\"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" * Returns the icon representing the type of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":" * @return The icon representing the type of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" public String getTaskTypeIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" return \"[E]\";","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" * Returns a String representation of the Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" * @return A String representation of the Event object.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" assert this.from !\u003d null \u0026\u0026 this.to !\u003d null : \"Event object should have non-null start and end dates.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" return super.toString()","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" + \" (from: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" + this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":" + \" to: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" + this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":" + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":84,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":84}},{"path":"src/main/java/linus/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":" * Represents a Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":" protected LocalDate createdOn;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" * Constructs a Task object with the specified description.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" this.createdOn \u003d LocalDate.now();","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" return this.isDone;","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" public void mark() {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" * Unmarks the task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" public void unmark() {","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done linus.task with X","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" public abstract String getTaskTypeIcon();","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" assert this.description !\u003d null : \"Task object should have non-null description.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" return this.getTaskTypeIcon()","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" + this.getStatusIcon() + \" \"","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":58}},{"path":"src/main/java/linus/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"import javafx.util.Pair;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" private List\u003cTask\u003e tasks \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" * Constructs a TaskList object with an empty list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" * Constructs a TaskList object with the specified list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" public List\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" return this.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" public int size() {","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" return tasks.size();","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" * @param index The index of the task to be returned.","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" * Adds the specified task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" assert tasks.contains(task) : \"Task should be in list.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" * Deletes the task at the specified index from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" public void delete(int index) throws LinusException {","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"Cannot delete task. Please provide a valid index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"joeng03"},"content":" tasks.remove(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"joeng03"},"content":" assert !tasks.contains(task) : \"Task should not be in list.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"joeng03"},"content":" * Marks the task at the specified index as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"joeng03"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"joeng03"},"content":" public void mark(int index) throws LinusException {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"joeng03"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"Cannot mark task. Please provide a valid index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"joeng03"},"content":" tasks.get(index).mark();","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"joeng03"},"content":" assert tasks.get(index).isDone : \"Task should be marked as done.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"joeng03"},"content":" * Unmarks the task at the specified index as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"joeng03"},"content":" * @param index The index of the task to be unmarked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"joeng03"},"content":" * @throws LinusException","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"joeng03"},"content":" public void unmark(int index) throws LinusException {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"joeng03"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"joeng03"},"content":" throw new LinusException(\"Cannot unmark task. Please provide a valid index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"joeng03"},"content":" tasks.get(index).unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"joeng03"},"content":" assert !tasks.get(index).isDone : \"Task should be marked as not done.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"joeng03"},"content":" * Finds and prints the tasks that contain the specified keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"joeng03"},"content":" * @param keyword The keyword to be searched for.","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"joeng03"},"content":" public List\u003cTask\u003e find(String keyword) {","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"joeng03"},"content":" return tasks.stream()","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"joeng03"},"content":" .filter(task -\u003e task.description.contains(keyword))","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"joeng03"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"joeng03"},"content":" * Computes the statistics of the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"joeng03"},"content":" * @param duration","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"joeng03"},"content":" * @param taskType","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"joeng03"},"content":" * @param isFilterByDone","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"joeng03"},"content":" * @return A list of pairs of (LocalDate, Integer), which indicates","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"joeng03"},"content":" * the number of tasks on a given date.","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"joeng03"},"content":" public List\u003cPair\u003cLocalDate, Integer\u003e\u003e showStats(int duration, String taskType, boolean isFilterByDone) {","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"joeng03"},"content":" List\u003cTask\u003e filteredTasks \u003d tasks;","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"joeng03"},"content":" // Filter by and isMarked","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"joeng03"},"content":" if (taskType !\u003d null) {","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"joeng03"},"content":" filteredTasks \u003d filteredTasks.stream()","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"joeng03"},"content":" .filter(task -\u003e task.getClass().getSimpleName().toLowerCase().equals(taskType))","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"joeng03"},"content":" .filter(task -\u003e !isFilterByDone || task.isDone())","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"joeng03"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"joeng03"},"content":" List\u003cPair\u003cLocalDate, Integer\u003e\u003e stats \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"joeng03"},"content":" for (int i \u003d duration - 1; i \u003e\u003d 0; i--) {","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"joeng03"},"content":" stats.add(new Pair\u003c\u003e(LocalDate.now().minusDays(i), 0));","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"joeng03"},"content":" LocalDate firstDay \u003d LocalDate.now().minusDays(duration - 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"joeng03"},"content":" for (Task task : filteredTasks) {","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"joeng03"},"content":" long index \u003d ChronoUnit.DAYS.between(firstDay, task.createdOn);","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"joeng03"},"content":" if (index \u003c 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"joeng03"},"content":" continue;","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"joeng03"},"content":" stats.set((int) index, new Pair\u003c\u003e(task.createdOn, stats.get((int) index).getValue() + 1));","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"joeng03"},"content":" return stats;","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":161}},{"path":"src/main/java/linus/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":" protected String type \u003d \"linus.task.ToDo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" * Constructs a ToDo object with the specified description.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" * Returns the icon representing the type of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" * @return The icon representing the type of task.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" public String getTaskTypeIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" return \"[T]\";","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"joeng03":29}},{"path":"src/main/java/linus/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.util;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":" * Represents a Parser.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":" * A Parser object deals with making sense of the user command.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" * Parses the input string into a command and data.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":" * @param input The input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" * @return A string of size 2 containing the command and data.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" public static String[] parse(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" String[] inputSplit \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" String command \u003d inputSplit[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" String data \u003d inputSplit.length \u003d\u003d 2 ? inputSplit[1] : \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" return new String[]{command, data};","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":21}},{"path":"src/main/java/linus/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.util;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import java.util.List;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import javafx.util.Pair;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import linus.task.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" * Represents a Ui.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":" * A Ui object deals with interactions with the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" public static final String BYE_MESSAGE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" private static final String ADD_TASK_MESSAGE \u003d \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" + \"\\t%s\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" + \"Now you have %d tasks in the list.\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" private static final String DELETE_TASK_MESSAGE \u003d \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" + \"\\t%s\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" + \"Now you have %d tasks in the list.\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" private static final String MARK_TASK_MESSAGE \u003d \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":" + \"\\t%s\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" private static final String UNMARK_TASK_MESSAGE \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" + \"\\t%s\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" private static final String NO_MATCHING_TASKS_MESSAGE \u003d \"There are no matching tasks in your list.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" private static final String FIND_TASK_MESSAGE \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" private static final String NO_TASKS_MESSAGE \u003d \"There are no tasks in your list.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" private static final String LIST_TASK_MESSAGE \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" private static final String STATS_MESSAGE \u003d \"Your tasks for the past %d days: \\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" private static final String LOADING_ERROR_MESSAGE \u003d \"The file system experienced an unexpected error.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" private static final String WELCOME_MESSAGE \u003d \"Hello from Linus!! \\n \"","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" + \"What can I do for you uwu \\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" + \"Type \u0027help\u0027 to see the list of commands.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" private static final String HELP_MESSAGE \u003d \"Here are the list of commands:\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" + \"todo \u003cdescription\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" + \"deadline \u003cdescription\u003e /by \u003cdate\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" + \"event \u003cdescription\u003e /from \u003cdate\u003e /to \u003cdate\u003e \\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":" + \"delete \u003cindex\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":" + \"mark \u003cindex\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"joeng03"},"content":" + \"unmark \u003cindex\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"joeng03"},"content":" + \"find \u003ckeyword\u003e\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"joeng03"},"content":" + \"list\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"joeng03"},"content":" + \"help\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"joeng03"},"content":" + \"bye\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"joeng03"},"content":" private StringBuilder output \u003d null;","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"joeng03"},"content":" public Ui() {","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"joeng03"},"content":" output \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"joeng03"},"content":" * Resets the output.","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"joeng03"},"content":" public void resetOutput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"joeng03"},"content":" output.setLength(0);","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"joeng03"},"content":" * Returns the output.","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"joeng03"},"content":" * @return The output.","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"joeng03"},"content":" public String getOutput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"joeng03"},"content":" return output.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"joeng03"},"content":" * Appends the given string to the output.","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"joeng03"},"content":" * @param str The string to be appended.","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"joeng03"},"content":" private void addToOutput(String str) {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"joeng03"},"content":" output.append(str);","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"joeng03"},"content":" * Prints a success message after a task is successfully added to the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"joeng03"},"content":" * @param task Task added to list.","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"joeng03"},"content":" * @param size Current size of list after addition.","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"joeng03"},"content":" public void printAddSuccessMessage(Task task, int size) {","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"joeng03"},"content":" addToOutput(String.format(ADD_TASK_MESSAGE, task, size));","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"joeng03"},"content":" * Prints a success message after a task is deleted from to the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"joeng03"},"content":" * @param task Task deleted from list.","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"joeng03"},"content":" * @param size Current size of list after deletion.","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"joeng03"},"content":" public void printDeleteSuccessMessage(Task task, int size) {","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"joeng03"},"content":" addToOutput(String.format(DELETE_TASK_MESSAGE, task, size));","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"joeng03"},"content":" * Prints a success message after a task is marked as done.","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"joeng03"},"content":" * @param task","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"joeng03"},"content":" * @param size","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"joeng03"},"content":" public void printMarkSuccessMessage(Task task, int size) {","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"joeng03"},"content":" addToOutput(String.format(MARK_TASK_MESSAGE, task, size));","lastModifiedDate":"2023-09-14"},{"lineNumber":108,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"joeng03"},"content":" * Prints a success message after a task is marked as not done yet.","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"joeng03"},"content":" * @param task","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"joeng03"},"content":" * @param size","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"joeng03"},"content":" public void printUnmarkSuccessMessage(Task task, int size) {","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"joeng03"},"content":" addToOutput(String.format(UNMARK_TASK_MESSAGE, task, size));","lastModifiedDate":"2023-09-14"},{"lineNumber":118,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"joeng03"},"content":" * Prints a success message after a task is found.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"joeng03"},"content":" * @param tasks List of tasks found.","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"joeng03"},"content":" public void printFindSuccessMessage(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"joeng03"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"joeng03"},"content":" addToOutput(NO_MATCHING_TASKS_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"joeng03"},"content":" return;","lastModifiedDate":"2023-09-14"},{"lineNumber":129,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"joeng03"},"content":" printList(tasks, FIND_TASK_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":131,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":132,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":133,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":134,"author":{"gitId":"joeng03"},"content":" * Prints the list of tasks.","lastModifiedDate":"2023-09-14"},{"lineNumber":135,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"joeng03"},"content":" * @param tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":137,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":138,"author":{"gitId":"joeng03"},"content":" public void printList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-14"},{"lineNumber":139,"author":{"gitId":"joeng03"},"content":" printList(tasks, LIST_TASK_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":140,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":142,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"joeng03"},"content":" * Prints the given list with formatting.","lastModifiedDate":"2023-09-07"},{"lineNumber":144,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":145,"author":{"gitId":"joeng03"},"content":" * @param tasks List of tasks to be printed.","lastModifiedDate":"2023-09-07"},{"lineNumber":146,"author":{"gitId":"joeng03"},"content":" * @param message The message to be printed before printing the list.","lastModifiedDate":"2023-09-07"},{"lineNumber":147,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":148,"author":{"gitId":"joeng03"},"content":" public void printList(List\u003cTask\u003e tasks, String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":149,"author":{"gitId":"joeng03"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"joeng03"},"content":" addToOutput(NO_TASKS_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":151,"author":{"gitId":"joeng03"},"content":" return;","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"joeng03"},"content":" addToOutput(message + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":154,"author":{"gitId":"joeng03"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":155,"author":{"gitId":"joeng03"},"content":" int oneBasedIndex \u003d i + 1;","lastModifiedDate":"2023-09-07"},{"lineNumber":156,"author":{"gitId":"joeng03"},"content":" String formattedOutput \u003d String.format(\"%d. %s\\n\", oneBasedIndex, tasks.get(i));","lastModifiedDate":"2023-09-07"},{"lineNumber":157,"author":{"gitId":"joeng03"},"content":" addToOutput(formattedOutput);","lastModifiedDate":"2023-09-07"},{"lineNumber":158,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":159,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":160,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":161,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":162,"author":{"gitId":"joeng03"},"content":" * Prints the statistics of tasks number of tasks per day).","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":164,"author":{"gitId":"joeng03"},"content":" * @param stats","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"joeng03"},"content":" public void printStats(List\u003cPair\u003cLocalDate, Integer\u003e\u003e stats) {","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"joeng03"},"content":" addToOutput(String.format(STATS_MESSAGE, stats.size()));","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"joeng03"},"content":" for (int i \u003d 0; i \u003c stats.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"joeng03"},"content":" int oneBasedIndex \u003d i + 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"joeng03"},"content":" String formattedOutput \u003d String.format(\"%d. %s: %d\\n\", oneBasedIndex, stats.get(i).getKey(),","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"joeng03"},"content":" stats.get(i).getValue());","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"joeng03"},"content":" addToOutput(formattedOutput);","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":177,"author":{"gitId":"joeng03"},"content":" * Prints the welcome message.","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":179,"author":{"gitId":"joeng03"},"content":" public String printWelcomeMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":180,"author":{"gitId":"joeng03"},"content":" return WELCOME_MESSAGE;","lastModifiedDate":"2023-09-14"},{"lineNumber":181,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":182,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":183,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":184,"author":{"gitId":"joeng03"},"content":" * Prints the exit message.","lastModifiedDate":"2023-09-07"},{"lineNumber":185,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":186,"author":{"gitId":"joeng03"},"content":" public void printExitMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":187,"author":{"gitId":"joeng03"},"content":" addToOutput(BYE_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":188,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":189,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":190,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":191,"author":{"gitId":"joeng03"},"content":" * Prints the help message.","lastModifiedDate":"2023-09-07"},{"lineNumber":192,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":193,"author":{"gitId":"joeng03"},"content":" public void printHelpMessage() {","lastModifiedDate":"2023-09-07"},{"lineNumber":194,"author":{"gitId":"joeng03"},"content":" addToOutput(HELP_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":195,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":196,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":197,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":198,"author":{"gitId":"joeng03"},"content":" * Prints the loading error message.","lastModifiedDate":"2023-09-07"},{"lineNumber":199,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":200,"author":{"gitId":"joeng03"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-07"},{"lineNumber":201,"author":{"gitId":"joeng03"},"content":" addToOutput(LOADING_ERROR_MESSAGE);","lastModifiedDate":"2023-09-14"},{"lineNumber":202,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":203,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":204,"author":{"gitId":"joeng03"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":205,"author":{"gitId":"joeng03"},"content":" * Prints a given message with formatting.","lastModifiedDate":"2023-09-07"},{"lineNumber":206,"author":{"gitId":"joeng03"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":207,"author":{"gitId":"joeng03"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-09-07"},{"lineNumber":208,"author":{"gitId":"joeng03"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":209,"author":{"gitId":"joeng03"},"content":" public void print(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":210,"author":{"gitId":"joeng03"},"content":" addToOutput(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":211,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":213}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.text.Text?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"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\" stylesheets\u003d\"/css/DialogBox.css\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" \u003cText fx:id\u003d\"dialog\" styleClass\u003d\"text\"/\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"joeng03"},"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":12,"author":{"gitId":"joeng03"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"joeng03"},"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\"linus.gui.MainWindow\" stylesheets\u003d\"/css/MainWindow.css\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"joeng03"},"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":"joeng03"},"content":" \u003cButton fx:id\u003d\"sendButton\" styleClass\u003d\"send-button\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"joeng03"},"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":"joeng03"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"joeng03":19}},{"path":"src/test/java/linus/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":" public void add_addDifferentNewTasks_newTasksSuccesfullyAddedInOrder() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":" Task toDo \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" Task deadline \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" Task event \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" toDo \u003d new ToDo(\"task 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" tasks.add(toDo);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" deadline \u003d new Deadline(\"task 2\", \"2023-08-31\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" event \u003d new Event(\"task 3\", \"2023-08-31\", \"2023-09-01\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":" // length of TaskList is 3","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" List\u003cTask\u003e listOfTasks \u003d tasks.getList();","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" assertEquals(3, listOfTasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" // the tasks are at their respective indices according to insertion order","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" assertEquals(toDo, listOfTasks.get(0));","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" assertEquals(deadline, listOfTasks.get(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" assertEquals(event, listOfTasks.get(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" } catch (LinusException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" fail(\"LinusException thrown while executing the test case\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":43}},{"path":"src/test/java/linus/util/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"joeng03"},"content":"package linus.util;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"joeng03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"joeng03"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"joeng03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"joeng03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"joeng03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"joeng03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"joeng03"},"content":"import linus.exception.LinusException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"joeng03"},"content":"import linus.storage.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"joeng03"},"content":"import linus.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"joeng03"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"joeng03"},"content":" public static final String SERIALIZED_LIST \u003d \"[\"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"joeng03"},"content":" + \"{\u0027type\u0027:\u0027linus.task.ToDo\u0027,\u0027description\u0027:\u0027task 1\u0027, \u0027isDone\u0027:false},\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"joeng03"},"content":" + \"{\u0027type\u0027:\u0027linus.task.Deadline\u0027,\u0027description\u0027:\u0027task 2\u0027,\u0027isDone\u0027:false,\u0027by\u0027:\u00272023-08-31\u0027},\"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"joeng03"},"content":" + \"{\u0027type\u0027:\u0027linus.task.Event\u0027,\u0027description\u0027:\u0027task 3\u0027,\u0027isDone\u0027:false,\u0027from\u0027:\u00272023-08-31\u0027,\u0027to\u0027:\u00272023-09-01\u0027}\"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"joeng03"},"content":" + \"]\";","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"joeng03"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"joeng03"},"content":" public void load_loadTextFile_objectsSuccessfullyDeserialized() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"joeng03"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"joeng03"},"content":" FileWriter fileWriter \u003d new FileWriter(\"data/linus_test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"joeng03"},"content":" fileWriter.write(SERIALIZED_LIST);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"joeng03"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"joeng03"},"content":" Storage storage \u003d new Storage(\"data/linus_test.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"joeng03"},"content":" List\u003cTask\u003e tasks \u003d storage.load();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"joeng03"},"content":" assertEquals(3, tasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"joeng03"},"content":" assertEquals(\"[T][ ] task 1\", tasks.get(0).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"joeng03"},"content":" assertEquals(\"[D][ ] task 2 (by: Aug 31 2023)\", tasks.get(1).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"joeng03"},"content":" assertEquals(\"[E][ ] task 3 (from: Aug 31 2023 to: Sep 1 2023)\", tasks.get(2).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"joeng03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"joeng03"},"content":" fail(\"IOException thrown while executing the test case\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"joeng03"},"content":" } catch (LinusException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"joeng03"},"content":" fail(\"LinusException thrown while executing the test case\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"joeng03"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"joeng03"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"joeng03"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"joeng03":43}}] diff --git a/joeng03_ip_master/commits.json b/joeng03_ip_master/commits.json index 3ad39cdb..95b248e8 100644 --- a/joeng03_ip_master/commits.json +++ b/joeng03_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"joeng03":[{"date":"2023-08-21","commitResults":[{"hash":"bc7fb6066924006720a3da5d714419751e3405f6","isMergeCommit":false,"messageTitle":"feat: rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":10}}},{"hash":"bf3d9eef6ffdaff2922fc52e7fcd0ae5ee5f5f1f","isMergeCommit":false,"messageTitle":"feat: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":5}}},{"hash":"5efe723daccec969c2ec200aa381a5acad756cdd","isMergeCommit":false,"messageTitle":"feat: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":33}}},{"hash":"dfccfc6c4d87516c4e2158001e9a0f8ccd926f9c","isMergeCommit":false,"messageTitle":"feat: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":10}}},{"hash":"dfee85fdc2795ccfa8b01ed5f263d8a801b51f4e","isMergeCommit":false,"messageTitle":"feat: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":43}}},{"hash":"d4ae1e34cdcfcc3de5ae3bf433acaebc701f2427","isMergeCommit":false,"messageTitle":"test: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":3,"deletions":4},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"bcaa9dc5b71034874177a0a2df7a2d8078f141dd","isMergeCommit":false,"messageTitle":"feat: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":46}}},{"hash":"d0d2da9bc29f0d6d0f573a58e39006e34748ae5d","isMergeCommit":false,"messageTitle":"feat: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"7ca87e51f17b797d0a2fe5d3968485c5c69d8357","isMergeCommit":false,"messageTitle":"refactor: Use Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":43}}}]},{"date":"2023-08-28","commitResults":[{"hash":"08b04090b2c7522cc46771f406a29df9cf583932","isMergeCommit":false,"messageTitle":"style: Minor adjustmets to comply with the Java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":83}}},{"hash":"42b6f0f5fd760a8aded8cd92733a19675ffad0d4","isMergeCommit":false,"messageTitle":"refactor: Rename MessagePrint to MessagePrinter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"99de383e816b680d08bebb35c5c9e4f930123814","isMergeCommit":false,"messageTitle":"feat: Integrate Dates and Times into Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":12}}},{"hash":"51bd5ba077cdecf305b9cecdca3bcf844daa676d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"226aeae4cf564aa210399484e9741559a07a68b6","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/joeng03/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"aad061e52f706cdda9ce4c24b67630dcfc889d2b","isMergeCommit":false,"messageTitle":"feat: Add save tasks functionality","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":2},"txt":{"insertions":1,"deletions":0},"java":{"insertions":185,"deletions":48}}},{"hash":"0f0ab6bedd949984fd317f4e6e4c99366fdc3d1c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"4673351e2b69fcaf47f0a9b46e46770edec95cb6","isMergeCommit":false,"messageTitle":"refactor: Use OOP to refactor the codebase","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":226,"deletions":191}}},{"hash":"a8facd63f008c7181e9782a9ce274e30b9c33c73","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"c22c664469575e459d1f934036a3df958d80de31","isMergeCommit":false,"messageTitle":"fix: Gson LocalDate serialization issues","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":10,"deletions":0}}},{"hash":"ae4b3f0ff9f7de83b8b8540a30be512bd6af9c55","isMergeCommit":false,"messageTitle":"refactor: Organize classes into packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":66,"deletions":16}}},{"hash":"1d64de5adb457c572a02ab3030814abb37ce822c","isMergeCommit":true,"messageTitle":"merge branch A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"cc8a7602338a0ee182f535120abf780dc96f3b62","isMergeCommit":false,"messageTitle":"refactor: Add parent package linus","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1},"java":{"insertions":47,"deletions":41},"bat":{"insertions":1,"deletions":1}}},{"hash":"0aaf527a90cf5be9507a3988d96efe2bfdd53794","isMergeCommit":false,"messageTitle":"test: Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":88,"deletions":3}}},{"hash":"2a8beabf8a24a5b09b31004a0413ebf312d41d9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"26fff155f84d31c2e2f592051ca4d85641a86ead","isMergeCommit":false,"messageTitle":"docs: Add JavaDoc documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":0}}},{"hash":"e7bb91bfc254d79b968f725bf2b92c72284be200","isMergeCommit":false,"messageTitle":"style: Modify code to adhere to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"f45eaf4ac0ad5b0d92e78c33395188bbb9c425b9","isMergeCommit":false,"messageTitle":"feat: Add find command and functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":8}}},{"hash":"ba123db001861ebc33b092622e180d3853913f59","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"037151ca22b7fad1c66cd810615992e7b2983b68","isMergeCommit":true,"messageTitle":"merge A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"47b5ee81eecb96dc7aff9ed2dfeb5d9b20fe6b5c","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"1b1a7e3428845c4b3c9cbabb816deda5fd475c5a","isMergeCommit":false,"messageTitle":"style: Add and follow checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":162,"deletions":77}}},{"hash":"5813af5ae09b1ff10139f5136ecf42edabc9ed15","isMergeCommit":true,"messageTitle":"merge changes from A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"eed5f57fe1c8c94f6c20015bec7058b912add7a6","isMergeCommit":false,"messageTitle":"fix: Checkstyle error for find() method due to absence of JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"f75ccb0c30414ca734a02f6180073d028740c499","isMergeCommit":false,"messageTitle":"fix: Sync the taskList to disk everytime the taskList changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}}]},{"date":"2023-09-07","commitResults":[{"hash":"1b5fc1b9869f969398aaf2fc8c7f95de9bbaf7bc","isMergeCommit":false,"messageTitle":"fix: index off-by-one error for delete, mark, and unmark","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":15,"deletions":35}}},{"hash":"92dd3418b10a1d21d86cf622d2766f7c9f5ede45","isMergeCommit":false,"messageTitle":"feat: Add GUI with JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":1},"txt":{"insertions":1,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":443,"deletions":156}}},{"hash":"0fa11980c3c326d5952908e7315b134b517d6279","isMergeCommit":true,"messageTitle":"merge changes from branch-Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"fb7d15cc83667351decf0c2fa8568f0afbf417fe","isMergeCommit":false,"messageTitle":"refactor: Reorganize folders","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":14,"deletions":6}}},{"hash":"2129512018678ce83f4e0d7b00da956667022ea9","isMergeCommit":false,"messageTitle":"chore: Cleanup redundant code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":8},"java":{"insertions":25,"deletions":15},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"a79a31e8afd0dab33e399a59e62dc52c77d935eb","isMergeCommit":false,"messageTitle":"chore: Cleanup System.out.println","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-09-14","commitResults":[{"hash":"c77f472d83e45276bbeea41f09d1625f8e2c5079","isMergeCommit":false,"messageTitle":"test: Add assertions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":11,"deletions":2}}},{"hash":"432de7b59d0adc65e95d6065a7884c4bc7ab60f7","isMergeCommit":true,"messageTitle":"Merge pull request #1 from joeng03/A-Assertions","messageBody":"test: Add assertions","tags":["A-Streams","A-CodeQuality","A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"ce28a3d655c3fa2ca4b0cb16e5a551a03c98714a","isMergeCommit":false,"messageTitle":"refactor: Improve Code quality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":31,"deletions":20}}},{"hash":"21c6506f0493450714bbe8ca32c22f62907ba178","isMergeCommit":true,"messageTitle":"Merge pull request #2 from joeng03/A-CodeQuality","messageBody":"refactor: Improve Code quality","fileTypesAndContributionMap":{}},{"hash":"c0f9c26a038954e312141442af754279d1ce9dd0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from joeng03/A-Assertions","messageBody":"test: Add assertions\n","fileTypesAndContributionMap":{}},{"hash":"7aa9ce30d27ad2698de24c51a4e901742768713e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/joeng03/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"03e144cf8177649c5f7fb2f6bad0ae1dc5248644","isMergeCommit":false,"messageTitle":"fix: Checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":20}}},{"hash":"cd786cc3464948735ed5eadfeea457f049e185a4","isMergeCommit":false,"messageTitle":"refactor: organize messages as constants","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":29}}},{"hash":"ecce58b1c83efa43e1bf11b77adffbf9ba0ca1c2","isMergeCommit":false,"messageTitle":"feat:add exit functionality after user types bye command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"169f98288e1d4189d8e5812e68d7ab90e407062a","isMergeCommit":false,"messageTitle":"feat:Add exit functionality after user enters bye command","messageBody":"If the user enters the bye command,\nthe MainWindow controller detects it,\nthen responds with the exit message.\nIt then uses JavaFX PauseTransition\nto wait for 1.5 seconds before exiting.\n\nThis ensures that the window exits seamlessly\nwhile also improving user experience,\nas users could read the exit message\nbefore the window exits.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"joeng03":{"java":1232,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":32,"txt":2}},"authorContributionVariance":{"joeng03":68647.336},"authorDisplayNameMap":{"joeng03":"CS2103T-W08-4 NG Y.. JOE"}} +{"authorDailyContributionsMap":{"joeng03":[{"date":"2023-08-21","commitResults":[{"hash":"bc7fb6066924006720a3da5d714419751e3405f6","isMergeCommit":false,"messageTitle":"feat: rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":10}}},{"hash":"bf3d9eef6ffdaff2922fc52e7fcd0ae5ee5f5f1f","isMergeCommit":false,"messageTitle":"feat: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":5}}},{"hash":"5efe723daccec969c2ec200aa381a5acad756cdd","isMergeCommit":false,"messageTitle":"feat: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":33}}},{"hash":"dfccfc6c4d87516c4e2158001e9a0f8ccd926f9c","isMergeCommit":false,"messageTitle":"feat: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":10}}},{"hash":"dfee85fdc2795ccfa8b01ed5f263d8a801b51f4e","isMergeCommit":false,"messageTitle":"feat: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":120,"deletions":43}}},{"hash":"d4ae1e34cdcfcc3de5ae3bf433acaebc701f2427","isMergeCommit":false,"messageTitle":"test: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":3,"deletions":4},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"bcaa9dc5b71034874177a0a2df7a2d8078f141dd","isMergeCommit":false,"messageTitle":"feat: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":46}}},{"hash":"d0d2da9bc29f0d6d0f573a58e39006e34748ae5d","isMergeCommit":false,"messageTitle":"feat: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"7ca87e51f17b797d0a2fe5d3968485c5c69d8357","isMergeCommit":false,"messageTitle":"refactor: Use Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":43}}}]},{"date":"2023-08-28","commitResults":[{"hash":"08b04090b2c7522cc46771f406a29df9cf583932","isMergeCommit":false,"messageTitle":"style: Minor adjustmets to comply with the Java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":83}}},{"hash":"42b6f0f5fd760a8aded8cd92733a19675ffad0d4","isMergeCommit":false,"messageTitle":"refactor: Rename MessagePrint to MessagePrinter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"99de383e816b680d08bebb35c5c9e4f930123814","isMergeCommit":false,"messageTitle":"feat: Integrate Dates and Times into Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":12}}},{"hash":"51bd5ba077cdecf305b9cecdca3bcf844daa676d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"226aeae4cf564aa210399484e9741559a07a68b6","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/joeng03/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"aad061e52f706cdda9ce4c24b67630dcfc889d2b","isMergeCommit":false,"messageTitle":"feat: Add save tasks functionality","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":2},"txt":{"insertions":1,"deletions":0},"java":{"insertions":185,"deletions":48}}},{"hash":"0f0ab6bedd949984fd317f4e6e4c99366fdc3d1c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"4673351e2b69fcaf47f0a9b46e46770edec95cb6","isMergeCommit":false,"messageTitle":"refactor: Use OOP to refactor the codebase","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":226,"deletions":191}}},{"hash":"a8facd63f008c7181e9782a9ce274e30b9c33c73","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"c22c664469575e459d1f934036a3df958d80de31","isMergeCommit":false,"messageTitle":"fix: Gson LocalDate serialization issues","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":10,"deletions":0}}},{"hash":"ae4b3f0ff9f7de83b8b8540a30be512bd6af9c55","isMergeCommit":false,"messageTitle":"refactor: Organize classes into packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":66,"deletions":16}}},{"hash":"1d64de5adb457c572a02ab3030814abb37ce822c","isMergeCommit":true,"messageTitle":"merge branch A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"cc8a7602338a0ee182f535120abf780dc96f3b62","isMergeCommit":false,"messageTitle":"refactor: Add parent package linus","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1},"java":{"insertions":47,"deletions":41},"bat":{"insertions":1,"deletions":1}}},{"hash":"0aaf527a90cf5be9507a3988d96efe2bfdd53794","isMergeCommit":false,"messageTitle":"test: Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":88,"deletions":3}}},{"hash":"2a8beabf8a24a5b09b31004a0413ebf312d41d9b","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"26fff155f84d31c2e2f592051ca4d85641a86ead","isMergeCommit":false,"messageTitle":"docs: Add JavaDoc documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":0}}},{"hash":"e7bb91bfc254d79b968f725bf2b92c72284be200","isMergeCommit":false,"messageTitle":"style: Modify code to adhere to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"f45eaf4ac0ad5b0d92e78c33395188bbb9c425b9","isMergeCommit":false,"messageTitle":"feat: Add find command and functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":8}}},{"hash":"ba123db001861ebc33b092622e180d3853913f59","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"037151ca22b7fad1c66cd810615992e7b2983b68","isMergeCommit":true,"messageTitle":"merge A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"47b5ee81eecb96dc7aff9ed2dfeb5d9b20fe6b5c","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"1b1a7e3428845c4b3c9cbabb816deda5fd475c5a","isMergeCommit":false,"messageTitle":"style: Add and follow checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":162,"deletions":77}}},{"hash":"5813af5ae09b1ff10139f5136ecf42edabc9ed15","isMergeCommit":true,"messageTitle":"merge changes from A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"eed5f57fe1c8c94f6c20015bec7058b912add7a6","isMergeCommit":false,"messageTitle":"fix: Checkstyle error for find() method due to absence of JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"f75ccb0c30414ca734a02f6180073d028740c499","isMergeCommit":false,"messageTitle":"fix: Sync the taskList to disk everytime the taskList changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}}]},{"date":"2023-09-07","commitResults":[{"hash":"1b5fc1b9869f969398aaf2fc8c7f95de9bbaf7bc","isMergeCommit":false,"messageTitle":"fix: index off-by-one error for delete, mark, and unmark","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":15,"deletions":35}}},{"hash":"92dd3418b10a1d21d86cf622d2766f7c9f5ede45","isMergeCommit":false,"messageTitle":"feat: Add GUI with JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":1},"txt":{"insertions":1,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":443,"deletions":156}}},{"hash":"0fa11980c3c326d5952908e7315b134b517d6279","isMergeCommit":true,"messageTitle":"merge changes from branch-Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"fb7d15cc83667351decf0c2fa8568f0afbf417fe","isMergeCommit":false,"messageTitle":"refactor: Reorganize folders","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":14,"deletions":6}}},{"hash":"2129512018678ce83f4e0d7b00da956667022ea9","isMergeCommit":false,"messageTitle":"chore: Cleanup redundant code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":8},"java":{"insertions":25,"deletions":15},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"a79a31e8afd0dab33e399a59e62dc52c77d935eb","isMergeCommit":false,"messageTitle":"chore: Cleanup System.out.println","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-09-14","commitResults":[{"hash":"c77f472d83e45276bbeea41f09d1625f8e2c5079","isMergeCommit":false,"messageTitle":"test: Add assertions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":11,"deletions":2}}},{"hash":"432de7b59d0adc65e95d6065a7884c4bc7ab60f7","isMergeCommit":true,"messageTitle":"Merge pull request #1 from joeng03/A-Assertions","messageBody":"test: Add assertions","tags":["A-Streams","A-CodeQuality","A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"ce28a3d655c3fa2ca4b0cb16e5a551a03c98714a","isMergeCommit":false,"messageTitle":"refactor: Improve Code quality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":31,"deletions":20}}},{"hash":"21c6506f0493450714bbe8ca32c22f62907ba178","isMergeCommit":true,"messageTitle":"Merge pull request #2 from joeng03/A-CodeQuality","messageBody":"refactor: Improve Code quality","fileTypesAndContributionMap":{}},{"hash":"c0f9c26a038954e312141442af754279d1ce9dd0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from joeng03/A-Assertions","messageBody":"test: Add assertions\n","fileTypesAndContributionMap":{}},{"hash":"7aa9ce30d27ad2698de24c51a4e901742768713e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/joeng03/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"03e144cf8177649c5f7fb2f6bad0ae1dc5248644","isMergeCommit":false,"messageTitle":"fix: Checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":20}}},{"hash":"cd786cc3464948735ed5eadfeea457f049e185a4","isMergeCommit":false,"messageTitle":"refactor: organize messages as constants","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":29}}},{"hash":"ecce58b1c83efa43e1bf11b77adffbf9ba0ca1c2","isMergeCommit":false,"messageTitle":"feat:add exit functionality after user types bye command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"169f98288e1d4189d8e5812e68d7ab90e407062a","isMergeCommit":false,"messageTitle":"feat:Add exit functionality after user enters bye command","messageBody":"If the user enters the bye command,\nthe MainWindow controller detects it,\nthen responds with the exit message.\nIt then uses JavaFX PauseTransition\nto wait for 1.5 seconds before exiting.\n\nThis ensures that the window exits seamlessly\nwhile also improving user experience,\nas users could read the exit message\nbefore the window exits.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-09-16","commitResults":[{"hash":"726f9ac0361cb6d6c78527071c91856446255417","isMergeCommit":false,"messageTitle":"feat: Add statistics functionality for tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":122,"deletions":35}}},{"hash":"8a5ae029b7fe5ec828830b5027ba5acbaa411fa9","isMergeCommit":true,"messageTitle":"Merge branch \u0027BCD-Extension\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"joeng03":{"java":1319,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":32,"txt":2}},"authorContributionVariance":{"joeng03":64595.695},"authorDisplayNameMap":{"joeng03":"CS2103T-W08-4 NG Y.. JOE"}} diff --git a/juliusgambe_ip_master/commits.json b/juliusgambe_ip_master/commits.json index 81450c3a..ab530a3d 100644 --- a/juliusgambe_ip_master/commits.json +++ b/juliusgambe_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"juliusgambe":[{"date":"2023-08-22","commitResults":[{"hash":"eae61baa0c23712ff8ac5f39c631ab3751ef48fb","isMergeCommit":false,"messageTitle":"feat: rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"30da4222710c1fa10c841f1c3a46385c9837db9a","isMergeCommit":false,"messageTitle":"feat: echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":8}}},{"hash":"80929c062a1b6a2b11c979c886ddd4b0e02d630e","isMergeCommit":false,"messageTitle":"feat: add, list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}},{"hash":"eeb9ac857b3f77608e4171f99bc537a9a1485f51","isMergeCommit":false,"messageTitle":"fix: added whitespace","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"fa256dddc51548bdaab5f48b6ab4d965d5cda82d","isMergeCommit":false,"messageTitle":"add: task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":0}}},{"hash":"69041537ea4240592cf8cba0123d416ebb03e703","isMergeCommit":false,"messageTitle":"feat: mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":22}}},{"hash":"7cab9de6fdb362e8fbb782095c84c90fee275f0f","isMergeCommit":false,"messageTitle":"fix: duke encapsulation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"58eeef3152dbb964f50cee76854cc1d839119a80","isMergeCommit":false,"messageTitle":"add: task toString","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"3da876274f5b97f0075d0f2913922d428b622202","isMergeCommit":false,"messageTitle":"add: ToDoTask","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"fdb1e39abe57a49875014df52cad6f14d1e9a010","isMergeCommit":false,"messageTitle":"add: EventTask","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"81b69085d13955baf19116cb5639411c398fba2c","isMergeCommit":false,"messageTitle":"add: DeadlineTask","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":0}}},{"hash":"79069831decc17512d6a09f2f08318ecffb369f2","isMergeCommit":false,"messageTitle":"feat: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":15}}},{"hash":"cdf2474d7b96538af00d81cf247e16506501d878","isMergeCommit":false,"messageTitle":"test: add input and expected","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"594b6cede19ff6a65d3fc1f453a1692280e0a075","isMergeCommit":false,"messageTitle":"add: duke exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":35}}},{"hash":"aba6d02f30d0a57deebec2145c2f08f2f35a234f","isMergeCommit":false,"messageTitle":"add: delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":34}}},{"hash":"cd29f41582863f09412e1856c51e03f65d889551","isMergeCommit":false,"messageTitle":"add: command enum","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":9}}}]},{"date":"2023-08-26","commitResults":[{"hash":"83089ce31a1c5dd7eeb6218e196be1778f599405","isMergeCommit":false,"messageTitle":"Fix enum error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":12}}}]},{"date":"2023-08-28","commitResults":[{"hash":"d49ba03735a68164dc17fe659a99cd2cbd709bf8","isMergeCommit":false,"messageTitle":"Add save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":2}}},{"hash":"e701f0e24712ac55dcdb875fdd48a42af8a696e9","isMergeCommit":false,"messageTitle":"Add dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":8}}},{"hash":"a29c98002d0fd98333870efba43517abee1b69a2","isMergeCommit":true,"messageTitle":"Merge pull request #1 from juliusgambe/branch-Level-7","messageBody":"Add save","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"b041e7c3f0cbef966087675bfa3a7297e4f44cc9","isMergeCommit":true,"messageTitle":"Merge pull request #2 from juliusgambe/branch-Level-8","messageBody":"Add dates and times","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"f40b38471165c5ca71cf2ed6462b0be4e8f29e37","isMergeCommit":false,"messageTitle":"Fix duplicate functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":8}}}]},{"date":"2023-08-29","commitResults":[{"hash":"d73d785a9b1f15b8fe78f50473a25e5d0a285382","isMergeCommit":false,"messageTitle":"Add Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":0}}},{"hash":"cd1f8cd7f232deb5daf124ce7bdcf86cfadd161d","isMergeCommit":false,"messageTitle":"Add Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":0}}},{"hash":"5b5f3c9a9ca90f47fea3ca2f5cb3bfcc3cd578e4","isMergeCommit":false,"messageTitle":"Add Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":0}}},{"hash":"f3e999b36f8d3ec91d63bb30e94f66164a2e609f","isMergeCommit":false,"messageTitle":"Add TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":0}}},{"hash":"56c2254a2a1fde2f5c231350830995c93fba103a","isMergeCommit":false,"messageTitle":"Add commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":0}}},{"hash":"34c736c6c9a689759be3b263cd0deb6b88a9b674","isMergeCommit":false,"messageTitle":"Handle date formatter exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":9}}},{"hash":"1eb86663d44e761265084b7fc1ffde9bc90ef47c","isMergeCommit":false,"messageTitle":"Add Command.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":10}}},{"hash":"9dd6b80ae0fa260e35fb0e821549d0bba1977ff9","isMergeCommit":false,"messageTitle":"Refactor Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":279}}},{"hash":"48b293b45678e99441e007e0ec8f850bd9598ea6","isMergeCommit":true,"messageTitle":"Merge pull request #3 from juliusgambe/branch-A-MoreOOP","messageBody":"Refractor to OOP","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"906818ac616f0d20a49631c541339a2c3908439f","isMergeCommit":false,"messageTitle":"Create duke, task and command package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":18},"bat":{"insertions":1,"deletions":1},"md":{"insertions":13,"deletions":8}}},{"hash":"e9eecf1b30d84bd9912d5c3525a44f311789e709","isMergeCommit":true,"messageTitle":"Merge pull request #4 from juliusgambe/refractor-packages","messageBody":"Create duke, task and command packages","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"5772d18aa03e7e2a5163cbf14d432750ebe9630a","isMergeCommit":true,"messageTitle":"Merge pull request #5 from juliusgambe/add-gradle-support","messageBody":"Add gradle support","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"2d0b13b19731be53bfd1770013c00559a053ffdb","isMergeCommit":false,"messageTitle":"Add DeadlineTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"1a021903e0511fdac4e9acb9eb76faf30ec02265","isMergeCommit":false,"messageTitle":"Add EventTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"6ee9e35a95e87052e50e3e8376f7e4aa46b10a59","isMergeCommit":false,"messageTitle":"Fix parseTodo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"8e8d2516d68c66767e0bb705d6abe132ab7ed1fc","isMergeCommit":false,"messageTitle":"Add ParserTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"9c2fbd7d90d5b2f16d4110c8e2f80fed4d4fef34","isMergeCommit":false,"messageTitle":"Refractor TaskList.java and add TaskListTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":0}}},{"hash":"60d429656287e7ced0b9c9c3ed39662bf7f86d7a","isMergeCommit":false,"messageTitle":"Refractor tasks and Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":36}}},{"hash":"4664d07b8e8f7ecd7de0ac7fbb906cc1de9d6cfc","isMergeCommit":false,"messageTitle":"Refractor ListCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"17a3034589b2f3b7803fb92776e02a826fd92a96","isMergeCommit":false,"messageTitle":"Add test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":18}}},{"hash":"901e41ccbfdd30fa80ceb2c3335d02c487a50bba","isMergeCommit":false,"messageTitle":"Refactor Ui print list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"9c4e3b2d2802bdcb19dd1cb24d79db1b8cfe8dc7","isMergeCommit":true,"messageTitle":"Merge pull request #6 from juliusgambe/test-junit","messageBody":"Test junit","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"a11088eb173644e586b5d913e4179bbb4a7ad7cf","isMergeCommit":false,"messageTitle":"Add shadow jar properties","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1}}},{"hash":"f3a19789f32f2a23c5221a77d40d4d7f155a37ff","isMergeCommit":false,"messageTitle":"Add find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":16}}},{"hash":"87eda0c9dc7d7241c1b721e082448ec67f829b59","isMergeCommit":false,"messageTitle":"Add TaskType.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":3}}},{"hash":"a77a0369147acaba86723bda51af1991b3bcf0b5","isMergeCommit":false,"messageTitle":"Refactor Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":32}}},{"hash":"3b56f546347bfd53af00859a3054ebef37f46cd4","isMergeCommit":false,"messageTitle":"Add storage javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":1}}},{"hash":"9f4db31ed8292b4fd57cb8e94a56332d57d2f7ae","isMergeCommit":false,"messageTitle":"Refactor files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":109}}},{"hash":"81281a49c830d8c98f63a4508633055b5414ab47","isMergeCommit":true,"messageTitle":"Merge pull request #7 from juliusgambe/branch-A-CodingStandard","messageBody":"Branch a coding standard","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"2387d69ce99223ed3afa7c046cae7a2f13e57b9f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a57eef067549b8ca8e16f48e077609314fb4881b","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":229,"deletions":29}}},{"hash":"0ca2bff7ff64cd3a56fcc0c58e556de81107b9cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"327b013e117ea07babec3a2d3785fa0f0d964995","isMergeCommit":true,"messageTitle":"Merge pull request #9 from juliusgambe/branch-A-JavaDoc","messageBody":"Add javadocs","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"8a0985ba39bcbaa1ee79e4180b6240c2630787c8","isMergeCommit":false,"messageTitle":"Fix TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":10}}},{"hash":"7c40f43c8863756371c9aeb1feee961c281e3281","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9d5a15541370b5e178dc5332b4335110e1340b78","isMergeCommit":true,"messageTitle":"Merge pull request #8 from juliusgambe/branch-Level-9","messageBody":"Add find","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"a32aa430b951fe0b0517a43453367cd414cbcce4","isMergeCommit":false,"messageTitle":"Fix TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"76340c00b3119f26203e413210d6c4fccc83d7a8","isMergeCommit":false,"messageTitle":"Fix Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"0a385c646ac9e01d9b9a8923109ee9375f12ff74","isMergeCommit":false,"messageTitle":"Add javadocs to Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"7fd0ac64fd7c7cbca55fb6acc4fbb6f89e02a63f","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"4f5cb4f255932ab9418943e73bbc52867eb40ed5","isMergeCommit":false,"messageTitle":"Fix styling errors","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":46}}},{"hash":"fb72f4202720476bc5f20a6a666cd97d49bb68e2","isMergeCommit":false,"messageTitle":"Add javafx","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":1}}},{"hash":"5007533f88bfcb2a95c1c65a7964585215d5885f","isMergeCommit":false,"messageTitle":"Refractor ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":303,"deletions":48}}}]},{"date":"2023-09-05","commitResults":[{"hash":"d56f38bf2d0c658abecd25305e8b74844d02152d","isMergeCommit":false,"messageTitle":"Refractor fxml","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":48,"deletions":0},"java":{"insertions":248,"deletions":309}}},{"hash":"4d8740f7a5d211aec900800afbc245eb203afdd4","isMergeCommit":false,"messageTitle":"Fix styling errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":15}}},{"hash":"fd0b262de35760d1e661b067203b6f22d07424a1","isMergeCommit":true,"messageTitle":"Merge pull request #10 from juliusgambe/branch-Level-10","messageBody":"Branch level 10","tags":["Level-10","A-Varargs"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"a9e5a9bab08f89ef334369a2a2ad4b4d2f1d506f","isMergeCommit":false,"messageTitle":"Add intro message","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"e4a8ee033c97dc5c05ee0bc8abe5d20ea48e08dd","isMergeCommit":false,"messageTitle":"Add image","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":4,"deletions":6},"java":{"insertions":27,"deletions":15}}},{"hash":"f8aa9de48f5b5f796ebecd1e6443fecf5c323c97","isMergeCommit":true,"messageTitle":"Merge pull request #11 from juliusgambe/branch-Profile-Image","messageBody":"Add image","fileTypesAndContributionMap":{}},{"hash":"c0670bddf507f525c653bdb296850b6043ec457c","isMergeCommit":false,"messageTitle":"Change main class name shadow jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"371c733cfed1234f6b28f157003cfab0581b2f6d","isMergeCommit":false,"messageTitle":"Add assertions and fixes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":13}}},{"hash":"4ac671410fdce1592c5fa1fb268e7158006f0df8","isMergeCommit":false,"messageTitle":"Refactor date parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":39}}},{"hash":"000aa8c525de0fb198172e967864cbc30b8da335","isMergeCommit":false,"messageTitle":"Fix GobbleMessage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"d3a3f132244038b9309690822f5256caad3ac352","isMergeCommit":false,"messageTitle":"Fix CodeQuality","messageBody":"Fix CodeQuality\n\nCurrent code quality does not comply with coding standards.\n\nUpdate code to comply with coding standards\n* unused methods\n* javadocs sentence casing\n* keep it simple\n* remove repetitons\n","fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":172}}},{"hash":"b0d6790bf21be5c5c4d8df34e9e51cc22bea9064","isMergeCommit":true,"messageTitle":"Merge pull request #12 from juliusgambe/branch-A-CodeQuality","messageBody":"Branch a code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"0dc55837a2083581ce7085b4efaa6d85d38a6a47","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e8b1dd4405dd591ad249d79c7a5013df63cd96da","isMergeCommit":true,"messageTitle":"Merge pull request #13 from juliusgambe/branch-A-Assertions","messageBody":"Add assertions and fixes","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"9cbd30a683a5a9c2d7035ffff70264da871b55bf","isMergeCommit":false,"messageTitle":"Add help command","messageBody":"Add help command\n\nNo help command present.\n\nWithout help command, user may not know what commands are available.\n\nLet\u0027s,\n* add a help command that lists all the available commands and format\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"juliusgambe":{"java":1446,"md":10,"fxml":46,"sh":0,"bat":1,"gradle":24,"txt":25}},"authorContributionVariance":{"juliusgambe":165648.14},"authorDisplayNameMap":{"juliusgambe":"CS2103T-T13-3 JULI..AMBE"}} +{"authorDailyContributionsMap":{"juliusgambe":[{"date":"2023-08-22","commitResults":[{"hash":"eae61baa0c23712ff8ac5f39c631ab3751ef48fb","isMergeCommit":false,"messageTitle":"feat: rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"30da4222710c1fa10c841f1c3a46385c9837db9a","isMergeCommit":false,"messageTitle":"feat: echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":8}}},{"hash":"80929c062a1b6a2b11c979c886ddd4b0e02d630e","isMergeCommit":false,"messageTitle":"feat: add, list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":2}}},{"hash":"eeb9ac857b3f77608e4171f99bc537a9a1485f51","isMergeCommit":false,"messageTitle":"fix: added whitespace","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"fa256dddc51548bdaab5f48b6ab4d965d5cda82d","isMergeCommit":false,"messageTitle":"add: task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":0}}},{"hash":"69041537ea4240592cf8cba0123d416ebb03e703","isMergeCommit":false,"messageTitle":"feat: mark as done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":22}}},{"hash":"7cab9de6fdb362e8fbb782095c84c90fee275f0f","isMergeCommit":false,"messageTitle":"fix: duke encapsulation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"58eeef3152dbb964f50cee76854cc1d839119a80","isMergeCommit":false,"messageTitle":"add: task toString","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"3da876274f5b97f0075d0f2913922d428b622202","isMergeCommit":false,"messageTitle":"add: ToDoTask","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"fdb1e39abe57a49875014df52cad6f14d1e9a010","isMergeCommit":false,"messageTitle":"add: EventTask","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"81b69085d13955baf19116cb5639411c398fba2c","isMergeCommit":false,"messageTitle":"add: DeadlineTask","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":0}}},{"hash":"79069831decc17512d6a09f2f08318ecffb369f2","isMergeCommit":false,"messageTitle":"feat: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":15}}},{"hash":"cdf2474d7b96538af00d81cf247e16506501d878","isMergeCommit":false,"messageTitle":"test: add input and expected","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"594b6cede19ff6a65d3fc1f453a1692280e0a075","isMergeCommit":false,"messageTitle":"add: duke exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":35}}},{"hash":"aba6d02f30d0a57deebec2145c2f08f2f35a234f","isMergeCommit":false,"messageTitle":"add: delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":34}}},{"hash":"cd29f41582863f09412e1856c51e03f65d889551","isMergeCommit":false,"messageTitle":"add: command enum","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":9}}}]},{"date":"2023-08-26","commitResults":[{"hash":"83089ce31a1c5dd7eeb6218e196be1778f599405","isMergeCommit":false,"messageTitle":"Fix enum error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":12}}}]},{"date":"2023-08-28","commitResults":[{"hash":"d49ba03735a68164dc17fe659a99cd2cbd709bf8","isMergeCommit":false,"messageTitle":"Add save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":2}}},{"hash":"e701f0e24712ac55dcdb875fdd48a42af8a696e9","isMergeCommit":false,"messageTitle":"Add dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":8}}},{"hash":"a29c98002d0fd98333870efba43517abee1b69a2","isMergeCommit":true,"messageTitle":"Merge pull request #1 from juliusgambe/branch-Level-7","messageBody":"Add save","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"b041e7c3f0cbef966087675bfa3a7297e4f44cc9","isMergeCommit":true,"messageTitle":"Merge pull request #2 from juliusgambe/branch-Level-8","messageBody":"Add dates and times","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"f40b38471165c5ca71cf2ed6462b0be4e8f29e37","isMergeCommit":false,"messageTitle":"Fix duplicate functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":8}}}]},{"date":"2023-08-29","commitResults":[{"hash":"d73d785a9b1f15b8fe78f50473a25e5d0a285382","isMergeCommit":false,"messageTitle":"Add Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":0}}},{"hash":"cd1f8cd7f232deb5daf124ce7bdcf86cfadd161d","isMergeCommit":false,"messageTitle":"Add Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":0}}},{"hash":"5b5f3c9a9ca90f47fea3ca2f5cb3bfcc3cd578e4","isMergeCommit":false,"messageTitle":"Add Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":0}}},{"hash":"f3e999b36f8d3ec91d63bb30e94f66164a2e609f","isMergeCommit":false,"messageTitle":"Add TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":0}}},{"hash":"56c2254a2a1fde2f5c231350830995c93fba103a","isMergeCommit":false,"messageTitle":"Add commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":0}}},{"hash":"34c736c6c9a689759be3b263cd0deb6b88a9b674","isMergeCommit":false,"messageTitle":"Handle date formatter exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":9}}},{"hash":"1eb86663d44e761265084b7fc1ffde9bc90ef47c","isMergeCommit":false,"messageTitle":"Add Command.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":10}}},{"hash":"9dd6b80ae0fa260e35fb0e821549d0bba1977ff9","isMergeCommit":false,"messageTitle":"Refactor Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":279}}},{"hash":"48b293b45678e99441e007e0ec8f850bd9598ea6","isMergeCommit":true,"messageTitle":"Merge pull request #3 from juliusgambe/branch-A-MoreOOP","messageBody":"Refractor to OOP","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"906818ac616f0d20a49631c541339a2c3908439f","isMergeCommit":false,"messageTitle":"Create duke, task and command package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":18},"bat":{"insertions":1,"deletions":1},"md":{"insertions":13,"deletions":8}}},{"hash":"e9eecf1b30d84bd9912d5c3525a44f311789e709","isMergeCommit":true,"messageTitle":"Merge pull request #4 from juliusgambe/refractor-packages","messageBody":"Create duke, task and command packages","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"5772d18aa03e7e2a5163cbf14d432750ebe9630a","isMergeCommit":true,"messageTitle":"Merge pull request #5 from juliusgambe/add-gradle-support","messageBody":"Add gradle support","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"2d0b13b19731be53bfd1770013c00559a053ffdb","isMergeCommit":false,"messageTitle":"Add DeadlineTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"1a021903e0511fdac4e9acb9eb76faf30ec02265","isMergeCommit":false,"messageTitle":"Add EventTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"6ee9e35a95e87052e50e3e8376f7e4aa46b10a59","isMergeCommit":false,"messageTitle":"Fix parseTodo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"8e8d2516d68c66767e0bb705d6abe132ab7ed1fc","isMergeCommit":false,"messageTitle":"Add ParserTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"9c2fbd7d90d5b2f16d4110c8e2f80fed4d4fef34","isMergeCommit":false,"messageTitle":"Refractor TaskList.java and add TaskListTest.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":0}}},{"hash":"60d429656287e7ced0b9c9c3ed39662bf7f86d7a","isMergeCommit":false,"messageTitle":"Refractor tasks and Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":36}}},{"hash":"4664d07b8e8f7ecd7de0ac7fbb906cc1de9d6cfc","isMergeCommit":false,"messageTitle":"Refractor ListCommand.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"17a3034589b2f3b7803fb92776e02a826fd92a96","isMergeCommit":false,"messageTitle":"Add test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":18}}},{"hash":"901e41ccbfdd30fa80ceb2c3335d02c487a50bba","isMergeCommit":false,"messageTitle":"Refactor Ui print list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"9c4e3b2d2802bdcb19dd1cb24d79db1b8cfe8dc7","isMergeCommit":true,"messageTitle":"Merge pull request #6 from juliusgambe/test-junit","messageBody":"Test junit","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"a11088eb173644e586b5d913e4179bbb4a7ad7cf","isMergeCommit":false,"messageTitle":"Add shadow jar properties","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1}}},{"hash":"f3a19789f32f2a23c5221a77d40d4d7f155a37ff","isMergeCommit":false,"messageTitle":"Add find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":16}}},{"hash":"87eda0c9dc7d7241c1b721e082448ec67f829b59","isMergeCommit":false,"messageTitle":"Add TaskType.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":3}}},{"hash":"a77a0369147acaba86723bda51af1991b3bcf0b5","isMergeCommit":false,"messageTitle":"Refactor Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":32}}},{"hash":"3b56f546347bfd53af00859a3054ebef37f46cd4","isMergeCommit":false,"messageTitle":"Add storage javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":1}}},{"hash":"9f4db31ed8292b4fd57cb8e94a56332d57d2f7ae","isMergeCommit":false,"messageTitle":"Refactor files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":109}}},{"hash":"81281a49c830d8c98f63a4508633055b5414ab47","isMergeCommit":true,"messageTitle":"Merge pull request #7 from juliusgambe/branch-A-CodingStandard","messageBody":"Branch a coding standard","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"2387d69ce99223ed3afa7c046cae7a2f13e57b9f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a57eef067549b8ca8e16f48e077609314fb4881b","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":229,"deletions":29}}},{"hash":"0ca2bff7ff64cd3a56fcc0c58e556de81107b9cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"327b013e117ea07babec3a2d3785fa0f0d964995","isMergeCommit":true,"messageTitle":"Merge pull request #9 from juliusgambe/branch-A-JavaDoc","messageBody":"Add javadocs","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"8a0985ba39bcbaa1ee79e4180b6240c2630787c8","isMergeCommit":false,"messageTitle":"Fix TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":10}}},{"hash":"7c40f43c8863756371c9aeb1feee961c281e3281","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9d5a15541370b5e178dc5332b4335110e1340b78","isMergeCommit":true,"messageTitle":"Merge pull request #8 from juliusgambe/branch-Level-9","messageBody":"Add find","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"a32aa430b951fe0b0517a43453367cd414cbcce4","isMergeCommit":false,"messageTitle":"Fix TaskList.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"76340c00b3119f26203e413210d6c4fccc83d7a8","isMergeCommit":false,"messageTitle":"Fix Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"0a385c646ac9e01d9b9a8923109ee9375f12ff74","isMergeCommit":false,"messageTitle":"Add javadocs to Ui.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"7fd0ac64fd7c7cbca55fb6acc4fbb6f89e02a63f","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"4f5cb4f255932ab9418943e73bbc52867eb40ed5","isMergeCommit":false,"messageTitle":"Fix styling errors","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":46}}},{"hash":"fb72f4202720476bc5f20a6a666cd97d49bb68e2","isMergeCommit":false,"messageTitle":"Add javafx","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":1}}},{"hash":"5007533f88bfcb2a95c1c65a7964585215d5885f","isMergeCommit":false,"messageTitle":"Refractor ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":303,"deletions":48}}}]},{"date":"2023-09-05","commitResults":[{"hash":"d56f38bf2d0c658abecd25305e8b74844d02152d","isMergeCommit":false,"messageTitle":"Refractor fxml","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":48,"deletions":0},"java":{"insertions":248,"deletions":309}}},{"hash":"4d8740f7a5d211aec900800afbc245eb203afdd4","isMergeCommit":false,"messageTitle":"Fix styling errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":15}}},{"hash":"fd0b262de35760d1e661b067203b6f22d07424a1","isMergeCommit":true,"messageTitle":"Merge pull request #10 from juliusgambe/branch-Level-10","messageBody":"Branch level 10","tags":["Level-10","A-Varargs"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"a9e5a9bab08f89ef334369a2a2ad4b4d2f1d506f","isMergeCommit":false,"messageTitle":"Add intro message","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"e4a8ee033c97dc5c05ee0bc8abe5d20ea48e08dd","isMergeCommit":false,"messageTitle":"Add image","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":4,"deletions":6},"java":{"insertions":27,"deletions":15}}},{"hash":"f8aa9de48f5b5f796ebecd1e6443fecf5c323c97","isMergeCommit":true,"messageTitle":"Merge pull request #11 from juliusgambe/branch-Profile-Image","messageBody":"Add image","fileTypesAndContributionMap":{}},{"hash":"c0670bddf507f525c653bdb296850b6043ec457c","isMergeCommit":false,"messageTitle":"Change main class name shadow jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"371c733cfed1234f6b28f157003cfab0581b2f6d","isMergeCommit":false,"messageTitle":"Add assertions and fixes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":13}}},{"hash":"4ac671410fdce1592c5fa1fb268e7158006f0df8","isMergeCommit":false,"messageTitle":"Refactor date parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":39}}},{"hash":"000aa8c525de0fb198172e967864cbc30b8da335","isMergeCommit":false,"messageTitle":"Fix GobbleMessage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"d3a3f132244038b9309690822f5256caad3ac352","isMergeCommit":false,"messageTitle":"Fix CodeQuality","messageBody":"Fix CodeQuality\n\nCurrent code quality does not comply with coding standards.\n\nUpdate code to comply with coding standards\n* unused methods\n* javadocs sentence casing\n* keep it simple\n* remove repetitons\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":89,"deletions":172}}},{"hash":"b0d6790bf21be5c5c4d8df34e9e51cc22bea9064","isMergeCommit":true,"messageTitle":"Merge pull request #12 from juliusgambe/branch-A-CodeQuality","messageBody":"Branch a code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"0dc55837a2083581ce7085b4efaa6d85d38a6a47","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e8b1dd4405dd591ad249d79c7a5013df63cd96da","isMergeCommit":true,"messageTitle":"Merge pull request #13 from juliusgambe/branch-A-Assertions","messageBody":"Add assertions and fixes","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"9cbd30a683a5a9c2d7035ffff70264da871b55bf","isMergeCommit":false,"messageTitle":"Add help command","messageBody":"Add help command\n\nNo help command present.\n\nWithout help command, user may not know what commands are available.\n\nLet\u0027s,\n* add a help command that lists all the available commands and format\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"juliusgambe":{"java":1446,"md":10,"fxml":46,"sh":0,"bat":1,"gradle":24,"txt":25}},"authorContributionVariance":{"juliusgambe":165648.14},"authorDisplayNameMap":{"juliusgambe":"CS2103T-T13-3 JULI..AMBE"}} diff --git a/kohkaijie_ip_master/authorship.json b/kohkaijie_ip_master/authorship.json index 65c47d62..77139989 100644 --- a/kohkaijie_ip_master/authorship.json +++ b/kohkaijie_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":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"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":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"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":"kohkaijie"},"content":" mainClass.set(\"CR7\")","lastModifiedDate":"2023-09-08"},{"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":"kohkaijie"},"content":" archiveBaseName \u003d \"CR7\"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" archiveFileName \u003d \u0027CR7.jar\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"kohkaijie":19,"-":40}},{"path":"data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"[T][ ] Task 1","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"[T][ ] Task 3","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"kohkaijie":2}},{"path":"src/main/data/CR7.CR7.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"[T][ ] run","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"[T][ ] jump","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"[T][ ] swim","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"[T][ ] siuuu","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"[T][ ] swim","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"[E][ ] jump (from: Oct 10 2000 09:00 PM to: Oct 10 2000 10:00 PM)","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"[T][ ] drink","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"[F][ ] jump (for: 2 hours)","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"kohkaijie":8}},{"path":"src/main/java/CR7/CR7.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package CR7;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import commands.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" * The main class for running the CR7.CR7 task management application.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"public class CR7 {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * Runs the CR7.CR7 application by displaying a welcome message, processing user commands,","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * and executing corresponding actions.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * Constructs a CR7.CR7 object with the provided file path for data storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * @param filePath The file path for storing task data.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" public CR7(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" assert filePath !\u003d null \u0026\u0026 !filePath.isEmpty() : \"File path should not be null or empty!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" tasks \u003d new TaskList(storage.loadFiles());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" assert tasks !\u003d null : \"Tasks should be initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" ui.showErrorMsg(\"Error: Task data file not found.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" * The main method to start the CR7.CR7 application.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" * @param args The command-line arguments (not used in this context).","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" new CR7(\"src/main/data/CR7.CR7.txt\").run();","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" assert input !\u003d null \u0026\u0026 !input.trim().isEmpty() : \"Input should not be null or empty!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" String response \u003d c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" return \"Cristiano Ronaldo will always be the GOAT. And here is why: \\n\" + response;","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" return ui.showErrorMsg(\"An error occurred while processing the command.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"kohkaijie":67}},{"path":"src/main/java/CR7/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package CR7;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" dialog.setWrapText(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":62}},{"path":"src/main/java/CR7/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package CR7;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":12}},{"path":"src/main/java/CR7/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package CR7;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" private CR7 cr7 \u003d new CR7(\"src/main/data/CR7.CR7.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(cr7);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":31}},{"path":"src/main/java/CR7/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package CR7;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * Controller for CR7.MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" private CR7 cr7;","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" private String userImagePath \u003d \"/images/dillonbrooks.jpg\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" private String dukeImagePath \u003d \"/images/ronaldosiu.jpg\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(userImagePath));","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(dukeImagePath));","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" private boolean isWelcomeMessageSent \u003d false; // Flag to track if welcome message has been sent","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" sendWelcomeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" public void setDuke(CR7 d) {","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" cr7 \u003d d;","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" * Creates and sends the welcome message if it hasn\u0027t been sent yet.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" private void sendWelcomeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" if (!isWelcomeMessageSent) {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" String welcomeMsg \u003d \"Welcome to the chat! Type \u0027bye\u0027 to exit.\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" DialogBox.getDukeDialog(welcomeMsg, dukeImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" isWelcomeMessageSent \u003d true; // Set the flag to true","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" String exitMsg \u003d \"Bye! Hope to see you again soon! SIUUUU\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" DialogBox.getDukeDialog(exitMsg, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" // Create a PauseTransition to delay the application exit","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(2)); // Adjust the duration as needed","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" delay.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":" Platform.exit(); // Exit the application after the delay","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" delay.play();","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":" String response \u003d cr7.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"kohkaijie"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":86}},{"path":"src/main/java/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to add a task to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" protected String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" protected String duration;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" protected LocalDateTime first;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" protected LocalDateTime second;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * Constructs an AddCommand with a description.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" * @param desc The description of the task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" public AddCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" this.duration \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" this.first \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" this.second \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" * Constructs an AddCommand with a description and a specific date.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" * @param desc The description of the task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" * @param date The specific date associated with the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" public AddCommand(String desc, LocalDateTime date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" this.duration \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" this.first \u003d date;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" this.second \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" * Constructs an AddCommand with a description and a specific duration.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" * @param desc The description of the task to be added.","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" * @param duration The specific duration of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" public AddCommand(String desc, String duration) {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" this.duration \u003d duration;","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" this.first \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" this.second \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" * Constructs an AddCommand with a description and start and end dates.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" * @param desc The description of the task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" * @param start The start date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" * @param end The end date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" public AddCommand(String desc, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" this.duration \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" this.first \u003d start;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" this.second \u003d end;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" * Executes the AddCommand to create a task, display a message, and save changes.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to add the task to.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface for saving data.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d tasks.createTask(this.desc, this.duration, this.first, this.second);","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":" storage.saveFiles(tasks.showList());","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" return ui.showTaskMsg(t, tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":83}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" * The base abstract class for different types of commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * Executes the specific command on the task list, interacts with the user interface, and manages storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to perform the command on.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface for saving and loading data.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * @return Returns true if the command is an exit command, and false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":30}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" protected int num;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" * Constructs a DeleteCommand with the task number to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * @param num The number of the task to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" public DeleteCommand(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" this.num \u003d num;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" * Executes the DeleteCommand to delete a task, display a message, and save changes.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to delete the task from.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface for saving data.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d tasks.deleteTask(num);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" storage.saveFiles(tasks.showList());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" return ui.showDeleteMsg(t, tasks.numOfTasks());","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":38}},{"path":"src/main/java/commands/ErrorCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to display an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"public class ErrorCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" protected String errorMsg;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" * Constructs an ErrorCommand with an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * @param errorMsg The error message to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" public ErrorCommand(String errorMsg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" this.errorMsg \u003d errorMsg;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * Executes the ErrorCommand to display an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" return ui.showErrorMsg(this.errorMsg);","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":31}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" * Constructs an ExitCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" public ExitCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" * Executes the ExitCommand to display an exit message.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" return ui.showExitMsg();","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * @return Returns true indicating that this command is an exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":35}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to list tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * Constructs a ListCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" public ListCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * Executes the ListCommand to display the list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to list tasks from.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" return ui.showListMsg(tasks.showList());","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":28}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to mark a task as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" protected int num;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * Constructs a MarkCommand with the task number to be marked as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * @param num The number of the task to be marked as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" public MarkCommand(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" this.num \u003d num;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * Executes the MarkCommand to mark a task as completed, display a message, and save changes.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to mark the task in.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface for saving data.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d tasks.markTask(this.num);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" storage.saveFiles(tasks.showList());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" return ui.showMarkMsg(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":37}},{"path":"src/main/java/commands/SearchCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to search for tasks based on a keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"public class SearchCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" * The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" String searchWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * Constructs a SearchCommand with the keyword to search for.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * @param searchWord The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" public SearchCommand(String searchWord) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" this.searchWord \u003d searchWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * Executes the SearchCommand to search for tasks based on the keyword,","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * display matching tasks, and show the search results.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to search for tasks in.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" ArrayList\u003cTask\u003e matches \u003d tasks.searchTask(this.searchWord);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" return ui.showMatchesMsg(matches);","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"kohkaijie":38}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to unmark a completed task.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" protected int num;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * Constructs an UnmarkCommand with the task number to be unmarked.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * @param num The number of the task to be unmarked.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" public UnmarkCommand(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" this.num \u003d num;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * Executes the UnmarkCommand to unmark a completed task, display a message, and save changes.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to unmark the task in.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface for saving data.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d tasks.unmarkTask(this.num);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" storage.saveFiles(tasks.showList());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" return ui.showUnmarkMsg(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":37}},{"path":"src/main/java/functions/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package functions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import commands.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" * Utility class for parsing user input and generating appropriate commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" * Enumeration representing different date and time formats for parsing.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" enum DateTimeFormat {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" FORMAT1(\"yyyy-MM-dd HH:mm\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" FORMAT2(\"dd.MM.yyyy HH:mm\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" FORMAT3(\"MM/dd/yyyy HH:mm\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" FORMAT4(\"yyyy-MM-dd hh:mm a\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" FORMAT5(\"dd.MM.yyyy hh:mm a\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" FORMAT6(\"MM/dd/yyyy hh:mm a\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" FORMAT7(\"yyyy-MM-dd HHmm\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" FORMAT8(\"dd.MM.yyyy HHmm\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" FORMAT9(\"MM/dd/yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" DateTimeFormat (String pattern) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" public DateTimeFormatter getFormatter() {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" return formatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" * Parses a date string using various date and time formats.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" * @param dateString The date string to be parsed.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" * @return A LocalDateTime object if parsing is successful, otherwise null.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" public static LocalDateTime parseDate(String dateString) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" for (DateTimeFormat format : DateTimeFormat.values()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime d \u003d LocalDateTime.parse(dateString, format.getFormatter());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" return d;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" // Try the next format","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" // None of the formats matched","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" * Parses the user input and generates the corresponding command object.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" * @param input The user input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" assert input !\u003d null \u0026\u0026 input.length() \u003d\u003d 0 : \"String should not be null or empty\";","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" String first \u003d words[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" switch (first) {","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" case \"bye\":","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" case \"list\":","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" case \"delete\":","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" int s \u003d Integer.valueOf(words[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":" return new DeleteCommand(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" case \"mark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" int sMark \u003d Integer.valueOf(words[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":" return new MarkCommand(sMark);","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"kohkaijie"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"kohkaijie"},"content":" int sUnmark \u003d Integer.valueOf(words[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"kohkaijie"},"content":" return new UnmarkCommand(sUnmark);","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"kohkaijie"},"content":" case \"find\":","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"kohkaijie"},"content":" String search \u003d words[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"kohkaijie"},"content":" return new SearchCommand(search);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"kohkaijie"},"content":" case \"todo\":","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"kohkaijie"},"content":" if (input.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"The description of a task cannot be empty.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(5);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"kohkaijie"},"content":" return new AddCommand(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"kohkaijie"},"content":" case \"fixed\":","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"kohkaijie"},"content":" if (input.length() \u003c\u003d 6) {","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"The description of a task cannot be empty.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"kohkaijie"},"content":" int y \u003d input.indexOf(\"/for \");","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"kohkaijie"},"content":" if (y \u003d\u003d -1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"Please enter the duration of the task in the correct format.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(6, y - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"kohkaijie"},"content":" String duration \u003d input.substring(y + 5);","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"kohkaijie"},"content":" return new AddCommand(desc, duration);","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"kohkaijie"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"kohkaijie"},"content":" if (input.length() \u003c\u003d 9) {","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"The description of a task cannot be empty.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"kohkaijie"},"content":" int y \u003d input.indexOf(\"/by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"kohkaijie"},"content":" if (y \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"Please enter the deadline of the task in the correct format.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(9, y - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"kohkaijie"},"content":" String d \u003d input.substring(y + 4);","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime date \u003d parseDate(d);","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"kohkaijie"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"PLease enter the date and time in the correct format. \\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"kohkaijie"},"content":" return new AddCommand(desc, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"kohkaijie"},"content":" case \"event\":","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"kohkaijie"},"content":" if (input.length() \u003c\u003d 6) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"The description of a task cannot be empty.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"kohkaijie"},"content":" int fromIndex \u003d input.indexOf(\"/from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"kohkaijie"},"content":" int toIndex \u003d input.indexOf(\"/to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"kohkaijie"},"content":" if (fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"Please enter the start and end time of the task in the correct format.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(6, input.indexOf(\"/\") - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"kohkaijie"},"content":" String y \u003d input.substring(fromIndex + 6, toIndex).trim();","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"kohkaijie"},"content":" String e \u003d input.substring(toIndex + 4).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime start \u003d parseDate(y);","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime end \u003d parseDate(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"kohkaijie"},"content":" if (start \u003d\u003d null || end \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"PLease enter the date and time in the correct format. \\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"kohkaijie"},"content":" return new AddCommand(desc, start, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"kohkaijie"},"content":" default:","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"I\u0027m sorry, but I don\u0027t know what that means :(\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":160}},{"path":"src/main/java/functions/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package functions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" * Utility class for loading and saving task data from/to a file.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * The filepath of the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" protected String filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" * The File object representing the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" protected File file;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * Constructs a Storage object with the given filepath.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" * @param filepath The filepath of the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" this.file \u003d new File(filepath);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" * Loads task data from the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" * @return An ArrayList of task data read from the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" * @throws FileNotFoundException If the data file is not found.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" public ArrayList\u003cString\u003e loadFiles() throws FileNotFoundException {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" ArrayList\u003cString\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" while(s.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" tasks.add(s.nextLine());","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" * Writes text to a file.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" * @param filePath The filepath of the file to write to.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" * @param textToAdd The text to be written to the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while writing to the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" private void writeToFile(String filePath, String textToAdd) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" * Saves task data to the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" * @param tasks An ArrayList of Task objects to be saved.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while saving the data.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" public void saveFiles(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" int i \u003d tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" String taskList \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" for (int j \u003d 0; j \u003c i; j++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":" if (j \u003d\u003d i - 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":" taskList +\u003d tasks.get(j).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" taskList +\u003d tasks.get(j).toString() + System.lineSeparator();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" writeToFile(this.filepath, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":83}},{"path":"src/main/java/functions/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package functions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" * Manages a list of tasks and provides methods for task manipulation and retrieval.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * The ArrayList that stores the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * Constructs a TaskList object using task details from a list of strings.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * @param taskDetails The list of strings containing task details.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" public TaskList(ArrayList\u003cString\u003e taskDetails) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" for (String details : taskDetails) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" loadTask(details);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" * Constructs an empty TaskList object.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" * Loads a task from the provided input and adds it to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" * @param input The input string representing the task details.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" private void loadTask(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" if (input.startsWith(\"[D]\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" int y \u003d input.indexOf(\"(by: \");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(7, y - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" int end \u003d input.indexOf(\")\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" String by \u003d input.substring(y + 5, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime date \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" t \u003d new Deadline(desc, date);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" if (input.startsWith(\"[T]\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" t \u003d new ToDo(desc);","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" if (input.startsWith(\"[E]\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" int fromIndex \u003d input.indexOf(\"(from: \");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" int toIndex \u003d input.indexOf(\"to: \");","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(7, input.indexOf(\"(\") - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" String s \u003d input.substring(fromIndex + 7, toIndex - 1).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" String e \u003d input.substring(toIndex + 4, input.indexOf(\")\")).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime start \u003d LocalDateTime.parse(s, DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime end \u003d LocalDateTime.parse(e, DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" t \u003d new Event(desc, start, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" if (input.startsWith(\"[F]\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" int y \u003d input.indexOf(\"(for: \");","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(7, y - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" int d \u003d input.indexOf(\")\");","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" String duration \u003d input.substring(y + 6, d);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" t \u003d new FixedDuration(desc, duration);","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" tasks.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":" if (input.substring(3, 5).equals(\"[X]\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" * Creates a new task based on the provided description and date-time information.","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"kohkaijie"},"content":" * @param first The first LocalDateTime parameter (start or due date).","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"kohkaijie"},"content":" * @param second The second LocalDateTime parameter (end date for event).","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"kohkaijie"},"content":" * @return The created Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"kohkaijie"},"content":" public Task createTask(String desc, String duration, LocalDateTime first, LocalDateTime second) {","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"kohkaijie"},"content":" t \u003d new ToDo(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"kohkaijie"},"content":" if (duration !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"kohkaijie"},"content":" t \u003d new FixedDuration(desc, duration);","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"kohkaijie"},"content":" if (second !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"kohkaijie"},"content":" t \u003d new Event(desc, first, second);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"kohkaijie"},"content":" if (first !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"kohkaijie"},"content":" t \u003d new Deadline(desc, first);","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"kohkaijie"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"kohkaijie"},"content":" return t;","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"kohkaijie"},"content":" * Marks a task as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"kohkaijie"},"content":" * @param num The index of the task to be marked as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"kohkaijie"},"content":" * @return The marked Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"kohkaijie"},"content":" public Task markTask(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d this.tasks.get(num - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"kohkaijie"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"kohkaijie"},"content":" return t;","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"kohkaijie"},"content":" * Marks a completed task as not completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"kohkaijie"},"content":" * @param num The index of the task to be marked as not completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"kohkaijie"},"content":" * @return The unmarked Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"kohkaijie"},"content":" public Task unmarkTask(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d this.tasks.get(num - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"kohkaijie"},"content":" t.unmarkAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"kohkaijie"},"content":" return t;","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"kohkaijie"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"kohkaijie"},"content":" * @param num The index of the task to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"kohkaijie"},"content":" * @return The deleted Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"kohkaijie"},"content":" public Task deleteTask(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"kohkaijie"},"content":" return this.tasks.remove(num - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"kohkaijie"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"kohkaijie"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"kohkaijie"},"content":" public int numOfTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"kohkaijie"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"kohkaijie"},"content":" * Returns an ArrayList containing all tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"kohkaijie"},"content":" * @return An ArrayList containing all tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"kohkaijie"},"content":" public ArrayList\u003cTask\u003e showList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"kohkaijie"},"content":" return this.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"kohkaijie"},"content":" * Searches for tasks containing the specified description.","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"kohkaijie"},"content":" * @param description The description to search for.","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"kohkaijie"},"content":" * @return An ArrayList of tasks matching the search description.","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"kohkaijie"},"content":" public ArrayList\u003cTask\u003e searchTask(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"kohkaijie"},"content":" ArrayList\u003cTask\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"kohkaijie"},"content":" for (Task match : this.tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"kohkaijie"},"content":" if (match.getDescription().contains(description)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"kohkaijie"},"content":" results.add(match);","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"kohkaijie"},"content":" return results;","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":172}},{"path":"src/main/java/functions/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package functions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" * Manages user interface interactions and displays messages to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * Constructs a Ui object with a new Scanner for reading user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" public Ui(){","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" return \"Hello! I\u0027m CR7.CR7\\n\" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" * Displays a message about adding a task and the current task count.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * @param t The task that was added.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" public String showTaskMsg(Task t, TaskList tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" + \" \" + t.toString() + \"\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" + \"Now you have \" + tasks.numOfTasks() + \" tasks in the list\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" * Displays an exit message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" public String showExitMsg() {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" return \"Bye! Hope to see you again soon! SIUUUU\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" * Displays a list of tasks to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The ArrayList of tasks to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" public String showListMsg(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" String list \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" for (int i \u003d 1; i \u003c tasks.size() + 1; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" Task x \u003d tasks.get(i - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" list +\u003d i + \".\" + x.toString() + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" return list;","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" * Displays matching tasks to the user after a search.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The ArrayList of matching tasks to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" public String showMatchesMsg(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" return \"There are no tasks matching your description. \" +","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" \"Please try another search keyword.\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" String list \u003d \"Here are the matching tasks in your list:\";","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" for (int i \u003d 1; i \u003c tasks.size() + 1; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":" Task x \u003d tasks.get(i - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" list +\u003d i + \".\" + x.toString() + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" return list;","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" * Displays a message about a task being deleted and the updated task count.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":" * @param k The task that was deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":" * @param numOfTasks The updated number of tasks after deletion.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" public String showDeleteMsg(Task k, int numOfTasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"kohkaijie"},"content":" + \" \" + k.toString() + \"\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"kohkaijie"},"content":" + \"Now you have \" + numOfTasks + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"kohkaijie"},"content":" * Displays a message about a task being marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"kohkaijie"},"content":" * @param k The task that was marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"kohkaijie"},"content":" public String showMarkMsg(Task k) {","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"kohkaijie"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"kohkaijie"},"content":" + \" \" + k.toString() + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"kohkaijie"},"content":" * Displays a message about a task being marked as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"kohkaijie"},"content":" * @param k The task that was marked as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"kohkaijie"},"content":" public String showUnmarkMsg(Task k) {","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"kohkaijie"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"kohkaijie"},"content":" + \" \" + k.toString() + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"kohkaijie"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"kohkaijie"},"content":" * @param errorMsg The error message to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"kohkaijie"},"content":" public String showErrorMsg(String errorMsg) {","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"kohkaijie"},"content":" return \"OOPS!!! I\u0027ve encountered a problem here!\"","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"kohkaijie"},"content":" + errorMsg;","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":117}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" * Represents a task with a deadline, including the description and the due date.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * The due date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * Constructs a Deadline task with the given description and due date.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * @param by The due date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" * @return A string representation of the deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" String newDate \u003d by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" return \"[D]\" + super.toString() + \" (by: \" + newDate + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":38}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" * Represents an event task with a description, start time, and end time.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * The start time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * The end time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * Constructs an Event task with the given description, start time, and end time.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" * @param start The start time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" * @param end The end time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" public Event(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" * Returns a string representation of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" * @return A string representation of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" String newStart \u003d start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" String newEnd \u003d end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" return \"[E]\" + super.toString() + \" (from: \" + newStart + \" to: \" + newEnd + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":46}},{"path":"src/main/java/tasks/FixedDuration.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"public class FixedDuration extends Task {","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":" * The fixed duration of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" protected String duration;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" * Constructs a Deadline task with the given description and due date.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" * @param duration The fixed duration of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" public FixedDuration(String description, String duration) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" super(description);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" this.duration \u003d duration;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * @return A string representation of the deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" return \"[F]\" + super.toString() + \" (for: \" + this.duration + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"kohkaijie":30}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"public class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" * The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" protected String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" * Indicates whether the task is marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * Constructs a Task with the given description.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" * @return The status icon (\"X\" if done, \" \" if not done).","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"kohkaijie":69}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":" * Represents a to-do task with a description.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" * Constructs a ToDo task with the given description.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * Returns a string representation of the to-do task.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * @return A string representation of the to-do task.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"kohkaijie":26}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"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\"CR7.MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\" \u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":19}},{"path":"src/test/java/commands/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import functions.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import functions.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"public class CommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" private Command command;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" @BeforeEach","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" public void setUp() {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" // Create a mock Command instance for testing","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" command \u003d new Command() {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" // Implement a mock execute method for testing","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" return \"Mock execute method\";","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" };","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" public void testExecute() {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" Storage storage \u003d new Storage(\"data.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" String result \u003d command.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" assertEquals(\"Mock execute method\", result);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" fail(\"IOException should not be thrown during testing.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" public void testIsExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" assertFalse(command.isExit()); // The default implementation should return false","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"kohkaijie":47}},{"path":"src/test/java/commands/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import functions.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import functions.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" public void testExecute() {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" // Create a TaskList with some tasks for testing","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" tasks.createTask(\"Task 1\", null, null, null);","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" tasks.createTask(\"Task 2\", null, null, null);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" tasks.createTask(\"Task 3\", null, null, null);","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" Storage storage \u003d new Storage(\"data.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" // Create a DeleteCommand with a task number","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" DeleteCommand deleteCommand \u003d new DeleteCommand(2);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" String result \u003d deleteCommand.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" // Assert that the result matches the expected output","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" assertEquals(\"Noted. I\u0027ve removed this task:\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" \" [T][ ] Task 2\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" \"Now you have 2 tasks in the list.\\n\", result);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" // Assert that the TaskList has one less task after deletion","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" assertEquals(2, tasks.numOfTasks());","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" fail(\"IOException should not be thrown during testing.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"kohkaijie":40}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"todo Read a book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"deadline Submit assignment /by 2023-09-01 10:00","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"event Team meeting /from 2023-09-02 14:00 /to 2023-09-02 16:00","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"delete 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"todo Write a report","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"event Conference call /from 2023-09-03 09:00 /to 2023-09-03 11:00","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"kohkaijie":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":"kohkaijie"},"content":"java -classpath ..\\bin CR7 \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":{"kohkaijie":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":"kohkaijie"},"content":"java -classpath ../bin CR7 \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"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":{"kohkaijie":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":"kohkaijie"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-16"},{"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":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"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":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":"checkstyle {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" mainClass.set(\"CR7\")","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" archiveBaseName \u003d \"CR7\"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" archiveFileName \u003d \u0027CR7.jar\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"kohkaijie":24,"-":40}},{"path":"data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"[T][ ] Task 1","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"[T][ ] Task 3","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"kohkaijie":2}},{"path":"src/main/data/CR7.CR7.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"[T][ ] run","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"[T][ ] jump","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"[T][ ] swim","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"[T][ ] siuuu","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"[T][ ] swim","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"[E][ ] jump (from: Oct 10 2000 09:00 PM to: Oct 10 2000 10:00 PM)","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"[T][ ] drink","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"[F][ ] jump (for: 2 hours)","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"kohkaijie":8}},{"path":"src/main/java/CR7/CR7.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package CR7;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import commands.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" * The main class for running the CR7.CR7 task management application.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"public class CR7 {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * Runs the CR7.CR7 application by displaying a welcome message, processing user commands,","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * and executing corresponding actions.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * Constructs a CR7.CR7 object with the provided file path for data storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * @param filePath The file path for storing task data.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" public CR7(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" assert filePath !\u003d null \u0026\u0026 !filePath.isEmpty() : \"File path should not be null or empty!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" tasks \u003d new TaskList(storage.loadFiles());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" assert tasks !\u003d null : \"Tasks should be initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" ui.showErrorMsg(\"Error: Task data file not found.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" * The main method to start the CR7.CR7 application.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" * @param args The command-line arguments (not used in this context).","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" new CR7(\"src/main/data/CR7.CR7.txt\").run();","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" assert input !\u003d null \u0026\u0026 !input.trim().isEmpty() : \"Input should not be null or empty!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" String response \u003d c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" return \"Cristiano Ronaldo will always be the GOAT. And here is why: \\n\" + response;","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" return ui.showErrorMsg(\"An error occurred while processing the command.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"kohkaijie":67}},{"path":"src/main/java/CR7/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package CR7;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" dialog.setWrapText(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":62}},{"path":"src/main/java/CR7/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package CR7;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":12}},{"path":"src/main/java/CR7/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package CR7;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" private CR7 cr7 \u003d new CR7(\"src/main/data/CR7.CR7.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(cr7);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":31}},{"path":"src/main/java/CR7/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package CR7;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * Controller for CR7.MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" private CR7 cr7;","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" private String userImagePath \u003d \"/images/dillonbrooks.jpg\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" private String dukeImagePath \u003d \"/images/ronaldosiu.jpg\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(userImagePath));","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(dukeImagePath));","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" private boolean isWelcomeMessageSent \u003d false; // Flag to track if welcome message has been sent","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" sendWelcomeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" public void setDuke(CR7 d) {","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" cr7 \u003d d;","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" * Creates and sends the welcome message if it hasn\u0027t been sent yet.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" private void sendWelcomeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" if (!isWelcomeMessageSent) {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" String welcomeMsg \u003d \"Welcome to the chat! Type \u0027bye\u0027 to exit.\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" DialogBox.getDukeDialog(welcomeMsg, dukeImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" isWelcomeMessageSent \u003d true; // Set the flag to true","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" String exitMsg \u003d \"Bye! Hope to see you again soon! SIUUUU\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" DialogBox.getDukeDialog(exitMsg, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" // Create a PauseTransition to delay the application exit","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(2)); // Adjust the duration as needed","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" delay.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":" Platform.exit(); // Exit the application after the delay","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" delay.play();","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":" String response \u003d cr7.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"kohkaijie"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":86}},{"path":"src/main/java/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to add a task to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" protected String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" protected String duration;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" protected LocalDateTime first;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" protected LocalDateTime second;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * Constructs an AddCommand with a description.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" * @param desc The description of the task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" public AddCommand(String desc) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" this.duration \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" this.first \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" this.second \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" * Constructs an AddCommand with a description and a specific date.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" * @param desc The description of the task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" * @param date The specific date associated with the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" public AddCommand(String desc, LocalDateTime date) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" this.duration \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" this.first \u003d date;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" this.second \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" * Constructs an AddCommand with a description and a specific duration.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" * @param desc The description of the task to be added.","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" * @param duration The specific duration of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" public AddCommand(String desc, String duration) {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" this.duration \u003d duration;","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" this.first \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" this.second \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" * Constructs an AddCommand with a description and start and end dates.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" * @param desc The description of the task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" * @param start The start date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" * @param end The end date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" public AddCommand(String desc, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" this.duration \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" this.first \u003d start;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" this.second \u003d end;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" * Executes the AddCommand to create a task, display a message, and save changes.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to add the task to.","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface for saving data.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d tasks.createTask(this.desc, this.duration, this.first, this.second);","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":" storage.saveFiles(tasks.showList());","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" return ui.showTaskMsg(t, tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":83}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" * The base abstract class for different types of commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * Executes the specific command on the task list, interacts with the user interface, and manages storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to perform the command on.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface for saving and loading data.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * @return Returns true if the command is an exit command, and false otherwise.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":30}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" protected int num;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" * Constructs a DeleteCommand with the task number to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * @param num The number of the task to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" public DeleteCommand(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" this.num \u003d num;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" * Executes the DeleteCommand to delete a task, display a message, and save changes.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to delete the task from.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface for saving data.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d tasks.deleteTask(num);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" storage.saveFiles(tasks.showList());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" return ui.showDeleteMsg(t, tasks.numOfTasks());","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":38}},{"path":"src/main/java/commands/ErrorCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to display an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"public class ErrorCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" protected String errorMsg;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" * Constructs an ErrorCommand with an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * @param errorMsg The error message to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" public ErrorCommand(String errorMsg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" this.errorMsg \u003d errorMsg;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * Executes the ErrorCommand to display an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" return ui.showErrorMsg(this.errorMsg);","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":31}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" * Constructs an ExitCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" public ExitCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" * Executes the ExitCommand to display an exit message.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" return ui.showExitMsg();","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * @return Returns true indicating that this command is an exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":35}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to list tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * Constructs a ListCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" public ListCommand() {}","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * Executes the ListCommand to display the list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to list tasks from.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" return ui.showListMsg(tasks.showList());","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":28}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to mark a task as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" protected int num;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * Constructs a MarkCommand with the task number to be marked as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * @param num The number of the task to be marked as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" public MarkCommand(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" this.num \u003d num;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * Executes the MarkCommand to mark a task as completed, display a message, and save changes.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to mark the task in.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface for saving data.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d tasks.markTask(this.num);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" storage.saveFiles(tasks.showList());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" return ui.showMarkMsg(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":37}},{"path":"src/main/java/commands/SearchCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to search for tasks based on a keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"public class SearchCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" * The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" String searchWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * Constructs a SearchCommand with the keyword to search for.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * @param searchWord The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" public SearchCommand(String searchWord) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" this.searchWord \u003d searchWord;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * Executes the SearchCommand to search for tasks based on the keyword,","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * display matching tasks, and show the search results.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to search for tasks in.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface (not used in this command).","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" ArrayList\u003cTask\u003e matches \u003d tasks.searchTask(this.searchWord);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" return ui.showMatchesMsg(matches);","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"kohkaijie":38}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import functions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" * Represents a command to unmark a completed task.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" protected int num;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * Constructs an UnmarkCommand with the task number to be unmarked.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * @param num The number of the task to be unmarked.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" public UnmarkCommand(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" this.num \u003d num;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * Executes the UnmarkCommand to unmark a completed task, display a message, and save changes.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList to unmark the task in.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * @param storage The storage interface for saving data.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while interacting with storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d tasks.unmarkTask(this.num);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" storage.saveFiles(tasks.showList());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" return ui.showUnmarkMsg(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":37}},{"path":"src/main/java/functions/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package functions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import commands.AddCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import commands.Command;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import commands.ErrorCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import commands.ListCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"import commands.MarkCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"import commands.SearchCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"import commands.UnmarkCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * Utility class for parsing user input and generating appropriate commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" * Enumeration representing different date and time formats for parsing.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" enum DateTimeFormat {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" FORMAT1(\"yyyy-MM-dd HH:mm\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" FORMAT2(\"dd.MM.yyyy HH:mm\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" FORMAT3(\"MM/dd/yyyy HH:mm\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" FORMAT4(\"yyyy-MM-dd hh:mm a\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" FORMAT5(\"dd.MM.yyyy hh:mm a\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" FORMAT6(\"MM/dd/yyyy hh:mm a\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" FORMAT7(\"yyyy-MM-dd HHmm\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" FORMAT8(\"dd.MM.yyyy HHmm\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" FORMAT9(\"MM/dd/yyyy HHmm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" DateTimeFormat (String pattern) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(pattern);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" public DateTimeFormatter getFormatter() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" return formatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" * Parses a date string using various date and time formats.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" * @param dateString The date string to be parsed.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" * @return A LocalDateTime object if parsing is successful, otherwise null.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" public static LocalDateTime parseDate(String dateString) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" for (DateTimeFormat format : DateTimeFormat.values()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime d \u003d LocalDateTime.parse(dateString, format.getFormatter());","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" return d;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" // Try the next format","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" // None of the formats matched","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" * Parses the user input and generates the corresponding command object.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":" * @param input The user input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" * @return A Command object representing the parsed command.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" assert input !\u003d null \u0026\u0026 input.length() \u003d\u003d 0 : \"String should not be null or empty\";","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":" String first \u003d words[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" switch (first) {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" case \"bye\":","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" case \"list\":","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"kohkaijie"},"content":" case \"delete\":","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"kohkaijie"},"content":" int s \u003d Integer.valueOf(words[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"kohkaijie"},"content":" return new DeleteCommand(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"kohkaijie"},"content":" case \"mark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"kohkaijie"},"content":" int sMark \u003d Integer.valueOf(words[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"kohkaijie"},"content":" return new MarkCommand(sMark);","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"kohkaijie"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"kohkaijie"},"content":" int sUnmark \u003d Integer.valueOf(words[1]);","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"kohkaijie"},"content":" return new UnmarkCommand(sUnmark);","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"kohkaijie"},"content":" case \"find\":","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"kohkaijie"},"content":" String search \u003d words[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"kohkaijie"},"content":" return new SearchCommand(search);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"kohkaijie"},"content":" case \"todo\":","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"kohkaijie"},"content":" if (input.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"The description of a task cannot be empty.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"kohkaijie"},"content":" String todoDesc \u003d input.substring(5);","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"kohkaijie"},"content":" return new AddCommand(todoDesc);","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"kohkaijie"},"content":" case \"fixed\":","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"kohkaijie"},"content":" if (input.length() \u003c\u003d 6) {","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"The description of a task cannot be empty.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"kohkaijie"},"content":" int y \u003d input.indexOf(\"/for \");","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"kohkaijie"},"content":" if (y \u003d\u003d -1) {","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"Please enter the duration of the task in the correct format.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"kohkaijie"},"content":" String fixedDesc \u003d input.substring(6, y - 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"kohkaijie"},"content":" String duration \u003d input.substring(y + 5);","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"kohkaijie"},"content":" return new AddCommand(fixedDesc, duration);","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"kohkaijie"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"kohkaijie"},"content":" if (input.length() \u003c\u003d 9) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"The description of a task cannot be empty.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"kohkaijie"},"content":" int z \u003d input.indexOf(\"/by \");","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"kohkaijie"},"content":" if (z \u003d\u003d -1) {","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"Please enter the deadline of the task in the correct format.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(9, z - 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"kohkaijie"},"content":" String d \u003d input.substring(z + 4);","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime date \u003d parseDate(d);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"kohkaijie"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"PLease enter the date and time in the correct format. \\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"kohkaijie"},"content":" return new AddCommand(desc, date);","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"kohkaijie"},"content":" case \"event\":","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"kohkaijie"},"content":" if (input.length() \u003c\u003d 6) {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"The description of a task cannot be empty.\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"kohkaijie"},"content":" int fromIndex \u003d input.indexOf(\"/from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"kohkaijie"},"content":" int toIndex \u003d input.indexOf(\"/to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"kohkaijie"},"content":" if (fromIndex \u003d\u003d -1 || toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"Please enter the start and end time of the task in the correct format.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"kohkaijie"},"content":" String name \u003d input.substring(6, input.indexOf(\"/\") - 1);","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"kohkaijie"},"content":" String g \u003d input.substring(fromIndex + 6, toIndex).trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"kohkaijie"},"content":" String e \u003d input.substring(toIndex + 4).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime start \u003d parseDate(g);","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime end \u003d parseDate(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"kohkaijie"},"content":" if (start \u003d\u003d null || end \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"PLease enter the date and time in the correct format. \\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"kohkaijie"},"content":" return new AddCommand(name, start, end);","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"kohkaijie"},"content":" default:","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"kohkaijie"},"content":" return new ErrorCommand(\"I\u0027m sorry, but I don\u0027t know what that means :(\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":164}},{"path":"src/main/java/functions/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package functions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" * Utility class for loading and saving task data from/to a file.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * The filepath of the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" protected String filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" * The File object representing the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" protected File file;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * Constructs a Storage object with the given filepath.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" * @param filepath The filepath of the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" this.file \u003d new File(filepath);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" * Loads task data from the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" * @return An ArrayList of task data read from the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" * @throws FileNotFoundException If the data file is not found.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" public ArrayList\u003cString\u003e loadFiles() throws FileNotFoundException {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" ArrayList\u003cString\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" while(s.hasNext()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" tasks.add(s.nextLine());","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" * Writes text to a file.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" * @param filePath The filepath of the file to write to.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" * @param textToAdd The text to be written to the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while writing to the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" private void writeToFile(String filePath, String textToAdd) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" * Saves task data to the data file.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" * @param tasks An ArrayList of Task objects to be saved.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":" * @throws IOException If an I/O error occurs while saving the data.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" public void saveFiles(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" int i \u003d tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" String taskList \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" for (int j \u003d 0; j \u003c i; j++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":" if (j \u003d\u003d i - 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":" taskList +\u003d tasks.get(j).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" taskList +\u003d tasks.get(j).toString() + System.lineSeparator();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" writeToFile(this.filepath, taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":83}},{"path":"src/main/java/functions/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package functions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import tasks.*;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" * Manages a list of tasks and provides methods for task manipulation and retrieval.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" * The ArrayList that stores the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * Constructs a TaskList object using task details from a list of strings.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * @param taskDetails The list of strings containing task details.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" public TaskList(ArrayList\u003cString\u003e taskDetails) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" for (String details : taskDetails) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" loadTask(details);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" * Constructs an empty TaskList object.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" public TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" * Loads a task from the provided input and adds it to the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" * @param input The input string representing the task details.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" private void loadTask(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" if (input.startsWith(\"[D]\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" int y \u003d input.indexOf(\"(by: \");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(7, y - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" int end \u003d input.indexOf(\")\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" String by \u003d input.substring(y + 5, end);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime date \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" t \u003d new Deadline(desc, date);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" if (input.startsWith(\"[T]\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" t \u003d new ToDo(desc);","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" if (input.startsWith(\"[E]\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" int fromIndex \u003d input.indexOf(\"(from: \");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" int toIndex \u003d input.indexOf(\"to: \");","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(7, input.indexOf(\"(\") - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" String s \u003d input.substring(fromIndex + 7, toIndex - 1).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" String e \u003d input.substring(toIndex + 4, input.indexOf(\")\")).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime start \u003d LocalDateTime.parse(s, DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" LocalDateTime end \u003d LocalDateTime.parse(e, DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" t \u003d new Event(desc, start, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" if (input.startsWith(\"[F]\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" int y \u003d input.indexOf(\"(for: \");","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":" String desc \u003d input.substring(7, y - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" int d \u003d input.indexOf(\")\");","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" String duration \u003d input.substring(y + 6, d);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" t \u003d new FixedDuration(desc, duration);","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" tasks.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":" if (input.substring(3, 5).equals(\"[X]\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" * Creates a new task based on the provided description and date-time information.","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"kohkaijie"},"content":" * @param first The first LocalDateTime parameter (start or due date).","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"kohkaijie"},"content":" * @param second The second LocalDateTime parameter (end date for event).","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"kohkaijie"},"content":" * @return The created Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"kohkaijie"},"content":" public Task createTask(String desc, String duration, LocalDateTime first, LocalDateTime second) {","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"kohkaijie"},"content":" t \u003d new ToDo(desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"kohkaijie"},"content":" if (duration !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"kohkaijie"},"content":" t \u003d new FixedDuration(desc, duration);","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"kohkaijie"},"content":" if (second !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"kohkaijie"},"content":" t \u003d new Event(desc, first, second);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"kohkaijie"},"content":" if (first !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"kohkaijie"},"content":" t \u003d new Deadline(desc, first);","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"kohkaijie"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"kohkaijie"},"content":" return t;","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"kohkaijie"},"content":" * Marks a task as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"kohkaijie"},"content":" * @param num The index of the task to be marked as completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"kohkaijie"},"content":" * @return The marked Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"kohkaijie"},"content":" public Task markTask(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d this.tasks.get(num - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"kohkaijie"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"kohkaijie"},"content":" return t;","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"kohkaijie"},"content":" * Marks a completed task as not completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"kohkaijie"},"content":" * @param num The index of the task to be marked as not completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"kohkaijie"},"content":" * @return The unmarked Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"kohkaijie"},"content":" public Task unmarkTask(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"kohkaijie"},"content":" Task t \u003d this.tasks.get(num - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"kohkaijie"},"content":" t.unmarkAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"kohkaijie"},"content":" return t;","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"kohkaijie"},"content":" * Deletes a task from the task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"kohkaijie"},"content":" * @param num The index of the task to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"kohkaijie"},"content":" * @return The deleted Task object.","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"kohkaijie"},"content":" public Task deleteTask(int num) {","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"kohkaijie"},"content":" return this.tasks.remove(num - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"kohkaijie"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"kohkaijie"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"kohkaijie"},"content":" public int numOfTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"kohkaijie"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"kohkaijie"},"content":" * Returns an ArrayList containing all tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"kohkaijie"},"content":" * @return An ArrayList containing all tasks in the list.","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"kohkaijie"},"content":" public ArrayList\u003cTask\u003e showList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"kohkaijie"},"content":" return this.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"kohkaijie"},"content":" * Searches for tasks containing the specified description.","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"kohkaijie"},"content":" * @param description The description to search for.","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"kohkaijie"},"content":" * @return An ArrayList of tasks matching the search description.","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"kohkaijie"},"content":" public ArrayList\u003cTask\u003e searchTask(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"kohkaijie"},"content":" ArrayList\u003cTask\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"kohkaijie"},"content":" for (Task match : this.tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"kohkaijie"},"content":" if (match.getDescription().contains(description)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"kohkaijie"},"content":" results.add(match);","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"kohkaijie"},"content":" return results;","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":172}},{"path":"src/main/java/functions/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package functions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" * Manages user interface interactions and displays messages to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * Constructs a Ui object with a new Scanner for reading user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" public Ui(){","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" return \"Hello! I\u0027m CR7.CR7\\n\" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" * Displays a message about adding a task and the current task count.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" * @param t The task that was added.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The TaskList containing the tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" public String showTaskMsg(Task t, TaskList tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" + \" \" + t.toString() + \"\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" + \"Now you have \" + tasks.numOfTasks() + \" tasks in the list\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" * Displays an exit message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" public String showExitMsg() {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" return \"Bye! Hope to see you again soon! SIUUUU\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" * Displays a list of tasks to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The ArrayList of tasks to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" public String showListMsg(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" String list \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":" for (int i \u003d 1; i \u003c tasks.size() + 1; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" Task x \u003d tasks.get(i - 1);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" list +\u003d i + \".\" + x.toString() + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" return list;","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" * Displays matching tasks to the user after a search.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" * @param tasks The ArrayList of matching tasks to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" public String showMatchesMsg(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" return \"There are no tasks matching your description. \" +","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" \"Please try another search keyword.\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" String list \u003d \"Here are the matching tasks in your list:\";","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":" for (int i \u003d 1; i \u003c tasks.size() + 1; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":" Task x \u003d tasks.get(i - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"kohkaijie"},"content":" list +\u003d i + \".\" + x.toString() + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"kohkaijie"},"content":" return list;","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"kohkaijie"},"content":" * Displays a message about a task being deleted and the updated task count.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"kohkaijie"},"content":" * @param k The task that was deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"kohkaijie"},"content":" * @param numOfTasks The updated number of tasks after deletion.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"kohkaijie"},"content":" public String showDeleteMsg(Task k, int numOfTasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"kohkaijie"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"kohkaijie"},"content":" + \" \" + k.toString() + \"\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"kohkaijie"},"content":" + \"Now you have \" + numOfTasks + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"kohkaijie"},"content":" * Displays a message about a task being marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"kohkaijie"},"content":" * @param k The task that was marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"kohkaijie"},"content":" public String showMarkMsg(Task k) {","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"kohkaijie"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"kohkaijie"},"content":" + \" \" + k.toString() + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"kohkaijie"},"content":" * Displays a message about a task being marked as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"kohkaijie"},"content":" * @param k The task that was marked as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"kohkaijie"},"content":" public String showUnmarkMsg(Task k) {","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"kohkaijie"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"kohkaijie"},"content":" + \" \" + k.toString() + \"\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"kohkaijie"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"kohkaijie"},"content":" * @param errorMsg The error message to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"kohkaijie"},"content":" public String showErrorMsg(String errorMsg) {","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"kohkaijie"},"content":" return \"OOPS!!! I\u0027ve encountered a problem here!\"","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"kohkaijie"},"content":" + errorMsg;","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kohkaijie":117}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" * Represents a task with a deadline, including the description and the due date.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * The due date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * Constructs a Deadline task with the given description and due date.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * @param by The due date of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" * @return A string representation of the deadline task.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" String newDate \u003d by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" return \"[D]\" + super.toString() + \" (by: \" + newDate + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":38}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" * Represents an event task with a description, start time, and end time.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" * The start time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" * The end time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * Constructs an Event task with the given description, start time, and end time.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" * @param start The start time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" * @param end The end time of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" public Event(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" * Returns a string representation of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" * @return A string representation of the event.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" String newStart \u003d start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" String newEnd \u003d end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy hh:mm a\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" return \"[E]\" + super.toString() + \" (from: \" + newStart + \" to: \" + newEnd + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"kohkaijie":46}},{"path":"src/main/java/tasks/FixedDuration.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"public class FixedDuration extends Task {","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":" * The fixed duration of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" protected String duration;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" * Constructs a Deadline task with the given description and due date.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" * @param duration The fixed duration of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" public FixedDuration(String description, String duration) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" super(description);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" this.duration \u003d duration;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" * @return A string representation of the deadline task.","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" return \"[F]\" + super.toString() + \" (for: \" + this.duration + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"kohkaijie":30}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"public class Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" * The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" protected String description;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" * Indicates whether the task is marked as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" * Constructs a Task with the given description.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" * @return The status icon (\"X\" if done, \" \" if not done).","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"kohkaijie"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"kohkaijie"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"kohkaijie"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"kohkaijie"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"kohkaijie"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"kohkaijie"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"kohkaijie"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"kohkaijie"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"kohkaijie"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"kohkaijie":69}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":" * Represents a to-do task with a description.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" * Constructs a ToDo task with the given description.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" super(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" * Returns a string representation of the to-do task.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" * @return A string representation of the to-do task.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"kohkaijie":26}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"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\"CR7.MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\" \u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kohkaijie":19}},{"path":"src/test/java/commands/CommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import functions.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import functions.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":"public class CommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" private Command command;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" @BeforeEach","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" public void setUp() {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" // Create a mock Command instance for testing","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":" command \u003d new Command() {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":" // Implement a mock execute method for testing","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" return \"Mock execute method\";","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":" };","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" public void testExecute() {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" Storage storage \u003d new Storage(\"data.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" String result \u003d command.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" assertEquals(\"Mock execute method\", result);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" fail(\"IOException should not be thrown during testing.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"kohkaijie"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"kohkaijie"},"content":" public void testIsExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"kohkaijie"},"content":" assertFalse(command.isExit()); // The default implementation should return false","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"kohkaijie":47}},{"path":"src/test/java/commands/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"package commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"import functions.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"import functions.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"kohkaijie"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"kohkaijie"},"content":" public void testExecute() {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"kohkaijie"},"content":" // Create a TaskList with some tasks for testing","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"kohkaijie"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"kohkaijie"},"content":" tasks.createTask(\"Task 1\", null, null, null);","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"kohkaijie"},"content":" tasks.createTask(\"Task 2\", null, null, null);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"kohkaijie"},"content":" tasks.createTask(\"Task 3\", null, null, null);","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"kohkaijie"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"kohkaijie"},"content":" Storage storage \u003d new Storage(\"data.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"kohkaijie"},"content":" // Create a DeleteCommand with a task number","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"kohkaijie"},"content":" DeleteCommand deleteCommand \u003d new DeleteCommand(2);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"kohkaijie"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"kohkaijie"},"content":" String result \u003d deleteCommand.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"kohkaijie"},"content":" // Assert that the result matches the expected output","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"kohkaijie"},"content":" assertEquals(\"Noted. I\u0027ve removed this task:\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"kohkaijie"},"content":" \" [T][ ] Task 2\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"kohkaijie"},"content":" \"Now you have 2 tasks in the list.\\n\", result);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"kohkaijie"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"kohkaijie"},"content":" // Assert that the TaskList has one less task after deletion","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"kohkaijie"},"content":" assertEquals(2, tasks.numOfTasks());","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"kohkaijie"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"kohkaijie"},"content":" fail(\"IOException should not be thrown during testing.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"kohkaijie"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"kohkaijie"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"kohkaijie":40}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kohkaijie"},"content":"todo Read a book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"kohkaijie"},"content":"deadline Submit assignment /by 2023-09-01 10:00","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"kohkaijie"},"content":"event Team meeting /from 2023-09-02 14:00 /to 2023-09-02 16:00","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"kohkaijie"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"kohkaijie"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"kohkaijie"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"kohkaijie"},"content":"delete 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"kohkaijie"},"content":"todo Write a report","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"kohkaijie"},"content":"event Conference call /from 2023-09-03 09:00 /to 2023-09-03 11:00","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"kohkaijie"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"kohkaijie"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"kohkaijie":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":"kohkaijie"},"content":"java -classpath ..\\bin CR7 \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":{"kohkaijie":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":"kohkaijie"},"content":"java -classpath ../bin CR7 \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-23"},{"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":{"kohkaijie":1,"-":37}}] diff --git a/kohkaijie_ip_master/commits.json b/kohkaijie_ip_master/commits.json index de347658..312d4e0c 100644 --- a/kohkaijie_ip_master/commits.json +++ b/kohkaijie_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"kohkaijie":[{"date":"2023-08-22","commitResults":[{"hash":"52010eb46a7d119b70d4176994f8893b26f55d50","isMergeCommit":false,"messageTitle":"level 0","messageBody":"","tags":["Level-0,Rename,Greet,Exit"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}},{"hash":"83884e9f6eee85f1328c2ba206996200f0399357","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","tags":["level-1,Echo"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"a27870f0d1a578d625350a11584c2fda775675ca","isMergeCommit":false,"messageTitle":"level 2","messageBody":"","tags":["level-2,add,list"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"9bc996611a871506a77562fe6315187664281285","isMergeCommit":false,"messageTitle":"level 3","messageBody":"","tags":["level-3,mark-as-done"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":3}}}]},{"date":"2023-08-23","commitResults":[{"hash":"c1fb3dd3707c0693c1f6c2c96c737afc40b36c2e","isMergeCommit":false,"messageTitle":"level 4","messageBody":"","tags":["level-4,ToDos,Events,Deadlines"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":25}}},{"hash":"94517dffed5fbf01ed10312e07fdf94291b13bd4","isMergeCommit":false,"messageTitle":"level 5","messageBody":"","tags":["level-5,error-handling"],"fileTypesAndContributionMap":{"java":{"insertions":122,"deletions":76}}},{"hash":"bffa891ad725519667017050350c7f3580d0f0a9","isMergeCommit":false,"messageTitle":"level 6","messageBody":"","tags":["level-6,delete"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":16}}},{"hash":"04372f16412131c02b9b71923e2cfdd44548b2bf","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"db6900be6591c0c7f6a30d212dfa83d9d6a49f7a","isMergeCommit":false,"messageTitle":"level 7","messageBody":"","tags":["level-7,save"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":137,"deletions":65}}}]},{"date":"2023-08-30","commitResults":[{"hash":"66956f196567756a1ebf8d7f97cf65e0b24e5f16","isMergeCommit":false,"messageTitle":"level 8","messageBody":"","tags":["level-8-date"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":183,"deletions":125}}},{"hash":"cf24071ce0120e25b02b602be32d5797695d99d7","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/nus-cs2103-AY2324S1/ip","messageBody":"","tags":["A-gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"a781312e974bdca9da0a7bcb62cfe36170e92a77","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":503,"deletions":255}}},{"hash":"d83755d26a9a8931131eaaaa02591102e0a803f1","isMergeCommit":false,"messageTitle":"A-branch","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":69,"deletions":19}}}]},{"date":"2023-09-03","commitResults":[{"hash":"5c6e1c5009eb138a744bf43227eacf415469f831","isMergeCommit":false,"messageTitle":"level 9","messageBody":"","tags":["level-9,find"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":34}}},{"hash":"e300d0cc2df73b4436e0195e309795f5a3175d66","isMergeCommit":false,"messageTitle":"coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"java":{"insertions":8,"deletions":16}}}]},{"date":"2023-09-04","commitResults":[{"hash":"fc0cdb66ac937ed29acadb60cc009cd8de445a60","isMergeCommit":false,"messageTitle":"java docs","messageBody":"","tags":["A-JavaDoc","A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":481,"deletions":17}}}]},{"date":"2023-09-08","commitResults":[{"hash":"f742fef8c2e3fa1effee886b83728832fdf4ca74","isMergeCommit":false,"messageTitle":"Add GUI for chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":1},"txt":{"insertions":4,"deletions":2},"fxml":{"insertions":56,"deletions":0},"java":{"insertions":236,"deletions":88}}}]},{"date":"2023-09-09","commitResults":[{"hash":"6fe4618c10a4a670517d016ea79f09d5c726667d","isMergeCommit":false,"messageTitle":"Add two J-Unit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"fxml":{"insertions":5,"deletions":1},"java":{"insertions":130,"deletions":22}}}]},{"date":"2023-09-10","commitResults":[{"hash":"e177c60440586f4134a2b73a8d36d999d2741376","isMergeCommit":false,"messageTitle":"Assertions: add Assertions to code","messageBody":"There may be potential bugs that violate how the code should behave.\n\nUse of assert feature to document important assumptions that should hold\nat various points in the code.\n\nWe ensure that during runtime that bugs are discovered and execution\nis terminated early.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":10},"fxml":{"insertions":4,"deletions":29},"java":{"insertions":43,"deletions":33}}},{"hash":"255f638db4780eae878a0b9569565de7e8db9ec3","isMergeCommit":true,"messageTitle":"Merge pull request #1 from kohkaijie/branch-A-Assertions","messageBody":"Assertions: add Assertions to code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"2c9aa815c40531dfce79c84723eb8327a8d554c7","isMergeCommit":false,"messageTitle":"FixedDuration task class: Add support for FixedDuration task type","messageBody":"CR7 did not provide support for tasks with a fixed duration but no\nstart or end time.\n\nAdding the FixedDuration task class allows users to manage such tasks.\n\nLet\u0027s add the FixedDuration class as a subclass of the Task class.\n\nUsing inheritance as Fixed Duration tasks are a specific type of task\nwith similar characteristics and hence suitable as a subclass.\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":94,"deletions":31}}}]}]},"authorFileTypeContributionMap":{"kohkaijie":{"java":1443,"md":0,"fxml":35,"sh":1,"bat":1,"gradle":19,"txt":21}},"authorContributionVariance":{"kohkaijie":45552.324},"authorDisplayNameMap":{"kohkaijie":"CS2103T-T09-3 KOH .. JIE"}} +{"authorDailyContributionsMap":{"kohkaijie":[{"date":"2023-08-22","commitResults":[{"hash":"52010eb46a7d119b70d4176994f8893b26f55d50","isMergeCommit":false,"messageTitle":"level 0","messageBody":"","tags":["Level-0,Rename,Greet,Exit"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}},{"hash":"83884e9f6eee85f1328c2ba206996200f0399357","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","tags":["level-1,Echo"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"a27870f0d1a578d625350a11584c2fda775675ca","isMergeCommit":false,"messageTitle":"level 2","messageBody":"","tags":["level-2,add,list"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"9bc996611a871506a77562fe6315187664281285","isMergeCommit":false,"messageTitle":"level 3","messageBody":"","tags":["level-3,mark-as-done"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":3}}}]},{"date":"2023-08-23","commitResults":[{"hash":"c1fb3dd3707c0693c1f6c2c96c737afc40b36c2e","isMergeCommit":false,"messageTitle":"level 4","messageBody":"","tags":["level-4,ToDos,Events,Deadlines"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":25}}},{"hash":"94517dffed5fbf01ed10312e07fdf94291b13bd4","isMergeCommit":false,"messageTitle":"level 5","messageBody":"","tags":["level-5,error-handling"],"fileTypesAndContributionMap":{"java":{"insertions":122,"deletions":76}}},{"hash":"bffa891ad725519667017050350c7f3580d0f0a9","isMergeCommit":false,"messageTitle":"level 6","messageBody":"","tags":["level-6,delete"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":16}}},{"hash":"04372f16412131c02b9b71923e2cfdd44548b2bf","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"db6900be6591c0c7f6a30d212dfa83d9d6a49f7a","isMergeCommit":false,"messageTitle":"level 7","messageBody":"","tags":["level-7,save"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":137,"deletions":65}}}]},{"date":"2023-08-30","commitResults":[{"hash":"66956f196567756a1ebf8d7f97cf65e0b24e5f16","isMergeCommit":false,"messageTitle":"level 8","messageBody":"","tags":["level-8-date"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":183,"deletions":125}}},{"hash":"cf24071ce0120e25b02b602be32d5797695d99d7","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/nus-cs2103-AY2324S1/ip","messageBody":"","tags":["A-gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"a781312e974bdca9da0a7bcb62cfe36170e92a77","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":503,"deletions":255}}},{"hash":"d83755d26a9a8931131eaaaa02591102e0a803f1","isMergeCommit":false,"messageTitle":"A-branch","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":69,"deletions":19}}}]},{"date":"2023-09-03","commitResults":[{"hash":"5c6e1c5009eb138a744bf43227eacf415469f831","isMergeCommit":false,"messageTitle":"level 9","messageBody":"","tags":["level-9,find"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":34}}},{"hash":"e300d0cc2df73b4436e0195e309795f5a3175d66","isMergeCommit":false,"messageTitle":"coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"java":{"insertions":8,"deletions":16}}}]},{"date":"2023-09-04","commitResults":[{"hash":"fc0cdb66ac937ed29acadb60cc009cd8de445a60","isMergeCommit":false,"messageTitle":"java docs","messageBody":"","tags":["A-JavaDoc","A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":481,"deletions":17}}}]},{"date":"2023-09-08","commitResults":[{"hash":"f742fef8c2e3fa1effee886b83728832fdf4ca74","isMergeCommit":false,"messageTitle":"Add GUI for chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":1},"txt":{"insertions":4,"deletions":2},"fxml":{"insertions":56,"deletions":0},"java":{"insertions":236,"deletions":88}}}]},{"date":"2023-09-09","commitResults":[{"hash":"6fe4618c10a4a670517d016ea79f09d5c726667d","isMergeCommit":false,"messageTitle":"Add two J-Unit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"fxml":{"insertions":5,"deletions":1},"java":{"insertions":130,"deletions":22}}}]},{"date":"2023-09-10","commitResults":[{"hash":"e177c60440586f4134a2b73a8d36d999d2741376","isMergeCommit":false,"messageTitle":"Assertions: add Assertions to code","messageBody":"There may be potential bugs that violate how the code should behave.\n\nUse of assert feature to document important assumptions that should hold\nat various points in the code.\n\nWe ensure that during runtime that bugs are discovered and execution\nis terminated early.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":10},"fxml":{"insertions":4,"deletions":29},"java":{"insertions":43,"deletions":33}}},{"hash":"255f638db4780eae878a0b9569565de7e8db9ec3","isMergeCommit":true,"messageTitle":"Merge pull request #1 from kohkaijie/branch-A-Assertions","messageBody":"Assertions: add Assertions to code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"2c9aa815c40531dfce79c84723eb8327a8d554c7","isMergeCommit":false,"messageTitle":"FixedDuration task class: Add support for FixedDuration task type","messageBody":"CR7 did not provide support for tasks with a fixed duration but no\nstart or end time.\n\nAdding the FixedDuration task class allows users to manage such tasks.\n\nLet\u0027s add the FixedDuration class as a subclass of the Task class.\n\nUsing inheritance as Fixed Duration tasks are a specific type of task\nwith similar characteristics and hence suitable as a subclass.\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":94,"deletions":31}}}]},{"date":"2023-09-16","commitResults":[{"hash":"7e961494808b0b857c050004758c414ddf909aaa","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":47,"deletions":43}}}]}]},"authorFileTypeContributionMap":{"kohkaijie":{"java":1447,"md":0,"fxml":35,"sh":1,"bat":1,"gradle":24,"txt":21}},"authorContributionVariance":{"kohkaijie":39042.55},"authorDisplayNameMap":{"kohkaijie":"CS2103T-T09-3 KOH .. JIE"}} diff --git a/kwangthiag_ip_master/authorship.json b/kwangthiag_ip_master/authorship.json index 7e440818..4c7ddafc 100644 --- a/kwangthiag_ip_master/authorship.json +++ b/kwangthiag_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"kwangthiag":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter:5.8.1\u0027","lastModifiedDate":"2023-08-31"},{"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":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"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":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"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"}],"authorContributionMap":{"kwangthiag":16,"-":42}},{"path":"data/bot.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"T|0|sleep","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"D|0|sleep |Sep 7 2023 09:00","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"E|0|sleep |Sep 7 2023 09:00|Sep 7 2023 13:00","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":3}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeInvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeMissingArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import duke.task.Tasklist;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" * Represents a command line-based task manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" * String constant for the find command.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" private static final String FIND \u003d \"find\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" * String constant for the mark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" private static final String MARK \u003d \"mark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" * String constant for the unmark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" private static final String UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" * String constant for the exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" private static final String BYE \u003d \"bye\";","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" * String constant for the list command.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" private static final String LIST \u003d \"list\";","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" * String constant for the delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" private static final String DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" * Path for the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" private static final Path FILE_PATH \u003d Paths.get(\"./data/bot.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" * Represents the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" private Tasklist tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" * Represents the storage functionality for Duke.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new instance of the Duke command line-based task manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"kwangthiag"},"content":" public Duke() {","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"kwangthiag"},"content":" this.tasks \u003d new Tasklist();","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"kwangthiag"},"content":" this.storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"kwangthiag"},"content":" * Saves tasks to storage and exits the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kwangthiag"},"content":" private void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"kwangthiag"},"content":" storage.saveFile(tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"kwangthiag"},"content":" Ui.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Error when saving data!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":83,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"kwangthiag"},"content":" * Processes the user input and responds accordingly.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"kwangthiag"},"content":" * @param s The user\u0027s input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"kwangthiag"},"content":" * @return false if the user inputs the exit command; true otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"kwangthiag"},"content":" private boolean respond(String s) {","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"kwangthiag"},"content":" StringBuilder str \u003d new StringBuilder(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"kwangthiag"},"content":" String check1 \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"kwangthiag"},"content":" String check2 \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"kwangthiag"},"content":" //2 over so that delete and mark cannot have blank input","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 6) {","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"kwangthiag"},"content":" check1 \u003d str.substring(0, 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 8) {","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"kwangthiag"},"content":" check2 \u003d str.substring(0, 6);","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"kwangthiag"},"content":" if (s.equals(BYE)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"kwangthiag"},"content":" this.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"kwangthiag"},"content":" return false;","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"kwangthiag"},"content":" } else if (s.equals(LIST)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"kwangthiag"},"content":" Ui.printList(tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"kwangthiag"},"content":" return true;","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"kwangthiag"},"content":" } else if (check1.equals(MARK)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"kwangthiag"},"content":" tasks.mark(Integer.parseInt(str.substring(5, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"kwangthiag"},"content":" return true;","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"kwangthiag"},"content":" } else if (check1.equals(FIND)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"kwangthiag"},"content":" Ui.find(tasks.find(str.substring(5, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"kwangthiag"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"kwangthiag"},"content":" } else if (check2.equals(UNMARK)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"kwangthiag"},"content":" tasks.unmark(Integer.parseInt(str.substring(7, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"kwangthiag"},"content":" return true;","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"kwangthiag"},"content":" } else if (check2.equals(DELETE)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"kwangthiag"},"content":" tasks.delete(Integer.parseInt(str.substring(7, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"kwangthiag"},"content":" return true;","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"kwangthiag"},"content":" tasks.addToList(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"kwangthiag"},"content":" } catch (DukeMissingArgumentException | DukeInvalidArgumentException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"kwangthiag"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"kwangthiag"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"kwangthiag"},"content":" * Processes the user input and responds accordingly.","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"kwangthiag"},"content":" * @param s The user\u0027s input string.","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"kwangthiag"},"content":" * @return The response","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"kwangthiag"},"content":" public String getResponse(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"kwangthiag"},"content":" StringBuilder str \u003d new StringBuilder(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"kwangthiag"},"content":" String check1 \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"kwangthiag"},"content":" String check2 \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"kwangthiag"},"content":" //2 over so that delete and mark cannot have blank input","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 6) {","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"kwangthiag"},"content":" check1 \u003d str.substring(0, 4);","lastModifiedDate":"2023-09-08"},{"lineNumber":142,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 8) {","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"kwangthiag"},"content":" check2 \u003d str.substring(0, 6);","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"kwangthiag"},"content":" if (s.equals(BYE)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"kwangthiag"},"content":" return Ui.exit();","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"kwangthiag"},"content":" } else if (s.equals(LIST)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"kwangthiag"},"content":" return Ui.printList(tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"kwangthiag"},"content":" } else if (check1.equals(MARK)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"kwangthiag"},"content":" return tasks.mark(Integer.parseInt(str.substring(5, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"kwangthiag"},"content":" } else if (check1.equals(FIND)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"kwangthiag"},"content":" return Ui.find(tasks.find(str.substring(5, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"kwangthiag"},"content":" } else if (check2.equals(UNMARK)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"kwangthiag"},"content":" return tasks.unmark(Integer.parseInt(str.substring(7, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":156,"author":{"gitId":"kwangthiag"},"content":" } else if (check2.equals(DELETE)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"kwangthiag"},"content":" return tasks.delete(Integer.parseInt(str.substring(7, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"kwangthiag"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"kwangthiag"},"content":" result \u003d tasks.addToList(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":162,"author":{"gitId":"kwangthiag"},"content":" } catch (DukeMissingArgumentException | DukeInvalidArgumentException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"kwangthiag"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":165,"author":{"gitId":"kwangthiag"},"content":" return result;","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":167,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":168,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":169,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"kwangthiag"},"content":" * The entry point of the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"kwangthiag"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"kwangthiag"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":174,"author":{"gitId":"kwangthiag"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"kwangthiag"},"content":" Duke dukeInstance \u003d new Duke();","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"kwangthiag"},"content":" Ui.greet();","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"kwangthiag"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"kwangthiag"},"content":" String t \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"kwangthiag"},"content":" if (!dukeInstance.respond(t)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"kwangthiag"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":184,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"kwangthiag":181,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":30}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" private Duke duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/spez.jpg\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Bot.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" DialogBox.getDukeDialog(Ui.greet(), dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":54}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" * Provides functionality to parse user input and determine the command type.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" * Parses the user input to identify the command type.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" * @param s The input string provided by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" * @return The identified command type as a string, or null if no recognized command type is found.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" public static String parseCommand(String s) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" StringBuilder str \u003d new StringBuilder(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" String check1 \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" String check2 \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" String check3 \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" check1 \u003d str.substring(0, 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" if (check1.equals(\"todo\")) return check1;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" if (check1.equals(\"find\")) return check1;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 8) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" check2 \u003d str.substring(0, 8);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" if (check2.equals(\"deadline\")) return check2;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" check3 \u003d str.substring(0, 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" if (check3.equals(\"event\")) return check3;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":34}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeDatabaseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import java.io.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" * Manages storage operations such as saving and loading tasks from a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" /** File path of the database. */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" private Path filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new Storage instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" * @param filePath The path to the database file.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" public Storage(Path filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" * Loads tasks from the database file.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" * @return An array of loaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" * @throws DukeException If there\u0027s an error reading the database.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" public Task[] loadData() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" File db \u003d new File(this.filePath.toUri());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" Scanner fileReader \u003d new Scanner(db);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" while (fileReader.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" taskList.add(readEntry(fileReader.nextLine()));","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" fileReader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" this.createDatabase();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" return taskList.toArray(new Task[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" * Creates a new database file.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" * @throws DukeException If there\u0027s an error creating the database.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" private void createDatabase() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" File db \u003d new File(this.filePath.toUri());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" File dir \u003d new File(db.getParent());","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":" dir.mkdir();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"kwangthiag"},"content":" db.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"kwangthiag"},"content":" throw new DukeDatabaseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"kwangthiag"},"content":" * Reads and constructs a task based on the given database entry.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"kwangthiag"},"content":" * @param entry The string representation of a task from the database.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"kwangthiag"},"content":" * @return The task represented by the entry.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kwangthiag"},"content":" * @throws DukeException If there\u0027s an error reading the entry.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kwangthiag"},"content":" private Task readEntry(String entry) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"kwangthiag"},"content":" String[] fields \u003d entry.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"kwangthiag"},"content":" Task taskToAdd;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"kwangthiag"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"kwangthiag"},"content":" switch (fields[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"kwangthiag"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"kwangthiag"},"content":" taskToAdd \u003d new Todo(fields[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"kwangthiag"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"kwangthiag"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"kwangthiag"},"content":" taskToAdd \u003d new Event(fields[2],","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime.parse(fields[3], formatter),","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime.parse(fields[4], formatter));","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"kwangthiag"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"kwangthiag"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"kwangthiag"},"content":" taskToAdd \u003d new Deadline(fields[2], LocalDateTime.parse(fields[3], formatter));","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"kwangthiag"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"kwangthiag"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"kwangthiag"},"content":" throw new DukeDatabaseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"kwangthiag"},"content":" if (Integer.parseInt(fields[1]) \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"kwangthiag"},"content":" taskToAdd.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"kwangthiag"},"content":" return taskToAdd;","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"kwangthiag"},"content":" * Saves the list of tasks to the database file.","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"kwangthiag"},"content":" * @param tasks The list of tasks to save.","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"kwangthiag"},"content":" * @throws IOException If there\u0027s an error writing to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"kwangthiag"},"content":" public void saveFile(Tasklist tasks) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"kwangthiag"},"content":" if (!Files.exists(filePath.getParent())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"kwangthiag"},"content":" // Create the directory","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"kwangthiag"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Directory created.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"kwangthiag"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Error creating directory.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"kwangthiag"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"kwangthiag"},"content":" // Create the file","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"kwangthiag"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"File created.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"kwangthiag"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Error creating file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"kwangthiag"},"content":" FileWriter fw \u003d new FileWriter(String.valueOf(filePath), false);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"kwangthiag"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"kwangthiag"},"content":" tasks.saveList(bw);","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"kwangthiag"},"content":" bw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"kwangthiag"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":137}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import duke.task.Tasklist;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" * Represents a user interface handler for the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" * Provides methods to print relevant messages to the console.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" * Name of the Bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" private static final String NAME \u003d \"Bot\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" * Greeting message from the Bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" private static final String GREETING \u003d \"Hello I\u0027m \" + NAME + \"\\nWhat can I do for you?\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" * Exit message from the Bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" private static final String END \u003d \"Bye bye\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" // ... Other string constants ...","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" * Prints greeting message to the console.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" public static String greet() {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" return GREETING;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" * Prints the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" * @param t Tasklist containing tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" public static String printList(Tasklist t) {","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" t.printList();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" return \"Here are the tasks in your list:\\n\" + t.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" * Notifies user of the application\u0027s exit.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" public static String exit() {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" return END;","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" * Notifies user that a task has been added and prints the current task count.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" * @param t Task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" * @param size Current number of tasks after addition.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" public static String add(Task t, int size) {","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + t.toString() + \"\\nNow you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"kwangthiag"},"content":" * Notifies user that a task has been deleted and prints the current task count.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kwangthiag"},"content":" * @param t Task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"kwangthiag"},"content":" * @param size Current number of tasks after deletion.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"kwangthiag"},"content":" public static String delete(Task t, int size) {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"kwangthiag"},"content":" System.out.println(t.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"kwangthiag"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + t.toString() + \"\\nNow you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kwangthiag"},"content":" * Notifies user that a task has been marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"kwangthiag"},"content":" * @param t Task to be marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"kwangthiag"},"content":" public static String mark(Task t) {","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"kwangthiag"},"content":" System.out.println(t.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"kwangthiag"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + t.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"kwangthiag"},"content":" * Notifies user that a task has been marked as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"kwangthiag"},"content":" * @param t Task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"kwangthiag"},"content":" public static String unmark(Task t) {","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"kwangthiag"},"content":" System.out.println(t.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"kwangthiag"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + t.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"kwangthiag"},"content":" public static String find(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"kwangthiag"},"content":" System.out.println(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"kwangthiag"},"content":" return \"Here are the matching tasks in your list:\\n\" + s;","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":103}},{"path":"src/main/java/duke/exceptions/DukeDatabaseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"public class DukeDatabaseException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"%s the database has issues\", super.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":8}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"Pass Awayyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":8}},{"path":"src/main/java/duke/exceptions/DukeInvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"public class DukeInvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"%s you have invalid input\", super.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":8}},{"path":"src/main/java/duke/exceptions/DukeMissingArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"public class DukeMissingArgumentException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"%s there is missing argument\", super.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":8}},{"path":"src/main/java/duke/exceptions/DukeNoTaskFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"public class DukeNoTaskFoundException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" private int taskNum;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" public DukeNoTaskFoundException(int taskNum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"%s task number %d does not exist\",","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" this.taskNum","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":17}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" * Represents a Deadline task which is a type of Task with a deadline date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" * Represents the type identifier for the Deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" private static final String TYPE \u003d \"[D]\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" * Date and time for the deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new Deadline object with a given task name and deadline date-time.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" * @param name Name or description of the deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" * @param deadline Date and time for the deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" public Deadline(String name, LocalDateTime deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" * Converts the Deadline task to a formatted string suitable for saving in a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" * @return Formatted string representing the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" public String stringifyTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"D|%d|%s|%s\", this.done ? 1 : 0","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" , this.name, deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" * Returns a string representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" * @return String representation of the task, including its type, status, name, and deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" return TYPE + super.toString() + \"(by: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" + deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kwangthiag":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" * Represents an Event task which is a type of Task with a starting and ending date-time.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" * Represents the type identifier for the Event.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" private static final String TYPE \u003d \"[E]\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" * Starting date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" * Ending date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new Event object with a given task name, starting, and ending date-time.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" * @param name Name or description of the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" * @param from Starting date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" * @param to Ending date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" public Event(String name, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" * Converts the Event task to a formatted string suitable for saving in a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" * @return Formatted string representing the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" public String stringifyTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"E|%d|%s|%s|%s\", this.done ? 1 : 0, this.name","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" , from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" , to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" * Returns a string representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" * @return String representation of the task, including its type, status, name, start, and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" return TYPE + super.toString() + \" (from: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" + from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kwangthiag":62}},{"path":"src/main/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" public void stringifyTaskTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime from \u003d LocalDateTime.parse(\"01/10/20 00:00\", formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime to \u003d LocalDateTime.parse(\"20/12/23 20:00\", formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" Event event \u003d new Event(\"test\", from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" assertEquals(\"E|0|test|Oct 1 2020 00:00|Dec 20 2023 20:00\", event.stringifyTask(),","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" \"\u0027toLogString()\u0027 should return a simplified string to be saved to file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime from \u003d LocalDateTime.parse(\"01/10/20 00:00\", formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime to \u003d LocalDateTime.parse(\"20/12/23 20:00\", formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" Event event \u003d new Event(\"test\", from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" assertEquals(\"[E][ ] test (from: Oct 1 2020 00:00 to: Dec 20 2023 20:00)\", event.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" \"\u0027toString()\u0027 should return a string to be printed\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kwangthiag":31}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" * Represents a general task with a name and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" * This class serves as an abstract base for more specific types of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" * Completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" protected boolean done;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" * Name or description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" protected String name;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" protected ArrayList\u003cArrayList\u003cInteger\u003e\u003e tracker \u003d new ArrayList\u003cArrayList\u003cInteger\u003e\u003e(128);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new Task object with a specified name.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" * The task is initially set as not completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" * @param name Name or description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" for (int i \u003d 0; i \u003c 128; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" tracker.add(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" for (int i \u003d 0; i \u003c name.length(); ++i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" tracker.get((int) name.charAt(i)).add(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" public void mark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" * Unmarks the task, setting it as not completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" public void unmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" * Converts the task to a formatted string suitable for saving or other specific representations.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" * This method should be overridden by subclasses to provide specific formatting.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" * @return Formatted string representing the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" public abstract String stringifyTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"kwangthiag"},"content":" public boolean find(String arg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kwangthiag"},"content":" int k \u003d arg.charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kwangthiag"},"content":" for (int i : tracker.get(k)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"kwangthiag"},"content":" boolean cannot \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"kwangthiag"},"content":" for (int j \u003d 0; j \u003c arg.length(); j++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"kwangthiag"},"content":" if (i + j \u003e\u003d name.length()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"kwangthiag"},"content":" cannot \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"kwangthiag"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"kwangthiag"},"content":" if (name.charAt(i + j) !\u003d arg.charAt(j)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"kwangthiag"},"content":" cannot \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"kwangthiag"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kwangthiag"},"content":" if (!cannot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"kwangthiag"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"kwangthiag"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"kwangthiag"},"content":" * Returns a string representation of the task with its completion status and name.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"kwangthiag"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"kwangthiag"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"kwangthiag"},"content":" return \"[X] \" + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"kwangthiag"},"content":" return \"[ ] \" + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kwangthiag":97}},{"path":"src/main/java/duke/task/Tasklist.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeInvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeMissingArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import duke.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" * Represents a list of tasks with functionality to add, delete, mark, and unmark tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":"public class Tasklist {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" * The actual list storing the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" * Initializes an empty task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" public Tasklist() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" * Marks a task as done based on the index provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" * @param i Index of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" public String mark(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" if (i \u003e tasks.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" return \"Please mark something in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" tasks.get(i - 1).mark();","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" Task t \u003d tasks.get(i - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" return Ui.mark(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" * Unmarks a task based on the index provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" * @param i Index of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" public String unmark(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" if (i \u003e tasks.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" return \"Please unmark something in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" tasks.get(i - 1).unmark();","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" Task t \u003d tasks.get(i - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" return Ui.unmark(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" * Adds a task to the list based on the provided command string.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"kwangthiag"},"content":" * @param s Command string to parse and add the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kwangthiag"},"content":" * @throws DukeMissingArgumentException If the required arguments for a task are missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kwangthiag"},"content":" * @throws DukeInvalidArgumentException If the provided arguments for a task are invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"kwangthiag"},"content":" public String addToList(String s) throws DukeMissingArgumentException, DukeInvalidArgumentException {","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"kwangthiag"},"content":" StringBuilder str \u003d new StringBuilder(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"kwangthiag"},"content":" String cmd \u003d Parser.parseCommand(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"kwangthiag"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"kwangthiag"},"content":" if (cmd \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"kwangthiag"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"kwangthiag"},"content":" if (cmd.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"kwangthiag"},"content":" throw new DukeMissingArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"kwangthiag"},"content":" Todo t \u003d new Todo(str.substring(5, str.length()).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"kwangthiag"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"kwangthiag"},"content":" task \u003d t;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"kwangthiag"},"content":" } else if (cmd.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003c\u003d 9) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"kwangthiag"},"content":" throw new DukeMissingArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"kwangthiag"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"kwangthiag"},"content":" String t \u003d str.substring(9, str.length()).toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"kwangthiag"},"content":" String[] arr \u003d t.split(\"/by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime deadline \u003d LocalDateTime.parse(arr[1], formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"kwangthiag"},"content":" Deadline d \u003d new Deadline(arr[0], deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"kwangthiag"},"content":" tasks.add(d);","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"kwangthiag"},"content":" task \u003d d;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"kwangthiag"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"kwangthiag"},"content":" throw new DukeMissingArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"kwangthiag"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"kwangthiag"},"content":" return \"Please enter the start/end time in the format of \u003cDD/MM/YY HH:MM\u003e!\";","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"kwangthiag"},"content":" } else if (cmd.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003c\u003d 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"kwangthiag"},"content":" throw new DukeMissingArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"kwangthiag"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"kwangthiag"},"content":" String t \u003d str.substring(6, str.length()).toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"kwangthiag"},"content":" String[] arr \u003d t.split(\"/from \");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"kwangthiag"},"content":" String[] times \u003d arr[1].split(\" /to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime startTime \u003d LocalDateTime.parse(times[0], formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime endTime \u003d LocalDateTime.parse(times[1], formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"kwangthiag"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"kwangthiag"},"content":" return \"End time must be after the start time!\";","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"kwangthiag"},"content":" Event e \u003d new Event(arr[0], startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"kwangthiag"},"content":" tasks.add(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"kwangthiag"},"content":" task \u003d e;","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"kwangthiag"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"kwangthiag"},"content":" throw new DukeMissingArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"kwangthiag"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"kwangthiag"},"content":" return \"Please enter the start/end time in the format of \u003cDD/MM/YY HH:MM\u003e!\";","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"kwangthiag"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"kwangthiag"},"content":" return Ui.add(task, tasks.size());","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"kwangthiag"},"content":" * Deletes a task from the list based on the provided index.","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"kwangthiag"},"content":" * @param i Index of the task to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"kwangthiag"},"content":" public String delete(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"kwangthiag"},"content":" if (i \u003e tasks.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"kwangthiag"},"content":" return \"Please delete something in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"kwangthiag"},"content":" Task t \u003d tasks.get(i - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"kwangthiag"},"content":" tasks.remove(i - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"kwangthiag"},"content":" return Ui.delete(t, tasks.size());","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"kwangthiag"},"content":" * Prints all tasks in the list to the console.","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"kwangthiag"},"content":" public String printList() {","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"kwangthiag"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"kwangthiag"},"content":" for (int i \u003d 1; i \u003c\u003d this.tasks.size(); ++i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"kwangthiag"},"content":" Task t \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"kwangthiag"},"content":" stringBuilder.append(i + \". \" + t.toString() + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"kwangthiag"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"kwangthiag"},"content":" * Saves the current list of tasks to a file using a BufferedWriter.","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"kwangthiag"},"content":" * @param bw BufferedWriter to write the tasks to.","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"kwangthiag"},"content":" * @throws IOException If an error occurs during writing.","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"kwangthiag"},"content":" public void saveList(BufferedWriter bw) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"kwangthiag"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"kwangthiag"},"content":" bw.write(task.stringifyTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"kwangthiag"},"content":" bw.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"kwangthiag"},"content":" public String find(String arg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"kwangthiag"},"content":" StringBuilder s \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"kwangthiag"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"kwangthiag"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":173,"author":{"gitId":"kwangthiag"},"content":" if (task.find(arg)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"kwangthiag"},"content":" s.append(i++);","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"kwangthiag"},"content":" s.append(\". \");","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"kwangthiag"},"content":" s.append(task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"kwangthiag"},"content":" s.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"kwangthiag"},"content":" return s.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"kwangthiag"},"content":" * Converts the task list to a string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"kwangthiag"},"content":" * @return String representation of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"kwangthiag"},"content":" StringBuilder s \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"kwangthiag"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"kwangthiag"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":194,"author":{"gitId":"kwangthiag"},"content":" s.append(i++);","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"kwangthiag"},"content":" s.append(\". \");","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"kwangthiag"},"content":" s.append(task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"kwangthiag"},"content":" s.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"kwangthiag"},"content":" return s.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":201}},{"path":"src/main/java/duke/task/TasklistTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"public class TasklistTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" public void markTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" Tasklist list \u003d new Tasklist();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" list.addToList(\"todo sleep\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" list.mark(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" // do nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" assertEquals( \"1. [T][X] sleep\\n\", list.toString(),\"\u0027mark\u0027 should mark task as done\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" public void deleteTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" Tasklist list \u003d new Tasklist();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" list.addToList(\"todo sleep\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" list.addToList(\"todo go home\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" list.addToList(\"todo codeforces\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" list.delete(2);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" // do nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" assertEquals(\"1. [T][ ] sleep\\n2. [T][ ] codeforces\\n\", list.toString(), \"\u0027delete\u0027 should remove the second task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kwangthiag":35}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" * Represents a Todo task, which is a type of Task without a specific date attached to it.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" * A constant defining the type of task as Todo.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" private static final String TYPE \u003d \"[T]\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new Todo task with the provided name.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" * @param name The name or description of the Todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" * Returns a string representation of the task in a format suitable for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" * @return A string representing the task in \"T|done_status|name\" format.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" public String stringifyTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"T|%d|%s\", this.done ? 1 : 0, this.name);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" * Returns a string representation of the Todo task, including its type and name.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" * @return A string in the format \"[T] TaskName\".","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" return TYPE + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kwangthiag":41}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"event project meeting /from 11/10/11 00:00 /to 11/10/11 11:00","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"event time travel /from 11/10/12 00:00 /to 11/10/11 11:00","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"event time travel /by 11/10/11 00:00","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"deadline time travel /by 11/10/11 00:00","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"todo codeforces","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"mark 3","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"delete 4","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"bye","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"a","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":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":"kwangthiag"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"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":{"kwangthiag":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"kwangthiag":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter:5.8.1\u0027","lastModifiedDate":"2023-08-31"},{"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":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"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":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"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"}],"authorContributionMap":{"kwangthiag":16,"-":42}},{"path":"data/bot.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"T|0|sleep","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"D|0|sleep |Sep 7 2023 09:00","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"E|0|sleep |Sep 7 2023 09:00|Sep 7 2023 13:00","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":3}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeInvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeMissingArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import duke.task.Tasklist;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" * Represents a command line-based task manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" * String constant for the find command.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" private static final String FIND \u003d \"find\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" * String constant for the mark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" private static final String MARK \u003d \"mark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" * String constant for the unmark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" private static final String UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" * String constant for the exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" private static final String BYE \u003d \"bye\";","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" * String constant for the list command.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" private static final String LIST \u003d \"list\";","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" * String constant for the delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" private static final String DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" * Path for the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" private static final Path FILE_PATH \u003d Paths.get(\"./data/bot.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" * Represents the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" private Tasklist tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" * Represents the storage functionality for Duke.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" private boolean isRunning;","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new instance of the Duke command line-based task manager.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"kwangthiag"},"content":" public Duke() {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"kwangthiag"},"content":" this.tasks \u003d new Tasklist();","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"kwangthiag"},"content":" this.storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"kwangthiag"},"content":" this.isRunning \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kwangthiag"},"content":" * Saves tasks to storage and exits the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kwangthiag"},"content":" private void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"kwangthiag"},"content":" assert this.isRunning;","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"kwangthiag"},"content":" storage.saveFile(tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"kwangthiag"},"content":" Ui.exit();","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"kwangthiag"},"content":" this.isRunning \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Error when saving data!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":87,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"kwangthiag"},"content":" * Processes the user input and responds accordingly.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"kwangthiag"},"content":" * @param s The user\u0027s input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"kwangthiag"},"content":" * @return false if the user inputs the exit command; true otherwise.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"kwangthiag"},"content":" private boolean respond(String s) {","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"kwangthiag"},"content":" StringBuilder str \u003d new StringBuilder(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"kwangthiag"},"content":" String check1 \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"kwangthiag"},"content":" String check2 \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"kwangthiag"},"content":" //2 over so that delete and mark cannot have blank input","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 6) {","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"kwangthiag"},"content":" check1 \u003d str.substring(0, 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 8) {","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"kwangthiag"},"content":" check2 \u003d str.substring(0, 6);","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"kwangthiag"},"content":" if (s.equals(BYE)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"kwangthiag"},"content":" this.exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"kwangthiag"},"content":" } else if (s.equals(LIST)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"kwangthiag"},"content":" Ui.printList(tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"kwangthiag"},"content":" } else if (check1.equals(MARK)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"kwangthiag"},"content":" tasks.mark(Integer.parseInt(str.substring(5, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"kwangthiag"},"content":" } else if (check1.equals(FIND)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"kwangthiag"},"content":" Ui.find(tasks.find(str.substring(5, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"kwangthiag"},"content":" } else if (check2.equals(UNMARK)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"kwangthiag"},"content":" tasks.unmark(Integer.parseInt(str.substring(7, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"kwangthiag"},"content":" } else if (check2.equals(DELETE)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"kwangthiag"},"content":" tasks.delete(Integer.parseInt(str.substring(7, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"kwangthiag"},"content":" tasks.addToList(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"kwangthiag"},"content":" } catch (DukeMissingArgumentException | DukeInvalidArgumentException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"kwangthiag"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"kwangthiag"},"content":" return !s.equals(BYE);","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"kwangthiag"},"content":" * Processes the user input and responds accordingly.","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"kwangthiag"},"content":" * @param s The user\u0027s input string.","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"kwangthiag"},"content":" * @return The response","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"kwangthiag"},"content":" public String getResponse(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"kwangthiag"},"content":" StringBuilder str \u003d new StringBuilder(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"kwangthiag"},"content":" String check1 \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"kwangthiag"},"content":" String check2 \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"kwangthiag"},"content":" //2 over so that delete and mark cannot have blank input","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 6) {","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"kwangthiag"},"content":" check1 \u003d str.substring(0, 4);","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 8) {","lastModifiedDate":"2023-09-08"},{"lineNumber":142,"author":{"gitId":"kwangthiag"},"content":" check2 \u003d str.substring(0, 6);","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"kwangthiag"},"content":" if (s.equals(BYE)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"kwangthiag"},"content":" return Ui.exit();","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"kwangthiag"},"content":" } else if (s.equals(LIST)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"kwangthiag"},"content":" return Ui.printList(tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"kwangthiag"},"content":" } else if (check1.equals(MARK)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"kwangthiag"},"content":" return tasks.mark(Integer.parseInt(str.substring(5, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"kwangthiag"},"content":" } else if (check1.equals(FIND)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"kwangthiag"},"content":" return Ui.find(tasks.find(str.substring(5, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"kwangthiag"},"content":" } else if (check2.equals(UNMARK)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"kwangthiag"},"content":" return tasks.unmark(Integer.parseInt(str.substring(7, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"kwangthiag"},"content":" } else if (check2.equals(DELETE)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"kwangthiag"},"content":" return tasks.delete(Integer.parseInt(str.substring(7, str.length())));","lastModifiedDate":"2023-09-08"},{"lineNumber":156,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"kwangthiag"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"kwangthiag"},"content":" result \u003d tasks.addToList(s);","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"kwangthiag"},"content":" } catch (DukeMissingArgumentException | DukeInvalidArgumentException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"kwangthiag"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":162,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"kwangthiag"},"content":" return result;","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":165,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":167,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"kwangthiag"},"content":" * The entry point of the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"kwangthiag"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"kwangthiag"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":172,"author":{"gitId":"kwangthiag"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"kwangthiag"},"content":" Duke dukeInstance \u003d new Duke();","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"kwangthiag"},"content":" Ui.greet();","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"kwangthiag"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"kwangthiag"},"content":" String t \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"kwangthiag"},"content":" if (!dukeInstance.respond(t)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"kwangthiag"},"content":" return;","lastModifiedDate":"2023-08-24"},{"lineNumber":179,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":180,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"kwangthiag":179,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":30}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" private Duke duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/spez.jpg\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Bot.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" DialogBox.getDukeDialog(Ui.greet(), dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":54}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" * Provides functionality to parse user input and determine the command type.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" * Parses the user input to identify the command type.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" * @param s The input string provided by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" * @return The identified command type as a string, or null if no recognized command type is found.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" public static String parseCommand(String s) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" StringBuilder str \u003d new StringBuilder(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" String check1 \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" String check2 \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" String check3 \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" check1 \u003d str.substring(0, 4);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" if (check1.equals(\"todo\")) return check1;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" if (check1.equals(\"find\")) return check1;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 8) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" check2 \u003d str.substring(0, 8);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" if (check2.equals(\"deadline\")) return check2;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003e\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" check3 \u003d str.substring(0, 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" if (check3.equals(\"event\")) return check3;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":34}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeDatabaseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import java.io.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" * Manages storage operations such as saving and loading tasks from a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" /** File path of the database. */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" private Path filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new Storage instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" * @param filePath The path to the database file.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" public Storage(Path filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" * Loads tasks from the database file.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" * @return An array of loaded tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" * @throws DukeException If there\u0027s an error reading the database.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" public Task[] loadData() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" File db \u003d new File(this.filePath.toUri());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" Scanner fileReader \u003d new Scanner(db);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" while (fileReader.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" taskList.add(readEntry(fileReader.nextLine()));","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" fileReader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" this.createDatabase();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" return taskList.toArray(new Task[0]);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" * Creates a new database file.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" * @throws DukeException If there\u0027s an error creating the database.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" private void createDatabase() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" File db \u003d new File(this.filePath.toUri());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" File dir \u003d new File(db.getParent());","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":" dir.mkdir();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"kwangthiag"},"content":" db.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"kwangthiag"},"content":" throw new DukeDatabaseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"kwangthiag"},"content":" * Reads and constructs a task based on the given database entry.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"kwangthiag"},"content":" * @param entry The string representation of a task from the database.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"kwangthiag"},"content":" * @return The task represented by the entry.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kwangthiag"},"content":" * @throws DukeException If there\u0027s an error reading the entry.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kwangthiag"},"content":" private Task readEntry(String entry) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"kwangthiag"},"content":" String[] fields \u003d entry.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"kwangthiag"},"content":" Task taskToAdd;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"kwangthiag"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"kwangthiag"},"content":" switch (fields[0]) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"kwangthiag"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"kwangthiag"},"content":" taskToAdd \u003d new Todo(fields[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"kwangthiag"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"kwangthiag"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"kwangthiag"},"content":" taskToAdd \u003d new Event(fields[2],","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime.parse(fields[3], formatter),","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime.parse(fields[4], formatter));","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"kwangthiag"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"kwangthiag"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"kwangthiag"},"content":" taskToAdd \u003d new Deadline(fields[2], LocalDateTime.parse(fields[3], formatter));","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"kwangthiag"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"kwangthiag"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"kwangthiag"},"content":" throw new DukeDatabaseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"kwangthiag"},"content":" if (Integer.parseInt(fields[1]) \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"kwangthiag"},"content":" taskToAdd.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"kwangthiag"},"content":" return taskToAdd;","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"kwangthiag"},"content":" * Saves the list of tasks to the database file.","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"kwangthiag"},"content":" * @param tasks The list of tasks to save.","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"kwangthiag"},"content":" * @throws IOException If there\u0027s an error writing to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"kwangthiag"},"content":" public void saveFile(Tasklist tasks) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"kwangthiag"},"content":" if (!Files.exists(filePath.getParent())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"kwangthiag"},"content":" // Create the directory","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"kwangthiag"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Directory created.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"kwangthiag"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Error creating directory.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"kwangthiag"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"kwangthiag"},"content":" // Create the file","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"kwangthiag"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"File created.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"kwangthiag"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"kwangthiag"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Error creating file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"kwangthiag"},"content":" FileWriter fw \u003d new FileWriter(String.valueOf(filePath), false);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"kwangthiag"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"kwangthiag"},"content":" tasks.saveList(bw);","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"kwangthiag"},"content":" bw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"kwangthiag"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":137}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import duke.task.Tasklist;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" * Represents a user interface handler for the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" * Provides methods to print relevant messages to the console.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" * Name of the Bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" private static final String NAME \u003d \"Bot\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" * Greeting message from the Bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" private static final String GREETING \u003d \"Hello I\u0027m \" + NAME + \"\\nWhat can I do for you?\";","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" * Exit message from the Bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" private static final String END \u003d \"Bye bye\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" // ... Other string constants ...","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" * Prints greeting message to the console.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" public static String greet() {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" return GREETING;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" * Prints the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" * @param t Tasklist containing tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" public static String printList(Tasklist t) {","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" t.printList();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" return \"Here are the tasks in your list:\\n\" + t.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" * Notifies user of the application\u0027s exit.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" public static String exit() {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" return END;","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" * Notifies user that a task has been added and prints the current task count.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" * @param t Task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" * @param size Current number of tasks after addition.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" public static String add(Task t, int size) {","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + t.toString() + \"\\nNow you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"kwangthiag"},"content":" * Notifies user that a task has been deleted and prints the current task count.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kwangthiag"},"content":" * @param t Task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"kwangthiag"},"content":" * @param size Current number of tasks after deletion.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"kwangthiag"},"content":" public static String delete(Task t, int size) {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"kwangthiag"},"content":" System.out.println(t.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Now you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"kwangthiag"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + t.toString() + \"\\nNow you have \" + size + \" tasks in the list.\";","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kwangthiag"},"content":" * Notifies user that a task has been marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"kwangthiag"},"content":" * @param t Task to be marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"kwangthiag"},"content":" public static String mark(Task t) {","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"kwangthiag"},"content":" System.out.println(t.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"kwangthiag"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + t.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"kwangthiag"},"content":" * Notifies user that a task has been marked as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"kwangthiag"},"content":" * @param t Task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"kwangthiag"},"content":" public static String unmark(Task t) {","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"kwangthiag"},"content":" System.out.println(t.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"kwangthiag"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + t.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"kwangthiag"},"content":" public static String find(String s) {","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"kwangthiag"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"kwangthiag"},"content":" System.out.println(s);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"kwangthiag"},"content":" return \"Here are the matching tasks in your list:\\n\" + s;","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":103}},{"path":"src/main/java/duke/exceptions/DukeDatabaseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"public class DukeDatabaseException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"%s the database has issues\", super.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":8}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"Pass Awayyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":8}},{"path":"src/main/java/duke/exceptions/DukeInvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"public class DukeInvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"%s you have invalid input\", super.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":8}},{"path":"src/main/java/duke/exceptions/DukeMissingArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"public class DukeMissingArgumentException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"%s there is missing argument\", super.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":8}},{"path":"src/main/java/duke/exceptions/DukeNoTaskFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"public class DukeNoTaskFoundException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" private int taskNum;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":" public DukeNoTaskFoundException(int taskNum) {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" this.taskNum \u003d taskNum;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"%s task number %d does not exist\",","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" super.toString(),","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" this.taskNum","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" );","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":17}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" * Represents a Deadline task which is a type of Task with a deadline date and time.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" * Represents the type identifier for the Deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" private static final String TYPE \u003d \"[D]\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" * Date and time for the deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new Deadline object with a given task name and deadline date-time.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" * @param name Name or description of the deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" * @param deadline Date and time for the deadline of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" public Deadline(String name, LocalDateTime deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" * Converts the Deadline task to a formatted string suitable for saving in a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" * @return Formatted string representing the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" public String stringifyTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"D|%d|%s|%s\", this.isDone ? 1 : 0","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" , this.name, deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" * Returns a string representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" * @return String representation of the task, including its type, status, name, and deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" return TYPE + super.toString() + \"(by: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" + deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kwangthiag":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" * Represents an Event task which is a type of Task with a starting and ending date-time.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" * Represents the type identifier for the Event.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" private static final String TYPE \u003d \"[E]\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" * Starting date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" * Ending date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new Event object with a given task name, starting, and ending date-time.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" * @param name Name or description of the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" * @param from Starting date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" * @param to Ending date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" public Event(String name, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" * Converts the Event task to a formatted string suitable for saving in a file.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" * @return Formatted string representing the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" public String stringifyTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"E|%d|%s|%s|%s\", this.isDone ? 1 : 0, this.name","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" , from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" , to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" * Returns a string representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" * @return String representation of the task, including its type, status, name, start, and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" return TYPE + super.toString() + \" (from: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" + from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\"))","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kwangthiag":62}},{"path":"src/main/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"public class EventTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" public void stringifyTaskTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime from \u003d LocalDateTime.parse(\"01/10/20 00:00\", formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime to \u003d LocalDateTime.parse(\"20/12/23 20:00\", formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" Event event \u003d new Event(\"test\", from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" assertEquals(\"E|0|test|Oct 1 2020 00:00|Dec 20 2023 20:00\", event.stringifyTask(),","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" \"\u0027toLogString()\u0027 should return a simplified string to be saved to file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" public void toStringTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime from \u003d LocalDateTime.parse(\"01/10/20 00:00\", formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime to \u003d LocalDateTime.parse(\"20/12/23 20:00\", formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" Event event \u003d new Event(\"test\", from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" assertEquals(\"[E][ ] test (from: Oct 1 2020 00:00 to: Dec 20 2023 20:00)\", event.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" \"\u0027toString()\u0027 should return a string to be printed\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kwangthiag":31}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":" * Represents a general task with a name and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" * This class serves as an abstract base for more specific types of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" * Completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" * Name or description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" protected String name;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" protected ArrayList\u003cArrayList\u003cInteger\u003e\u003e tracker \u003d new ArrayList\u003cArrayList\u003cInteger\u003e\u003e(128);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new Task object with a specified name.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" * The task is initially set as not completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" * @param name Name or description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" for (int i \u003d 0; i \u003c 128; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" tracker.add(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" for (int i \u003d 0; i \u003c name.length(); ++i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" tracker.get((int) name.charAt(i)).add(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" public void mark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" * Unmarks the task, setting it as not completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" public void unmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" * Converts the task to a formatted string suitable for saving or other specific representations.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" * This method should be overridden by subclasses to provide specific formatting.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":" * @return Formatted string representing the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" public abstract String stringifyTask();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"kwangthiag"},"content":" public boolean find(String arg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kwangthiag"},"content":" int k \u003d arg.charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kwangthiag"},"content":" for (int i : tracker.get(k)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"kwangthiag"},"content":" boolean cannot \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"kwangthiag"},"content":" for (int j \u003d 0; j \u003c arg.length(); j++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"kwangthiag"},"content":" if (i + j \u003e\u003d name.length()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"kwangthiag"},"content":" cannot \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"kwangthiag"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"kwangthiag"},"content":" if (name.charAt(i + j) !\u003d arg.charAt(j)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"kwangthiag"},"content":" cannot \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"kwangthiag"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"kwangthiag"},"content":" if (!cannot) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"kwangthiag"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"kwangthiag"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"kwangthiag"},"content":" * Returns a string representation of the task with its completion status and name.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"kwangthiag"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"kwangthiag"},"content":" if (isDone) {","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"kwangthiag"},"content":" return \"[X] \" + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"kwangthiag"},"content":" return \"[ ] \" + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kwangthiag":97}},{"path":"src/main/java/duke/task/Tasklist.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeInvalidArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.DukeMissingArgumentException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import duke.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"import duke.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" * Represents a list of tasks with functionality to add, delete, mark, and unmark tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":"public class Tasklist {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":" * The actual list storing the tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" * Initializes an empty task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" public Tasklist() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" * Marks a task as done based on the index provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" * @param i Index of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" public String mark(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" if (i \u003e tasks.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" return \"Please mark something in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":" tasks.get(i - 1).mark();","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"kwangthiag"},"content":" Task t \u003d tasks.get(i - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"kwangthiag"},"content":" return Ui.mark(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"kwangthiag"},"content":" * Unmarks a task based on the index provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"kwangthiag"},"content":" * @param i Index of the task in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"kwangthiag"},"content":" public String unmark(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"kwangthiag"},"content":" if (i \u003e tasks.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"kwangthiag"},"content":" return \"Please unmark something in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"kwangthiag"},"content":" tasks.get(i - 1).unmark();","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"kwangthiag"},"content":" Task t \u003d tasks.get(i - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"kwangthiag"},"content":" return Ui.unmark(t);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"kwangthiag"},"content":" * Adds a task to the list based on the provided command string.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"kwangthiag"},"content":" * @param s Command string to parse and add the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"kwangthiag"},"content":" * @throws DukeMissingArgumentException If the required arguments for a task are missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"kwangthiag"},"content":" * @throws DukeInvalidArgumentException If the provided arguments for a task are invalid.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"kwangthiag"},"content":" public String addToList(String s) throws DukeMissingArgumentException, DukeInvalidArgumentException {","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"kwangthiag"},"content":" StringBuilder str \u003d new StringBuilder(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"kwangthiag"},"content":" String cmd \u003d Parser.parseCommand(s);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"kwangthiag"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"kwangthiag"},"content":" if (cmd \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"kwangthiag"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"kwangthiag"},"content":" if (cmd.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003c\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"kwangthiag"},"content":" throw new DukeMissingArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"kwangthiag"},"content":" return addTodo(str);","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"kwangthiag"},"content":" } else if (cmd.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003c\u003d 9) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"kwangthiag"},"content":" throw new DukeMissingArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"kwangthiag"},"content":" return addDeadline(str);","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"kwangthiag"},"content":" } else if (cmd.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"kwangthiag"},"content":" if (s.length() \u003c\u003d 6) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"kwangthiag"},"content":" throw new DukeMissingArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"kwangthiag"},"content":" return addEvent(str);","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"kwangthiag"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"kwangthiag"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"kwangthiag"},"content":" private String addEvent(StringBuilder str) throws DukeMissingArgumentException {","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"kwangthiag"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"kwangthiag"},"content":" String t \u003d str.substring(6, str.length()).toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"kwangthiag"},"content":" String[] arr \u003d t.split(\"/from \");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"kwangthiag"},"content":" String[] times \u003d arr[1].split(\" /to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime startTime \u003d LocalDateTime.parse(times[0], formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime endTime \u003d LocalDateTime.parse(times[1], formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"kwangthiag"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"kwangthiag"},"content":" return \"End time must be after the start time!\";","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"kwangthiag"},"content":" Event e \u003d new Event(arr[0], startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"kwangthiag"},"content":" tasks.add(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"kwangthiag"},"content":" return Ui.add(e, tasks.size());","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"kwangthiag"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"kwangthiag"},"content":" throw new DukeMissingArgumentException();","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"kwangthiag"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"kwangthiag"},"content":" return \"Please enter the start/end time in the format of \u003cDD/MM/YY HH:MM\u003e!\";","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"kwangthiag"},"content":" private String addDeadline(StringBuilder str) throws DukeMissingArgumentException {","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"kwangthiag"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yy HH:mm\");","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"kwangthiag"},"content":" String t \u003d str.substring(9, str.length()).toString();","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"kwangthiag"},"content":" String[] arr \u003d t.split(\"/by \");","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"kwangthiag"},"content":" LocalDateTime deadline \u003d LocalDateTime.parse(arr[1], formatter);","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"kwangthiag"},"content":" Deadline d \u003d new Deadline(arr[0], deadline);","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"kwangthiag"},"content":" tasks.add(d);","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"kwangthiag"},"content":" return Ui.add(d, tasks.size());","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"kwangthiag"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"kwangthiag"},"content":" throw new DukeMissingArgumentException();","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"kwangthiag"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"kwangthiag"},"content":" return \"Please enter the start/end time in the format of \u003cDD/MM/YY HH:MM\u003e!\";","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"kwangthiag"},"content":" private String addTodo(StringBuilder str) {","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"kwangthiag"},"content":" Todo t \u003d new Todo(str.substring(5, str.length()).toString());","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"kwangthiag"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"kwangthiag"},"content":" return Ui.add(t, tasks.size());","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"kwangthiag"},"content":" * Deletes a task from the list based on the provided index.","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"kwangthiag"},"content":" * @param i Index of the task to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"kwangthiag"},"content":" public String delete(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"kwangthiag"},"content":" if (i \u003e tasks.size() || i \u003c\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"kwangthiag"},"content":" return \"Please delete something in the list\";","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"kwangthiag"},"content":" Task t \u003d tasks.get(i - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"kwangthiag"},"content":" tasks.remove(i - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"kwangthiag"},"content":" return Ui.delete(t, tasks.size());","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"kwangthiag"},"content":" * Prints all tasks in the list to the console.","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"kwangthiag"},"content":" public String printList() {","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"kwangthiag"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"kwangthiag"},"content":" for (int i \u003d 1; i \u003c\u003d this.tasks.size(); ++i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"kwangthiag"},"content":" Task t \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"kwangthiag"},"content":" stringBuilder.append(i + \". \" + t.toString() + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"kwangthiag"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"kwangthiag"},"content":" * Saves the current list of tasks to a file using a BufferedWriter.","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"kwangthiag"},"content":" * @param bw BufferedWriter to write the tasks to.","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"kwangthiag"},"content":" * @throws IOException If an error occurs during writing.","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"kwangthiag"},"content":" public void saveList(BufferedWriter bw) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"kwangthiag"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":173,"author":{"gitId":"kwangthiag"},"content":" bw.write(task.stringifyTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"kwangthiag"},"content":" bw.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"kwangthiag"},"content":" public String find(String arg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"kwangthiag"},"content":" StringBuilder s \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"kwangthiag"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"kwangthiag"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":182,"author":{"gitId":"kwangthiag"},"content":" if (task.find(arg)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"kwangthiag"},"content":" s.append(i++);","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"kwangthiag"},"content":" s.append(\". \");","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"kwangthiag"},"content":" s.append(task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"kwangthiag"},"content":" s.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"kwangthiag"},"content":" return s.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"kwangthiag"},"content":" * Converts the task list to a string representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"kwangthiag"},"content":" * @return String representation of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":196,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":197,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":198,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"kwangthiag"},"content":" StringBuilder s \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"kwangthiag"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"kwangthiag"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":203,"author":{"gitId":"kwangthiag"},"content":" s.append(i++);","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"kwangthiag"},"content":" s.append(\". \");","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"kwangthiag"},"content":" s.append(task.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"kwangthiag"},"content":" s.append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"kwangthiag"},"content":" return s.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":210}},{"path":"src/main/java/duke/task/TasklistTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"import duke.exceptions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"public class TasklistTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" public void markTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" Tasklist list \u003d new Tasklist();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" list.addToList(\"todo sleep\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" list.mark(1);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" // do nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" assertEquals( \"1. [T][X] sleep\\n\", list.toString(),\"\u0027mark\u0027 should mark task as done\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" public void deleteTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" Tasklist list \u003d new Tasklist();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" list.addToList(\"todo sleep\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" list.addToList(\"todo go home\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" list.addToList(\"todo codeforces\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" list.delete(2);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":" // do nothing","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" assertEquals(\"1. [T][ ] sleep\\n2. [T][ ] codeforces\\n\", list.toString(), \"\u0027delete\u0027 should remove the second task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"kwangthiag":35}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":" * Represents a Todo task, which is a type of Task without a specific date attached to it.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" * A constant defining the type of task as Todo.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" private static final String TYPE \u003d \"[T]\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" * Constructs a new Todo task with the provided name.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" * @param name The name or description of the Todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"kwangthiag"},"content":" * Returns a string representation of the task in a format suitable for file storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"kwangthiag"},"content":" * @return A string representing the task in \"T|done_status|name\" format.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"kwangthiag"},"content":" public String stringifyTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"kwangthiag"},"content":" return String.format(\"T|%d|%s\", this.isDone ? 1 : 0, this.name);","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"kwangthiag"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"kwangthiag"},"content":" * Returns a string representation of the Todo task, including its type and name.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"kwangthiag"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"kwangthiag"},"content":" * @return A string in the format \"[T] TaskName\".","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"kwangthiag"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"kwangthiag"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"kwangthiag"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"kwangthiag"},"content":" return TYPE + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"kwangthiag"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"kwangthiag"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"kwangthiag":41}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"kwangthiag"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"kwangthiag"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"kwangthiag"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"kwangthiag"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"kwangthiag"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"kwangthiag"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"kwangthiag"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"kwangthiag"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"kwangthiag"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"kwangthiag"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"kwangthiag":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"kwangthiag"},"content":"event project meeting /from 11/10/11 00:00 /to 11/10/11 11:00","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"kwangthiag"},"content":"event time travel /from 11/10/12 00:00 /to 11/10/11 11:00","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"kwangthiag"},"content":"event time travel /by 11/10/11 00:00","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"kwangthiag"},"content":"deadline time travel /by 11/10/11 00:00","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"kwangthiag"},"content":"todo codeforces","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"kwangthiag"},"content":"mark 3","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"kwangthiag"},"content":"delete 4","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"kwangthiag"},"content":"bye","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"kwangthiag"},"content":"a","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"kwangthiag":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":"kwangthiag"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"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":{"kwangthiag":1,"-":20}}] diff --git a/kwangthiag_ip_master/commits.json b/kwangthiag_ip_master/commits.json index b9f508d9..7a87da97 100644 --- a/kwangthiag_ip_master/commits.json +++ b/kwangthiag_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"kwangthiag":[{"date":"2023-08-24","commitResults":[{"hash":"1d54df59f55480f26d52b4128c76259d8b5c9a2d","isMergeCommit":false,"messageTitle":"l0 done","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"4d24671febcf1905cffd325928d24001e9815dd5","isMergeCommit":false,"messageTitle":"l1 done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"70d92cd6d5a1dbdfe9118202378d07b015f56d52","isMergeCommit":false,"messageTitle":"l1 done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":12}}},{"hash":"bf1ef67c761d772d43ef98d90c9ea5c9155fc644","isMergeCommit":false,"messageTitle":"l1 done","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5f1b21b72cef30812978defa9c75f81ab0645b18","isMergeCommit":false,"messageTitle":"l2 done","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":6}}},{"hash":"28435ca9a0f922cd92df439bff267dd5504b7945","isMergeCommit":false,"messageTitle":"l3 done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":2}}},{"hash":"cd7f53ebbbc2f7926fe3afd163c53cb5833bfe78","isMergeCommit":false,"messageTitle":"l3 done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"832574c9246b6f03f5e90f32aef229df0e3b3293","isMergeCommit":false,"messageTitle":"l4 done","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":35}}},{"hash":"1160f9ec5332a485d2ce603e56e365efe8fc788c","isMergeCommit":false,"messageTitle":"atextuitesting done","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":0}}},{"hash":"be69c8db0e4c8c511d13e4b79c37100cf2151469","isMergeCommit":false,"messageTitle":"l5 done","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":62,"deletions":23}}},{"hash":"abe8ba7eeb0d4f742d67b789a02e8506630acf56","isMergeCommit":false,"messageTitle":"l6 done","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":11,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"06a26f73b3bd561d25cb9b87ed6537ddbabc6ea8","isMergeCommit":false,"messageTitle":"Added Save function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"ef2cccfb6dc6dda1571225a6fcfc7ba278258483","isMergeCommit":false,"messageTitle":"Added Save function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":82,"deletions":21}}},{"hash":"59cd1f08df805071295f6254af2ddfb5f1efd282","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6de85de2c07511614bfe9853b93e2035975c0975","isMergeCommit":false,"messageTitle":"Fixed Error Handling and added Date and Time support","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":96,"deletions":28}}},{"hash":"f4caefc6763667eacb8f32e06f20f4059f182a0b","isMergeCommit":true,"messageTitle":"Merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"cc10ee6d57772086d4601e8cf1a8a2cd60245384","isMergeCommit":false,"messageTitle":"Added OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":253,"deletions":134}}},{"hash":"2bd0094784672775a66dfeda8e43f0b411618776","isMergeCommit":false,"messageTitle":"Added OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":4},"java":{"insertions":185,"deletions":142}}},{"hash":"900d821a78488b41b11e4e5ba2a0b508628c2e3f","isMergeCommit":true,"messageTitle":"Merge branch-AOOP","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"3ec718ad55012f4f30fd3c5cb7523776f5cc7d74","isMergeCommit":false,"messageTitle":"Added packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":15},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"a245beb8ef461e3bf69d3a2e3fb47cc8f0e58cb1","isMergeCommit":true,"messageTitle":"Merge branch-Package","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2011dca18cc9f5c7b1e51423ec71573a587f0303","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"574787d26a60dd84d9c42edc9f013d446c02ef61","isMergeCommit":false,"messageTitle":"JUnit Tests Added","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":81,"deletions":2}}},{"hash":"634b279cd63b9d3f316f86b5a5a046a44ba7c214","isMergeCommit":false,"messageTitle":"Fixed Coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":379,"deletions":79}}},{"hash":"1cd344175914deb071310bab5c42f81bd300cb54","isMergeCommit":false,"messageTitle":"Added Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":70,"deletions":0}}},{"hash":"6a423e06e2da9c6c2529c1cad81c8fcd1868afbd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1e16b7cc47259979edf8742301ad1c957520a539","isMergeCommit":true,"messageTitle":"Deconflicted the merges","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ccaaaaa99df953a1081da357adc679aed61ec578","isMergeCommit":false,"messageTitle":"Fixed find and some conflicts","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":8,"deletions":29}}}]},{"date":"2023-09-08","commitResults":[{"hash":"cacca6ed1616c10fb70ca08195357d70d89e5baa","isMergeCommit":false,"messageTitle":"Added GUI Support","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":28,"deletions":0},"java":{"insertions":8,"deletions":0}}},{"hash":"40b5b5a9180a9f303706f275f5eef6a6b07992bd","isMergeCommit":false,"messageTitle":"Added GUI Support","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":2,"deletions":2},"fxml":{"insertions":29,"deletions":22},"java":{"insertions":265,"deletions":73}}},{"hash":"50264f829105fca460b8c6e6895b3657e97e333e","isMergeCommit":true,"messageTitle":"Merge tag \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"kwangthiag":{"java":1181,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":16,"txt":12}},"authorContributionVariance":{"kwangthiag":69243.16},"authorDisplayNameMap":{"kwangthiag":"CS2103T-T08-4 TAN ..HIAG"}} +{"authorDailyContributionsMap":{"kwangthiag":[{"date":"2023-08-24","commitResults":[{"hash":"1d54df59f55480f26d52b4128c76259d8b5c9a2d","isMergeCommit":false,"messageTitle":"l0 done","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"4d24671febcf1905cffd325928d24001e9815dd5","isMergeCommit":false,"messageTitle":"l1 done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"70d92cd6d5a1dbdfe9118202378d07b015f56d52","isMergeCommit":false,"messageTitle":"l1 done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":12}}},{"hash":"bf1ef67c761d772d43ef98d90c9ea5c9155fc644","isMergeCommit":false,"messageTitle":"l1 done","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5f1b21b72cef30812978defa9c75f81ab0645b18","isMergeCommit":false,"messageTitle":"l2 done","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":6}}},{"hash":"28435ca9a0f922cd92df439bff267dd5504b7945","isMergeCommit":false,"messageTitle":"l3 done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":2}}},{"hash":"cd7f53ebbbc2f7926fe3afd163c53cb5833bfe78","isMergeCommit":false,"messageTitle":"l3 done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"832574c9246b6f03f5e90f32aef229df0e3b3293","isMergeCommit":false,"messageTitle":"l4 done","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":35}}},{"hash":"1160f9ec5332a485d2ce603e56e365efe8fc788c","isMergeCommit":false,"messageTitle":"atextuitesting done","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":0}}},{"hash":"be69c8db0e4c8c511d13e4b79c37100cf2151469","isMergeCommit":false,"messageTitle":"l5 done","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":62,"deletions":23}}},{"hash":"abe8ba7eeb0d4f742d67b789a02e8506630acf56","isMergeCommit":false,"messageTitle":"l6 done","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":11,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"06a26f73b3bd561d25cb9b87ed6537ddbabc6ea8","isMergeCommit":false,"messageTitle":"Added Save function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"ef2cccfb6dc6dda1571225a6fcfc7ba278258483","isMergeCommit":false,"messageTitle":"Added Save function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":82,"deletions":21}}},{"hash":"59cd1f08df805071295f6254af2ddfb5f1efd282","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"6de85de2c07511614bfe9853b93e2035975c0975","isMergeCommit":false,"messageTitle":"Fixed Error Handling and added Date and Time support","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":96,"deletions":28}}},{"hash":"f4caefc6763667eacb8f32e06f20f4059f182a0b","isMergeCommit":true,"messageTitle":"Merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"cc10ee6d57772086d4601e8cf1a8a2cd60245384","isMergeCommit":false,"messageTitle":"Added OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":253,"deletions":134}}},{"hash":"2bd0094784672775a66dfeda8e43f0b411618776","isMergeCommit":false,"messageTitle":"Added OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":4},"java":{"insertions":185,"deletions":142}}},{"hash":"900d821a78488b41b11e4e5ba2a0b508628c2e3f","isMergeCommit":true,"messageTitle":"Merge branch-AOOP","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"3ec718ad55012f4f30fd3c5cb7523776f5cc7d74","isMergeCommit":false,"messageTitle":"Added packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":15},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"a245beb8ef461e3bf69d3a2e3fb47cc8f0e58cb1","isMergeCommit":true,"messageTitle":"Merge branch-Package","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2011dca18cc9f5c7b1e51423ec71573a587f0303","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"574787d26a60dd84d9c42edc9f013d446c02ef61","isMergeCommit":false,"messageTitle":"JUnit Tests Added","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":81,"deletions":2}}},{"hash":"634b279cd63b9d3f316f86b5a5a046a44ba7c214","isMergeCommit":false,"messageTitle":"Fixed Coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":379,"deletions":79}}},{"hash":"1cd344175914deb071310bab5c42f81bd300cb54","isMergeCommit":false,"messageTitle":"Added Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":70,"deletions":0}}},{"hash":"6a423e06e2da9c6c2529c1cad81c8fcd1868afbd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1e16b7cc47259979edf8742301ad1c957520a539","isMergeCommit":true,"messageTitle":"Deconflicted the merges","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ccaaaaa99df953a1081da357adc679aed61ec578","isMergeCommit":false,"messageTitle":"Fixed find and some conflicts","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":8,"deletions":29}}}]},{"date":"2023-09-08","commitResults":[{"hash":"cacca6ed1616c10fb70ca08195357d70d89e5baa","isMergeCommit":false,"messageTitle":"Added GUI Support","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":28,"deletions":0},"java":{"insertions":8,"deletions":0}}},{"hash":"40b5b5a9180a9f303706f275f5eef6a6b07992bd","isMergeCommit":false,"messageTitle":"Added GUI Support","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":2,"deletions":2},"fxml":{"insertions":29,"deletions":22},"java":{"insertions":265,"deletions":73}}},{"hash":"50264f829105fca460b8c6e6895b3657e97e333e","isMergeCommit":true,"messageTitle":"Merge tag \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"48525c26a8e57057177b50e1997645d522d67fc3","isMergeCommit":false,"messageTitle":"Add assertions.","messageBody":"Add assert.isRunning to exit method in Duke.java.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"e93f072677c65b338fcdbc3e1a92d2b57ac35e0a","isMergeCommit":true,"messageTitle":"Merge pull request #2 from kwangthiag/branch-A-Assertions","messageBody":"Add assertions.","fileTypesAndContributionMap":{}},{"hash":"a2277ecc7c6a808615f9f7636a5da0880bf510b0","isMergeCommit":false,"messageTitle":"Fix Code Quality","messageBody":"Abstract out addToList method in Task.java into addTodo, addEvent and\naddDeadline methods. Change boolean name done to isDone\n","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":54,"deletions":51}}},{"hash":"bd2e08365f8cf40e5364e583bf25fb5bd575e0e8","isMergeCommit":false,"messageTitle":"Fix Code Quality","messageBody":"Abstract out addToList method in Task.java into addTodo, addEvent and addDeadline methods. Change boolean name done to isDone\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":2}}},{"hash":"b1ca3bc7fb6094ad661dce52d3a50824b0ccff91","isMergeCommit":true,"messageTitle":"Merge pull request #3 from kwangthiag/branch-A-CodeQuality","messageBody":"Fix Code Quality","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"kwangthiag":{"java":1188,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":16,"txt":12}},"authorContributionVariance":{"kwangthiag":53151.27},"authorDisplayNameMap":{"kwangthiag":"CS2103T-T08-4 TAN ..HIAG"}} diff --git a/laurenlim2112_ip_master/authorship.json b/laurenlim2112_ip_master/authorship.json index f6e9d951..3e69cdca 100644 --- a/laurenlim2112_ip_master/authorship.json +++ b/laurenlim2112_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" mainClass.set(\"spot.Launcher\")","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" archiveBaseName \u003d \"spot\"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":"checkstyle {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":22,"-":40}},{"path":"data/spot.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":" T | | nyeh","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":" D | X | wah | 09-05-2024","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":" E | | woahhh | 10-10-2023 | 20-10-2023","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"laurenlim2112":3}},{"path":"src/main/java/spot/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"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":"laurenlim2112"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"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":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" * Returns DialogBox containing user\u0027s dialog and profile picture.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" * @param text User dialog.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" * @param img User profile picture.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting DialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" * Returns DialogBox containing Spot\u0027s dialog and profile picture.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" * @param text Spot dialog.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" * @param img Spot profile picture.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting DialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" public static DialogBox getSpotDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":75}},{"path":"src/main/java/spot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":12}},{"path":"src/main/java/spot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import javafx.stage.WindowEvent;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" * A GUI for Spot using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" private Spot spot \u003d new Spot();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * Starts up the Spot chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" * @param stage Stage to display GUI nodes.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setSpot(spot);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" stage.setOnCloseRequest((WindowEvent event) -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" spot.getResponse(\"bye\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" stage.setTitle(\"Spot\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":41}},{"path":"src/main/java/spot/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" private Spot spot;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" private Image spotImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Spot.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" * Initializes appearance of the MainWindow.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" greetUser();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * Sets Spot chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" public void setSpot(Spot s) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" spot \u003d s;","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Spot\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" * the dialog container. Clears the user input after processing. Closes chatbot on \u0027bye\u0027 exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" String response \u003d spot.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" DialogBox.getSpotDialog(response, spotImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" if (spot.getExit()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" PauseTransition pause \u003d new PauseTransition(Duration.seconds(0.5));","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" pause.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" Platform.exit();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" pause.play();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" * Creates dialog box to greet user on initial chatbot startup.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" private void greetUser() {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" DialogBox.getSpotDialog(\"Hello, it\u0027s Spot!\", spotImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":79}},{"path":"src/main/java/spot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.time.format.ResolverStyle;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.*;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" * Represents a parser to parse commands and dates.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * Returns command corresponding to the specified input string.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting command.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseCommand(String input) throws SpotException {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" if (input.startsWith(\"list tasks on\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" return parseListTasksOnCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"list\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" return parseFindCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" return parseMarkCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" return parseUnmarkCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" return parseDeleteCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" return parseAddToDoCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" return parseAddDeadlineCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" return parseAddEventCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"update\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" return parseUpdateCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"bye\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know what command that is!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" * Returns ListTasksOnCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting ListTasksOnCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseListTasksOnCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"list tasks on\";","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" String d \u003d input.substring(minimumInputLength).trim();","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" LocalDate date \u003d Parser.parseDate(d);","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" return new ListTasksOnCommand(date);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks you might\u0027ve \"","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" + \"forgotten to add a date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" * Returns FindCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting FindCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseFindCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"find\";","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" String keyword \u003d input.substring(minimumInputLength).trim();","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" if (keyword.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know what keyword you\u0027re searching for!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know what keyword you\u0027re searching for!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" * Returns MarkCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting MarkCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseMarkCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"mark\";","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(input.substring(minimumInputLength).trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"laurenlim2112"},"content":" return new MarkCommand(position);","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know which task to mark as done!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"laurenlim2112"},"content":" * Returns UnmarkCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting UnmarkCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUnmarkCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"unmark\";","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(input.substring(minimumInputLength).trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"laurenlim2112"},"content":" return new UnmarkCommand(position);","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know which task to mark as not done!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"laurenlim2112"},"content":" * Returns update Command corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting Command.","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUpdateCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"update\";","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"laurenlim2112"},"content":" String truncatedInput \u003d input.substring(minimumInputLength).trim();","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"laurenlim2112"},"content":" if (truncatedInput.contains(\"/description\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"laurenlim2112"},"content":" return parseUpdateDescriptionCommand(truncatedInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"laurenlim2112"},"content":" } else if (truncatedInput.contains(\"/deadline\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"laurenlim2112"},"content":" return parseUpdateDeadlineCommand(truncatedInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"laurenlim2112"},"content":" } else if (truncatedInput.contains(\"/start\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"laurenlim2112"},"content":" return parseUpdateStartCommand(truncatedInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"laurenlim2112"},"content":" } else if (truncatedInput.contains(\"/end\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"laurenlim2112"},"content":" return parseUpdateEndCommand(truncatedInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know which field you\u0027d like to edit!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know which task to update!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"laurenlim2112"},"content":" * Returns UpdateDescriptionCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting UpdateDescriptionCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUpdateDescriptionCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":166,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d input.split(\"/description\");","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(keywords[0].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"laurenlim2112"},"content":" if (keywords.length \u003c 2 || keywords[1].isEmpty()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot needs you to provide a valid \"","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"laurenlim2112"},"content":" + \"description for this task!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"laurenlim2112"},"content":" String description \u003d keywords[1].trim();","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"laurenlim2112"},"content":" return new UpdateDescriptionCommand(position, description);","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know which task to update!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"laurenlim2112"},"content":" * Returns UpdateDeadlineCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting UpdateDeadlineCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUpdateDeadlineCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d input.split(\"/deadline\");","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(keywords[0].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"laurenlim2112"},"content":" if (keywords.length \u003c 2) {","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot needs you to provide a valid \"","lastModifiedDate":"2023-09-10"},{"lineNumber":192,"author":{"gitId":"laurenlim2112"},"content":" + \"deadline for this task!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"laurenlim2112"},"content":" LocalDate deadline \u003d Parser.parseDate(keywords[1].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"laurenlim2112"},"content":" return new UpdateDeadlineCommand(position, deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know which task to update!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"laurenlim2112"},"content":" * Returns UpdateStartCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting UpdateStartCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":208,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUpdateStartCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":209,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":210,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d input.split(\"/start\");","lastModifiedDate":"2023-09-10"},{"lineNumber":211,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(keywords[0].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":212,"author":{"gitId":"laurenlim2112"},"content":" if (keywords.length \u003c 2) {","lastModifiedDate":"2023-09-10"},{"lineNumber":213,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot needs you to provide a valid \"","lastModifiedDate":"2023-09-10"},{"lineNumber":214,"author":{"gitId":"laurenlim2112"},"content":" + \"start date for this task!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":215,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":216,"author":{"gitId":"laurenlim2112"},"content":" LocalDate start \u003d Parser.parseDate(keywords[1].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":217,"author":{"gitId":"laurenlim2112"},"content":" return new UpdateStartCommand(position, start);","lastModifiedDate":"2023-09-10"},{"lineNumber":218,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":219,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know which task to update!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":220,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":221,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":222,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":223,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":224,"author":{"gitId":"laurenlim2112"},"content":" * Returns UpdateEndCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":225,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":226,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":227,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting UpdateEndCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":228,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":229,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":230,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUpdateEndCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":231,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":232,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d input.split(\"/end\");","lastModifiedDate":"2023-09-10"},{"lineNumber":233,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(keywords[0].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":234,"author":{"gitId":"laurenlim2112"},"content":" if (keywords.length \u003c 2) {","lastModifiedDate":"2023-09-10"},{"lineNumber":235,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot needs you to provide a valid \"","lastModifiedDate":"2023-09-10"},{"lineNumber":236,"author":{"gitId":"laurenlim2112"},"content":" + \"end date for this task!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":237,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":238,"author":{"gitId":"laurenlim2112"},"content":" LocalDate end \u003d Parser.parseDate(keywords[1].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":239,"author":{"gitId":"laurenlim2112"},"content":" return new UpdateEndCommand(position, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":240,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":241,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know which task to update!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":242,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":243,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":244,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":245,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":246,"author":{"gitId":"laurenlim2112"},"content":" * Returns AddToDoCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":247,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":248,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":249,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting AddToDoCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":250,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":251,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":252,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseAddToDoCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":253,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"todo\";","lastModifiedDate":"2023-09-10"},{"lineNumber":254,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":255,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":256,"author":{"gitId":"laurenlim2112"},"content":" String description \u003d input.substring(minimumInputLength).trim();","lastModifiedDate":"2023-09-10"},{"lineNumber":257,"author":{"gitId":"laurenlim2112"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":258,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot wonders if you\u0027ve \"","lastModifiedDate":"2023-08-28"},{"lineNumber":259,"author":{"gitId":"laurenlim2112"},"content":" + \"forgotten the description?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":260,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":261,"author":{"gitId":"laurenlim2112"},"content":" return new AddToDoCommand(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":262,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":263,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot wonders if you\u0027ve \"","lastModifiedDate":"2023-09-10"},{"lineNumber":264,"author":{"gitId":"laurenlim2112"},"content":" + \"forgotten the description?\");","lastModifiedDate":"2023-09-10"},{"lineNumber":265,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":266,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":267,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":268,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":269,"author":{"gitId":"laurenlim2112"},"content":" * Returns AddDeadlineCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":270,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":271,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":272,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting AddDeadlineCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":273,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":274,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":275,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseAddDeadlineCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":276,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"deadline\";","lastModifiedDate":"2023-09-10"},{"lineNumber":277,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":278,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":279,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d input.substring(minimumInputLength).trim().split(\"/by\");","lastModifiedDate":"2023-09-10"},{"lineNumber":280,"author":{"gitId":"laurenlim2112"},"content":" if (keywords[0].isEmpty()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":281,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot wonders if you\u0027ve \"","lastModifiedDate":"2023-08-28"},{"lineNumber":282,"author":{"gitId":"laurenlim2112"},"content":" + \"forgotten the description?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":283,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":284,"author":{"gitId":"laurenlim2112"},"content":" if (keywords.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":285,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks you\u0027re missing a deadline!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":286,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":287,"author":{"gitId":"laurenlim2112"},"content":" String description \u003d keywords[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":288,"author":{"gitId":"laurenlim2112"},"content":" LocalDate deadline \u003d Parser.parseDate(keywords[1].trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":289,"author":{"gitId":"laurenlim2112"},"content":" return new AddDeadlineCommand(description, deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":290,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":291,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot needs more details than that!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":292,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":293,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":294,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":295,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":296,"author":{"gitId":"laurenlim2112"},"content":" * Returns AddEventCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":297,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":298,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":299,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting AddEventCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":300,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":301,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":302,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseAddEventCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":303,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"event\";","lastModifiedDate":"2023-09-10"},{"lineNumber":304,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":305,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":306,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d input.substring(minimumInputLength).trim().split(\"/from|/to\");","lastModifiedDate":"2023-09-10"},{"lineNumber":307,"author":{"gitId":"laurenlim2112"},"content":" if (keywords[0].isEmpty()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":308,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot wonders if you\u0027ve \"","lastModifiedDate":"2023-08-28"},{"lineNumber":309,"author":{"gitId":"laurenlim2112"},"content":" + \"forgotten the description?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":310,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":311,"author":{"gitId":"laurenlim2112"},"content":" if (keywords[1].isBlank() || keywords[2].isEmpty()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":312,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot can\u0027t find a start time \"","lastModifiedDate":"2023-08-28"},{"lineNumber":313,"author":{"gitId":"laurenlim2112"},"content":" + \"and/or an end date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":314,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":315,"author":{"gitId":"laurenlim2112"},"content":" String description \u003d keywords[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":316,"author":{"gitId":"laurenlim2112"},"content":" LocalDate start \u003d Parser.parseDate(keywords[1].trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":317,"author":{"gitId":"laurenlim2112"},"content":" LocalDate end \u003d Parser.parseDate(keywords[2].trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":318,"author":{"gitId":"laurenlim2112"},"content":" if (start.isAfter(end)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":319,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks the start date of your event \"","lastModifiedDate":"2023-09-10"},{"lineNumber":320,"author":{"gitId":"laurenlim2112"},"content":" + \"cannot be after the end date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":321,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":322,"author":{"gitId":"laurenlim2112"},"content":" return new AddEventCommand(description, start, end);","lastModifiedDate":"2023-08-27"},{"lineNumber":323,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":324,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot needs more details than that!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":325,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":326,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":327,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":328,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":329,"author":{"gitId":"laurenlim2112"},"content":" * Returns DeleteCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":330,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":331,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":332,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting DeleteCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":333,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":334,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":335,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseDeleteCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":336,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"delete\";","lastModifiedDate":"2023-09-10"},{"lineNumber":337,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":338,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":339,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(input.substring(minimumInputLength).trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":340,"author":{"gitId":"laurenlim2112"},"content":" return new DeleteCommand(position);","lastModifiedDate":"2023-09-10"},{"lineNumber":341,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":342,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know which task to delete!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":343,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":344,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":345,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":346,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":347,"author":{"gitId":"laurenlim2112"},"content":" * Returns LocalDate object corresponding to the specified input string.","lastModifiedDate":"2023-08-28"},{"lineNumber":348,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":349,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":350,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting LocalDate object.","lastModifiedDate":"2023-08-28"},{"lineNumber":351,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is an invalid date.","lastModifiedDate":"2023-08-28"},{"lineNumber":352,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":353,"author":{"gitId":"laurenlim2112"},"content":" public static LocalDate parseDate(String input) throws SpotException {","lastModifiedDate":"2023-08-28"},{"lineNumber":354,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":355,"author":{"gitId":"laurenlim2112"},"content":" return LocalDate.parse(input,","lastModifiedDate":"2023-08-28"},{"lineNumber":356,"author":{"gitId":"laurenlim2112"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-uuuu\")","lastModifiedDate":"2023-08-28"},{"lineNumber":357,"author":{"gitId":"laurenlim2112"},"content":" .withResolverStyle(ResolverStyle.STRICT));","lastModifiedDate":"2023-08-28"},{"lineNumber":358,"author":{"gitId":"laurenlim2112"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":359,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"This doesn\u0027t seem like a valid date to Spot! \"","lastModifiedDate":"2023-08-28"},{"lineNumber":360,"author":{"gitId":"laurenlim2112"},"content":" + \"Please make sure your date is given in this format: dd-mm-yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":361,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":362,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":363,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":364,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":364}},{"path":"src/main/java/spot/Spot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":" * Represents a chatbot named Spot.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class Spot {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Spot object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public Spot() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" tasks \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" } catch (SpotException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" assert tasks !\u003d null;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * Returns String response from the Spot chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" ui.resetOutput();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" Command c \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" return ui.getOutput();","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" } catch (SpotException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" ui.setError(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" return ui.getOutput();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" * Returns boolean indicating if exit command was received.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" public boolean getExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" return isExit;","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"laurenlim2112":53}},{"path":"src/main/java/spot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * Represents the file storage system of the chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" private static final String DIRECTORY_NAME \u003d \"./data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" private static final String FILE_NAME \u003d \"spot.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" private static final String FULL_PATH \u003d DIRECTORY_NAME + \"/\" + FILE_NAME;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" private File storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" public Storage() throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" File directory \u003d new File(DIRECTORY_NAME);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" assert directory.exists();","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" File file \u003d new File(FULL_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" assert file.exists();","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" this.storage \u003d file;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" * Loads tasks from storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" * @return ArrayList of Tasks containing all stored tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the file path cannot be found.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" Scanner fileScanner \u003d new Scanner(storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" String task \u003d fileScanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d task.trim().split(\"\\\\Q | \\\\E\");","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" String taskType \u003d keywords[0];","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" boolean isDone \u003d keywords[1].equals(\"X\");","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(new ToDo(keywords[2], isDone));","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" LocalDate deadline \u003d Parser.parseDate(keywords[3]);","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(new Deadline(keywords[2], isDone, deadline));","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" LocalDate start \u003d Parser.parseDate(keywords[3]);","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" LocalDate end \u003d Parser.parseDate(keywords[4]);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(new Event(keywords[2], isDone, start, end));","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"The data file is corrupted!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" fileScanner.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" * Saves tasks into storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks TaskList to be stored into a text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the text file cannot be opened.","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" public void saveTasks(TaskList tasks) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" FileWriter fileWriter \u003d new FileWriter(Storage.FULL_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(fileWriter);","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" bufferedWriter.write(task.toLine());","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"laurenlim2112"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":105}},{"path":"src/main/java/spot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new TaskList object.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Tasklist object with pre-existing ArrayList of Tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Pre-existing ArrayList of Tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" * Returns the number of tasks in the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" * @return Number of tasks in the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" * @param index Specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" * Adds new ToDo object to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the new ToDo.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" * @return The ToDo added to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" public ToDo addToDo(String description) {","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" ToDo newTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" return newTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" * Adds new Deadline object to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the new Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Due date of the new Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" * @return The Deadline added to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" public Deadline addDeadline(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" Deadline newTask \u003d new Deadline(description, deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" return newTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" * Adds new Event object to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the new Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" * @param start Start date of the new Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" * @param end End date of the new Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" * @return The Event added to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" public Event addEvent(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" Event newTask \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" return newTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":" * Marks Task at the specified position as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist.","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" public void markTask(Ui ui, int position) throws SpotException {","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"laurenlim2112"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Wow! Spot has marked this task as done!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\" \" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"laurenlim2112"},"content":" * Marks Task at the specified position as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist.","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"laurenlim2112"},"content":" public void unmarkTask(Ui ui, int position) throws SpotException {","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"laurenlim2112"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot will mark this task as not done yet then!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\" \" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"laurenlim2112"},"content":" * Deletes Task at the specified position.","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"laurenlim2112"},"content":" public void deleteTask(Ui ui, int position) throws SpotException {","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.remove(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot has removed this task: \" + \"\\n\" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Tasks in list: \" + tasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"laurenlim2112"},"content":" * Updates the description of the Task at the specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist.","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"laurenlim2112"},"content":" public void updateTaskDescription(Ui ui, int position, String description) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"laurenlim2112"},"content":" task.updateDescription(description);","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot has updated this task\u0027s description: \" + \"\\n\" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"laurenlim2112"},"content":" * Updates the deadline of the Task at the specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"laurenlim2112"},"content":" * or does not have a deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"laurenlim2112"},"content":" public void updateTaskDeadline(Ui ui, int position, LocalDate deadline) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":166,"author":{"gitId":"laurenlim2112"},"content":" task.updateDeadline(deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot has updated this task\u0027s deadline: \" + \"\\n\" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"laurenlim2112"},"content":" * Updates the start date of the Task at the specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"laurenlim2112"},"content":" * or does not have a start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"laurenlim2112"},"content":" public void updateTaskStart(Ui ui, int position, LocalDate start) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"laurenlim2112"},"content":" task.updateStart(start);","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot has updated this task\u0027s start date: \" + \"\\n\" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"laurenlim2112"},"content":" * Updates the end date of the Task at the specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"laurenlim2112"},"content":" * or does not have a end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":192,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"laurenlim2112"},"content":" public void updateTaskEnd(Ui ui, int position, LocalDate end) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"laurenlim2112"},"content":" task.updateEnd(end);","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot has updated this task\u0027s end date: \" + \"\\n\" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":203,"author":{"gitId":"laurenlim2112"},"content":" * Lists all tasks in the current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":204,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":205,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":206,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":207,"author":{"gitId":"laurenlim2112"},"content":" public void listTasks(Ui ui) {","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"laurenlim2112"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":209,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"You don\u0027t have any tasks for now! Want Spot to help find some?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":211,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot\u0027s got a list of your tasks, here!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"laurenlim2112"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":213,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d i + 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":214,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(position + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-10"},{"lineNumber":215,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":216,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":217,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":219,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":220,"author":{"gitId":"laurenlim2112"},"content":" * Lists all tasks in the current TaskList that fall on a specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":221,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":222,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":223,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":224,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":225,"author":{"gitId":"laurenlim2112"},"content":" public void listTasks(Ui ui, LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":226,"author":{"gitId":"laurenlim2112"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":227,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"You don\u0027t have any tasks for now! Want Spot to help find some?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":228,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":229,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":230,"author":{"gitId":"laurenlim2112"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":231,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":232,"author":{"gitId":"laurenlim2112"},"content":" if (task.fallsOn(date)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":233,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(position + \". \" + task);","lastModifiedDate":"2023-09-04"},{"lineNumber":234,"author":{"gitId":"laurenlim2112"},"content":" position +\u003d 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":235,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":236,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":237,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":238,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot thinks you don\u0027t have any tasks on \" + date + \"!\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":239,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":240,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":241,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":242,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":243,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":244,"author":{"gitId":"laurenlim2112"},"content":" * Lists all tasks in the current TaskList that match the specified keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":245,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":246,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":247,"author":{"gitId":"laurenlim2112"},"content":" * @param keyword Specified keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":248,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":249,"author":{"gitId":"laurenlim2112"},"content":" public void findTasks(Ui ui, String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":250,"author":{"gitId":"laurenlim2112"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":251,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"You don\u0027t have any tasks for now! Want Spot to help find some?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":252,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":253,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":254,"author":{"gitId":"laurenlim2112"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":255,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":256,"author":{"gitId":"laurenlim2112"},"content":" if (task.descriptionContains(keyword)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":257,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(position + \". \" + task);","lastModifiedDate":"2023-09-04"},{"lineNumber":258,"author":{"gitId":"laurenlim2112"},"content":" position +\u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":259,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":260,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":261,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":262,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot can\u0027t find any tasks matching the keyword: \" + keyword + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":263,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":264,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":265,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":266,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":266}},{"path":"src/main/java/spot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":" * Represents the user interface of the chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" public static final String GOODBYE_MESSAGE \u003d \"Spot\u0027s going to take a nap now. Goodnight!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" public static final String NEW_TASK_MESSAGE \u003d \"Spot will add this new task to your list: \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" private StringBuilder output;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" public Ui() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" this.output \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" * Resets the ouptut of the Ui object.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" public void resetOutput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" output.setLength(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the ouptut of the Ui object.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" public String getOutput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" return output.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * Sets output to goodbye message.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" public void setGoodbye() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" output.append(GOODBYE_MESSAGE);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" * Sets output to task added message.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" * @param newTask Task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" public void setAdd(TaskList tasks, Task newTask) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" output.append(NEW_TASK_MESSAGE + \" \" + newTask + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" output.append(\"Tasks in list: \" + tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" * Displays a list of the user\u0027s current tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Ui object of the current chatbot instance.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" public void listTasks(Ui ui, TaskList tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" tasks.listTasks(ui);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" * Displays a list of the user\u0027s current tasks falling on a specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Ui object of the current chatbot instance.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" public void listTasks(Ui ui, TaskList tasks, LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" tasks.listTasks(ui, date);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" * Sets output to error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" * @param error Error message.","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" public void setError(String error) {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" output.append(error);","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" * Sets output to message.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" * @param message Regular message.","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" public void setMessage(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" output.append(message + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":94}},{"path":"src/main/java/spot/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to add a new deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new AddDeadlineCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Due date of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" public AddDeadlineCommand(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * Executes the AddDeadlineCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" Deadline d \u003d tasks.addDeadline(description, deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" ui.setAdd(tasks, d);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the AddDeadlineCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the AddDeadlineCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":55}},{"path":"src/main/java/spot/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to add a new event.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new AddEventCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" * @param start Start date of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" * @param end End date of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" public AddEventCommand(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" assert !start.isAfter(end);","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" * Executes the AddEventCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" Event e \u003d tasks.addEvent(description, start, end);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" ui.setAdd(tasks, e);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the AddEventCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the AddEventCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":57}},{"path":"src/main/java/spot/command/AddToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to add a new todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"public class AddToDoCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new AddToDoCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the ToDo.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public AddToDoCommand(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * Executes the AddToDoCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" ToDo t \u003d tasks.addToDo(description);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" ui.setAdd(tasks, t);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the AddToDoCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the AddToDoCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":48}},{"path":"src/main/java/spot/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" * Executes the Command.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the Command is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the Command is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":30}},{"path":"src/main/java/spot/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to delete a task from the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new DeleteCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public DeleteCommand(int position) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" * Executes the DeleteCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" tasks.deleteTask(ui, position);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the DeleteCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the DeleteCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":46}},{"path":"src/main/java/spot/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to exit the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" * Executes the ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" ui.setGoodbye();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the ExitCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the ExitCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":36}},{"path":"src/main/java/spot/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to find a task with a certain keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private String keyword;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new FindCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param keyword Keyword to match tasks to.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" assert !keyword.isEmpty();","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * Executes the FindCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" tasks.findTasks(ui, keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the FindCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the FindCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"laurenlim2112":47}},{"path":"src/main/java/spot/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" * Executes the ListCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" ui.listTasks(ui, tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the ListCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the ListCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":35}},{"path":"src/main/java/spot/command/ListTasksOnCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to list all tasks on a certain date.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"public class ListTasksOnCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate date;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new ListTasksOnCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date of tasks to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" public ListTasksOnCommand(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Executes the ListTasksOnCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" ui.listTasks(ui, tasks, date);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the ListTasksOnCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the ListTasksOnCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":49}},{"path":"src/main/java/spot/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to mark a certain task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new MarkCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public MarkCommand(int position) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" * Executes the MarkCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" tasks.markTask(ui, position);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the MarkCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the MarkCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":46}},{"path":"src/main/java/spot/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to mark a certain task as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new UnmarkCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to be marked as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public UnmarkCommand(int position) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" * Executes the UnmarkCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" tasks.unmarkTask(ui, position);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the UnmarkCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the UnmarkCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":46}},{"path":"src/main/java/spot/command/UpdateDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class UpdateDeadlineCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new UpdateDeadlineCommand object.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to update.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Updated task deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" public UpdateDeadlineCommand(int position, LocalDate deadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Executes the UpdateDeadlineCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" tasks.updateTaskDeadline(ui, position, deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the UpdateDeadlineCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the UpdateDeadlineCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"laurenlim2112":48}},{"path":"src/main/java/spot/command/UpdateDescriptionCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"public class UpdateDescriptionCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" private String description;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new UpdateDescriptionCommand object.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to update.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param description Updated task description.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" public UpdateDescriptionCommand(int position, String description) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * Executes the UpdateDescriptionCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" tasks.updateTaskDescription(ui, position, description);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the UpdateDescriptionCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the UpdateDescriptionCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"laurenlim2112":47}},{"path":"src/main/java/spot/command/UpdateEndCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class UpdateEndCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate end;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new UpdateEndCommand object.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to update.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @param end Updated end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" public UpdateEndCommand(int position, LocalDate end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Executes the UpdateEndCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" tasks.updateTaskEnd(ui, position, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the UpdateEndCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the UpdateEndCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"laurenlim2112":48}},{"path":"src/main/java/spot/command/UpdateStartCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class UpdateStartCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate start;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new UpdateStartCommand object.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to update.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @param start Updated start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" public UpdateStartCommand(int position, LocalDate start) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Executes the UpdateStartCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" tasks.updateTaskStart(ui, position, start);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the UpdateStartCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the UpdateStartCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"laurenlim2112":48}},{"path":"src/main/java/spot/exception/SpotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":" * Exception thrown when there is an error in the execution of the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"public class SpotException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new SpotException object.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" * @param message Message to be displayed when the exception is thrown.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" public SpotException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"laurenlim2112":16}},{"path":"src/main/java/spot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Due date of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public Deadline(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Deadline object with specified isDone field.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param isDone Boolean representing the state of completion of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Due date of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" public Deadline(String description, boolean isDone, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * @return String representation of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" * Returns representation of the Deadline object to be stored","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" * in a text file within the hard disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" * @return Representation of the Deadline object to be stored.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" public String toLine() {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" return \" D | \" + super.toLine() + \" | \"","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd-MM-uuuu\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" * Returns whether the Deadline object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the Deadline object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" public boolean fallsOn(LocalDate date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" return date.isEqual(this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Deadline object\u0027s deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Updated deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no deadline field.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" public void updateDeadline(LocalDate deadline) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Deadline object\u0027s start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" * @param start Updated start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no start date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" public void updateStart(LocalDate start) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have a start date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Deadline object\u0027s end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" * @param end Updated end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no end date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" public void updateEnd(LocalDate end) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have an end date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"laurenlim2112":100}},{"path":"src/main/java/spot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents an event.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * @param start Start date of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" * @param end End date of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" public Event(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" * @param isDone Boolean representing the state of completion of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" * @param start Start date of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" * @param end End date of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" public Event(String description, boolean isDone, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" * @return String representation of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" + \" (from: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\"))","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" + \" to: \" + this.end.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" * Returns representation of the Event object to be stored","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" * in a text file within the hard disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" * @return Representation of the Event object to be stored.","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" public String toLine() {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" return \" E | \" + super.toLine() + \" | \"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"dd-MM-uuuu\")) + \" | \"","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" + this.end.format(DateTimeFormatter.ofPattern(\"dd-MM-uuuu\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" * Returns whether the Event object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the Event object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" public boolean fallsOn(LocalDate date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" return !date.isAfter(this.end) \u0026\u0026 !date.isBefore(this.start);","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Event object\u0027s deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Updated deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no deadline field.","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" public void updateDeadline(LocalDate deadline) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have a deadline!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Event object\u0027s start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":" * @param start Updated start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no start date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" public void updateStart(LocalDate start) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Event object\u0027s end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"laurenlim2112"},"content":" * @param end Updated end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no end date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"laurenlim2112"},"content":" public void updateEnd(LocalDate end) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"laurenlim2112"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"laurenlim2112":109}},{"path":"src/main/java/spot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":" * Represents a task.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" private String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param isDone Boolean representing the state of completion of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" * Marks the Task object as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" * Marks the Task object as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the state of completion of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" * @return String representation of the state of completion of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" return \"X\";","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" return \" \";","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" * @return String representation of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" * Returns representation of the Task object to be stored","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" * in a text file within the hard disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" * @return Representation of the Task object to be stored.","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" public String toLine() {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" return this.getStatusIcon() + \" | \" + this.description;","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" * Returns whether the Task object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the Task object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" public abstract boolean fallsOn(LocalDate date);","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" public boolean descriptionContains(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" * Updates the task\u0027s description.","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" * @param description Updated description.","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":" public void updateDescription(String description) {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"laurenlim2112"},"content":" * Updates the task\u0027s deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Updated deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no deadline field.","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"laurenlim2112"},"content":" public abstract void updateDeadline(LocalDate deadline) throws SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"laurenlim2112"},"content":" * Updates the task\u0027s start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"laurenlim2112"},"content":" * @param start Updated start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no start date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"laurenlim2112"},"content":" public abstract void updateStart(LocalDate start) throws SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"laurenlim2112"},"content":" * Updates the task\u0027s end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"laurenlim2112"},"content":" * @param end Updated end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no end date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"laurenlim2112"},"content":" public abstract void updateEnd(LocalDate end) throws SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"laurenlim2112":126}},{"path":"src/main/java/spot/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":" * Represents a todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" * @param isDone Boolean representing the state of completion of the ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" * @return String representation of the ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * Returns representation of the ToDo object to be stored","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" * in a text file within the hard disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" * @return Representation of the ToDo object to be stored.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" public String toLine() {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" return \" T | \" + super.toLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" * Returns whether the ToDo object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the ToDo object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" public boolean fallsOn(LocalDate date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" * Updates the ToDo object\u0027s deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Updated deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no deadline field.","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" public void updateDeadline(LocalDate deadline) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have a deadline!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" * Updates the ToDo object\u0027s start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" * @param start Updated start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no start date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" public void updateStart(LocalDate start) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have a start date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" * Updates the ToDo object\u0027s end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" * @param end Updated end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no end date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" public void updateEnd(LocalDate end) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have an end date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"laurenlim2112":92}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"Infinity\" minHeight\u003d\"-Infinity\" 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":"laurenlim2112"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" \u003cLabel fx:id\u003d\"dialog\" style\u003d\"-fx-padding: 10;\" text\u003d\"Label\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"85.0\" fitWidth\u003d\"85.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"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":"laurenlim2112"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"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\"spot.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"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":"laurenlim2112"},"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":"laurenlim2112"},"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":"laurenlim2112"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":20}},{"path":"src/test/java/spot/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.ExitCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.ListTasksOnCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" public void parseDeleteCommand_invalidDeleteCommand_exceptionThrown() {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(new ExitCommand(), Parser.parseCommand(\"delete\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" } catch (SpotException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"Spot doesn\u0027t know which task to delete!\", e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" public void parseListTasksOnCommand_invalidListTasksOnCommand_exceptionThrown() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(new ListTasksOnCommand(LocalDate.of(2000, 12, 31)),","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseCommand(\"list tasks on 32-12-2000\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" } catch (SpotException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"This doesn\u0027t seem like a valid date to Spot!\"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" + \"Please make sure your date is given in this format: dd-mm-yyyy\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" public void parseCommand_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(new ExitCommand(), Parser.parseCommand(\"stanloona\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" } catch (SpotException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"Spot doesn\u0027t know what command that is!\", e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" public void parseDate_validDate_success() throws SpotException {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(LocalDate.of(2003, 12, 21),","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseDate(\"21-12-2003\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(LocalDate.of(2001, 11, 20),","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseDate(\"20-11-2001\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(LocalDate.of(2001, 6, 4),","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseDate(\"04-06-2001\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" public void parseDate_invalidDay_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(LocalDate.of(2003, 3, 14),","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseDate(\"31-02-2000\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"This doesn\u0027t seem like a valid date to Spot!\"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" + \"Please make sure your date is given in this format: dd-mm-yyyy\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" public void parseDate_invalidMonth_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(LocalDate.of(2003, 2, 24),","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseDate(\"01-13-2000\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"This doesn\u0027t seem like a valid date to Spot!\"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" + \"Please make sure your date is given in this format: dd-mm-yyyy\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"laurenlim2112":79}},{"path":"src/test/java/spot/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" public void fallsOn_validDate_success() {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(true, new Deadline(\"wah\",","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" LocalDate.of(2023, 8, 28))","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" .fallsOn(LocalDate.of(2023, 8, 28)));","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(false, new Deadline(\"wah\",","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" LocalDate.of(2023, 8, 28))","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" .fallsOn(LocalDate.of(2023, 8, 29)));","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"laurenlim2112":21}},{"path":"src/test/java/spot/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" public void testToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"[T][ ] takotime\", new ToDo(\"takotime\").toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"[T][X] takotime\", new ToDo(\"takotime\", true).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"[T][ ] takotime\", new ToDo(\"takotime\", false).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"laurenlim2112":15}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" mainClass.set(\"spot.Launcher\")","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" archiveBaseName \u003d \"spot\"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":"checkstyle {","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":22,"-":40}},{"path":"data/spot.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":" T | | nyeh","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":" D | X | wah | 09-05-2024","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":" E | | woahhh | 10-10-2023 | 20-10-2023","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":" T | X | wahhhh","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":" T | | submit iP","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"laurenlim2112":5}},{"path":"src/main/java/spot/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"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":"laurenlim2112"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"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":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" * Returns DialogBox containing user\u0027s dialog and profile picture.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" * @param text User dialog.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" * @param img User profile picture.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting DialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" * Returns DialogBox containing Spot\u0027s dialog and profile picture.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" * @param text Spot dialog.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" * @param img Spot profile picture.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting DialogBox.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" public static DialogBox getSpotDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":75}},{"path":"src/main/java/spot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":12}},{"path":"src/main/java/spot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import javafx.stage.WindowEvent;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" * A GUI for Spot using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" private Spot spot \u003d new Spot();","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * Starts up the Spot chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" * @param stage Stage to display GUI nodes.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setSpot(spot);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" stage.setOnCloseRequest((WindowEvent event) -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" spot.getResponse(\"bye\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" stage.setTitle(\"Spot\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":41}},{"path":"src/main/java/spot/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" private Spot spot;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" private Image spotImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Spot.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" * Initializes appearance of the MainWindow.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" greetUser();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * Sets Spot chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" public void setSpot(Spot s) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" spot \u003d s;","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Spot\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" * the dialog container. Clears the user input after processing. Closes chatbot on \u0027bye\u0027 exit command.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" String response \u003d spot.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" DialogBox.getSpotDialog(response, spotImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" if (spot.getExit()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" PauseTransition pause \u003d new PauseTransition(Duration.seconds(0.5));","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" pause.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" Platform.exit();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" pause.play();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" * Creates dialog box to greet user on initial chatbot startup.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" private void greetUser() {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" DialogBox.getSpotDialog(\"Hello, it\u0027s Spot!\", spotImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":79}},{"path":"src/main/java/spot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.time.format.ResolverStyle;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.AddDeadlineCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.AddEventCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.AddToDoCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.Command;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.DeleteCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.ExitCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.FindCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.ListCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.ListTasksOnCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.MarkCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.UnmarkCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.UpdateDeadlineCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.UpdateDescriptionCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.UpdateEndCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.UpdateStartCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Represents a parser to parse commands and dates.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * Returns command corresponding to the specified input string.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting command.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseCommand(String input) throws SpotException {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" if (input.startsWith(\"list tasks on\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" return parseListTasksOnCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"list\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" return parseFindCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return parseMarkCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" return parseUnmarkCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" return parseDeleteCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" return parseAddToDoCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" return parseAddDeadlineCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" return parseAddEventCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"update\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" return parseUpdateCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" } else if (input.startsWith(\"bye\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know what command that is!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" * Returns ListTasksOnCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting ListTasksOnCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseListTasksOnCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"list tasks on\";","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" String dateString \u003d Parser.getCommandDetails(input, minimumInputLength);","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" LocalDate date \u003d Parser.parseDate(dateString);","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" return new ListTasksOnCommand(date);","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" * Returns FindCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting FindCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseFindCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"find\";","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" String keyword \u003d Parser.getCommandDetails(input, minimumInputLength);","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" if (keyword.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know what keyword you\u0027re searching for!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"laurenlim2112"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"laurenlim2112"},"content":" * Returns MarkCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting MarkCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseMarkCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"mark\";","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"laurenlim2112"},"content":" String positionString \u003d Parser.getCommandDetails(input, minimumInputLength);","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(positionString);","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"laurenlim2112"},"content":" return new MarkCommand(position);","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"laurenlim2112"},"content":" * Returns UnmarkCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting UnmarkCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUnmarkCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"unmark\";","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"laurenlim2112"},"content":" String positionString \u003d Parser.getCommandDetails(input, minimumInputLength);","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(positionString);","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"laurenlim2112"},"content":" return new UnmarkCommand(position);","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"laurenlim2112"},"content":" * Returns update Command corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting Command.","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUpdateCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"update\";","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"laurenlim2112"},"content":" String commandDetails \u003d Parser.getCommandDetails(input, minimumInputLength);","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"laurenlim2112"},"content":" if (commandDetails.contains(\"/description\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"laurenlim2112"},"content":" return parseUpdateDescriptionCommand(commandDetails);","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"laurenlim2112"},"content":" } else if (commandDetails.contains(\"/deadline\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"laurenlim2112"},"content":" return parseUpdateDeadlineCommand(commandDetails);","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"laurenlim2112"},"content":" } else if (commandDetails.contains(\"/start\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"laurenlim2112"},"content":" return parseUpdateStartCommand(commandDetails);","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"laurenlim2112"},"content":" } else if (commandDetails.contains(\"/end\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"laurenlim2112"},"content":" return parseUpdateEndCommand(commandDetails);","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot doesn\u0027t know which field you\u0027d like to edit!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"laurenlim2112"},"content":" * Returns UpdateDescriptionCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting UpdateDescriptionCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUpdateDescriptionCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d input.split(\"/description\");","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"laurenlim2112"},"content":" String positionString \u003d keywords[0].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(positionString);","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"laurenlim2112"},"content":" String description \u003d keywords[1].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"laurenlim2112"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot needs you to provide a valid \"","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"laurenlim2112"},"content":" + \"description for this task!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"laurenlim2112"},"content":" return new UpdateDescriptionCommand(position, description);","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":200,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":201,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"laurenlim2112"},"content":" * Returns UpdateDeadlineCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":208,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting UpdateDeadlineCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":209,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":210,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":211,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUpdateDeadlineCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":212,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":213,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d input.split(\"/deadline\");","lastModifiedDate":"2023-09-10"},{"lineNumber":214,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"laurenlim2112"},"content":" String positionString \u003d keywords[0].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(positionString);","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":218,"author":{"gitId":"laurenlim2112"},"content":" String deadlineString \u003d keywords[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":219,"author":{"gitId":"laurenlim2112"},"content":" LocalDate deadline \u003d Parser.parseDate(deadlineString);","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":221,"author":{"gitId":"laurenlim2112"},"content":" return new UpdateDeadlineCommand(position, deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":222,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":223,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":224,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":225,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":226,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":227,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":228,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":229,"author":{"gitId":"laurenlim2112"},"content":" * Returns UpdateStartCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":230,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":231,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":232,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting UpdateStartCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":233,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":234,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":235,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUpdateStartCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":236,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":237,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d input.split(\"/start\");","lastModifiedDate":"2023-09-10"},{"lineNumber":238,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":239,"author":{"gitId":"laurenlim2112"},"content":" String positionString \u003d keywords[0].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":240,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(positionString);","lastModifiedDate":"2023-09-16"},{"lineNumber":241,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":242,"author":{"gitId":"laurenlim2112"},"content":" String startString \u003d keywords[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":243,"author":{"gitId":"laurenlim2112"},"content":" LocalDate start \u003d Parser.parseDate(startString);","lastModifiedDate":"2023-09-16"},{"lineNumber":244,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":245,"author":{"gitId":"laurenlim2112"},"content":" return new UpdateStartCommand(position, start);","lastModifiedDate":"2023-09-10"},{"lineNumber":246,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":247,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":248,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":249,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":250,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":251,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":252,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":253,"author":{"gitId":"laurenlim2112"},"content":" * Returns UpdateEndCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":254,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":255,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":256,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting UpdateEndCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":257,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":258,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":259,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseUpdateEndCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":260,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":261,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d input.split(\"/end\");","lastModifiedDate":"2023-09-10"},{"lineNumber":262,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":263,"author":{"gitId":"laurenlim2112"},"content":" String positionString \u003d keywords[0].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":264,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(positionString);","lastModifiedDate":"2023-09-16"},{"lineNumber":265,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":266,"author":{"gitId":"laurenlim2112"},"content":" String endString \u003d keywords[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":267,"author":{"gitId":"laurenlim2112"},"content":" LocalDate end \u003d Parser.parseDate(endString);","lastModifiedDate":"2023-09-16"},{"lineNumber":268,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":269,"author":{"gitId":"laurenlim2112"},"content":" return new UpdateEndCommand(position, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":270,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":271,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":272,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":273,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":274,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":275,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":276,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":277,"author":{"gitId":"laurenlim2112"},"content":" * Returns AddToDoCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":278,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":279,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":280,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting AddToDoCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":281,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":282,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":283,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseAddToDoCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":284,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"todo\";","lastModifiedDate":"2023-09-10"},{"lineNumber":285,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":286,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":287,"author":{"gitId":"laurenlim2112"},"content":" String description \u003d Parser.getCommandDetails(input, minimumInputLength);","lastModifiedDate":"2023-09-16"},{"lineNumber":288,"author":{"gitId":"laurenlim2112"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":289,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot wonders if you\u0027ve \"","lastModifiedDate":"2023-08-28"},{"lineNumber":290,"author":{"gitId":"laurenlim2112"},"content":" + \"forgotten the description?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":291,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":292,"author":{"gitId":"laurenlim2112"},"content":" return new AddToDoCommand(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":293,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":294,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":295,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":296,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":297,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":298,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":299,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":300,"author":{"gitId":"laurenlim2112"},"content":" * Returns AddDeadlineCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":301,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":302,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":303,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting AddDeadlineCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":304,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":305,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":306,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseAddDeadlineCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":307,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"deadline\";","lastModifiedDate":"2023-09-10"},{"lineNumber":308,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":309,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":310,"author":{"gitId":"laurenlim2112"},"content":" String truncatedInput \u003d Parser.getCommandDetails(input, minimumInputLength);","lastModifiedDate":"2023-09-16"},{"lineNumber":311,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d truncatedInput.split(\"/by\");","lastModifiedDate":"2023-09-16"},{"lineNumber":312,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":313,"author":{"gitId":"laurenlim2112"},"content":" String description \u003d keywords[0].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":314,"author":{"gitId":"laurenlim2112"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":315,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot wonders if you\u0027ve \"","lastModifiedDate":"2023-08-28"},{"lineNumber":316,"author":{"gitId":"laurenlim2112"},"content":" + \"forgotten the description?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":317,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":318,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":319,"author":{"gitId":"laurenlim2112"},"content":" String deadlineString \u003d keywords[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":320,"author":{"gitId":"laurenlim2112"},"content":" LocalDate deadline \u003d Parser.parseDate(deadlineString);","lastModifiedDate":"2023-09-16"},{"lineNumber":321,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":322,"author":{"gitId":"laurenlim2112"},"content":" return new AddDeadlineCommand(description, deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":323,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":324,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":325,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":326,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":327,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":328,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":329,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":330,"author":{"gitId":"laurenlim2112"},"content":" * Returns AddEventCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":331,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":332,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":333,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting AddEventCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":334,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":335,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":336,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseAddEventCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":337,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"event\";","lastModifiedDate":"2023-09-10"},{"lineNumber":338,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":339,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":340,"author":{"gitId":"laurenlim2112"},"content":" String truncatedInput \u003d Parser.getCommandDetails(input, minimumInputLength);","lastModifiedDate":"2023-09-16"},{"lineNumber":341,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d truncatedInput.split(\"/from|/to\");","lastModifiedDate":"2023-09-16"},{"lineNumber":342,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":343,"author":{"gitId":"laurenlim2112"},"content":" String description \u003d keywords[0].trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":344,"author":{"gitId":"laurenlim2112"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":345,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot wonders if you\u0027ve \"","lastModifiedDate":"2023-08-28"},{"lineNumber":346,"author":{"gitId":"laurenlim2112"},"content":" + \"forgotten the description?\");","lastModifiedDate":"2023-08-28"},{"lineNumber":347,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":348,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":349,"author":{"gitId":"laurenlim2112"},"content":" String startString \u003d keywords[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":350,"author":{"gitId":"laurenlim2112"},"content":" LocalDate start \u003d Parser.parseDate(startString);","lastModifiedDate":"2023-09-16"},{"lineNumber":351,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":352,"author":{"gitId":"laurenlim2112"},"content":" String endString \u003d keywords[2];","lastModifiedDate":"2023-09-16"},{"lineNumber":353,"author":{"gitId":"laurenlim2112"},"content":" LocalDate end \u003d Parser.parseDate(endString);","lastModifiedDate":"2023-09-16"},{"lineNumber":354,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":355,"author":{"gitId":"laurenlim2112"},"content":" if (start.isAfter(end)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":356,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks the start date of your event \"","lastModifiedDate":"2023-09-10"},{"lineNumber":357,"author":{"gitId":"laurenlim2112"},"content":" + \"cannot be after the end date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":358,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":359,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":360,"author":{"gitId":"laurenlim2112"},"content":" return new AddEventCommand(description, start, end);","lastModifiedDate":"2023-08-27"},{"lineNumber":361,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":362,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":363,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":364,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":365,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":366,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":367,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":368,"author":{"gitId":"laurenlim2112"},"content":" * Returns DeleteCommand corresponding to the specified input string.","lastModifiedDate":"2023-09-10"},{"lineNumber":369,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":370,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-09-10"},{"lineNumber":371,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting DeleteCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":372,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":373,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":374,"author":{"gitId":"laurenlim2112"},"content":" public static Command parseDeleteCommand(String input) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":375,"author":{"gitId":"laurenlim2112"},"content":" String minimumInput \u003d \"delete\";","lastModifiedDate":"2023-09-10"},{"lineNumber":376,"author":{"gitId":"laurenlim2112"},"content":" int minimumInputLength \u003d minimumInput.length();","lastModifiedDate":"2023-09-10"},{"lineNumber":377,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":378,"author":{"gitId":"laurenlim2112"},"content":" String truncatedInput \u003d Parser.getCommandDetails(input, minimumInputLength);","lastModifiedDate":"2023-09-16"},{"lineNumber":379,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d Integer.parseInt(truncatedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":380,"author":{"gitId":"laurenlim2112"},"content":" return new DeleteCommand(position);","lastModifiedDate":"2023-09-10"},{"lineNumber":381,"author":{"gitId":"laurenlim2112"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":382,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks your command is \"","lastModifiedDate":"2023-09-16"},{"lineNumber":383,"author":{"gitId":"laurenlim2112"},"content":" + \"in the wrong format!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":384,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":385,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":386,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":387,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":388,"author":{"gitId":"laurenlim2112"},"content":" * Returns LocalDate object corresponding to the specified input string.","lastModifiedDate":"2023-08-28"},{"lineNumber":389,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":390,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":391,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting LocalDate object.","lastModifiedDate":"2023-08-28"},{"lineNumber":392,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If input string is an invalid date.","lastModifiedDate":"2023-08-28"},{"lineNumber":393,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":394,"author":{"gitId":"laurenlim2112"},"content":" public static LocalDate parseDate(String input) throws SpotException {","lastModifiedDate":"2023-08-28"},{"lineNumber":395,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":396,"author":{"gitId":"laurenlim2112"},"content":" String trimmedInput \u003d input.trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":397,"author":{"gitId":"laurenlim2112"},"content":" return LocalDate.parse(trimmedInput,","lastModifiedDate":"2023-09-16"},{"lineNumber":398,"author":{"gitId":"laurenlim2112"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-uuuu\")","lastModifiedDate":"2023-08-28"},{"lineNumber":399,"author":{"gitId":"laurenlim2112"},"content":" .withResolverStyle(ResolverStyle.STRICT));","lastModifiedDate":"2023-08-28"},{"lineNumber":400,"author":{"gitId":"laurenlim2112"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":401,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"This doesn\u0027t seem like a valid date to Spot! \"","lastModifiedDate":"2023-08-28"},{"lineNumber":402,"author":{"gitId":"laurenlim2112"},"content":" + \"Please make sure your date is given in this format: dd-mm-yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":403,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":404,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":405,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":406,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":407,"author":{"gitId":"laurenlim2112"},"content":" * Retrieves command details from an input starting from a given index.","lastModifiedDate":"2023-09-16"},{"lineNumber":408,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":409,"author":{"gitId":"laurenlim2112"},"content":" * @param input Input string.","lastModifiedDate":"2023-09-16"},{"lineNumber":410,"author":{"gitId":"laurenlim2112"},"content":" * @param startingIndex The starting index from which to retrieve command details.","lastModifiedDate":"2023-09-16"},{"lineNumber":411,"author":{"gitId":"laurenlim2112"},"content":" * @return Resulting String containing command details.","lastModifiedDate":"2023-09-16"},{"lineNumber":412,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":413,"author":{"gitId":"laurenlim2112"},"content":" public static String getCommandDetails(String input, int startingIndex) {","lastModifiedDate":"2023-09-16"},{"lineNumber":414,"author":{"gitId":"laurenlim2112"},"content":" return input.substring(startingIndex).trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":415,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":416,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":417,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":417}},{"path":"src/main/java/spot/Spot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":" * Represents a chatbot named Spot.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class Spot {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Spot object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public Spot() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" tasks \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" } catch (SpotException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" assert tasks !\u003d null;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * Returns String response from the Spot chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" ui.resetOutput();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" Command c \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" } catch (SpotException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" ui.setError(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" } finally {","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" return ui.getOutput();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" * Returns boolean indicating if exit command was received.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" public boolean getExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" return isExit;","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"laurenlim2112":53}},{"path":"src/main/java/spot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * Represents the file storage system of the chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" private static final String DIRECTORY_NAME \u003d \"./data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" private static final String FILE_NAME \u003d \"spot.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" private static final String FULL_PATH \u003d DIRECTORY_NAME + \"/\" + FILE_NAME;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" private File storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" public Storage() throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" File directory \u003d new File(DIRECTORY_NAME);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" assert directory.exists();","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" File file \u003d new File(FULL_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" assert file.exists();","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" this.storage \u003d file;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" * Loads tasks from storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" * @return ArrayList of Tasks containing all stored tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the file path cannot be found.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" Scanner fileScanner \u003d new Scanner(storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" String task \u003d fileScanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" String[] keywords \u003d task.trim().split(\"\\\\Q | \\\\E\");","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" String taskType \u003d keywords[0];","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" boolean isDone \u003d keywords[1].equals(\"X\");","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(new ToDo(keywords[2], isDone));","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" LocalDate deadline \u003d Parser.parseDate(keywords[3]);","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(new Deadline(keywords[2], isDone, deadline));","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" LocalDate start \u003d Parser.parseDate(keywords[3]);","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" LocalDate end \u003d Parser.parseDate(keywords[4]);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(new Event(keywords[2], isDone, start, end));","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"The data file is corrupted!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" fileScanner.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" * Saves tasks into storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks TaskList to be stored into a text file.","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the text file cannot be opened.","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" public void saveTasks(TaskList tasks) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" FileWriter fileWriter \u003d new FileWriter(Storage.FULL_PATH);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(fileWriter);","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" bufferedWriter.write(task.toLine());","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" bufferedWriter.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"laurenlim2112"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":105}},{"path":"src/main/java/spot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.util.List;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new TaskList object.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new TaskList object with pre-existing ArrayList of Tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Pre-existing ArrayList of Tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" * Returns the number of tasks in the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" * @return Number of tasks in the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" * @param index Specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" * Adds new ToDo object to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the new ToDo.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" * @return The ToDo added to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" public ToDo addToDo(String description) {","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" ToDo newTask \u003d new ToDo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" return newTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" * Adds new Deadline object to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the new Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Due date of the new Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" * @return The Deadline added to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" public Deadline addDeadline(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" Deadline newTask \u003d new Deadline(description, deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" return newTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" * Adds new Event object to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the new Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" * @param start Start date of the new Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" * @param end End date of the new Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" * @return The Event added to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" public Event addEvent(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" Event newTask \u003d new Event(description, start, end);","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" return newTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" * Marks Task at the specified position as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist.","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":" public void markTask(Ui ui, int position) throws SpotException {","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"laurenlim2112"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Wow! Spot has marked this task as done!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\" \" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"laurenlim2112"},"content":" * Marks Task at the specified position as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist.","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"laurenlim2112"},"content":" public void unmarkTask(Ui ui, int position) throws SpotException {","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"laurenlim2112"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot will mark this task as not done yet then!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\" \" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"laurenlim2112"},"content":" * Deletes Task at the specified position.","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist.","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"laurenlim2112"},"content":" public void deleteTask(Ui ui, int position) throws SpotException {","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.remove(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot has removed this task: \" + \"\\n\" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Tasks in list: \" + tasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"laurenlim2112"},"content":" * Updates the description of the Task at the specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist.","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"laurenlim2112"},"content":" public void updateTaskDescription(Ui ui, int position, String description) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"laurenlim2112"},"content":" task.updateDescription(description);","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot has updated this task\u0027s description: \" + \"\\n\" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"laurenlim2112"},"content":" * Updates the deadline of the Task at the specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"laurenlim2112"},"content":" * or does not have a deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"laurenlim2112"},"content":" public void updateTaskDeadline(Ui ui, int position, LocalDate deadline) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":166,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"laurenlim2112"},"content":" task.updateDeadline(deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot has updated this task\u0027s deadline: \" + \"\\n\" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"laurenlim2112"},"content":" * Updates the start date of the Task at the specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"laurenlim2112"},"content":" * or does not have a start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"laurenlim2112"},"content":" public void updateTaskStart(Ui ui, int position, LocalDate start) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"laurenlim2112"},"content":" task.updateStart(start);","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot has updated this task\u0027s start date: \" + \"\\n\" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"laurenlim2112"},"content":" * Updates the end date of the Task at the specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"laurenlim2112"},"content":" * @param position Specified position.","lastModifiedDate":"2023-09-10"},{"lineNumber":192,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task at the specified position does not exist","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"laurenlim2112"},"content":" * or does not have an end date.","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"laurenlim2112"},"content":" public void updateTaskEnd(Ui ui, int position, LocalDate end) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"laurenlim2112"},"content":" if (position \u003c 0 || position \u003e tasks.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks that task doesn\u0027t exist!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"laurenlim2112"},"content":" Task task \u003d tasks.get(position - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"laurenlim2112"},"content":" task.updateEnd(end);","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot has updated this task\u0027s end date: \" + \"\\n\" + task);","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":205,"author":{"gitId":"laurenlim2112"},"content":" * Lists all tasks in the current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":206,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":207,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":208,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":209,"author":{"gitId":"laurenlim2112"},"content":" public void listTasks(Ui ui) {","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"laurenlim2112"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":211,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"You don\u0027t have any tasks for now! Want Spot to help find some?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":213,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot\u0027s got a list of your tasks, here!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"laurenlim2112"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":215,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d i + 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":216,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(position + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-10"},{"lineNumber":217,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":219,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":220,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":221,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":222,"author":{"gitId":"laurenlim2112"},"content":" * Lists all tasks in the given ArrayList of Tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":223,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":224,"author":{"gitId":"laurenlim2112"},"content":" * @param taskList Given ArrayList of Tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":225,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":226,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":227,"author":{"gitId":"laurenlim2112"},"content":" public void listTasks(ArrayList\u003cTask\u003e taskList, Ui ui) {","lastModifiedDate":"2023-09-16"},{"lineNumber":228,"author":{"gitId":"laurenlim2112"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":229,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"You don\u0027t have any matching tasks for now! Want Spot to help find some?\");","lastModifiedDate":"2023-09-16"},{"lineNumber":230,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":231,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(\"Spot\u0027s got a list of matching tasks, here!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":232,"author":{"gitId":"laurenlim2112"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":233,"author":{"gitId":"laurenlim2112"},"content":" int position \u003d i + 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":234,"author":{"gitId":"laurenlim2112"},"content":" ui.setMessage(position + \". \" + taskList.get(i));","lastModifiedDate":"2023-09-16"},{"lineNumber":235,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":236,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":237,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":238,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":239,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":240,"author":{"gitId":"laurenlim2112"},"content":" * Lists all tasks in the current TaskList that fall on a specified date.","lastModifiedDate":"2023-09-16"},{"lineNumber":241,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":242,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-09-16"},{"lineNumber":243,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-09-16"},{"lineNumber":244,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":245,"author":{"gitId":"laurenlim2112"},"content":" public void listTasksOn(Ui ui, LocalDate date) {","lastModifiedDate":"2023-09-16"},{"lineNumber":246,"author":{"gitId":"laurenlim2112"},"content":" List\u003cTask\u003e filteredList \u003d tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":247,"author":{"gitId":"laurenlim2112"},"content":" .stream()","lastModifiedDate":"2023-09-16"},{"lineNumber":248,"author":{"gitId":"laurenlim2112"},"content":" .filter(t -\u003e t.fallsOn(date))","lastModifiedDate":"2023-09-16"},{"lineNumber":249,"author":{"gitId":"laurenlim2112"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-16"},{"lineNumber":250,"author":{"gitId":"laurenlim2112"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e(filteredList);","lastModifiedDate":"2023-09-16"},{"lineNumber":251,"author":{"gitId":"laurenlim2112"},"content":" listTasks(taskList, ui);","lastModifiedDate":"2023-09-16"},{"lineNumber":252,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":253,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":254,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":255,"author":{"gitId":"laurenlim2112"},"content":" * Lists all tasks in the current TaskList that match the specified keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":256,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":257,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":258,"author":{"gitId":"laurenlim2112"},"content":" * @param keyword Specified keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":259,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":260,"author":{"gitId":"laurenlim2112"},"content":" public void listTasksMatching(Ui ui, String keyword) {","lastModifiedDate":"2023-09-16"},{"lineNumber":261,"author":{"gitId":"laurenlim2112"},"content":" List\u003cTask\u003e filteredList \u003d tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":262,"author":{"gitId":"laurenlim2112"},"content":" .stream()","lastModifiedDate":"2023-09-16"},{"lineNumber":263,"author":{"gitId":"laurenlim2112"},"content":" .filter(t -\u003e t.descriptionContains(keyword))","lastModifiedDate":"2023-09-16"},{"lineNumber":264,"author":{"gitId":"laurenlim2112"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-16"},{"lineNumber":265,"author":{"gitId":"laurenlim2112"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e(filteredList);","lastModifiedDate":"2023-09-16"},{"lineNumber":266,"author":{"gitId":"laurenlim2112"},"content":" listTasks(taskList, ui);","lastModifiedDate":"2023-09-16"},{"lineNumber":267,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":268,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":268}},{"path":"src/main/java/spot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":" * Represents the user interface of the chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" public static final String GOODBYE_MESSAGE \u003d \"Spot\u0027s going to take a nap now. Goodnight!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" public static final String NEW_TASK_MESSAGE \u003d \"Spot will add this new task to your list: \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" private StringBuilder output;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" public Ui() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" this.output \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" * Resets the ouptut of the Ui object.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" public void resetOutput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" output.setLength(0);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the ouptut of the Ui object.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" public String getOutput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" return output.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * Sets output to goodbye message.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" public void setGoodbye() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" output.append(GOODBYE_MESSAGE);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" * Sets output to task added message.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" * @param newTask Task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" public void setAdd(TaskList tasks, Task newTask) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" output.append(NEW_TASK_MESSAGE + \" \" + newTask + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" output.append(\"Tasks in list: \" + tasks.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" * Displays a list of the user\u0027s current tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Ui object of the current chatbot instance.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" public void listTasks(Ui ui, TaskList tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" tasks.listTasks(ui);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" * Displays a list of the user\u0027s current tasks falling on a specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Ui object of the current chatbot instance.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" public void listTasks(Ui ui, TaskList tasks, LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" tasks.listTasksOn(ui, date);","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" * Sets output to error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" * @param error Error message.","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" public void setError(String error) {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" output.append(error);","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" * Sets output to message.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" * @param message Regular message.","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" public void setMessage(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" output.append(message + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":94}},{"path":"src/main/java/spot/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to add a new deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new AddDeadlineCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Due date of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" public AddDeadlineCommand(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * Executes the AddDeadlineCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" Deadline d \u003d tasks.addDeadline(description, deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" ui.setAdd(tasks, d);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the AddDeadlineCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the AddDeadlineCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":55}},{"path":"src/main/java/spot/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to add a new event.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new AddEventCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" * @param start Start date of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" * @param end End date of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" public AddEventCommand(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" assert !start.isAfter(end);","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" * Executes the AddEventCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" Event e \u003d tasks.addEvent(description, start, end);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" ui.setAdd(tasks, e);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the AddEventCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the AddEventCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":57}},{"path":"src/main/java/spot/command/AddToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to add a new todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"public class AddToDoCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new AddToDoCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the ToDo.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public AddToDoCommand(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * Executes the AddToDoCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" ToDo t \u003d tasks.addToDo(description);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" ui.setAdd(tasks, t);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the AddToDoCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the AddToDoCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":48}},{"path":"src/main/java/spot/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" * Executes the Command.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the Command is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the Command is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":30}},{"path":"src/main/java/spot/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to delete a task from the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new DeleteCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public DeleteCommand(int position) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" * Executes the DeleteCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" tasks.deleteTask(ui, position);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the DeleteCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the DeleteCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":46}},{"path":"src/main/java/spot/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to exit the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" * Executes the ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" ui.setGoodbye();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the ExitCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the ExitCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":36}},{"path":"src/main/java/spot/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to find a task with a certain keyword.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private String keyword;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new FindCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param keyword Keyword to match tasks to.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" assert !keyword.isEmpty();","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * Executes the FindCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" tasks.listTasksMatching(ui, keyword);","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" };","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the FindCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the FindCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"laurenlim2112":47}},{"path":"src/main/java/spot/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" * Executes the ListCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" ui.listTasks(ui, tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the ListCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the ListCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":35}},{"path":"src/main/java/spot/command/ListTasksOnCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to list all tasks on a certain date.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"public class ListTasksOnCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate date;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new ListTasksOnCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date of tasks to list.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" public ListTasksOnCommand(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Executes the ListTasksOnCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" ui.listTasks(ui, tasks, date);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the ListTasksOnCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the ListTasksOnCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":49}},{"path":"src/main/java/spot/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to mark a certain task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new MarkCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to be marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public MarkCommand(int position) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" * Executes the MarkCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" tasks.markTask(ui, position);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the MarkCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the MarkCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":46}},{"path":"src/main/java/spot/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a command to mark a certain task as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new UnmarkCommand object.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to be marked as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public UnmarkCommand(int position) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" * Executes the UnmarkCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" tasks.unmarkTask(ui, position);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the UnmarkCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the UnmarkCommand is an ExitCommand.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"laurenlim2112":46}},{"path":"src/main/java/spot/command/UpdateDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class UpdateDeadlineCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new UpdateDeadlineCommand object.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to update.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Updated task deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" public UpdateDeadlineCommand(int position, LocalDate deadline) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Executes the UpdateDeadlineCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" tasks.updateTaskDeadline(ui, position, deadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the UpdateDeadlineCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the UpdateDeadlineCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"laurenlim2112":48}},{"path":"src/main/java/spot/command/UpdateDescriptionCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"public class UpdateDescriptionCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" private String description;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new UpdateDescriptionCommand object.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to update.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param description Updated task description.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" public UpdateDescriptionCommand(int position, String description) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" assert !description.isEmpty();","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * Executes the UpdateDescriptionCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" tasks.updateTaskDescription(ui, position, description);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the UpdateDescriptionCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the UpdateDescriptionCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"laurenlim2112":47}},{"path":"src/main/java/spot/command/UpdateEndCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class UpdateEndCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate end;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new UpdateEndCommand object.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to update.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @param end Updated end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" public UpdateEndCommand(int position, LocalDate end) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Executes the UpdateEndCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" tasks.updateTaskEnd(ui, position, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the UpdateEndCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the UpdateEndCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"laurenlim2112":48}},{"path":"src/main/java/spot/command/UpdateStartCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import spot.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import spot.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import spot.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class UpdateStartCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private int position;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate start;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new UpdateStartCommand object.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param position Position of the task to update.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @param start Updated start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" public UpdateStartCommand(int position, LocalDate start) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.position \u003d position;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * Executes the UpdateStartCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param tasks Current TaskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param ui Current Ui object.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" * @param storage Current Storage object.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If there are any errors when executing the command.","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" tasks.updateTaskStart(ui, position, start);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * Checks if the UpdateStartCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the UpdateStartCommand is an ExitCommand.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"laurenlim2112":48}},{"path":"src/main/java/spot/exception/SpotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":" * Exception thrown when there is an error in the execution of the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"public class SpotException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new SpotException object.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" * @param message Message to be displayed when the exception is thrown.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" public SpotException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"laurenlim2112":16}},{"path":"src/main/java/spot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents a deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Due date of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" public Deadline(String description, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Deadline object with specified isDone field.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" * @param isDone Boolean representing the state of completion of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Due date of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" public Deadline(String description, boolean isDone, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" * @return String representation of the Deadline object.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" * Returns representation of the Deadline object to be stored","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" * in a text file within the hard disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" * @return Representation of the Deadline object to be stored.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" public String toLine() {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" return \" D | \" + super.toLine() + \" | \"","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd-MM-uuuu\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" * Returns whether the Deadline object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the Deadline object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" public boolean fallsOn(LocalDate date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" return date.isEqual(this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Deadline object\u0027s deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Updated deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no deadline field.","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" public void updateDeadline(LocalDate deadline) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Deadline object\u0027s start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" * @param start Updated start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no start date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" public void updateStart(LocalDate start) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have a start date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Deadline object\u0027s end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" * @param end Updated end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no end date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" public void updateEnd(LocalDate end) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have an end date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"laurenlim2112":100}},{"path":"src/main/java/spot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" * Represents an event.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" * @param start Start date of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" * @param end End date of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" public Event(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" * @param isDone Boolean representing the state of completion of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" * @param start Start date of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" * @param end End date of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" public Event(String description, boolean isDone, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" * @return String representation of the Event object.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" + \" (from: \"","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\"))","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" + \" to: \" + this.end.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy\")) + \")\";","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" * Returns representation of the Event object to be stored","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" * in a text file within the hard disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" * @return Representation of the Event object to be stored.","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" public String toLine() {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" return \" E | \" + super.toLine() + \" | \"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"dd-MM-uuuu\")) + \" | \"","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" + this.end.format(DateTimeFormatter.ofPattern(\"dd-MM-uuuu\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" * Returns whether the Event object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the Event object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" public boolean fallsOn(LocalDate date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" return !date.isAfter(this.end) \u0026\u0026 !date.isBefore(this.start);","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Event object\u0027s deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Updated deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no deadline field.","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" public void updateDeadline(LocalDate deadline) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have a deadline!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Event object\u0027s start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":" * @param start Updated start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no start date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" public void updateStart(LocalDate start) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"laurenlim2112"},"content":" * Updates the Event object\u0027s end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"laurenlim2112"},"content":" * @param end Updated end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no end date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"laurenlim2112"},"content":" public void updateEnd(LocalDate end) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"laurenlim2112"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"laurenlim2112":109}},{"path":"src/main/java/spot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":" * Represents a task.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" private String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" * @param isDone Boolean representing the state of completion of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" * Marks the Task object as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" * Marks the Task object as not done.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the state of completion of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" * @return String representation of the state of completion of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" return \"X\";","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" } else {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" return \" \";","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" * @return String representation of the Task object.","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-20"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" * Returns representation of the Task object to be stored","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" * in a text file within the hard disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" * @return Representation of the Task object to be stored.","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" public String toLine() {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" return this.getStatusIcon() + \" | \" + this.description;","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" * Returns whether the Task object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the Task object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" public abstract boolean fallsOn(LocalDate date);","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" public boolean descriptionContains(String keyword) {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" return description.contains(keyword);","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"laurenlim2112"},"content":" * Updates the task\u0027s description.","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"laurenlim2112"},"content":" * @param description Updated description.","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"laurenlim2112"},"content":" public void updateDescription(String description) {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"laurenlim2112"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"laurenlim2112"},"content":" * Updates the task\u0027s deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Updated deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no deadline field.","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"laurenlim2112"},"content":" public abstract void updateDeadline(LocalDate deadline) throws SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"laurenlim2112"},"content":" * Updates the task\u0027s start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"laurenlim2112"},"content":" * @param start Updated start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no start date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"laurenlim2112"},"content":" public abstract void updateStart(LocalDate start) throws SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"laurenlim2112"},"content":" * Updates the task\u0027s end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"laurenlim2112"},"content":" * @param end Updated end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no end date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"laurenlim2112"},"content":" public abstract void updateEnd(LocalDate end) throws SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"laurenlim2112":126}},{"path":"src/main/java/spot/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":" * Represents a todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" * Constructs a new ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" * @param description Description of the ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" * @param isDone Boolean representing the state of completion of the ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" * Returns String representation of the ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" * @return String representation of the ToDo object.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" * Returns representation of the ToDo object to be stored","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" * in a text file within the hard disk.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":" * @return Representation of the ToDo object to be stored.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" public String toLine() {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" return \" T | \" + super.toLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" * Returns whether the ToDo object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":" * @param date Specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" * @return Boolean representing whether the ToDo object falls on the specified date.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" public boolean fallsOn(LocalDate date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" * Updates the ToDo object\u0027s deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" * @param deadline Updated deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no deadline field.","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" public void updateDeadline(LocalDate deadline) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have a deadline!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" * Updates the ToDo object\u0027s start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" * @param start Updated start date.","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no start date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":" public void updateStart(LocalDate start) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have a start date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"laurenlim2112"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"laurenlim2112"},"content":" * Updates the ToDo object\u0027s end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"laurenlim2112"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"laurenlim2112"},"content":" * @param end Updated end date.","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"laurenlim2112"},"content":" * @throws SpotException If the task has no end date field.","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"laurenlim2112"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"laurenlim2112"},"content":" public void updateEnd(LocalDate end) throws SpotException {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"laurenlim2112"},"content":" throw new SpotException(\"Spot thinks this task doesn\u0027t have an end date!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"laurenlim2112":92}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"Infinity\" minHeight\u003d\"-Infinity\" 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":"laurenlim2112"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" \u003cLabel fx:id\u003d\"dialog\" style\u003d\"-fx-padding: 10;\" text\u003d\"Label\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"85.0\" fitWidth\u003d\"85.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"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":"laurenlim2112"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"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\"spot.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"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":"laurenlim2112"},"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":"laurenlim2112"},"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":"laurenlim2112"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"laurenlim2112":20}},{"path":"src/test/java/spot/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.ExitCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":"import spot.command.ListTasksOnCommand;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":"import spot.exception.SpotException;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" public void parseDeleteCommand_invalidDeleteCommand_exceptionThrown() {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(new ExitCommand(), Parser.parseCommand(\"delete\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":" } catch (SpotException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"Spot doesn\u0027t know which task to delete!\", e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"laurenlim2112"},"content":" public void parseListTasksOnCommand_invalidListTasksOnCommand_exceptionThrown() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(new ListTasksOnCommand(LocalDate.of(2000, 12, 31)),","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseCommand(\"list tasks on 32-12-2000\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"laurenlim2112"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"laurenlim2112"},"content":" } catch (SpotException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"This doesn\u0027t seem like a valid date to Spot!\"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"laurenlim2112"},"content":" + \"Please make sure your date is given in this format: dd-mm-yyyy\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"laurenlim2112"},"content":" public void parseCommand_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(new ExitCommand(), Parser.parseCommand(\"stanloona\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"laurenlim2112"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"laurenlim2112"},"content":" } catch (SpotException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"Spot doesn\u0027t know what command that is!\", e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"laurenlim2112"},"content":" public void parseDate_validDate_success() throws SpotException {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(LocalDate.of(2003, 12, 21),","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseDate(\"21-12-2003\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(LocalDate.of(2001, 11, 20),","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseDate(\"20-11-2001\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(LocalDate.of(2001, 6, 4),","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseDate(\"04-06-2001\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"laurenlim2112"},"content":" public void parseDate_invalidDay_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(LocalDate.of(2003, 3, 14),","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseDate(\"31-02-2000\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"laurenlim2112"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"laurenlim2112"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"This doesn\u0027t seem like a valid date to Spot!\"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"laurenlim2112"},"content":" + \"Please make sure your date is given in this format: dd-mm-yyyy\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"laurenlim2112"},"content":" public void parseDate_invalidMonth_exceptionThrown() {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"laurenlim2112"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(LocalDate.of(2003, 2, 24),","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"laurenlim2112"},"content":" Parser.parseDate(\"01-13-2000\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"laurenlim2112"},"content":" fail();","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"laurenlim2112"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"This doesn\u0027t seem like a valid date to Spot!\"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"laurenlim2112"},"content":" + \"Please make sure your date is given in this format: dd-mm-yyyy\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"laurenlim2112":79}},{"path":"src/test/java/spot/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" public void fallsOn_validDate_success() {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(true, new Deadline(\"wah\",","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" LocalDate.of(2023, 8, 28))","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":" .fallsOn(LocalDate.of(2023, 8, 28)));","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(false, new Deadline(\"wah\",","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"laurenlim2112"},"content":" LocalDate.of(2023, 8, 28))","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"laurenlim2112"},"content":" .fallsOn(LocalDate.of(2023, 8, 29)));","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"laurenlim2112":21}},{"path":"src/test/java/spot/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"laurenlim2112"},"content":"package spot.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"laurenlim2112"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"laurenlim2112"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"laurenlim2112"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"laurenlim2112"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"laurenlim2112"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"laurenlim2112"},"content":" public void testToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"[T][ ] takotime\", new ToDo(\"takotime\").toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"[T][X] takotime\", new ToDo(\"takotime\", true).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"laurenlim2112"},"content":" assertEquals(\"[T][ ] takotime\", new ToDo(\"takotime\", false).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"laurenlim2112"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"laurenlim2112"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"laurenlim2112":15}}] diff --git a/laurenlim2112_ip_master/commits.json b/laurenlim2112_ip_master/commits.json index 3d722847..29d12d21 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":{}}]}]},"authorFileTypeContributionMap":{"laurenlim2112":{"java":2333,"md":0,"fxml":36,"sh":0,"bat":0,"gradle":22,"txt":3}},"authorContributionVariance":{"laurenlim2112":114665.24},"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-Lambdas"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":38,"deletions":36}}}]}]},"authorFileTypeContributionMap":{"laurenlim2112":{"java":2388,"md":0,"fxml":36,"sh":0,"bat":0,"gradle":22,"txt":5}},"authorContributionVariance":{"laurenlim2112":96964.695},"authorDisplayNameMap":{"laurenlim2112":"CS2103T-W13-2 LAUR..XING"}} diff --git a/ldinghan_ip_master/authorship.json b/ldinghan_ip_master/authorship.json index 03e873e4..f9f1b86d 100644 --- a/ldinghan_ip_master/authorship.json +++ b/ldinghan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ldinghan":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":"ldinghan"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"javafx {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" version \u003d \"20\"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"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":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ldinghan":26,"-":42}},{"path":"data/ding.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"[T][X] ab","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":1}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" * The main class for the Ding Chatbot application.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" private Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" private Scene scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/dauser.jpeg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/daduke.jpeg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" * Constructs a new instance of the duke.Duke class.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" * Initializes the storage and task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" storage \u003d new Storage(\"./data\", \"./data/ding.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" tasks \u003d storage.getTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" * Gets a response from the chatbot for the given user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" * @return The chatbot\u0027s response.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" String output;","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" Command command \u003d Parser.getCommand(userInput, storage, tasks, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" output \u003d command.execute(storage, tasks, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"ldinghan"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"ldinghan"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"ldinghan"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"ldinghan"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"ldinghan"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"ldinghan"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"ldinghan"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"ldinghan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"ldinghan"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"ldinghan"},"content":" stage.setTitle(\"Ding\");","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"ldinghan"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"ldinghan"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"ldinghan"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"ldinghan"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"ldinghan"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"ldinghan"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"ldinghan"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"ldinghan"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"ldinghan"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"ldinghan"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"ldinghan"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"ldinghan"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"ldinghan"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"ldinghan"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"ldinghan"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"ldinghan"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"ldinghan"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"ldinghan"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"ldinghan"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"ldinghan"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"ldinghan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"ldinghan"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"ldinghan"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"ldinghan"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"ldinghan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"ldinghan"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"ldinghan"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"ldinghan"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"ldinghan"},"content":" handleUserInput();","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"ldinghan"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"ldinghan"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"ldinghan"},"content":" handleUserInput();","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"ldinghan"},"content":" });","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":135,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"ldinghan"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"ldinghan"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"ldinghan"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"ldinghan"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"ldinghan"},"content":" return textToAdd;","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":145,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"ldinghan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"ldinghan"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"ldinghan"},"content":" String dukeText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"ldinghan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"ldinghan"},"content":" DialogBox.getUserDialog(userText, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"ldinghan"},"content":" DialogBox.getDukeDialog(dukeText, dukeImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"ldinghan"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"ldinghan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":155,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ldinghan":154,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * The `Main` class serves as the entry point for the Ding chatbot application with a graphical user interface (GUI).","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * It initializes Duke, loads the GUI using JavaFX and FXML, and displays the main application window.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * This class extends the JavaFX `Application` class and is responsible for launching the GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" private Duke ding;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * Constructs a new `Main` object and initializes the Duke chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public Main() {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" ding \u003d new Duke();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * The `start` method, required by JavaFX, initializes the GUI by loading the FXML layout and setting up the","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * main application window. It also associates the Ding chatbot","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * with the GUI controller and displays a welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param stage The primary stage for the JavaFX application.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" stage.setTitle(\"Ding\");","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(ding);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().showWelcome();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":50}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" private Duke ding;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/dauser.jpeg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/daduke.jpeg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" public void initialize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" * Sets the Duke chatbot for this GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" * @param d The Duke chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" ding \u003d d;","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Ding\u0027s reply and then appends them to","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" String response \u003d ding.getResponse(input.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" * Displays a welcome message in the dialog container when the application starts.","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(Ui.introReply(), dukeImage));","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":66}},{"path":"src/main/java/duke/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * The `ByeCommand` class represents a command to exit the Duke chatbot application.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * It is responsible for saving task data and generating a farewell message.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" * Executes the \"Bye\" command. It saves the current task data to storage and returns a farewell message.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" * @return A farewell message indicating the application is exiting.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" return ui.exitReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":26}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * The abstract `Command` class serves as the base class for all specific commands in the Duke chatbot application.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Subclasses should implement the `execute` method to define the behavior of individual commands.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Executes the specific behavior associated with this command.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of executing the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" public abstract String execute(Storage storage, TaskList taskList, Ui ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ldinghan":22}},{"path":"src/main/java/duke/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * Parses the user input to create a deadline task and adds it to the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Constructs a new DeadlineCommand with the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string for creating the deadline task.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public DeadlineCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" * Executes the DeadlineCommand. Parses the user input to create a deadline task,","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * adds it to the task list, and updates the storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of the add task operation.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDescriptionException If the task description is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDateTimeException If the task date and time are invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(Parser.parseStringToTask(userInput, \"deadline\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" return ui.addTaskReply(userInput, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDescriptionException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDescriptionExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDateTimeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDateTimeExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":49}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.MissingTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Parses the user input to determine which task to delete and removes it from the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Constructs a new DeleteCommand with the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string for specifying the task to delete.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public DeleteCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * Executes the DeleteCommand. Parses the user input to determine which task to delete,","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * removes it from the task list, and updates the storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of the delete task operation.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" * @throws MissingTaskIndexException If the task index is missing in the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidTaskIndexException If the task index is invalid (out of range).","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" String output \u003d ui.deleteTaskReply(Parser.taskToDelete(userInput, taskList), taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (MissingTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.missingTaskIndexExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" return ui.invalidTaskIndexExceptionReply(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":54}},{"path":"src/main/java/duke/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * Parses the user input to create an event task and adds it to the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Constructs a new EventCommand with the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string containing details of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public EventCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" * Executes the EventCommand. Parses the user input to create an event task,","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * adds it to the task list, and updates the storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of adding the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDescriptionException If the task description is missing or invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDateTimeException If the event date and time are missing or in an invalid format.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(Parser.parseStringToTask(userInput, \"event\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" return ui.addTaskReply(userInput, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDescriptionException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDescriptionExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDateTimeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDateTimeExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":49}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidKeywordException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" * The `FindCommand` class represents a command for finding tasks that match a keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * It is responsible for parsing the user input to extract the keyword and then finding","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * tasks that contain that keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Constructs a new `FindCommand` object with the specified user input containing the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string containing the keyword for task searching.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public FindCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" * Executes the \"Find\" command. It attempts to find tasks in the task list that match the specified keyword,","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * and returns a response message containing the found tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list to search for matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @return A response message containing the tasks that match the specified keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" return ui.findTaskReply(userInput, Parser.findKeyword(userInput, taskList));","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidKeywordException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" return ui.invalidKeywordExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":43}},{"path":"src/main/java/duke/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * The `InvalidCommand` class represents a command that is not recognized or valid.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * It is responsible for providing a response message indicating that the user input","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" * does not correspond to a valid command.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * Executes the \"Invalid\" command. It provides a response message indicating that the","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" * user input is not recognized as a valid command.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list (not used in this command).","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying error messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating that the user input is not a valid command.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" return ui.illegalArgumentExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":27}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * The `ListCommand` class represents a command to list all tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * It is responsible for retrieving the list of tasks from the task list,","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" * formatting them, and providing a response message.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" * Executes the \"List\" command. It retrieves the list of tasks from the task list,","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * formats them into a response message, and returns the message to be displayed to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @return A response message containing the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" return ui.printListReply(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":25}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.MissingTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * The `MarkCommand` class represents a command to mark a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * It is responsible for parsing the user input, marking the specified task as done in the task list,","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * updating the storage, and providing a response message.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Constructs a new `MarkCommand` object with the given user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string containing the \"Mark\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public MarkCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * Executes the \"Mark\" command. It attempts to mark the specified task as done, updates the storage,","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * and returns a response message indicating the result.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of the \"Mark\" operation.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" String output \u003d ui.markTaskReply(Parser.taskToMark(userInput, taskList), taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" } catch (MissingTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return ui.missingTaskIndexExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.invalidTaskIndexExceptionReply(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":49}},{"path":"src/main/java/duke/commands/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * The `ToDoCommand` class represents a command to add a new \"To-Do\" task.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * It is responsible for parsing the user input, creating a new task, adding it to the task list,","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * updating the storage, and providing a response message.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Constructs a new `ToDoCommand` object with the given user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string containing the \"To-Do\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public ToDoCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * Executes the \"To-Do\" command. It attempts to create a new \"To-Do\" task based on the user input,","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * adds it to the task list, updates the storage, and returns a response message indicating the result.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of the \"To-Do\" task addition.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(Parser.parseStringToTask(userInput, \"todo\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" return ui.addTaskReply(userInput, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDescriptionException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDescriptionExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDateTimeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDateTimeExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":49}},{"path":"src/main/java/duke/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.MissingTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * The `UnmarkCommand` class represents a command to unmark a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * It is responsible for parsing the user input, executing the unmark operation on the task list,","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * updating the storage, and providing a response message.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Constructs a new `UnmarkCommand` object with the given user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string containing the unmark command.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public UnmarkCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * Executes the unmark command. It attempts to unmark the specified task as undone, updates the storage,","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * and returns a response message indicating the result.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of the unmark operation.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" String output \u003d ui.unmarkTaskReply(Parser.taskToUnmark(userInput, taskList), taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" } catch (MissingTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return ui.missingTaskIndexExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.invalidTaskIndexExceptionReply(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":51}},{"path":"src/main/java/duke/exceptions/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * An exception class that represents an invalid task description in a task management application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This exception is thrown when an operation encounters an invalid or empty task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class InvalidDateTimeException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Constructs an duke.exceptions.InvalidDateTimeException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * @param message The detail message explaining the cause of the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" public InvalidDateTimeException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ldinghan":16}},{"path":"src/main/java/duke/exceptions/InvalidDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * An exception class that represents an invalid task description in a task management application.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This exception is thrown when an operation encounters an invalid or empty task description.","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class InvalidDescriptionException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Constructs an duke.exceptions.InvalidDescriptionException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * @param message The detail message explaining the cause of the exception.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" public InvalidDescriptionException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":16}},{"path":"src/main/java/duke/exceptions/InvalidKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * An exception class that represents an invalid keyword exception when finding relevant tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This exception is thrown when an operation expects a valid keyword but none is provided, or if there","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" * is more than 1 keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"public class InvalidKeywordException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" * Constructs a duke.exceptions.InvalidKeywordException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * @param message The detail message explaining the cause of the exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" public InvalidKeywordException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":17}},{"path":"src/main/java/duke/exceptions/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * An exception class that represents an invalid task index in a task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This exception is thrown when an operation encounters an index that is out of bounds or not valid.","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class InvalidTaskIndexException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Constructs an duke.exceptions.InvalidTaskIndexException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * @param message The detail message explaining the cause of the exception.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" public InvalidTaskIndexException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":16}},{"path":"src/main/java/duke/exceptions/MissingTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * An exception class that represents a missing task index in a task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This exception is thrown when an operation expects a valid task index but none is provided.","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class MissingTaskIndexException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Constructs a duke.exceptions.MissingTaskIndexException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * @param message The detail message explaining the cause of the exception.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" public MissingTaskIndexException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":16}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.commands.ByeCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import duke.commands.DeadlineCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"import duke.commands.DeleteCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"import duke.commands.EventCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"import duke.commands.InvalidCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"import duke.commands.MarkCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"import duke.commands.ToDoCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"import duke.commands.UnmarkCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidKeywordException;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.MissingTaskIndexException;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * The duke.parser.Parser class is responsible for parsing user input and","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * converting it into meaningful commands and tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" * Parses an input from user to get duke.commands.Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" * @return The parsed command.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" public static Command getCommand(String str, Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" String commandWord \u003d str.split(\" \")[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" case \"list\":","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" case \"mark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" return new MarkCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" return new UnmarkCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" return new ToDoCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":" return new DeadlineCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" return new EventCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" case \"delete\":","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" return new DeleteCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" case \"find\":","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" return new FindCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" case \"bye\":","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"ldinghan"},"content":" * Extracts the task index from a user input string and marks the task as done or undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"ldinghan"},"content":" * @return The index of the task that was marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidTaskIndexException If the task index is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"ldinghan"},"content":" * @throws MissingTaskIndexException If the task index is missing.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"ldinghan"},"content":" public static int taskToMark(String str, TaskList tasks)","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"ldinghan"},"content":" throws InvalidTaskIndexException, MissingTaskIndexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length \u003d\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"ldinghan"},"content":" int taskIndex \u003d Integer.parseInt(str.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"ldinghan"},"content":" if (taskIndex + 1 \u003e tasks.getSize() || taskIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"ldinghan"},"content":" throw new InvalidTaskIndexException(\"Invalid Task Index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ldinghan"},"content":" tasks.markTaskAsDone(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ldinghan"},"content":" return taskIndex;","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"ldinghan"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"ldinghan"},"content":" throw new MissingTaskIndexException(\"Task Index Missing.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"ldinghan"},"content":" * Parses a user input string to get the index of a task to unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"ldinghan"},"content":" * @return The index of the task that was marked as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidTaskIndexException If the task index is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"ldinghan"},"content":" * @throws MissingTaskIndexException If the task index is missing.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"ldinghan"},"content":" public static int taskToUnmark(String str, TaskList tasks)","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"ldinghan"},"content":" throws InvalidTaskIndexException, MissingTaskIndexException {","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"ldinghan"},"content":" int taskIndex \u003d Integer.parseInt(str.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"ldinghan"},"content":" if (taskIndex + 1 \u003e tasks.getSize() || taskIndex \u003c 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"ldinghan"},"content":" throw new InvalidTaskIndexException(\"Invalid Task Index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"ldinghan"},"content":" tasks.markTaskAsUndone(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"ldinghan"},"content":" return taskIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"ldinghan"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"ldinghan"},"content":" throw new MissingTaskIndexException(\"Task Index Missing.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"ldinghan"},"content":" * Extracts the keyword from user input and finds tasks with the specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"ldinghan"},"content":" * @return A TaskList of tasks containing the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidKeywordException If the keyword is missing, or if there is more than 1 keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"ldinghan"},"content":" public static TaskList findKeyword(String str, TaskList tasks) throws InvalidKeywordException {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length \u003d\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"ldinghan"},"content":" String keyword \u003d str.split(\" \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"ldinghan"},"content":" return tasks.findTask(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"ldinghan"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"ldinghan"},"content":" throw new InvalidKeywordException(\"Keyword given is not a single word.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"ldinghan"},"content":" * Extracts the task index from a user input string and deletes the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"ldinghan"},"content":" * @return The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidTaskIndexException If the task index is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"ldinghan"},"content":" * @throws MissingTaskIndexException If the task index is missing.","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"ldinghan"},"content":" public static Task taskToDelete(String str, TaskList tasks)","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"ldinghan"},"content":" throws InvalidTaskIndexException, MissingTaskIndexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length !\u003d 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":144,"author":{"gitId":"ldinghan"},"content":" throw new MissingTaskIndexException(\"Task Index Missing.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":145,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":146,"author":{"gitId":"ldinghan"},"content":" int taskIndex \u003d Integer.parseInt(str.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"ldinghan"},"content":" if (taskIndex + 1 \u003e tasks.getSize() || taskIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"ldinghan"},"content":" throw new InvalidTaskIndexException(\"Invalid Task Index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"ldinghan"},"content":" Task toRemove \u003d tasks.getTask(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"ldinghan"},"content":" tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"ldinghan"},"content":" return toRemove;","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"ldinghan"},"content":" * Parses a user input string into a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"ldinghan"},"content":" * @return The parsed task.","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDescriptionException If the task description is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDateTimeException If the task date and time are invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"ldinghan"},"content":" public static Task parseStringToTask(String str, String commandWord)","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"ldinghan"},"content":" throws InvalidDescriptionException, InvalidDateTimeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"ldinghan"},"content":" switch(commandWord) {","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"ldinghan"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length \u003e 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"ldinghan"},"content":" ToDo todo \u003d new ToDo(str.split(\" \")[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"ldinghan"},"content":" return todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"ldinghan"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"ldinghan"},"content":" throw new InvalidDescriptionException(\"Invalid description.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"ldinghan"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":174,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length \u003e 3) {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"ldinghan"},"content":" String fullTaskDescription \u003d str.split(\" \", 2)[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"ldinghan"},"content":" String description \u003d fullTaskDescription.split(\" /by \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"ldinghan"},"content":" String by \u003d fullTaskDescription.split(\" /by \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"ldinghan"},"content":" String[] datetime \u003d by.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"ldinghan"},"content":" LocalDate date \u003d LocalDate.parse(datetime[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"ldinghan"},"content":" LocalTime time \u003d LocalTime.parse(datetime[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"ldinghan"},"content":" Deadline deadline \u003d new Deadline(description, date, time);","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"ldinghan"},"content":" return deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"ldinghan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"ldinghan"},"content":" throw new InvalidDateTimeException(\"Invalid Datetime.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"ldinghan"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"ldinghan"},"content":" throw new InvalidDescriptionException(\"Invalid description.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"ldinghan"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":191,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length \u003e 4) {","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"ldinghan"},"content":" String fullTaskDescription \u003d str.split(\" \", 2)[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"ldinghan"},"content":" String description \u003d fullTaskDescription.split(\" /from \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"ldinghan"},"content":" String from \u003d String.join(\"\", fullTaskDescription.split(\" /from \")[1]).split(\" /to \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"ldinghan"},"content":" String to \u003d fullTaskDescription.split(\" /to \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"ldinghan"},"content":" String[] fromDatetime \u003d from.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"ldinghan"},"content":" String[] toDatetime \u003d to.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"ldinghan"},"content":" LocalDate fromDate \u003d LocalDate.parse(fromDatetime[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"ldinghan"},"content":" LocalTime fromTime \u003d LocalTime.parse(fromDatetime[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"ldinghan"},"content":" LocalDate toDate \u003d LocalDate.parse(toDatetime[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"ldinghan"},"content":" LocalTime toTime \u003d LocalTime.parse(toDatetime[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":203,"author":{"gitId":"ldinghan"},"content":" Event event \u003d new Event(description, fromDate, fromTime, toDate, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"ldinghan"},"content":" return event;","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"ldinghan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"ldinghan"},"content":" throw new InvalidDateTimeException(\"Invalid Datetime\");","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"ldinghan"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"ldinghan"},"content":" throw new InvalidDescriptionException(\"Invalid description.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"ldinghan"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"ldinghan"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":215}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" * Manages the storage of tasks in a txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" protected String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" protected String directoryPath;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" * Initializes a new instance of the duke.storage.Storage class.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * @param directoryPath The directory where the storage file is located or should be created.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * @param filePath The file path of the storage file.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" public Storage(String directoryPath, String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" this.directoryPath \u003d directoryPath;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" this.setupTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" * Updates the storage file with the tasks from the provided duke.tasks.TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" * @param tasks The duke.tasks.TaskList containing tasks to be saved to the storage file.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" public void updateStorage(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" writer.write(tasks.getTask(i) + System.lineSeparator());","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" writer.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" * Sets up the tasks by reading from the storage file or creating a new one if it doesn\u0027t exist.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" * @return A duke.tasks.TaskList containing the tasks read from the storage file, or an empty","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" * duke.tasks.TaskList if the file is new.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" private TaskList setupTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" File directory \u003d new File(directoryPath);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":" directory.mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"ldinghan"},"content":" File taskFile \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"ldinghan"},"content":" if (!taskFile.createNewFile()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"ldinghan"},"content":" tasks \u003d getTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"ldinghan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"ldinghan"},"content":" System.out.println(\"Error occurred\");","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"ldinghan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"ldinghan"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"ldinghan"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"ldinghan"},"content":" * Retrieves tasks from the storage file and returns them in a duke.tasks.TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ldinghan"},"content":" * @return A duke.tasks.TaskList containing tasks read from the storage file.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"ldinghan"},"content":" public TaskList getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"ldinghan"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"ldinghan"},"content":" Scanner scanner \u003d new Scanner(new File(filePath));","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"ldinghan"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"ldinghan"},"content":" String str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"ldinghan"},"content":" char taskType \u003d str.charAt(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"ldinghan"},"content":" boolean isMarked \u003d str.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"ldinghan"},"content":" String description \u003d str.split(\"] \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"ldinghan"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"ldinghan"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"ldinghan"},"content":" ToDo taskT \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"ldinghan"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"ldinghan"},"content":" taskT.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(taskT);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"ldinghan"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"ldinghan"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"ldinghan"},"content":" description \u003d description.split(\" \\\\(by: \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"ldinghan"},"content":" String by \u003d str.split(\" \\\\(by: \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"ldinghan"},"content":" LocalDate date \u003d LocalDate.parse(by.split(\" \")[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"ldinghan"},"content":" LocalTime time \u003d LocalTime.parse(by.split(\" \")[1].replaceAll(\".$\", \"\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"ldinghan"},"content":" Deadline taskD \u003d new Deadline(description, date, time);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"ldinghan"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"ldinghan"},"content":" taskD.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(taskD);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"ldinghan"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"ldinghan"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"ldinghan"},"content":" description \u003d description.split(\" \\\\(from: \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"ldinghan"},"content":" String from \u003d String.join(\"\", str.split(\"\\\\(from: \")[1]).split(\" to: \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"ldinghan"},"content":" String to \u003d str.split(\" to: \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"ldinghan"},"content":" LocalDate fromDate \u003d LocalDate.parse(from.split(\" \")[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"ldinghan"},"content":" LocalTime fromTime \u003d LocalTime.parse(from.split(\" \")[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"ldinghan"},"content":" LocalDate toDate \u003d LocalDate.parse(to.split(\" \")[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"ldinghan"},"content":" LocalTime toTime \u003d LocalTime.parse(to.split(\" \")[1].replaceAll(\".$\", \"\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"ldinghan"},"content":" Event taskE \u003d new Event(description, fromDate, fromTime, toDate, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"ldinghan"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"ldinghan"},"content":" taskE.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(taskE);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"ldinghan"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"ldinghan"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"ldinghan"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":132,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"ldinghan"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"ldinghan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"ldinghan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"ldinghan"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"ldinghan"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":142}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" * Represents a task with a specific deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * This class extends the duke.tasks.Task class and adds a deadline to it.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * The deadline for this task.","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" protected String by;","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" protected LocalDate byDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" protected LocalTime byTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Constructs a duke.tasks.Deadline object with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" * @param byDate The date deadline for the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @param byTime The time deadline for the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public Deadline(String description, LocalDate byDate, LocalTime byTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" this.byTime \u003d byTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" this.by \u003d byDate.toString() + \" \" + byTime.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * Returns a string representation of the duke.tasks.Deadline object.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @return A formatted string including the task type, description, and deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":40}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" * Represents an event task that occurs within a specified time range.","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * This class extends the duke.tasks.Task class and adds the event\u0027s start and end times.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * The start time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" protected LocalDate fromDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" protected LocalTime fromTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" * The end time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" protected LocalDate toDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" protected LocalTime toTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" protected String from;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" * Constructs an duke.tasks.Event object with the given description, start date and time, and end date and time.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * @param fromDate The start date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * @param fromTime The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * @param toDate The end date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * @param toTime The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" public Event(String description, LocalDate fromDate, LocalTime fromTime, LocalDate toDate, LocalTime toTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" this.fromTime \u003d fromTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" this.toTime \u003d toTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" this.from \u003d fromDate.toString() + \" \" + fromTime.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" this.to \u003d toDate.toString() + \" \" + toTime.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" * Returns a string representation of the duke.tasks.Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" * @return A formatted string including the task type, description, start time, and end time.","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":52}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This class provides basic functionality for managing tasks.","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Indicates whether the task is done or not.","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Constructs a duke.tasks.Task object with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" return this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" * Returns an icon representing the completion status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" * @return An \"X\" if the task is done, or a space if it\u0027s not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" * Returns a string representation of the duke.tasks.Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" * @return A formatted string including the completion status icon and description.","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ldinghan":67}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Initialises a new instance of the duke.tasks.TaskList class.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Gets the number of tasks in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * Gets the task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" * @param task The task to add to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" * Deletes a task from the list at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" * @param index The index of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" * Marks a task at the specified index as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" * @param index The index of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" * Marks a task at the specified index as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ldinghan"},"content":" * @param index The index of the task to mark as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"ldinghan"},"content":" public void markTaskAsUndone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"ldinghan"},"content":" this.tasks.get(index).markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"ldinghan"},"content":" * Creates a TaskList that contains the specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"ldinghan"},"content":" * @param keyword The keyword that is searched for in the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"ldinghan"},"content":" * @return A TaskList that contains the specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"ldinghan"},"content":" public TaskList findTask(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"ldinghan"},"content":" TaskList tempTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"ldinghan"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"ldinghan"},"content":" Task task \u003d this.tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"ldinghan"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ldinghan"},"content":" tempTaskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"ldinghan"},"content":" return tempTaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"ldinghan"},"content":" * Returns a string representation of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"ldinghan"},"content":" * @return A string representation of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"ldinghan"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"ldinghan"},"content":" ArrayList\u003cString\u003e allTaskStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"ldinghan"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"ldinghan"},"content":" String taskString \u003d String.format(\"%d. %s\", i + 1, this.tasks.get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"ldinghan"},"content":" allTaskStrings.add(taskString);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"ldinghan"},"content":" return String.join(\"\\n\", allTaskStrings);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":107}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * Represents a to-do task without any specific time constraints.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This class extends the duke.tasks.Task class and represents a simple to-do item.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Constructs a duke.tasks.ToDo object with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Returns a string representation of the duke.tasks.ToDo object.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @return A formatted string including the task type and description.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":26}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" * The duke.ui.Ui class is responsible for managing user interactions and displaying messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * Displays a reply after adding a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" * @return The reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" public static String addTaskReply(String str, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" return String.format(\"Ding: What does \u0027%s\u0027 mean? I\u0027ll just add it anyway.\\n \"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" + \"You have like %d tasks now\", str, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" * Displays a reply after marking a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" * @param taskIndex The index of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * @return The reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" public static String markTaskReply(int taskIndex, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" return String.format(\"Ding: Okay, I marked this task as done, \"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" + \"but I have no idea what that means:\\n %s\", tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" * Displays a reply after marking a task as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" * @param taskIndex The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" * @return The reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" public static String unmarkTaskReply(int taskIndex, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" return String.format(\"Ding: Okay, I marked this task as undone, \"","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" + \"but I have no idea what that means:\\n %s\", tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" * Displays a reply after deleting a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" * @return The reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" public static String deleteTaskReply(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":" return String.format(\"Ding: Okay, I\u0027ve forgotten this task, \\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" + \"so don\u0027t expect me to remember it:\\n %s\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" + \"Ding: Right so now you have like %d tasks left\", task, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" * Displays a reply when exiting the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":" * @return The exit reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" public static String exitReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":" return \"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"ldinghan"},"content":" + \"Ding: Bye. Hopefully I get to see you again soon!\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"ldinghan"},"content":" + \"____________________________________________________________\";","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"ldinghan"},"content":" * Displays an introductory message when starting the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"ldinghan"},"content":" * @return The introductory reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"ldinghan"},"content":" public static String introReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"ldinghan"},"content":" return \"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"ldinghan"},"content":" + \"Hello! I\u0027m Ding!\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"ldinghan"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"ldinghan"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ldinghan"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks to display.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"ldinghan"},"content":" * @return The reply message containing the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"ldinghan"},"content":" public static String printListReply(TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"ldinghan"},"content":" return String.format(\"Ding: These are your tasks... \"","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"ldinghan"},"content":" + \"If I remember correctly:\\n%s\\n\", tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for finding tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"ldinghan"},"content":" * @param str The user input containing the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks to display.","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"ldinghan"},"content":" * @return The reply message containing the found tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"ldinghan"},"content":" public static String findTaskReply(String str, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"ldinghan"},"content":" return String.format(\"I will help you %s\\n\", str)","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"ldinghan"},"content":" + printListReply(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for an illegal argument exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for an illegal argument exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"ldinghan"},"content":" public static String illegalArgumentExceptionReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"ldinghan"},"content":" return \"Ding: I seriously have no idea what I need to do here\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"ldinghan"},"content":" + \"Ding: No way you forgot to even input a proper command...\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"ldinghan"},"content":" + \"Ding: Available commands are \u0027todo\u0027, \u0027deadline\u0027, \u0027event\u0027, \\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"ldinghan"},"content":" + \"\u0027list\u0027, \u0027mark\u0027, \u0027unmark\u0027, \u0027delete\u0027, \u0027find\u0027, \u0027bye\u0027\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for an invalid task description exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for an invalid task description exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"ldinghan"},"content":" public static String invalidDescriptionExceptionReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"ldinghan"},"content":" return \"Ding: I may be forgetful but you\u0027re so bad you even forgot the task description...\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"ldinghan"},"content":" + \"Ding: For ToDos, input \u0027todo (task)\u0027\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"ldinghan"},"content":" + \"Ding: For Deadlines, input \u0027deadline (task) /by (date or time)\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"ldinghan"},"content":" + \"Ding: For Events, input \u0027event (task) /from (date or time) /to (date or time)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for an invalid task index exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for an invalid task index exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"ldinghan"},"content":" public static String invalidTaskIndexExceptionReply(TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"ldinghan"},"content":" String startOfReply \u003d \"Ding: Oh wait it\u0027s not lost, \\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"ldinghan"},"content":" + \"the task number you gave just doesn\u0027t exist in your list...\";","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"ldinghan"},"content":" if (tasks.getSize() \u003e 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"ldinghan"},"content":" startOfReply +\u003d String.format(\"Ding: Please input a task number from 1 to %d\", tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"ldinghan"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"ldinghan"},"content":" startOfReply +\u003d \"Ding: You have nothing in your task list... \"","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"ldinghan"},"content":" + \"What are you even trying to get me to do?\";","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"ldinghan"},"content":" return startOfReply;","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for a missing task index exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for a missing task index exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"ldinghan"},"content":" public static String missingTaskIndexExceptionReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"ldinghan"},"content":" return \"Ding: I don\u0027t quite understand what you want to do...\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"ldinghan"},"content":" + \"Ding: Please input \u0027(command) (task number)\u0027...\";","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for an invalid date-time format exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for an invalid date-time format exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"ldinghan"},"content":" public static String invalidDateTimeExceptionReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"ldinghan"},"content":" return \"Ding: I already told you... \\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"ldinghan"},"content":" + \"please enter the timestamps in this format \u0027YYYY-MM-DD HH:mm\u0027\";","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for an invalid keyword exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":172,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for an invalid keyword exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"ldinghan"},"content":" public static String invalidKeywordExceptionReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"ldinghan"},"content":" return \"Ding: Please use the format \u0027find (keyword)\u0027 so I that can help you look around\";","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":177}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"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-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"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-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"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-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"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-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"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-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":19}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" * Represents a test class for Parser","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Tests parsing of input string to a Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" public void testStringToTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" Task deadline \u003d Parser.parseStringToTask(\"deadline Assignment 0 /by 2023-09-04 23:59\", \"deadline\");","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" assertEquals(new Deadline(\"Assignment 0\", LocalDate.parse(\"2023-09-04\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" LocalTime.parse(\"23:59\")).toString(), deadline.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" public void testParseInvalidTaskIndex() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" Parser.taskToDelete(\"delete 2\", new TaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" fail();","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" assertEquals(\"Invalid Task Index.\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":43}},{"path":"src/test/java/duke/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Represents a test class for ToDo","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Tests string conversion of ToDo to a string.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" public void testToString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" assertEquals(\"[T][ ] Sleep\", new ToDo(\"Sleep\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" * Tests marking and unmarking of ToDo.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public void testMarkDoneAndUndone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" ToDo todo \u003d new ToDo(\"Run\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" assertEquals(\"[T][X] Run\", todo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" todo.markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" assertEquals(\"[T][ ] Run\", todo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":31}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"todo go to the library","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"deadline sleep and shower /by 10pm","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"event visit the museum /from Wed 10am /to Wed 1pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"deadline return book /by Sat 10pm","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":10}},{"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":"ldinghan"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"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":{"ldinghan":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ldinghan":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":"ldinghan"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"javafx {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" version \u003d \"20\"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"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":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ldinghan":26,"-":42}},{"path":"data/ding.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"[T][X] ab","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"[T][ ] hei","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"ldinghan":2}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * The main class for the Ding Chatbot application.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"public class Duke {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" private Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * Constructs a new instance of the duke.Duke class.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" * Initializes the storage and task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" storage \u003d new Storage(\"./data\", \"./data/ding.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" tasks \u003d storage.getTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * Gets a response from the chatbot for the given user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @return The chatbot\u0027s response.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" String output;","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" Command command \u003d Parser.getCommand(userInput, storage, tasks, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" output \u003d command.execute(storage, tasks, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ldinghan":41,"-":1}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * The `Main` class serves as the entry point for the Ding chatbot application with a graphical user interface (GUI).","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * It initializes Duke, loads the GUI using JavaFX and FXML, and displays the main application window.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * This class extends the JavaFX `Application` class and is responsible for launching the GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" private Duke ding;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * Constructs a new `Main` object and initializes the Duke chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public Main() {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" ding \u003d new Duke();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * The `start` method, required by JavaFX, initializes the GUI by loading the FXML layout and setting up the","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * main application window. It also associates the Ding chatbot","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * with the GUI controller and displays a welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param stage The primary stage for the JavaFX application.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" stage.setTitle(\"Ding\");","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(ding);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().showWelcome();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":50}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" private Duke ding;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/dauser.jpeg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/daduke.jpeg\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" public void initialize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * Sets the Duke chatbot for this GUI.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @param d The Duke chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" ding \u003d d;","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Ding\u0027s reply and then appends them to","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" String response \u003d ding.getResponse(input.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" * Displays a welcome message in the dialog container when the application starts.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(Ui.introReply(), dukeImage));","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":63}},{"path":"src/main/java/duke/commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * The `ByeCommand` class represents a command to exit the Duke chatbot application.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * It is responsible for saving task data and generating a farewell message.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" * Executes the \"Bye\" command. It saves the current task data to storage and returns a farewell message.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" * @return A farewell message indicating the application is exiting.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" return ui.exitReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":26}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * The abstract `Command` class serves as the base class for all specific commands in the Duke chatbot application.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Subclasses should implement the `execute` method to define the behavior of individual commands.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Executes the specific behavior associated with this command.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of executing the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" public abstract String execute(Storage storage, TaskList taskList, Ui ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ldinghan":22}},{"path":"src/main/java/duke/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * Parses the user input to create a deadline task and adds it to the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Constructs a new DeadlineCommand with the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string for creating the deadline task.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public DeadlineCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" * Executes the DeadlineCommand. Parses the user input to create a deadline task,","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * adds it to the task list, and updates the storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of the add task operation.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDescriptionException If the task description is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDateTimeException If the task date and time are invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(Parser.parseInputToTask(userInput, \"deadline\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" return ui.addTaskReply(userInput, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDescriptionException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDescriptionExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDateTimeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDateTimeExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":49}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.MissingTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Parses the user input to determine which task to delete and removes it from the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Constructs a new DeleteCommand with the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string for specifying the task to delete.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public DeleteCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * Executes the DeleteCommand. Parses the user input to determine which task to delete,","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * removes it from the task list, and updates the storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of the delete task operation.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" * @throws MissingTaskIndexException If the task index is missing in the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidTaskIndexException If the task index is invalid (out of range).","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" String output \u003d ui.deleteTaskReply(Parser.taskToDelete(userInput, taskList), taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (MissingTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.missingTaskIndexExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" return ui.invalidTaskIndexExceptionReply(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":54}},{"path":"src/main/java/duke/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * Parses the user input to create an event task and adds it to the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Constructs a new EventCommand with the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string containing details of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public EventCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" * Executes the EventCommand. Parses the user input to create an event task,","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * adds it to the task list, and updates the storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of adding the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDescriptionException If the task description is missing or invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDateTimeException If the event date and time are missing or in an invalid format.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(Parser.parseInputToTask(userInput, \"event\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" return ui.addTaskReply(userInput, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDescriptionException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDescriptionExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDateTimeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDateTimeExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":49}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidKeywordException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" * The `FindCommand` class represents a command for finding tasks that match a keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * It is responsible for parsing the user input to extract the keyword and then finding","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * tasks that contain that keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Constructs a new `FindCommand` object with the specified user input containing the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string containing the keyword for task searching.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public FindCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" * Executes the \"Find\" command. It attempts to find tasks in the task list that match the specified keyword,","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * and returns a response message containing the found tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list to search for matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @return A response message containing the tasks that match the specified keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" return ui.findTaskReply(userInput, Parser.findKeyword(userInput, taskList));","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidKeywordException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" return ui.invalidKeywordExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":43}},{"path":"src/main/java/duke/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * The `InvalidCommand` class represents a command that is not recognized or valid.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * It is responsible for providing a response message indicating that the user input","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" * does not correspond to a valid command.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * Executes the \"Invalid\" command. It provides a response message indicating that the","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" * user input is not recognized as a valid command.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list (not used in this command).","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying error messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating that the user input is not a valid command.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" return ui.illegalArgumentExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":27}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * The `ListCommand` class represents a command to list all tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * It is responsible for retrieving the list of tasks from the task list,","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" * formatting them, and providing a response message.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" * Executes the \"List\" command. It retrieves the list of tasks from the task list,","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * formats them into a response message, and returns the message to be displayed to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @return A response message containing the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" return ui.printListReply(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":25}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.MissingTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * The `MarkCommand` class represents a command to mark a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * It is responsible for parsing the user input, marking the specified task as done in the task list,","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * updating the storage, and providing a response message.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Constructs a new `MarkCommand` object with the given user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string containing the \"Mark\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public MarkCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * Executes the \"Mark\" command. It attempts to mark the specified task as done, updates the storage,","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * and returns a response message indicating the result.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of the \"Mark\" operation.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" String output \u003d ui.markTaskReply(Parser.taskToMark(userInput, taskList), taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" } catch (MissingTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return ui.missingTaskIndexExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.invalidTaskIndexExceptionReply(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":49}},{"path":"src/main/java/duke/commands/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * The `ToDoCommand` class represents a command to add a new \"To-Do\" task.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * It is responsible for parsing the user input, creating a new task, adding it to the task list,","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * updating the storage, and providing a response message.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Constructs a new `ToDoCommand` object with the given user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string containing the \"To-Do\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public ToDoCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * Executes the \"To-Do\" command. It attempts to create a new \"To-Do\" task based on the user input,","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * adds it to the task list, updates the storage, and returns a response message indicating the result.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of the \"To-Do\" task addition.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(Parser.parseInputToTask(userInput, \"todo\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" return ui.addTaskReply(userInput, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDescriptionException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDescriptionExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidDateTimeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.invalidDateTimeExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":49}},{"path":"src/main/java/duke/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.MissingTaskIndexException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * The `UnmarkCommand` class represents a command to unmark a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * It is responsible for parsing the user input, executing the unmark operation on the task list,","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * updating the storage, and providing a response message.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" private String userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Constructs a new `UnmarkCommand` object with the given user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string containing the unmark command.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public UnmarkCommand(String userInput) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * Executes the unmark command. It attempts to unmark the specified task as undone, updates the storage,","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * and returns a response message indicating the result.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * @param taskList The task list containing the tasks to be operated on.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @param ui The user interface for displaying messages to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * @return A response message indicating the result of the unmark operation.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" public String execute(Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" String output \u003d ui.unmarkTaskReply(Parser.taskToUnmark(userInput, taskList), taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" storage.updateStorage(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" } catch (MissingTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" return ui.missingTaskIndexExceptionReply();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" return ui.invalidTaskIndexExceptionReply(taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":51}},{"path":"src/main/java/duke/exceptions/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * An exception class that represents an invalid task description in a task management application.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This exception is thrown when an operation encounters an invalid or empty task description.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class InvalidDateTimeException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Constructs an duke.exceptions.InvalidDateTimeException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * @param message The detail message explaining the cause of the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" public InvalidDateTimeException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ldinghan":16}},{"path":"src/main/java/duke/exceptions/InvalidDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * An exception class that represents an invalid task description in a task management application.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This exception is thrown when an operation encounters an invalid or empty task description.","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class InvalidDescriptionException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Constructs an duke.exceptions.InvalidDescriptionException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * @param message The detail message explaining the cause of the exception.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" public InvalidDescriptionException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":16}},{"path":"src/main/java/duke/exceptions/InvalidKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * An exception class that represents an invalid keyword exception when finding relevant tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This exception is thrown when an operation expects a valid keyword but none is provided, or if there","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" * is more than 1 keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"public class InvalidKeywordException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" * Constructs a duke.exceptions.InvalidKeywordException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * @param message The detail message explaining the cause of the exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" public InvalidKeywordException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":17}},{"path":"src/main/java/duke/exceptions/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * An exception class that represents an invalid task index in a task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This exception is thrown when an operation encounters an index that is out of bounds or not valid.","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class InvalidTaskIndexException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Constructs an duke.exceptions.InvalidTaskIndexException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * @param message The detail message explaining the cause of the exception.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" public InvalidTaskIndexException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":16}},{"path":"src/main/java/duke/exceptions/MissingTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * An exception class that represents a missing task index in a task list.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This exception is thrown when an operation expects a valid task index but none is provided.","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class MissingTaskIndexException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Constructs a duke.exceptions.MissingTaskIndexException with the specified detail message.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * @param message The detail message explaining the cause of the exception.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" public MissingTaskIndexException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":16}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import duke.commands.ByeCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import duke.commands.DeadlineCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"import duke.commands.DeleteCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"import duke.commands.EventCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"import duke.commands.InvalidCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"import duke.commands.MarkCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"import duke.commands.ToDoCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"import duke.commands.UnmarkCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDateTimeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidDescriptionException;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidKeywordException;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.InvalidTaskIndexException;","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":"import duke.exceptions.MissingTaskIndexException;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * The duke.parser.Parser class is responsible for parsing user input and","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" * converting it into meaningful commands and tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" * Parses an input from user to get duke.commands.Command.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" * @return The parsed command.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" public static Command getCommand(String str, Storage storage, TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" String commandWord \u003d str.split(\" \")[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" case \"list\":","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" case \"mark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" return new MarkCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" return new UnmarkCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" return new ToDoCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":" return new DeadlineCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" return new EventCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" case \"delete\":","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" return new DeleteCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" case \"find\":","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" return new FindCommand(str);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" case \"bye\":","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"ldinghan"},"content":" * Extracts the task index from a user input string and marks the task as done or undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"ldinghan"},"content":" * @return The index of the task that was marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidTaskIndexException If the task index is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"ldinghan"},"content":" * @throws MissingTaskIndexException If the task index is missing.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"ldinghan"},"content":" public static int taskToMark(String str, TaskList tasks)","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"ldinghan"},"content":" throws InvalidTaskIndexException, MissingTaskIndexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length !\u003d 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"ldinghan"},"content":" throw new MissingTaskIndexException(\"Task Index Missing.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"ldinghan"},"content":" int taskIndex \u003d Integer.parseInt(str.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ldinghan"},"content":" if (taskIndex + 1 \u003e tasks.getSize() || taskIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ldinghan"},"content":" throw new InvalidTaskIndexException(\"Invalid Task Index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"ldinghan"},"content":" tasks.markTaskAsDone(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"ldinghan"},"content":" return taskIndex;","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"ldinghan"},"content":" * Parses a user input string to get the index of a task to unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"ldinghan"},"content":" * @return The index of the task that was marked as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidTaskIndexException If the task index is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"ldinghan"},"content":" * @throws MissingTaskIndexException If the task index is missing.","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"ldinghan"},"content":" public static int taskToUnmark(String str, TaskList tasks)","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"ldinghan"},"content":" throws InvalidTaskIndexException, MissingTaskIndexException {","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length !\u003d 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"ldinghan"},"content":" throw new MissingTaskIndexException(\"Task Index Missing.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"ldinghan"},"content":" int taskIndex \u003d Integer.parseInt(str.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"ldinghan"},"content":" if (taskIndex + 1 \u003e tasks.getSize() || taskIndex \u003c 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"ldinghan"},"content":" throw new InvalidTaskIndexException(\"Invalid Task Index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"ldinghan"},"content":" tasks.markTaskAsUndone(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"ldinghan"},"content":" return taskIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"ldinghan"},"content":" * Extracts the keyword from user input and finds tasks with the specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"ldinghan"},"content":" * @return A TaskList of tasks containing the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidKeywordException If the keyword is missing, or if there is more than 1 keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"ldinghan"},"content":" public static TaskList findKeyword(String str, TaskList tasks) throws InvalidKeywordException {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length !\u003d 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"ldinghan"},"content":" throw new InvalidKeywordException(\"Keyword given is not a single word.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"ldinghan"},"content":" String keyword \u003d str.split(\" \")[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"ldinghan"},"content":" return tasks.findTask(keyword);","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"ldinghan"},"content":" * Extracts the task index from a user input string and deletes the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"ldinghan"},"content":" * @return The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidTaskIndexException If the task index is invalid.","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"ldinghan"},"content":" * @throws MissingTaskIndexException If the task index is missing.","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"ldinghan"},"content":" public static Task taskToDelete(String str, TaskList tasks)","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"ldinghan"},"content":" throws InvalidTaskIndexException, MissingTaskIndexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"ldinghan"},"content":" if (str.split(\" \").length !\u003d 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":142,"author":{"gitId":"ldinghan"},"content":" throw new MissingTaskIndexException(\"Task Index Missing.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":144,"author":{"gitId":"ldinghan"},"content":" int taskIndex \u003d Integer.parseInt(str.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"ldinghan"},"content":" if (taskIndex + 1 \u003e tasks.getSize() || taskIndex \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"ldinghan"},"content":" throw new InvalidTaskIndexException(\"Invalid Task Index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"ldinghan"},"content":" Task toRemove \u003d tasks.getTask(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"ldinghan"},"content":" tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"ldinghan"},"content":" return toRemove;","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"ldinghan"},"content":" * Creates a ToDo task based on data from storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"ldinghan"},"content":" * @param storageText The stored text data.","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"ldinghan"},"content":" * @return A ToDo task from storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"ldinghan"},"content":" public static Task parseStorageToToDo(String storageText) {","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"ldinghan"},"content":" boolean isMarked \u003d storageText.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"ldinghan"},"content":" String description \u003d storageText.split(\"] \")[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"ldinghan"},"content":" ToDo taskT \u003d new ToDo(description);","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"ldinghan"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"ldinghan"},"content":" taskT.markAsDone();","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"ldinghan"},"content":" return taskT;","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"ldinghan"},"content":" * Creates a Deadline task based on data from storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"ldinghan"},"content":" * @param storageText The stored text data.","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"ldinghan"},"content":" * @return A Deadline task from storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"ldinghan"},"content":" public static Task parseStorageToDeadline(String storageText) {","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"ldinghan"},"content":" boolean isMarked \u003d storageText.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-16"},{"lineNumber":177,"author":{"gitId":"ldinghan"},"content":" String description \u003d storageText.split(\"] \")[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"ldinghan"},"content":" description \u003d description.split(\" \\\\(by: \")[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"ldinghan"},"content":" String by \u003d storageText.split(\" \\\\(by: \")[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":180,"author":{"gitId":"ldinghan"},"content":" LocalDate date \u003d LocalDate.parse(by.split(\" \")[0]);","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"ldinghan"},"content":" LocalTime time \u003d LocalTime.parse(by.split(\" \")[1].replaceAll(\".$\", \"\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":182,"author":{"gitId":"ldinghan"},"content":" Deadline taskD \u003d new Deadline(description, date, time);","lastModifiedDate":"2023-09-16"},{"lineNumber":183,"author":{"gitId":"ldinghan"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"ldinghan"},"content":" taskD.markAsDone();","lastModifiedDate":"2023-09-16"},{"lineNumber":185,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"ldinghan"},"content":" return taskD;","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"ldinghan"},"content":" * Creates an Event task based on data from storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"ldinghan"},"content":" * @param storageText The stored text data.","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"ldinghan"},"content":" * @return An Event task from storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":195,"author":{"gitId":"ldinghan"},"content":" public static Task parseStorageToEvent(String storageText) {","lastModifiedDate":"2023-09-16"},{"lineNumber":196,"author":{"gitId":"ldinghan"},"content":" boolean isMarked \u003d storageText.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"ldinghan"},"content":" String description \u003d storageText.split(\"] \")[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":198,"author":{"gitId":"ldinghan"},"content":" description \u003d description.split(\" \\\\(from: \")[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":199,"author":{"gitId":"ldinghan"},"content":" String from \u003d String.join(\"\", storageText.split(\"\\\\(from: \")[1]).split(\" to: \")[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":200,"author":{"gitId":"ldinghan"},"content":" String to \u003d storageText.split(\" to: \")[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":201,"author":{"gitId":"ldinghan"},"content":" LocalDate fromDate \u003d LocalDate.parse(from.split(\" \")[0]);","lastModifiedDate":"2023-09-16"},{"lineNumber":202,"author":{"gitId":"ldinghan"},"content":" LocalTime fromTime \u003d LocalTime.parse(from.split(\" \")[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":203,"author":{"gitId":"ldinghan"},"content":" LocalDate toDate \u003d LocalDate.parse(to.split(\" \")[0]);","lastModifiedDate":"2023-09-16"},{"lineNumber":204,"author":{"gitId":"ldinghan"},"content":" LocalTime toTime \u003d LocalTime.parse(to.split(\" \")[1].replaceAll(\".$\", \"\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":205,"author":{"gitId":"ldinghan"},"content":" Event taskE \u003d new Event(description, fromDate, fromTime, toDate, toTime);","lastModifiedDate":"2023-09-16"},{"lineNumber":206,"author":{"gitId":"ldinghan"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-16"},{"lineNumber":207,"author":{"gitId":"ldinghan"},"content":" taskE.markAsDone();","lastModifiedDate":"2023-09-16"},{"lineNumber":208,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":209,"author":{"gitId":"ldinghan"},"content":" return taskE;","lastModifiedDate":"2023-09-16"},{"lineNumber":210,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":211,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":212,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":213,"author":{"gitId":"ldinghan"},"content":" * Creates a ToDo task based on data from user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":214,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string.","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"ldinghan"},"content":" * @return A ToDo task from user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":218,"author":{"gitId":"ldinghan"},"content":" public static Task parseInputToToDo(String userInput) {","lastModifiedDate":"2023-09-16"},{"lineNumber":219,"author":{"gitId":"ldinghan"},"content":" ToDo todo \u003d new ToDo(userInput.split(\" \")[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"ldinghan"},"content":" return todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":221,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":223,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":224,"author":{"gitId":"ldinghan"},"content":" * Creates a Deadline task based on data from user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":225,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":226,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string.","lastModifiedDate":"2023-09-16"},{"lineNumber":227,"author":{"gitId":"ldinghan"},"content":" * @return A Deadline task from user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":228,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":229,"author":{"gitId":"ldinghan"},"content":" public static Task parseInputToDeadline(String userInput) throws InvalidDateTimeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":230,"author":{"gitId":"ldinghan"},"content":" String fullTaskDescription \u003d userInput.split(\" \", 2)[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":231,"author":{"gitId":"ldinghan"},"content":" String description \u003d fullTaskDescription.split(\" /by \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"ldinghan"},"content":" String by \u003d fullTaskDescription.split(\" /by \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"ldinghan"},"content":" String[] datetime \u003d by.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":234,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":235,"author":{"gitId":"ldinghan"},"content":" LocalDate date \u003d LocalDate.parse(datetime[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":236,"author":{"gitId":"ldinghan"},"content":" LocalTime time \u003d LocalTime.parse(datetime[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":237,"author":{"gitId":"ldinghan"},"content":" Deadline deadline \u003d new Deadline(description, date, time);","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"ldinghan"},"content":" return deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"ldinghan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"ldinghan"},"content":" throw new InvalidDateTimeException(\"Invalid Datetime.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":244,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":245,"author":{"gitId":"ldinghan"},"content":" * Creates an Event task based on data from user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":246,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":247,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string.","lastModifiedDate":"2023-09-16"},{"lineNumber":248,"author":{"gitId":"ldinghan"},"content":" * @return An Event task from user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":249,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":250,"author":{"gitId":"ldinghan"},"content":" public static Task parseInputToEvent(String userInput) throws InvalidDateTimeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":251,"author":{"gitId":"ldinghan"},"content":" String fullTaskDescription \u003d userInput.split(\" \", 2)[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":252,"author":{"gitId":"ldinghan"},"content":" String description \u003d fullTaskDescription.split(\" /from \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"ldinghan"},"content":" String from \u003d String.join(\"\", fullTaskDescription.split(\" /from \")[1]).split(\" /to \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":254,"author":{"gitId":"ldinghan"},"content":" String to \u003d fullTaskDescription.split(\" /to \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"ldinghan"},"content":" String[] fromDatetime \u003d from.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"ldinghan"},"content":" String[] toDatetime \u003d to.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"ldinghan"},"content":" LocalDate fromDate \u003d LocalDate.parse(fromDatetime[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"ldinghan"},"content":" LocalTime fromTime \u003d LocalTime.parse(fromDatetime[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"ldinghan"},"content":" LocalDate toDate \u003d LocalDate.parse(toDatetime[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"ldinghan"},"content":" LocalTime toTime \u003d LocalTime.parse(toDatetime[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"ldinghan"},"content":" Event event \u003d new Event(description, fromDate, fromTime, toDate, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"ldinghan"},"content":" return event;","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"ldinghan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":265,"author":{"gitId":"ldinghan"},"content":" throw new InvalidDateTimeException(\"Invalid Datetime\");","lastModifiedDate":"2023-09-02"},{"lineNumber":266,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":267,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":268,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":269,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":270,"author":{"gitId":"ldinghan"},"content":" * Parses a user input string into a task.","lastModifiedDate":"2023-09-16"},{"lineNumber":271,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":272,"author":{"gitId":"ldinghan"},"content":" * @param userInput The user input string.","lastModifiedDate":"2023-09-16"},{"lineNumber":273,"author":{"gitId":"ldinghan"},"content":" * @return The parsed task.","lastModifiedDate":"2023-09-16"},{"lineNumber":274,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDescriptionException If the task description is invalid.","lastModifiedDate":"2023-09-16"},{"lineNumber":275,"author":{"gitId":"ldinghan"},"content":" * @throws InvalidDateTimeException If the task date and time are invalid.","lastModifiedDate":"2023-09-16"},{"lineNumber":276,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":277,"author":{"gitId":"ldinghan"},"content":" public static Task parseInputToTask(String userInput, String commandWord)","lastModifiedDate":"2023-09-16"},{"lineNumber":278,"author":{"gitId":"ldinghan"},"content":" throws InvalidDescriptionException, InvalidDateTimeException {","lastModifiedDate":"2023-09-16"},{"lineNumber":279,"author":{"gitId":"ldinghan"},"content":" switch(commandWord) {","lastModifiedDate":"2023-09-16"},{"lineNumber":280,"author":{"gitId":"ldinghan"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":281,"author":{"gitId":"ldinghan"},"content":" if (userInput.split(\" \").length \u003c\u003d 1) {","lastModifiedDate":"2023-09-16"},{"lineNumber":282,"author":{"gitId":"ldinghan"},"content":" throw new InvalidDescriptionException(\"Invalid description.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":283,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":284,"author":{"gitId":"ldinghan"},"content":" return parseInputToToDo(userInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":285,"author":{"gitId":"ldinghan"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":286,"author":{"gitId":"ldinghan"},"content":" if (userInput.split(\" \").length \u003c\u003d 3) {","lastModifiedDate":"2023-09-16"},{"lineNumber":287,"author":{"gitId":"ldinghan"},"content":" throw new InvalidDescriptionException(\"Invalid description.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":288,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":289,"author":{"gitId":"ldinghan"},"content":" return parseInputToDeadline(userInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":290,"author":{"gitId":"ldinghan"},"content":" case \"event\":","lastModifiedDate":"2023-09-16"},{"lineNumber":291,"author":{"gitId":"ldinghan"},"content":" if (userInput.split(\" \").length \u003c\u003d 4) {","lastModifiedDate":"2023-09-16"},{"lineNumber":292,"author":{"gitId":"ldinghan"},"content":" throw new InvalidDescriptionException(\"Invalid description.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":293,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":294,"author":{"gitId":"ldinghan"},"content":" return parseInputToEvent(userInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":295,"author":{"gitId":"ldinghan"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":296,"author":{"gitId":"ldinghan"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":297,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":298,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":299,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":299}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * Manages the storage of tasks in a txt file.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" protected String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" protected String directoryPath;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * Initializes a new instance of the duke.storage.Storage class.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" * @param directoryPath The directory where the storage file is located or should be created.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" * @param filePath The file path of the storage file.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" public Storage(String directoryPath, String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" this.directoryPath \u003d directoryPath;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" this.setupTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" * Updates the storage file with the tasks from the provided duke.tasks.TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" * @param tasks The duke.tasks.TaskList containing tasks to be saved to the storage file.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" public void updateStorage(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" writer.write(tasks.getTask(i) + System.lineSeparator());","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" writer.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" * Sets up the tasks by reading from the storage file or creating a new one if it doesn\u0027t exist.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":" * @return A duke.tasks.TaskList containing the tasks read from the storage file, or an empty","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" * duke.tasks.TaskList if the file is new.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" private TaskList setupTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" File directory \u003d new File(directoryPath);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" directory.mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" File taskFile \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" if (!taskFile.createNewFile()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":" tasks \u003d getTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"ldinghan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"ldinghan"},"content":" System.out.println(\"Error occurred\");","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"ldinghan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"ldinghan"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"ldinghan"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"ldinghan"},"content":" * Retrieves tasks from the storage file and returns them in a duke.tasks.TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"ldinghan"},"content":" * @return A duke.tasks.TaskList containing tasks read from the storage file.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"ldinghan"},"content":" public TaskList getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"ldinghan"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ldinghan"},"content":" Scanner scanner \u003d new Scanner(new File(filePath));","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ldinghan"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"ldinghan"},"content":" String storageText \u003d scanner.nextLine();","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"ldinghan"},"content":" char taskType \u003d storageText.charAt(1);","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"ldinghan"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"ldinghan"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(Parser.parseStorageToToDo(storageText));","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"ldinghan"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"ldinghan"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(Parser.parseStorageToDeadline(storageText));","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"ldinghan"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"ldinghan"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"ldinghan"},"content":" taskList.addTask(Parser.parseStorageToEvent(storageText));","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"ldinghan"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"ldinghan"},"content":" default:","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"ldinghan"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"ldinghan"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"ldinghan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"ldinghan"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"ldinghan"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"ldinghan"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":110}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" * Represents a task with a specific deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * This class extends the duke.tasks.Task class and adds a deadline to it.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * The deadline for this task.","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" protected String by;","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" protected LocalDate byDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" protected LocalTime byTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Constructs a duke.tasks.Deadline object with the given description and deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" * @param byDate The date deadline for the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @param byTime The time deadline for the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public Deadline(String description, LocalDate byDate, LocalTime byTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" this.byDate \u003d byDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" this.byTime \u003d byTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" this.by \u003d byDate.toString() + \" \" + byTime.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * Returns a string representation of the duke.tasks.Deadline object.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" * @return A formatted string including the task type, description, and deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":40}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" * Represents an event task that occurs within a specified time range.","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" * This class extends the duke.tasks.Task class and adds the event\u0027s start and end times.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * The start time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" protected LocalDate fromDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" protected LocalTime fromTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" * The end time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" protected LocalDate toDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" protected LocalTime toTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" protected String from;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" * Constructs an duke.tasks.Event object with the given description, start date and time, and end date and time.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * @param fromDate The start date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * @param fromTime The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * @param toDate The end date of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * @param toTime The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" public Event(String description, LocalDate fromDate, LocalTime fromTime, LocalDate toDate, LocalTime toTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" this.fromDate \u003d fromDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" this.fromTime \u003d fromTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" this.toDate \u003d toDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" this.toTime \u003d toTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" this.from \u003d fromDate.toString() + \" \" + fromTime.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" this.to \u003d toDate.toString() + \" \" + toTime.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" * Returns a string representation of the duke.tasks.Event object.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" * @return A formatted string including the task type, description, start time, and end time.","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":52}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This class provides basic functionality for managing tasks.","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Indicates whether the task is done or not.","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Constructs a duke.tasks.Task object with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" return this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" * Returns an icon representing the completion status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" * @return An \"X\" if the task is done, or a space if it\u0027s not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" * Returns a string representation of the duke.tasks.Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" * @return A formatted string including the completion status icon and description.","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ldinghan":67}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Initialises a new instance of the duke.tasks.TaskList class.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Gets the number of tasks in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" * Gets the task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" * @param task The task to add to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" * Deletes a task from the list at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" * @param index The index of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" * Marks a task at the specified index as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":" * @param index The index of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" * Marks a task at the specified index as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"ldinghan"},"content":" * @param index The index of the task to mark as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"ldinghan"},"content":" public void markTaskAsUndone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"ldinghan"},"content":" this.tasks.get(index).markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"ldinghan"},"content":" * Creates a TaskList that contains the specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"ldinghan"},"content":" * @param keyword The keyword that is searched for in the TaskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"ldinghan"},"content":" * @return A TaskList that contains the specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"ldinghan"},"content":" public TaskList findTask(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"ldinghan"},"content":" TaskList tempTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"ldinghan"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"ldinghan"},"content":" Task task \u003d this.tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"ldinghan"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ldinghan"},"content":" tempTaskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"ldinghan"},"content":" return tempTaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"ldinghan"},"content":" * Returns a string representation of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"ldinghan"},"content":" * @return A string representation of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"ldinghan"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"ldinghan"},"content":" ArrayList\u003cString\u003e allTaskStrings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"ldinghan"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"ldinghan"},"content":" String taskString \u003d String.format(\"%d. %s\", i + 1, this.tasks.get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"ldinghan"},"content":" allTaskStrings.add(taskString);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"ldinghan"},"content":" return String.join(\"\\n\", allTaskStrings);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":107}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":" * Represents a to-do task without any specific time constraints.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":" * This class extends the duke.tasks.Task class and represents a simple to-do item.","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Constructs a duke.tasks.ToDo object with the given description.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" * Returns a string representation of the duke.tasks.ToDo object.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * @return A formatted string including the task type and description.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":26}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":" * The duke.ui.Ui class is responsible for managing user interactions and displaying messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" * Displays a reply after adding a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" * @return The reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" public static String addTaskReply(String str, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" return String.format(\"Ding: What does \u0027%s\u0027 mean? I\u0027ll just add it anyway.\\n \"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" + \"You have like %d tasks now\", str, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" * Displays a reply after marking a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" * @param taskIndex The index of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" * @return The reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" public static String markTaskReply(int taskIndex, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" return String.format(\"Ding: Okay, I marked this task as done, \"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":" + \"but I have no idea what that means:\\n %s\", tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" * Displays a reply after marking a task as undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" * @param taskIndex The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" * @return The reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":" public static String unmarkTaskReply(int taskIndex, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":" return String.format(\"Ding: Okay, I marked this task as undone, \"","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ldinghan"},"content":" + \"but I have no idea what that means:\\n %s\", tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ldinghan"},"content":" * Displays a reply after deleting a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ldinghan"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ldinghan"},"content":" * @return The reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"ldinghan"},"content":" public static String deleteTaskReply(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ldinghan"},"content":" return String.format(\"Ding: Okay, I\u0027ve forgotten this task, \\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ldinghan"},"content":" + \"so don\u0027t expect me to remember it:\\n %s\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ldinghan"},"content":" + \"Ding: Right so now you have like %d tasks left\", task, tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"ldinghan"},"content":" * Displays a reply when exiting the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"ldinghan"},"content":" * @return The exit reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"ldinghan"},"content":" public static String exitReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"ldinghan"},"content":" return \"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"ldinghan"},"content":" + \"Ding: Bye. Hopefully I get to see you again soon!\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"ldinghan"},"content":" + \"____________________________________________________________\";","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"ldinghan"},"content":" * Displays an introductory message when starting the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"ldinghan"},"content":" * @return The introductory reply message.","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"ldinghan"},"content":" public static String introReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"ldinghan"},"content":" return \"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"ldinghan"},"content":" + \"Hello! I\u0027m Ding!\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"ldinghan"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"ldinghan"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"ldinghan"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks to display.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"ldinghan"},"content":" * @return The reply message containing the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"ldinghan"},"content":" public static String printListReply(TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"ldinghan"},"content":" return String.format(\"Ding: These are your tasks... \"","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"ldinghan"},"content":" + \"If I remember correctly:\\n%s\\n\", tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for finding tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"ldinghan"},"content":" * @param str The user input containing the keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks to display.","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"ldinghan"},"content":" * @return The reply message containing the found tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"ldinghan"},"content":" public static String findTaskReply(String str, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"ldinghan"},"content":" return String.format(\"I will help you %s\\n\", str)","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"ldinghan"},"content":" + printListReply(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for an illegal argument exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for an illegal argument exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"ldinghan"},"content":" public static String illegalArgumentExceptionReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"ldinghan"},"content":" return \"Ding: I seriously have no idea what I need to do here\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"ldinghan"},"content":" + \"Ding: No way you forgot to even input a proper command...\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"ldinghan"},"content":" + \"Ding: Available commands are \u0027todo\u0027, \u0027deadline\u0027, \u0027event\u0027, \\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"ldinghan"},"content":" + \"\u0027list\u0027, \u0027mark\u0027, \u0027unmark\u0027, \u0027delete\u0027, \u0027find\u0027, \u0027bye\u0027\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for an invalid task description exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for an invalid task description exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"ldinghan"},"content":" public static String invalidDescriptionExceptionReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"ldinghan"},"content":" return \"Ding: I may be forgetful but you\u0027re so bad you even forgot the task description...\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"ldinghan"},"content":" + \"Ding: For ToDos, input \u0027todo (task)\u0027\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"ldinghan"},"content":" + \"Ding: For Deadlines, input \u0027deadline (task) /by (date or time)\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"ldinghan"},"content":" + \"Ding: For Events, input \u0027event (task) /from (date or time) /to (date or time)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for an invalid task index exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"ldinghan"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for an invalid task index exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"ldinghan"},"content":" public static String invalidTaskIndexExceptionReply(TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"ldinghan"},"content":" String startOfReply \u003d \"Ding: Oh wait it\u0027s not lost, \\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"ldinghan"},"content":" + \"the task number you gave just doesn\u0027t exist in your list...\";","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"ldinghan"},"content":" if (tasks.getSize() \u003e 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"ldinghan"},"content":" startOfReply +\u003d String.format(\"Ding: Please input a task number from 1 to %d\", tasks.getSize());","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"ldinghan"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"ldinghan"},"content":" startOfReply +\u003d \"Ding: You have nothing in your task list... \"","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"ldinghan"},"content":" + \"What are you even trying to get me to do?\";","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"ldinghan"},"content":" return startOfReply;","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for a missing task index exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for a missing task index exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"ldinghan"},"content":" public static String missingTaskIndexExceptionReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"ldinghan"},"content":" return \"Ding: I don\u0027t quite understand what you want to do...\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"ldinghan"},"content":" + \"Ding: Please input \u0027(command) (task number)\u0027...\";","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for an invalid date-time format exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for an invalid date-time format exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"ldinghan"},"content":" public static String invalidDateTimeExceptionReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"ldinghan"},"content":" return \"Ding: I already told you... \\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"ldinghan"},"content":" + \"please enter the timestamps in this format \u0027YYYY-MM-DD HH:mm\u0027\";","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"ldinghan"},"content":" * Displays a reply for an invalid keyword exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"ldinghan"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":172,"author":{"gitId":"ldinghan"},"content":" * @return The reply message for an invalid keyword exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"ldinghan"},"content":" public static String invalidKeywordExceptionReply() {","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"ldinghan"},"content":" return \"Ding: Please use the format \u0027find (keyword)\u0027 so I that can help you look around\";","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":177}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"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-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"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-09"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"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-09"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"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-09"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"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-09"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ldinghan":19}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" * Represents a test class for Parser","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" * Tests parsing of input string to a Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" public void testStringToTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" Task deadline \u003d Parser.parseInputToTask(\"deadline Assignment 0 /by 2023-09-04 23:59\", \"deadline\");","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" assertEquals(new Deadline(\"Assignment 0\", LocalDate.parse(\"2023-09-04\"),","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" LocalTime.parse(\"23:59\")).toString(), deadline.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"ldinghan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"ldinghan"},"content":" public void testParseInvalidTaskIndex() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"ldinghan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"ldinghan"},"content":" Parser.taskToDelete(\"delete 2\", new TaskList());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ldinghan"},"content":" fail();","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"ldinghan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"ldinghan"},"content":" assertEquals(\"Invalid Task Index.\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":43}},{"path":"src/test/java/duke/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":" * Represents a test class for ToDo","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"ldinghan"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"ldinghan"},"content":" * Tests string conversion of ToDo to a string.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"ldinghan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"ldinghan"},"content":" public void testToString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"ldinghan"},"content":" assertEquals(\"[T][ ] Sleep\", new ToDo(\"Sleep\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"ldinghan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ldinghan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"ldinghan"},"content":" * Tests marking and unmarking of ToDo.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"ldinghan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"ldinghan"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"ldinghan"},"content":" public void testMarkDoneAndUndone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"ldinghan"},"content":" ToDo todo \u003d new ToDo(\"Run\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"ldinghan"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"ldinghan"},"content":" assertEquals(\"[T][X] Run\", todo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"ldinghan"},"content":" todo.markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"ldinghan"},"content":" assertEquals(\"[T][ ] Run\", todo.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"ldinghan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"ldinghan"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"ldinghan":31}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ldinghan"},"content":"todo go to the library","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"ldinghan"},"content":"deadline sleep and shower /by 10pm","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"ldinghan"},"content":"event visit the museum /from Wed 10am /to Wed 1pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"ldinghan"},"content":"deadline return book /by Sat 10pm","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"ldinghan"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"ldinghan"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"ldinghan"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"ldinghan"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"ldinghan"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"ldinghan"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"ldinghan":10}},{"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":"ldinghan"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"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":{"ldinghan":1,"-":20}}] diff --git a/ldinghan_ip_master/commits.json b/ldinghan_ip_master/commits.json index 5e6bfcb0..13128606 100644 --- a/ldinghan_ip_master/commits.json +++ b/ldinghan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ldinghan":[{"date":"2023-08-21","commitResults":[{"hash":"0db0fcaa9955cc9071dd3f3f10fd26a835ff4c5e","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"eeb6ea6440ef06c8adefcdce926c86fcb65c0c58","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}},{"hash":"ba641a7279cc59147e6418bdde1a0038c5ded883","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":7}}},{"hash":"d77224edafe3631c288bd902d4adc85073a37673","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":7}}}]},{"date":"2023-08-22","commitResults":[{"hash":"e9208bdcf49406ef1d2c8fb2eda833e62d47798e","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":21}}},{"hash":"e578b5f17be5cce96e13c2171ad4b59fd1b71dfd","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"e7e4754d37c63f1973cd97ca6fa87f22841d1030","isMergeCommit":false,"messageTitle":"A-Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":76}}},{"hash":"3625d04f4a8c62c9edd25f916e633f5a58a0ed36","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-08-23","commitResults":[{"hash":"0d10374bb3314ab6b5dd23e108a000d3b1bed9d8","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":31}}},{"hash":"44440507a6041002625ec6e888c57658fa628589","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":24}}},{"hash":"338ba6a08b5377dab52bb6590436e51cb9142826","isMergeCommit":false,"messageTitle":"update javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":3}}}]},{"date":"2023-08-30","commitResults":[{"hash":"dfa5cc57e16c676b594c74a17313443a14faaf2c","isMergeCommit":false,"messageTitle":"Add Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":250,"deletions":105}}},{"hash":"426a96e259eaa9c18c51e0f9b64cc2388fdd3662","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Add Save functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"46dce23057329245a1a1904dfca49e0ec078ce85","isMergeCommit":false,"messageTitle":"Add Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":88,"deletions":22}}},{"hash":"32b3f04a8ff5e0a41661cf7a04f085bda53c5a57","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"Switch datetime inputs to LocalDate and LocalTime types.\n","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"eb7d2e735dbbef4e2e7d1e371e81e869e96e3cd3","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":6},"java":{"insertions":532,"deletions":280}}},{"hash":"6fb7548174197bbc38a40c633998bed69f1c20a4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"Lacks OOP design.\n\nRefactor code to enhance OOP design.\n\nThis improves the OOP design.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b9d665d98e18e24db0cbd10268a32d00b75b500c","isMergeCommit":false,"messageTitle":"Organise files into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":30},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fab09cffd9aa5b9660ce58957684f014bf0e561e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"Does not have package structure.\n\nAdds package structure.\n\nThe files are more organised now.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"a5cad0cc85a7a08c5ae42030686618588f7465fb","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"Add gradle support.\n","fileTypesAndContributionMap":{}},{"hash":"9c25486080a90c0f4bab18bf787543085f46edcd","isMergeCommit":false,"messageTitle":"Add Gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"1352a0e370450d6f44667a4ce58d433e6e282987","isMergeCommit":false,"messageTitle":"Add Junit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":4}}},{"hash":"abc3129a4639e6b41f27a5de1f9ca3d165ca62dd","isMergeCommit":false,"messageTitle":"Modify Gradle Build file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a77221aeee0f6771bc48cb9c0f6ff3261084f8e8","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"6305f36c691f6c03f60664430e98b3c6a90e7fb9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 Add JavaDocs.","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"bac18a72fd66ef4b58d46aefed47442b6c840b6d","isMergeCommit":false,"messageTitle":"Follow Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":18}}},{"hash":"124feea66712e15af11a481d1981873ffdfe5602","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 Did not follow Coding Standard.","messageBody":"Follow Coding Standard.\n\nCode will follow Coding Standard.\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"8b4e28ae66a0dd0005be53d0aa672e836e0b9432","isMergeCommit":false,"messageTitle":"Add Find functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":83,"deletions":8}}},{"hash":"0f39ca8ea60888adcfeba789479571e7894dcdc7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 Add Find functionality.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"2c1f6257b90088773bee30cb22e8b9c5e87f2e36","isMergeCommit":false,"messageTitle":"Add \u0027find\u0027 in help command list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-07","commitResults":[{"hash":"478aa3366734653ab72e276f335c42e104be9dd0","isMergeCommit":false,"messageTitle":"Add CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":0},"java":{"insertions":125,"deletions":69}}},{"hash":"27dcef38b9597a2f0e7de37a91704f6f6a0f040f","isMergeCommit":false,"messageTitle":"Fix exception in main file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":4,"deletions":4}}},{"hash":"6b7fb6049639924cfaecd2633805027c788b081f","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":47}}}]},{"date":"2023-09-09","commitResults":[{"hash":"b13e606fc94dac33141c60c0d9faf2838e1a4c12","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":19,"deletions":0},"txt":{"insertions":2,"deletions":7},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":892,"deletions":163}}},{"hash":"3966bf2cb4fe1cd284003a94fb03a1c1b4ef8cc2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"Lacks GUI.\n\nThis merge adds GUI.\n\nThis will improve user experience.\n","fileTypesAndContributionMap":{}},{"hash":"42bc6ce4900b0de7b35508307a6fd0088e789419","isMergeCommit":true,"messageTitle":"Merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"37be4224243b203c15f0bfcd01cc586c4828ed42","isMergeCommit":false,"messageTitle":"Fix Level-10 and CheckStyle","messageBody":"","tags":["Level-10","A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":14},"txt":{"insertions":1,"deletions":15},"java":{"insertions":47,"deletions":38}}}]}]},"authorFileTypeContributionMap":{"ldinghan":{"java":1768,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":26,"txt":11}},"authorContributionVariance":{"ldinghan":119945.15},"authorDisplayNameMap":{"ldinghan":"CS2103T-T15-1 LIM .. HAN"}} +{"authorDailyContributionsMap":{"ldinghan":[{"date":"2023-08-21","commitResults":[{"hash":"0db0fcaa9955cc9071dd3f3f10fd26a835ff4c5e","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"eeb6ea6440ef06c8adefcdce926c86fcb65c0c58","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}},{"hash":"ba641a7279cc59147e6418bdde1a0038c5ded883","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":7}}},{"hash":"d77224edafe3631c288bd902d4adc85073a37673","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":7}}}]},{"date":"2023-08-22","commitResults":[{"hash":"e9208bdcf49406ef1d2c8fb2eda833e62d47798e","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":21}}},{"hash":"e578b5f17be5cce96e13c2171ad4b59fd1b71dfd","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"e7e4754d37c63f1973cd97ca6fa87f22841d1030","isMergeCommit":false,"messageTitle":"A-Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":76}}},{"hash":"3625d04f4a8c62c9edd25f916e633f5a58a0ed36","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-08-23","commitResults":[{"hash":"0d10374bb3314ab6b5dd23e108a000d3b1bed9d8","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":31}}},{"hash":"44440507a6041002625ec6e888c57658fa628589","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":24}}},{"hash":"338ba6a08b5377dab52bb6590436e51cb9142826","isMergeCommit":false,"messageTitle":"update javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":3}}}]},{"date":"2023-08-30","commitResults":[{"hash":"dfa5cc57e16c676b594c74a17313443a14faaf2c","isMergeCommit":false,"messageTitle":"Add Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":250,"deletions":105}}},{"hash":"426a96e259eaa9c18c51e0f9b64cc2388fdd3662","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Add Save functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"46dce23057329245a1a1904dfca49e0ec078ce85","isMergeCommit":false,"messageTitle":"Add Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":88,"deletions":22}}},{"hash":"32b3f04a8ff5e0a41661cf7a04f085bda53c5a57","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"Switch datetime inputs to LocalDate and LocalTime types.\n","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"eb7d2e735dbbef4e2e7d1e371e81e869e96e3cd3","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":6},"java":{"insertions":532,"deletions":280}}},{"hash":"6fb7548174197bbc38a40c633998bed69f1c20a4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"Lacks OOP design.\n\nRefactor code to enhance OOP design.\n\nThis improves the OOP design.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b9d665d98e18e24db0cbd10268a32d00b75b500c","isMergeCommit":false,"messageTitle":"Organise files into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":30},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fab09cffd9aa5b9660ce58957684f014bf0e561e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"Does not have package structure.\n\nAdds package structure.\n\nThe files are more organised now.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"a5cad0cc85a7a08c5ae42030686618588f7465fb","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"Add gradle support.\n","fileTypesAndContributionMap":{}},{"hash":"9c25486080a90c0f4bab18bf787543085f46edcd","isMergeCommit":false,"messageTitle":"Add Gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"1352a0e370450d6f44667a4ce58d433e6e282987","isMergeCommit":false,"messageTitle":"Add Junit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":4}}},{"hash":"abc3129a4639e6b41f27a5de1f9ca3d165ca62dd","isMergeCommit":false,"messageTitle":"Modify Gradle Build file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a77221aeee0f6771bc48cb9c0f6ff3261084f8e8","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"6305f36c691f6c03f60664430e98b3c6a90e7fb9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027 Add JavaDocs.","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"bac18a72fd66ef4b58d46aefed47442b6c840b6d","isMergeCommit":false,"messageTitle":"Follow Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":18}}},{"hash":"124feea66712e15af11a481d1981873ffdfe5602","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027 Did not follow Coding Standard.","messageBody":"Follow Coding Standard.\n\nCode will follow Coding Standard.\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"8b4e28ae66a0dd0005be53d0aa672e836e0b9432","isMergeCommit":false,"messageTitle":"Add Find functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":83,"deletions":8}}},{"hash":"0f39ca8ea60888adcfeba789479571e7894dcdc7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 Add Find functionality.","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"2c1f6257b90088773bee30cb22e8b9c5e87f2e36","isMergeCommit":false,"messageTitle":"Add \u0027find\u0027 in help command list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-07","commitResults":[{"hash":"478aa3366734653ab72e276f335c42e104be9dd0","isMergeCommit":false,"messageTitle":"Add CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":0},"java":{"insertions":125,"deletions":69}}},{"hash":"27dcef38b9597a2f0e7de37a91704f6f6a0f040f","isMergeCommit":false,"messageTitle":"Fix exception in main file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":4,"deletions":4}}},{"hash":"6b7fb6049639924cfaecd2633805027c788b081f","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":47}}}]},{"date":"2023-09-09","commitResults":[{"hash":"b13e606fc94dac33141c60c0d9faf2838e1a4c12","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":19,"deletions":0},"txt":{"insertions":2,"deletions":7},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":892,"deletions":163}}},{"hash":"3966bf2cb4fe1cd284003a94fb03a1c1b4ef8cc2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"Lacks GUI.\n\nThis merge adds GUI.\n\nThis will improve user experience.\n","fileTypesAndContributionMap":{}},{"hash":"42bc6ce4900b0de7b35508307a6fd0088e789419","isMergeCommit":true,"messageTitle":"Merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"37be4224243b203c15f0bfcd01cc586c4828ed42","isMergeCommit":false,"messageTitle":"Fix Level-10 and CheckStyle","messageBody":"","tags":["Level-10","A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":14},"txt":{"insertions":1,"deletions":15},"java":{"insertions":47,"deletions":38}}}]},{"date":"2023-09-16","commitResults":[{"hash":"476f0d4c0f355bbeb5d0d0bce4567365d0441b08","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"Code does not follow Code Quality guidelines.\n\nImproving Code Quality will enhance readability for future developments.\n\nCode is being changed to ensure that Code Quality is improved.\n\nDoing so will make the subsequent development easier.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":0},"java":{"insertions":153,"deletions":218}}},{"hash":"7080b91a5b73c6c1be881b781036fdb554269c68","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ldinghan/branch-A-CodeQuality","messageBody":"Improve Code Quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ldinghan":{"java":1704,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":26,"txt":12}},"authorContributionVariance":{"ldinghan":98354.57},"authorDisplayNameMap":{"ldinghan":"CS2103T-T15-1 LIM .. HAN"}} diff --git a/leezhanpeng_ip_master/authorship.json b/leezhanpeng_ip_master/authorship.json index 7b526090..5688a424 100644 --- a/leezhanpeng_ip_master/authorship.json +++ b/leezhanpeng_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":"leezhanpeng"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-27"},{"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":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"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":"leezhanpeng"},"content":" mainClass.set(\"robert.Robert\")","lastModifiedDate":"2023-08-27"},{"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":"leezhanpeng"},"content":" archiveBaseName \u003d \"robert\"","lastModifiedDate":"2023-08-27"},{"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":"leezhanpeng"},"content":" archiveFileName \u003d \u0027robert.jar\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":"checkstyle {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":"mainClassName \u003d \u0027robert.Launcher\u0027","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"leezhanpeng":25,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"T | 1 | jump around","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"D | 0 | assignment | 2020-03-03","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"T | 0 | dishes","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"E | 1 | exams | 2023-10-10 | 2023-11-10","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"T | 0 | dish","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"leezhanpeng":5}},{"path":"src/main/java/robert/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":12}},{"path":"src/main/java/robert/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import robert.ui.MainWindow;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" * A GUI for Robert using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" private Robert robert \u003d new Robert(\"data/tasks.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" stage.setTitle(\"Robert\");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setRobert(robert);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":36}},{"path":"src/main/java/robert/Robert.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.parser.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * This class simulates a robot application named Robert. It is designed to receive user commands","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * for task tracking. Some commands include adding and deleting tasks, marking and","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * unmarking tasks, as well as listing and clearing tasks that were stored.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"public class Robert {","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" /** Storage to upload and download stored tasks in hard disk */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" /** List of tasks stored */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" /** Boolean to indicate if txt file was read with an error */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" private boolean hasReadFileWithError \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" /** Boolean to indicate if Robert is still running */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" private boolean isRunning;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Robert.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @param filePath path from root folder to data folder which","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * stores a txt file that contains previous saved tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" * If path does not lead to the txt file/directory, new","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" * file/directory will be created.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" public Robert(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" this.tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" } catch (RobertException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" this.hasReadFileWithError \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" this.isRunning \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" * Obtain a response from Robert when given a user input command.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" * @param userInput a string of user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" * @return String generated by Robert.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" String outputMessage;","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" Command c \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" outputMessage \u003d c.execute(this.tasks, this.storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" this.storage.saveToDisk(this.tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" this.isRunning \u003d !c.isExit();","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" } catch (RobertException e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" outputMessage \u003d e.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" return outputMessage;","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" public boolean hasReadFileWithError() {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" return this.hasReadFileWithError;","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" public boolean isRunning() {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" return this.isRunning;","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" public String getWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":" return \"Hello! I\u0027m Robert, your Personal Assistant Chatbot.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" + \"What can I do for you today?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" public String getErrorReadingFileMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" return \"WARNING: Your previously stored tasks seems to be corrupted.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" + \"As a result, your previous lists of tasks will now be cleared. Apologies!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":88}},{"path":"src/main/java/robert/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * An Add extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Adds new task to","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" * tasks given the task\u0027s necessary parameters such as description","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * and dates.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" /** The task to be added to tasks */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" private final Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * Constructs AddCommand using description. ToDo task is","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * initialised.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" assert !description.isEmpty() : \"Description must not be empty\";","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" this.task \u003d new ToDo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" * Constructs AddCommand using description, a fromDate and a toDate. Event task is","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" * initialised.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" * @param fromDate the date where the task begins.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" * @param toDate the date where the task ends.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the toDate comes before the fromDate.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" public AddCommand(String description, LocalDate fromDate, LocalDate toDate) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" assert !description.isEmpty() : \"Description must not be empty\";","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" this.task \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" * Constructs AddCommand using description and a byDate. Deadline task is","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" * initialised.","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" * @param byDate the date where the task is due.","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" public AddCommand(String description, LocalDate byDate) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" assert !description.isEmpty() : \"Description must not be empty\";","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" this.task \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" * Executes the addition of task to tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" if (tasks.isInTaskList(this.task.getDescription())) {","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" return \"Hmm... You already have this task in your list.\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" + \"Check your list of tasks by using the \u0027list\u0027 command.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" return \"Got it. I have added this task:\\n \" + this.task","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" + \"\\nNow you have \" + tasks.getTaskCount() + \" \"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" + (tasks.getTaskCount() \u003e 1 ? \"tasks\" : \"task\")","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" + \" in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":87}},{"path":"src/main/java/robert/command/BlankCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * A Blank extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to indicate a lack of response by","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * Robert due to empty user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"public class BlankCommand extends Command {","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * Executes nothing.","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @return Empty string.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" return \"\";","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"leezhanpeng":27}},{"path":"src/main/java/robert/command/ClearCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * A Clear extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Removes all tasks from","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"public class ClearCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * Executes the removal of all tasks from the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" tasks.clearTasks();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" return \"Understood. I\u0027ve removed every task in your list.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" + \"Now your list of tasks is empty!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":29}},{"path":"src/main/java/robert/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * The base abstract class for commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" * Abstract method that executes the intended task for its subclass.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException to allow subclasses to override the function with the throw property.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" public abstract String execute(TaskList tasks, Storage storage) throws RobertException;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * @return false.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":32}},{"path":"src/main/java/robert/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * A Delete extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Deletes a particular task","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * from the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /** The index of task to be deleted */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * Constructs DeleteCommand using the index of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * @param taskIndex the index of the task to be deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" assert taskIndex \u003e\u003d 0 : \"Index of task should never be negative\";","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * Executes the removal of task.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" Task deletedTask \u003d tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" return \"Noted. I\u0027ve removed this task:\\n \" + deletedTask","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" + \"\\nNow you have \" + tasks.getTaskCount() + \" \"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" + (tasks.getTaskCount() \u003e 1 ? \"tasks\" : \"task\")","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" + \" in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":46}},{"path":"src/main/java/robert/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * An Exit extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to indicate the exit of","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * Robert.","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * @return true.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * Executes the display of exit message.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" return \"Goodbye. Hope to see you again soon! Closing in a few seconds...\";","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":37}},{"path":"src/main/java/robert/command/FilterCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * A Filter extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to filter out","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" * tasks that have deadline or an event happening on a particular date.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":"public class FilterCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" /** The date that is used for querying */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate date;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" * Constructs FilterCommand using a date.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * @param date the date to be used for querying of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" public FilterCommand(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * Executes the filtering of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" int deadlineIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" StringBuilder deadlinesOnDate \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" if (task instanceof Deadline \u0026\u0026 ((Deadline) task).isDueOn(this.date)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" deadlineIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" deadlinesOnDate.append(deadlineIndex).append(\". \").append(task).append(\"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" int eventIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" StringBuilder eventsHappeningOnDate \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" if (task instanceof Event \u0026\u0026 ((Event) task).isHappeningOn(this.date)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" eventIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" eventsHappeningOnDate.append(eventIndex).append(\". \").append(task).append(\"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" if (deadlineIndex \u003d\u003d 0 \u0026\u0026 eventIndex \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" return \"There are no tasks that are due and happening on \"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" + this.date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \".\";","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" if (deadlineIndex \u003e 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" output +\u003d (deadlineIndex \u003d\u003d 1 ? \"This is the task that is\" : \"Here are the tasks that are\")","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" + \" due on \" + this.date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \":\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" output +\u003d deadlinesOnDate.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" if (eventIndex \u003e 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" output +\u003d (eventIndex \u003d\u003d 1 ? \"This is the task that is\" : \"Here are the tasks that are\")","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" + \" happening on \" + this.date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \":\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":" output +\u003d eventsHappeningOnDate.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":82}},{"path":"src/main/java/robert/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * A Find extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to find tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * that are associated to a particular keyword.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /** The keyword that is used for querying */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" private final String keyword;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * Constructs FindCommand using a date.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * @param keyword the keyword to be used for querying of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * Executes the finding of associated tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" int taskIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" StringBuilder taskListing \u003d new StringBuilder(\"Below is/are the task(s) associated with \u0027\"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" + this.keyword + \"\u0027:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" if (task.getDescription().contains(this.keyword)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" taskIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" taskListing.append(String.format(\"%d. %s\\n\", taskIndex, task));","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" if (taskIndex !\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" return taskListing.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" return \"Sorry, there are no tasks that are associated with \u0027\"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" + this.keyword + \"\u0027.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":56}},{"path":"src/main/java/robert/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * A List extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to list out","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * all stored tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * Executes the listing of all stored tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" assert tasks.getTaskCount() \u003e 0 : \"The number of tasks should not be negative\";","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" if (tasks.getTaskCount() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" return \"You do not have any tasks stored. Add one!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" int taskIndex \u003d 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" StringBuilder taskListing \u003d new StringBuilder(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" taskListing.append(String.format(\"%d. %s\\n\", taskIndex, task));","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" taskIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" return taskListing.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":41}},{"path":"src/main/java/robert/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * A Mark extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to mark","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * a particular task in the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" /** The index of task to be marked */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" private final int markIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * Constructs MarkCommand using an index.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @param markIndex the index of task to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" public MarkCommand(int markIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" assert markIndex \u003e\u003d 0 : \"Index of task should never be negative\";","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" this.markIndex \u003d markIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" * Executes the marking of the particular task.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" tasks.markTask(this.markIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n \"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" + tasks.getTask(this.markIndex);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":43}},{"path":"src/main/java/robert/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * An Unmark extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to unmark","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * a particular task in the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" /** The index of task to be unmarked */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" private final int unmarkIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * Constructs UnmarkCommand using an index.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @param unmarkIndex the index of task to be unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" public UnmarkCommand(int unmarkIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" assert unmarkIndex \u003e\u003d 0 : \"Index of task should never be negative\";","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" this.unmarkIndex \u003d unmarkIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" * Executes the unmarking of the particular task.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" tasks.unmarkTask(this.unmarkIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" return \"Ok, I\u0027ve unmarked this task as not done yet:\\n \"","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" + tasks.getTask(this.unmarkIndex);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":43}},{"path":"src/main/java/robert/exception/RobertException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":" * An exception that is thrown when an error occurs within Robert.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"public class RobertException extends Exception {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" /** The error message */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" private final String errorMessage;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * Constructs RobertException using an error message.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * @param errorMessage the error message to be tagged to the exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" public RobertException(String errorMessage) {","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" super(\"OOPS!!! \" + errorMessage);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" this.errorMessage \u003d \"OOPS!!! \" + errorMessage;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" * Returns the error message unique to Robert.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * @return the error message.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" return errorMessage;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":32}},{"path":"src/main/java/robert/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.AddCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.BlankCommand;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ClearCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.DeleteCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ExitCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.FilterCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.FindCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ListCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.MarkCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.UnmarkCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * A parser that is used to read in and manipulate user commands.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * Parses the line of command given by the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * @param fullCommand the line of command to be parsed.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" * @return Command associated to the line of command given by the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" public static Command parse(String fullCommand) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" if (fullCommand.isEmpty()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" return new BlankCommand();","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" String[] splitCommand \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" String commandType \u003d splitCommand[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" case \"list\":","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003e 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Unnecessary parameters added.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" + \"Type \u0027list\u0027 if you intend to list your tasks.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" case \"bye\":","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003e 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Additional parameters added.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" + \"Did you intend to exit? If not, be careful!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" case \"mark\":","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The index used to mark a task cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add an index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" int markIndex \u003d Integer.parseInt(splitCommand[1]) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" return new MarkCommand(markIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Cannot convert given index as integer.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" + \"Please use proper integer as the index!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The index used to unmark a task cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add an index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" int unmarkIndex \u003d Integer.parseInt(splitCommand[1]) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":" return new UnmarkCommand(unmarkIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Cannot convert given index as integer.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" + \"Please use proper integer as the index!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" case \"todo\":","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The description of a todo cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add a description to your todo task.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" return new AddCommand(splitCommand[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":" case \"event\":","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The description of an event cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add a description to your event task.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":" String undividedEventParameters \u003d splitCommand[1];","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":" if (!undividedEventParameters.contains(\"/from\") || !undividedEventParameters.contains(\"/to\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The event\u0027s start and/or end time is/are not specified properly.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":" + \"Please make sure \u0027/from\u0027 and \u0027/to\u0027 are properly indicated.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"leezhanpeng"},"content":" String[] eventParameters \u003d undividedEventParameters.split(\" /from \");","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"leezhanpeng"},"content":" if (eventParameters.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"There are parameters missing.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"leezhanpeng"},"content":" + \"Please make sure you have both the task description and the due date entered.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"leezhanpeng"},"content":" String eventDescription \u003d eventParameters[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"leezhanpeng"},"content":" String[] dateParameters \u003d eventParameters[1].split(\" /to \");","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"leezhanpeng"},"content":" if (dateParameters.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"There are parameters missing.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"leezhanpeng"},"content":" + \"Please make sure you have both the task description and the due date entered.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"leezhanpeng"},"content":" LocalDate fromDate \u003d LocalDate.parse(dateParameters[0]);","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"leezhanpeng"},"content":" LocalDate toDate \u003d LocalDate.parse(dateParameters[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"leezhanpeng"},"content":" return new AddCommand(eventDescription, fromDate, toDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"leezhanpeng"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Date provided does not match format.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"leezhanpeng"},"content":" + \"Please write your date in the format of \u0027YYYY-MM-DD\u0027.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"leezhanpeng"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The description of a deadline cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add a description to your deadline task.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"leezhanpeng"},"content":" String undividedDeadlineParameters \u003d splitCommand[1];","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"leezhanpeng"},"content":" if (!undividedDeadlineParameters.contains(\"/by\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The deadline\u0027s due date is not specified properly.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"leezhanpeng"},"content":" + \"Please make sure \u0027/by\u0027 is properly indicated.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"leezhanpeng"},"content":" String[] deadlineParameters \u003d undividedDeadlineParameters.split(\" /by \");","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"leezhanpeng"},"content":" if (deadlineParameters.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"There are parameters missing.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"leezhanpeng"},"content":" + \"Please make sure you have both the task description and the due date entered.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"leezhanpeng"},"content":" String deadlineDescription \u003d deadlineParameters[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"leezhanpeng"},"content":" LocalDate byDate \u003d LocalDate.parse(deadlineParameters[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"leezhanpeng"},"content":" return new AddCommand(deadlineDescription, byDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"leezhanpeng"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Date provided does not match format.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"leezhanpeng"},"content":" + \"Please write your date in the format of \u0027YYYY-MM-DD\u0027.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"leezhanpeng"},"content":" case \"delete\":","lastModifiedDate":"2023-09-11"},{"lineNumber":157,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The index used to delete a task cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add an index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"leezhanpeng"},"content":" int deleteIndex \u003d Integer.parseInt(splitCommand[1]) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"leezhanpeng"},"content":" return new DeleteCommand(deleteIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"leezhanpeng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Cannot convert given index as integer.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"leezhanpeng"},"content":" + \"Please use proper integer as the index!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"leezhanpeng"},"content":" case \"clear\":","lastModifiedDate":"2023-09-11"},{"lineNumber":171,"author":{"gitId":"leezhanpeng"},"content":" return new ClearCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"leezhanpeng"},"content":" case \"filter\":","lastModifiedDate":"2023-09-11"},{"lineNumber":174,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The date of the tasks is not indicated.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add a date in the format \u0027YYYY-MM-DD\u0027.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"leezhanpeng"},"content":" LocalDate date \u003d LocalDate.parse(splitCommand[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"leezhanpeng"},"content":" return new FilterCommand(date);","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"leezhanpeng"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Date provided does not match format.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"leezhanpeng"},"content":" + \"Please write your date in the format of \u0027YYYY-MM-DD\u0027.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"leezhanpeng"},"content":" case \"find\":","lastModifiedDate":"2023-09-11"},{"lineNumber":188,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The keyword is not indicated.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add a keyword so that I can find relevant tasks.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"leezhanpeng"},"content":" return new FindCommand(splitCommand[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"leezhanpeng"},"content":" default:","lastModifiedDate":"2023-09-11"},{"lineNumber":195,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"I\u0027m sorry, but I don\u0027t know what that command means :(\");","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"leezhanpeng":198}},{"path":"src/main/java/robert/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * A class that is used to load stored tasks to and from the hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" /** The file used to store the data of list of tasks */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" private final File tasksFile;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Storage using a file path.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param filePath the file path that stores the data of list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" Path tasksFilePath \u003d Paths.get(System.getProperty(\"user.dir\"), filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" this.tasksFile \u003d new File(tasksFilePath.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" * Loads the stored tasks from hard disk into Robert.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" * @return an ArrayList of Task stored in the hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the stored tasks in hard disk is corrupted or wrongly formatted.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" public ArrayList\u003cTask\u003e load() throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" if (!this.tasksFile.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" this.tasksFile.getParentFile().mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" this.tasksFile.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" ArrayList\u003cTask\u003e downloadedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" try (Scanner scanner \u003d new Scanner(this.tasksFile)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" String[] taskParameters \u003d scanner.nextLine().split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" switch (taskParameters[0]) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" ToDo newToDo \u003d new ToDo(taskParameters[2], taskParameters[1].equals(\"1\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" downloadedTasks.add(newToDo);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" LocalDate fromDate \u003d LocalDate.parse(taskParameters[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" LocalDate toDate \u003d LocalDate.parse(taskParameters[4]);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" Event newEvent \u003d new Event(taskParameters[2],","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" fromDate, toDate, taskParameters[1].equals(\"1\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" downloadedTasks.add(newEvent);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" LocalDate byDate \u003d LocalDate.parse(taskParameters[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":" Deadline newDeadline \u003d new Deadline(taskParameters[2],","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" byDate, taskParameters[1].equals(\"1\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" downloadedTasks.add(newDeadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"An unknown task type was identified \"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" + \"when parsing previously stored tasks.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Unable to load data from storage.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" return downloadedTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":" * Saves the tasks from Robert into the hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks a TaskList that contains all tasks that are currently recorded by Robert.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if there is an issue saving the tasks into the hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"leezhanpeng"},"content":" public void saveToDisk(TaskList tasks) throws RobertException {","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"leezhanpeng"},"content":" FileWriter fw \u003d new FileWriter(this.tasksFile.toString(), false);","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"leezhanpeng"},"content":" String storedLine;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"leezhanpeng"},"content":" String taskDone \u003d task.getStatusIcon().equals(\"X\") ? \"1\" : \"0\";","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"leezhanpeng"},"content":" if (task instanceof ToDo) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"leezhanpeng"},"content":" storedLine \u003d \"T | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"leezhanpeng"},"content":" + taskDone + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"leezhanpeng"},"content":" + task.getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"leezhanpeng"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"leezhanpeng"},"content":" storedLine \u003d \"E | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"leezhanpeng"},"content":" + taskDone + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"leezhanpeng"},"content":" + task.getDescription() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"leezhanpeng"},"content":" + ((Event) task).getFromDate() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"leezhanpeng"},"content":" + ((Event) task).getToDate();","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"leezhanpeng"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"leezhanpeng"},"content":" storedLine \u003d \"D | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"leezhanpeng"},"content":" + taskDone + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"leezhanpeng"},"content":" + task.getDescription() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"leezhanpeng"},"content":" + ((Deadline) task).getByDate();","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"leezhanpeng"},"content":" fw.write(storedLine + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"leezhanpeng"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"leezhanpeng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"There seems to be a problem saving the tasks to your hard disk.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":137}},{"path":"src/main/java/robert/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" * A Deadline variation of the \u003ctt\u003eTask\u003c/tt\u003e class. Used to track","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * a deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" /** The date that the task is due on */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate byDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Deadline using a description and a due date.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @param by the due date.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" this.byDate \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Deadline using a description, a due date, and an indication on whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param by the due date.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @param isDone whether the task is completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" public Deadline(String description, LocalDate by, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" this.byDate \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" * A getter of the due date.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" * @return the due date.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" public LocalDate getByDate() {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" return this.byDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" * An identifier on whether the task is due on a particular date.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" public boolean isDueOn(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" return this.byDate.equals(date);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" * Returns the string representation of the deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" * @return the string representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" this.byDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":68}},{"path":"src/main/java/robert/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * An Event variation of the \u003ctt\u003eTask\u003c/tt\u003e class. Used to track","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * an event.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /** The date that the task begins from */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate fromDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" /** The date that the task ends on */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate toDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Event using a description, a start date and an end date.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * @param from the starting date.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * @param to the ending date.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if to date is before the from date.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" public Event(String description, LocalDate from, LocalDate to) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" this.fromDate \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" this.toDate \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" if (this.fromDate.isAfter(this.toDate)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The end date of the event is before the start date.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" + \"Please set the dates such that the start date is before/on the end date.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Event using a description, a start date, an end date, and an indication","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" * on whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" * @param from the starting date.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" * @param to the ending date.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" * @param isDone whether the task is completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if to date is before the from date.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" public Event(String description, LocalDate from, LocalDate to, boolean isDone) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" this.fromDate \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" this.toDate \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" if (this.fromDate.isAfter(this.toDate)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The end date of the event is before the start date.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" + \"Please set the dates such that the start date is before/on the end date.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" * A getter of the starting date.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" * @return the start date.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" public LocalDate getFromDate() {","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" return this.fromDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" * A getter of the ending date.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" * @return the end date.","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" public LocalDate getToDate() {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" return this.toDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" * An identifier on whether the task is happening on a particular date.","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" public boolean isHappeningOn(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" return !(this.toDate.isBefore(date) || this.fromDate.isAfter(date));","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" * Returns the string representation of the event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":" * @return the string representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-08-20"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":" super.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":" this.fromDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")),","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":" this.toDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":101}},{"path":"src/main/java/robert/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":" * The base class for tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" /** The description of the task */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" /** The indication on whether it is marked */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * Constructs a generic task.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * Constructs a generic task.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * @param isDone whether the task is completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" * A getter of the description.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" * @return the description.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" return this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" * A getter of the status icon.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" * @return the status icon of either \"X\" or \" \".","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" * Returns the string representation of a generic task.","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" * @return the string representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), description);","lastModifiedDate":"2023-08-20"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":77}},{"path":"src/main/java/robert/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * An implementation of the list of tasks using \u003ctt\u003eArrayList\u003c/tt\u003e. Used to track","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * all tasks that are stored in Robert.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"public class TaskList implements Iterable\u003cTask\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /** The ArrayList of tasks stored */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * Constructs an empty task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * Constructs a task list with an existing ArrayList of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks an ArrayList of tasks for initialisation.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" * Gets the stored task in a particular index.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" * @param taskIndex the index of the task to be retrieved.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" * @return task associated to the index.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" public Task getTask(int taskIndex) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" if (taskIndex \u003c 0 || this.getTaskCount() \u003c\u003d taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Index is out of bounds.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" + \"Please choose a valid index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" return this.tasks.get(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" * Gets the number of tasks stored in the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" * @return the number of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" * Adds task into the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" * @param task the task to be added into the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" * Deletes task from the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" * @param taskIndex the index of the task to be deleted from the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" * @return the deleted task.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" public Task deleteTask(int taskIndex) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" if (taskIndex \u003c 0 || this.getTaskCount() \u003c\u003d taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Index is out of bounds.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" + \"Please choose a valid index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" Task deletedTask \u003d this.tasks.get(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" this.tasks.remove(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" return deletedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" * Marks a task from the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":" * @param taskIndex the index of the task to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":" public void markTask(int taskIndex) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":" if (taskIndex \u003c 0 || this.getTaskCount() \u003c\u003d taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Index is out of bounds.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":" + \"Please choose a valid index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" this.tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" * Unmarks a task from the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"leezhanpeng"},"content":" * @param taskIndex the index of the task to be unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"leezhanpeng"},"content":" public void unmarkTask(int taskIndex) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"leezhanpeng"},"content":" if (taskIndex \u003c 0 || this.getTaskCount() \u003c\u003d taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Index is out of bounds.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"leezhanpeng"},"content":" + \"Please choose a valid index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"leezhanpeng"},"content":" this.tasks.get(taskIndex).markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"leezhanpeng"},"content":" * Removes all tasks from the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"leezhanpeng"},"content":" public void clearTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"leezhanpeng"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"leezhanpeng"},"content":" * Checks whether a task exist in the task list.","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"leezhanpeng"},"content":" * @param description the exact description of the task to be identified.","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"leezhanpeng"},"content":" * @return boolean on whether the task is found.","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"leezhanpeng"},"content":" public boolean isInTaskList(String description) {","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"leezhanpeng"},"content":" if (task.getDescription().equals(description)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"leezhanpeng"},"content":" return true;","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"leezhanpeng"},"content":" return false;","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"leezhanpeng"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"leezhanpeng"},"content":" return new TaskIterator();","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"leezhanpeng"},"content":" * A private class to initialise an iterator.*","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"leezhanpeng"},"content":" private class TaskIterator implements Iterator\u003cTask\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"leezhanpeng"},"content":" /** The index of the task during iteration */","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"leezhanpeng"},"content":" private int currentIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"leezhanpeng"},"content":" public boolean hasNext() {","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"leezhanpeng"},"content":" return currentIndex \u003c tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"leezhanpeng"},"content":" public Task next() {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"leezhanpeng"},"content":" return tasks.get(currentIndex++);","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":159}},{"path":"src/main/java/robert/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":" * An Event variation of the \u003ctt\u003eTask\u003c/tt\u003e class. Used to track","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":" * a todo.","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * Constructs ToDo using a description.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * Constructs ToDo using a description and an indication","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * on whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" * @param isDone whether the task is completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * Returns the string representation of the todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * @return the string representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":40}},{"path":"src/main/java/robert/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * A dialogue box controller that is responsible for the output of user and Robert.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * Constructor for the dialogue box.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * @param text message to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param img image to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" public static DialogBox getRobertDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":67}},{"path":"src/main/java/robert/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"import robert.Robert;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" private Button introButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" private Button cmdButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" private Button taskButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" private VBox introTab;","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" private VBox cmdTab;","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" private VBox taskTab;","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" private Robert robert;","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" private Image robertImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaRobert.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" private ImageView introPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" * Initialises the GUI of Robert with some configurations.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" introPicture.setImage(new Image(this.getClass().getResourceAsStream(\"/images/DaSecondRobert.png\")));","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" * Setter for Robert.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" * @param robert an instance of the chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" public void setRobert(Robert robert) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" this.robert \u003d robert;","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" if (this.robert.hasReadFileWithError()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" DialogBox.getRobertDialog(robert.getErrorReadingFileMessage(), robertImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" DialogBox.getRobertDialog(robert.getWelcomeMessage(), robertImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" * Handles user input by funnelling it into Robert. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" * Gives slight delay when exit is called.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" String response \u003d robert.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" if (!response.isEmpty()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":" DialogBox.getRobertDialog(response, robertImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":" if (!this.robert.isRunning()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" userInput.setVisible(false);","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":" new Thread(() -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" Thread.sleep(2500);","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" Platform.exit();","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":" }).start();","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"leezhanpeng"},"content":" // manually layout scrollPane for scrolling to the bottom.","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"leezhanpeng"},"content":" scrollPane.applyCss();","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"leezhanpeng"},"content":" scrollPane.layout();","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"leezhanpeng"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"leezhanpeng"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"leezhanpeng"},"content":" * Show the introduction tab in GUI.","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"leezhanpeng"},"content":" private void showIntroduction() {","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"leezhanpeng"},"content":" cmdButton.toFront();","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"leezhanpeng"},"content":" introButton.toFront();","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"leezhanpeng"},"content":" introTab.toFront();","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"leezhanpeng"},"content":" * Show the commands tab in GUI.","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"leezhanpeng"},"content":" private void showCommands() {","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"leezhanpeng"},"content":" cmdButton.toFront();","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"leezhanpeng"},"content":" cmdTab.toFront();","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":132,"author":{"gitId":"leezhanpeng"},"content":" * Show the tasks tab in GUI.","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":134,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"leezhanpeng"},"content":" private void showTasks() {","lastModifiedDate":"2023-09-07"},{"lineNumber":136,"author":{"gitId":"leezhanpeng"},"content":" cmdButton.toFront();","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"leezhanpeng"},"content":" taskButton.toFront();","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"leezhanpeng"},"content":" taskTab.toFront();","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":140}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.text.TextFlow?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"700.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-11"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" \u003cTextFlow\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" \u003cLabel fx:id\u003d\"dialog\" style\u003d\"-fx-background-color: #CCCCCC; -fx-background-radius: 5; -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.5), 10, 0, 0, 0); -fx-font-size: large;\" text\u003d\"Label\"\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" \u003c/TextFlow\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"120.0\" fitWidth\u003d\"120.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" style\u003d\"-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.5), 10, 0, 0, 0);\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":28}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.Cursor?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.effect.DropShadow?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.layout.Pane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.text.Text?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.text.TextFlow?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"750.0\" prefWidth\u003d\"1200.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"robert.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" \u003cPane prefHeight\u003d\"140.0\" prefWidth\u003d\"500.0\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" \u003cButton fx:id\u003d\"taskButton\" alignment\u003d\"TOP_CENTER\" layoutX\u003d\"330.0\" layoutY\u003d\"16.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#showTasks\" prefHeight\u003d\"70.0\" prefWidth\u003d\"160.0\" style\u003d\"-fx-background-color: #AAAAAA; -fx-background-radius: 20 20 0 0;\" text\u003d\"Task List\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont name\u003d\"System Bold Italic\" size\u003d\"18.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets top\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" \u003ccursor\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" \u003cCursor fx:constant\u003d\"HAND\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" \u003c/cursor\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" \u003ceffect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" \u003cDropShadow blurType\u003d\"ONE_PASS_BOX\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" \u003c/effect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" \u003cButton fx:id\u003d\"cmdButton\" alignment\u003d\"TOP_CENTER\" layoutX\u003d\"170.0\" layoutY\u003d\"16.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#showCommands\" prefHeight\u003d\"70.0\" prefWidth\u003d\"160.0\" style\u003d\"-fx-background-color: #CCCCCC; -fx-background-radius: 20 20 0 0;\" text\u003d\"Commands\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont name\u003d\"System Bold Italic\" size\u003d\"18.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets top\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" \u003ccursor\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" \u003cCursor fx:constant\u003d\"HAND\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" \u003c/cursor\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" \u003ceffect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" \u003cDropShadow blurType\u003d\"ONE_PASS_BOX\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" \u003c/effect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" \u003cButton fx:id\u003d\"introButton\" alignment\u003d\"TOP_CENTER\" layoutX\u003d\"10.0\" layoutY\u003d\"16.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#showIntroduction\" prefHeight\u003d\"70.0\" prefWidth\u003d\"160.0\" style\u003d\"-fx-background-color: #EEEEEE; -fx-background-radius: 20 20 0 0;\" text\u003d\"Introduction\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont name\u003d\"System Bold Italic\" size\u003d\"18.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets top\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" \u003ccursor\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" \u003cCursor fx:constant\u003d\"HAND\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" \u003c/cursor\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" \u003ceffect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" \u003cDropShadow blurType\u003d\"ONE_PASS_BOX\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" \u003c/effect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Pane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" \u003cVBox fx:id\u003d\"taskTab\" alignment\u003d\"TOP_CENTER\" layoutX\u003d\"10.0\" layoutY\u003d\"85.0\" prefHeight\u003d\"630.0\" prefWidth\u003d\"480.0\" style\u003d\"-fx-background-color: #AAAAAA; -fx-background-radius: 0 0 20 20;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" \u003cLabel alignment\u003d\"CENTER\" prefHeight\u003d\"300.0\" prefWidth\u003d\"480.0\" style\u003d\"-fx-background-radius: 10;\" text\u003d\"Task listing function to be added soon...\" textAlignment\u003d\"CENTER\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont name\u003d\"Cambria\" size\u003d\"21.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets left\u003d\"50.0\" right\u003d\"50.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" \u003cVBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" \u003c/VBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" \u003cVBox fx:id\u003d\"cmdTab\" alignment\u003d\"TOP_CENTER\" layoutX\u003d\"10.0\" layoutY\u003d\"85.0\" prefHeight\u003d\"630.0\" prefWidth\u003d\"480.0\" style\u003d\"-fx-background-color: #CCCCCC; -fx-background-radius: 0 0 20 20;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" \u003cScrollPane hbarPolicy\u003d\"NEVER\" prefHeight\u003d\"630.0\" prefWidth\u003d\"480.0\" style\u003d\"-fx-background-radius: 10; -fx-background-color: #CCCCCC;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" \u003cTextFlow prefHeight\u003d\"903.0\" prefWidth\u003d\"425.0\" style\u003d\"-fx-background-color: #CCCCCC;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"list\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"List all of your tracked items.\u0026#10;\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"todo [description]\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Add a \u0027todo\u0027 task with a given description to your list of items.\u0026#10;\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"event [desc] /from [YYYY-MM-DD] /to [YYYY-MM-DD]\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Add an \u0027event\u0027 task with a given description, start date and end date to your list of items.\u0026#10;\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"deadline [desc] /by [YYYY-MM-DD]\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Add a \u0027deadline\u0027 task with a given description and a due date to your list of items.\u0026#10;\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"delete [index]\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":132,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Delete a tracked item with a reference index from the list.\u0026#10;\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":134,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":136,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"clear\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":142,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Remove all tracked tasks from your list.\u0026#10;\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":144,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":145,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":146,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":147,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":148,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"filter [YYYY-MM-DD]\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":149,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":150,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":151,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":152,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Retrieve all deadline tasks with indicated due date or \u0027event\u0027 tasks that is happening on indicated date.\u0026#10;\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":154,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":155,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":156,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":157,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":158,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"find [keyword]\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":159,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":160,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":161,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":162,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":163,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Retrieve all items that are associated to the keyword.\u0026#10;\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":164,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":165,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":166,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":167,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":168,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"mark [index]\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":169,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":170,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":171,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":172,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":173,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Mark an item as done with a reference index from the list.\u0026#10;\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":174,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":175,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":176,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":177,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":178,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"unmark [index]\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":179,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":180,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":181,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":182,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":183,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Unmark a marked item with a reference index from the list.\u0026#10;\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":184,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":185,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":186,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":187,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":188,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" style\u003d\"-fx-font-style: italic; -fx-font-weight: bold;\" text\u003d\"bye\u0026#10;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":189,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":190,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"16.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":191,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":192,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":193,"author":{"gitId":"leezhanpeng"},"content":" \u003cText strokeType\u003d\"OUTSIDE\" strokeWidth\u003d\"0.0\" text\u003d\"Exit from the programme.\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":194,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":195,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":196,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":197,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Text\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":198,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":199,"author":{"gitId":"leezhanpeng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":200,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets top\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":201,"author":{"gitId":"leezhanpeng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":202,"author":{"gitId":"leezhanpeng"},"content":" \u003c/TextFlow\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":203,"author":{"gitId":"leezhanpeng"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":204,"author":{"gitId":"leezhanpeng"},"content":" \u003cVBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":205,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets left\u003d\"20.0\" right\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":206,"author":{"gitId":"leezhanpeng"},"content":" \u003c/VBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":207,"author":{"gitId":"leezhanpeng"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":208,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":209,"author":{"gitId":"leezhanpeng"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":210,"author":{"gitId":"leezhanpeng"},"content":" \u003cVBox fx:id\u003d\"introTab\" alignment\u003d\"TOP_CENTER\" layoutX\u003d\"10.0\" layoutY\u003d\"85.0\" prefHeight\u003d\"630.0\" prefWidth\u003d\"480.0\" style\u003d\"-fx-background-color: #EEEEEE; -fx-background-radius: 0 0 20 20;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":211,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":212,"author":{"gitId":"leezhanpeng"},"content":" \u003cImageView fx:id\u003d\"introPicture\" fitHeight\u003d\"250.0\" fitWidth\u003d\"250.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":213,"author":{"gitId":"leezhanpeng"},"content":" \u003cVBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":214,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets top\u003d\"50.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":215,"author":{"gitId":"leezhanpeng"},"content":" \u003c/VBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":216,"author":{"gitId":"leezhanpeng"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":217,"author":{"gitId":"leezhanpeng"},"content":" \u003cLabel alignment\u003d\"TOP_CENTER\" prefHeight\u003d\"300.0\" prefWidth\u003d\"480.0\" style\u003d\"-fx-background-radius: 10;\" text\u003d\"Hi, I am Robert, your Personal Assistant Chatbot. I am here to help you keep track of various things! For more information about the commands you can use, click on the tabs above.\" textAlignment\u003d\"CENTER\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":218,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":219,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont name\u003d\"Cambria\" size\u003d\"21.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":220,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":221,"author":{"gitId":"leezhanpeng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":222,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets left\u003d\"50.0\" right\u003d\"50.0\" top\u003d\"40.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":223,"author":{"gitId":"leezhanpeng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":224,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":225,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":226,"author":{"gitId":"leezhanpeng"},"content":" \u003ceffect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":227,"author":{"gitId":"leezhanpeng"},"content":" \u003cDropShadow blurType\u003d\"ONE_PASS_BOX\" height\u003d\"0.0\" radius\u003d\"4.75\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":228,"author":{"gitId":"leezhanpeng"},"content":" \u003c/effect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":229,"author":{"gitId":"leezhanpeng"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":230,"author":{"gitId":"leezhanpeng"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" layoutX\u003d\"500.0\" prefHeight\u003d\"680.0\" prefWidth\u003d\"700.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":231,"author":{"gitId":"leezhanpeng"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"leezhanpeng"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"680.0\" prefWidth\u003d\"700.0\" style\u003d\"-fx-background-color: #AAAAAA;\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":233,"author":{"gitId":"leezhanpeng"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":234,"author":{"gitId":"leezhanpeng"},"content":" \u003ceffect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":235,"author":{"gitId":"leezhanpeng"},"content":" \u003cDropShadow blurType\u003d\"ONE_PASS_BOX\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":236,"author":{"gitId":"leezhanpeng"},"content":" \u003c/effect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":237,"author":{"gitId":"leezhanpeng"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":238,"author":{"gitId":"leezhanpeng"},"content":" \u003cHBox alignment\u003d\"CENTER\" layoutX\u003d\"500.0\" layoutY\u003d\"679.0\" prefHeight\u003d\"70.0\" prefWidth\u003d\"700.0\" style\u003d\"-fx-background-color: #555555;\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":239,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":240,"author":{"gitId":"leezhanpeng"},"content":" \u003cTextField fx:id\u003d\"userInput\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"42.0\" prefWidth\u003d\"600.0\" style\u003d\"-fx-background-color: #555555; -fx-text-fill: #FFFFFF; -fx-font-size: large;\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":241,"author":{"gitId":"leezhanpeng"},"content":" \u003cButton fx:id\u003d\"sendButton\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" text\u003d\"Send\"\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":242,"author":{"gitId":"leezhanpeng"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":243,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets left\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":244,"author":{"gitId":"leezhanpeng"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":245,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":246,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"leezhanpeng"},"content":" \u003ceffect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":248,"author":{"gitId":"leezhanpeng"},"content":" \u003cDropShadow blurType\u003d\"ONE_PASS_BOX\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":249,"author":{"gitId":"leezhanpeng"},"content":" \u003c/effect\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":250,"author":{"gitId":"leezhanpeng"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":251,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":252,"author":{"gitId":"leezhanpeng"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":252}},{"path":"src/test/java/robert/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.AddCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ClearCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.FilterCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" public void testReturnedCommandType_nonErrorCommand_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"list\") instanceof ListCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"bye\") instanceof ExitCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"mark 1\") instanceof MarkCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"unmark 1\") instanceof UnmarkCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"todo swim\") instanceof AddCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"event marathon /from 2023-05-11 \"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" + \"/to 2023-05-13\") instanceof AddCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"deadline assignment \"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" + \"/by 2023-07-29\") instanceof AddCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"delete 1\") instanceof DeleteCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"clear\") instanceof ClearCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"filter 2022-02-02\") instanceof FilterCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":38}},{"path":"src/test/java/robert/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate sampleDateOne \u003d LocalDate.parse(\"2023-05-17\");","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate sampleDateTwo \u003d LocalDate.parse(\"2022-11-02\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" public void dateRetrieval() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(this.sampleDateOne.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" new Deadline(\"DEADLINETEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne).getByDate().toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" public void dueOnChecker() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(new Deadline(\"DEADLINETEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne).isDueOn(this.sampleDateOne));","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" assertFalse(new Deadline(\"DEADLINETEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne).isDueOn(this.sampleDateTwo));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":30}},{"path":"src/test/java/robert/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"public class EventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate sampleDateOne \u003d LocalDate.parse(\"2022-05-17\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate sampleDateTwo \u003d LocalDate.parse(\"2023-11-02\");","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate sampleDateThree \u003d LocalDate.parse(\"2021-07-29\");","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" public void dateRetrieval() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(this.sampleDateOne.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" new Event(\"EVENTTEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne, this.sampleDateTwo).getFromDate().toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(this.sampleDateTwo.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" new Event(\"EVENTTEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne, this.sampleDateTwo).getToDate().toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" public void happeningOnChecker() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(new Event(\"EVENTTEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne, this.sampleDateTwo).isHappeningOn(this.sampleDateOne));","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" assertFalse(new Event(\"EVENTTEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne, this.sampleDateTwo).isHappeningOn(this.sampleDateThree));","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" public void eventInitialise_toDateBeforeFromDate_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" new Event(\"EVENTTEST\", this.sampleDateTwo, this.sampleDateOne);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(\"OOPS!!! The end date of the event is before the start date.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" + \"Please set the dates such that the start date is before/on the end date.\",","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" e.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":56}},{"path":"src/test/java/robert/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" private final ArrayList\u003cTask\u003e sampleTaskArrayList \u003d new ArrayList\u003c\u003e(","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" Arrays.asList(new TaskStub(), new TaskStub(), new TaskStub()));","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" public void testGetters() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(\"[X] TASKSTUB\",","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" new TaskList(this.sampleTaskArrayList).getTask(1).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(3,","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" new TaskList(this.sampleTaskArrayList).getTaskCount());","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" public void testDeletion_indexInBound_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(\"[X] TASKSTUB\",","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" new TaskList(this.sampleTaskArrayList).deleteTask(1).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" public void testDeletion_indexOutOfBound_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(\"[X] TASKSTUB\",","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" new TaskList(this.sampleTaskArrayList).deleteTask(10).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(\"OOPS!!! Index is out of bounds.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" + \"Please choose a valid index.\", e.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":50}},{"path":"src/test/java/robert/task/TaskStub.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":" * The stub class for tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"public class TaskStub extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" /** The description of the task */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" /** The indication on whether it is marked */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" private final boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * Constructs a generic task stub.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" public TaskStub() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" super(\"TASKSTUB\", true);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" this.description \u003d \"TASKSTUB\";","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * A getter of the description.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" * @return string \"TASKSTUB\".","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" return \"TASKSTUB\";","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" * A getter of the description.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" * @return string \"X\".","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" return \"X\"; // mark done task with X","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" * Returns the string representation of a generic task.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" * @return the string representation.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" return \"[X] \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":52}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"todo sweep floor","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"event marathon /from Saturday 8am /to 2pm","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"deadline cs2103 assignment /by 1 Sept","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"unmark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"mark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":10}},{"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":"leezhanpeng"},"content":"java -classpath ..\\bin Robert \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"leezhanpeng":1,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-27"},{"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":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"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":"leezhanpeng"},"content":" mainClass.set(\"robert.Robert\")","lastModifiedDate":"2023-08-27"},{"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":"leezhanpeng"},"content":" archiveBaseName \u003d \"robert\"","lastModifiedDate":"2023-08-27"},{"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":"leezhanpeng"},"content":" archiveFileName \u003d \u0027robert.jar\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":"checkstyle {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":"mainClassName \u003d \u0027robert.Launcher\u0027","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"leezhanpeng":25,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"D | 0 | Assignment | 2023-11-25","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"D | 0 | Project | 2023-11-25","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"E | 0 | Exams | 2023-11-10 | 2023-12-02","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"T | 0 | CS2103 Assignment","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"leezhanpeng":4}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"# Robert - User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"![Robert tagline](RobertTagline.png)","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"Robert is an application designed for efficient task, deadline, and event","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"management. It also offers functionality to mark and filter activities that ","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"are tracked by the application. If you are a fast typer, Robert can accomplish","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"tracking tasks faster than traditional GUI applications.","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"### ToDo, Event, Deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"Robert allows for the tracking of different types of tasks:","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"- A generic todo task that has no time restrictions","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"- An event task that has a specific timeframe","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"- A deadline task that has a due date.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"### List, Mark, Unmark, Delete, Filter, Find, Clear","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":"Robert also allows for the manipulation of stored tasks for more flexible","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":"storage of information. These additional features include:","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":"- marking and unmarking of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":"- deleting and clearing of particular/all task(s)","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"- filtering and finding of tasks with relevant dates or keywords","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":"### `todo` - Add a todo","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":"This command will add a todo task into your task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":"Format: ","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":"`todo [DESCRIPTION]`","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":"`todo Buy toothpaste`","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":"A `todo` task of buying toothpaste is added to your task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":"Got it. I have added this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" [T][] Buy toothpaste","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":"Now you have 1 task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":"### `event` - Add an event","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":"This command will add an event task into your task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":"Format:","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":"`event [DESCRIPTION] /from [YYYY-MM-DD] /to [YYYY-MM-DD]`","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":"`event Party /from 2023-10-03 /to 2023-10-10`","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":"An `event` task of a party with the given timeframe is added to your task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":"Got it. I have added this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" [E][] Party (from: Oct 03 2023 to: Oct 10 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":"Now you have 1 task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":"### `deadline` - Add a deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":"This command will add a deadline task into your task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":"Format:","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":"`deadline [DESCRIPTION] /by [YYYY-MM-DD]`","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":"`deadline Assignment /by 2023-11-06`","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":"A `deadline` task of assignment with the given deadline is added to your task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":"Got it. I have added this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" [D][] Assignment (by: Nov 06 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":"Now you have 1 task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":"### `list` - List tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":"This command will list all the tasks stored in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":"`list`","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"leezhanpeng"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"leezhanpeng"},"content":"All stored tasks are listed.","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"leezhanpeng"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"leezhanpeng"},"content":"1.[E][] Party (from: Oct 03 2023 to: Oct 10 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"leezhanpeng"},"content":"2.[D][] Assignment (by: Nov 06 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"leezhanpeng"},"content":"### `mark` - Mark a task","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"leezhanpeng"},"content":"This command will mark a task to signify task as completed.","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"leezhanpeng"},"content":"Format:","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"leezhanpeng"},"content":"`mark [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"leezhanpeng"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"leezhanpeng"},"content":"`mark 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"leezhanpeng"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"leezhanpeng"},"content":"The second task in your list of tasks is marked.","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"leezhanpeng"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"leezhanpeng"},"content":" [D][X] Assignment (by: Nov 06 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"leezhanpeng"},"content":"### `unmark` - Mark a task","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"leezhanpeng"},"content":"This command will unmark a task to signify task as incomplete.","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"leezhanpeng"},"content":"Format:","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"leezhanpeng"},"content":"`unmark [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"leezhanpeng"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"leezhanpeng"},"content":"`unmark 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"leezhanpeng"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"leezhanpeng"},"content":"The second task in your list of tasks is unmarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"leezhanpeng"},"content":"Ok, I\u0027ve unmarked this task as not done yet:","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"leezhanpeng"},"content":" [D][] Assignment (by: Nov 06 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"leezhanpeng"},"content":"### `delete` - Delete a task","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"leezhanpeng"},"content":"This command will delete a task in your task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"leezhanpeng"},"content":"Format:","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"leezhanpeng"},"content":"`delete [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"leezhanpeng"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"leezhanpeng"},"content":"`delete 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"leezhanpeng"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"leezhanpeng"},"content":"The second task in your list of tasks is deleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"leezhanpeng"},"content":"Noted. I\u0027ve removed this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"leezhanpeng"},"content":" [D][] Assignment (by: Nov 06 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"leezhanpeng"},"content":"Now you have 1 task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"leezhanpeng"},"content":"### `clear` - Delete all tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":177,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"leezhanpeng"},"content":"This command will delete all tasks in your task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":180,"author":{"gitId":"leezhanpeng"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":182,"author":{"gitId":"leezhanpeng"},"content":"`clear`","lastModifiedDate":"2023-09-16"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"leezhanpeng"},"content":"All tasks are cleared in your task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"leezhanpeng"},"content":"Understood. I\u0027ve removed every task in your list.","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"leezhanpeng"},"content":"Now your list of tasks is empty!","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"leezhanpeng"},"content":"### `filter` - Filter tasks with relevant date","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":195,"author":{"gitId":"leezhanpeng"},"content":"This command will filter out events that is happening on given date,","lastModifiedDate":"2023-09-16"},{"lineNumber":196,"author":{"gitId":"leezhanpeng"},"content":"and filter out deadlines that have the given date as deadline.","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":198,"author":{"gitId":"leezhanpeng"},"content":"Format:","lastModifiedDate":"2023-09-16"},{"lineNumber":199,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":200,"author":{"gitId":"leezhanpeng"},"content":"`filter [YYYY-MM-DD]`","lastModifiedDate":"2023-09-16"},{"lineNumber":201,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":202,"author":{"gitId":"leezhanpeng"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":203,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":204,"author":{"gitId":"leezhanpeng"},"content":"`filter 2023-11-25`","lastModifiedDate":"2023-09-16"},{"lineNumber":205,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":206,"author":{"gitId":"leezhanpeng"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":207,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":208,"author":{"gitId":"leezhanpeng"},"content":"Events that are happening on given date and deadlines that have the ","lastModifiedDate":"2023-09-16"},{"lineNumber":209,"author":{"gitId":"leezhanpeng"},"content":"given date as deadline are printed out.","lastModifiedDate":"2023-09-16"},{"lineNumber":210,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":211,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":212,"author":{"gitId":"leezhanpeng"},"content":"Here are the tasks that are due on Nov 25 2023:","lastModifiedDate":"2023-09-16"},{"lineNumber":213,"author":{"gitId":"leezhanpeng"},"content":"1. [D][] Assignment (by: Nov 25 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":214,"author":{"gitId":"leezhanpeng"},"content":"2. [D][] Project (by: Nov 25 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"leezhanpeng"},"content":"This is the task that is happening on Nov 25 2023:","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"leezhanpeng"},"content":"1. [E][] Exams (from: Nov 10 2023 to: Dec 02 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":218,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":219,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"leezhanpeng"},"content":"### `find` - Find tasks with relevant keyword","lastModifiedDate":"2023-09-16"},{"lineNumber":221,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":222,"author":{"gitId":"leezhanpeng"},"content":"This command will find tasks that are relevant to given keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":223,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":224,"author":{"gitId":"leezhanpeng"},"content":"Format:","lastModifiedDate":"2023-09-16"},{"lineNumber":225,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":226,"author":{"gitId":"leezhanpeng"},"content":"`find [KEYWORD]`","lastModifiedDate":"2023-09-16"},{"lineNumber":227,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":228,"author":{"gitId":"leezhanpeng"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":229,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":230,"author":{"gitId":"leezhanpeng"},"content":"`find Assignment`","lastModifiedDate":"2023-09-16"},{"lineNumber":231,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":232,"author":{"gitId":"leezhanpeng"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":233,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":234,"author":{"gitId":"leezhanpeng"},"content":"Tasks that contain the word `Assignment` will be shown.","lastModifiedDate":"2023-09-16"},{"lineNumber":235,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":236,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":237,"author":{"gitId":"leezhanpeng"},"content":"Below is/are the task(s) associated with \u0027Assignment\u0027:","lastModifiedDate":"2023-09-16"},{"lineNumber":238,"author":{"gitId":"leezhanpeng"},"content":"1.[D][] Assignment (by: Nov 25 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":239,"author":{"gitId":"leezhanpeng"},"content":"2.[T][] CS2103 Assignment","lastModifiedDate":"2023-09-16"},{"lineNumber":240,"author":{"gitId":"leezhanpeng"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":241,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":242,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":243,"author":{"gitId":"leezhanpeng"},"content":"### `bye` - Exit the application","lastModifiedDate":"2023-09-16"},{"lineNumber":244,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":245,"author":{"gitId":"leezhanpeng"},"content":"This command will exit your application.","lastModifiedDate":"2023-09-16"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":247,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":249,"author":{"gitId":"leezhanpeng"},"content":"`bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":251,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":252,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":253,"author":{"gitId":"leezhanpeng"},"content":"Robert will close after a few seconds.","lastModifiedDate":"2023-09-16"},{"lineNumber":254,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":255,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":256,"author":{"gitId":"leezhanpeng"},"content":"Goodbye. Hope to see you again soon! Closing in a few seconds...","lastModifiedDate":"2023-09-16"},{"lineNumber":257,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"leezhanpeng":230,"-":27}},{"path":"src/main/java/robert/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":12}},{"path":"src/main/java/robert/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import robert.ui.MainWindow;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" * A GUI for Robert using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" private Robert robert \u003d new Robert(\"data/tasks.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setRobert(robert);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" stage.setTitle(\"Robert\");","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":36}},{"path":"src/main/java/robert/Robert.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.parser.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * Simulates a robot application named Robert. It is designed to receive user commands","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * for task tracking. Some commands include adding and deleting tasks, marking and","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * unmarking tasks, as well as listing and clearing tasks that were stored.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"public class Robert {","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" /** Storage to upload and download stored tasks in hard disk */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" /** List of tasks stored */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" /** Boolean to indicate if txt file was read with an error */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" private boolean hasReadFileWithError \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" /** Boolean to indicate if Robert is still running */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" private boolean isRunning;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Robert.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @param filePath path from root folder to data folder which","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * stores a txt file that contains previous saved tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" * If path does not lead to the txt file/directory, new","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" * file/directory will be created.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" public Robert(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" this.tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" } catch (RobertException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" this.hasReadFileWithError \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" this.isRunning \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" * Obtains a response from Robert when given a user input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" * @param userInput a string of user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" * @return String generated by Robert.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" public String getResponse(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" String outputMessage;","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" Command c \u003d Parser.parse(userInput);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" outputMessage \u003d c.execute(this.tasks, this.storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" this.storage.saveToDisk(this.tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" this.isRunning \u003d !c.isExit();","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" } catch (RobertException e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" outputMessage \u003d e.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" return outputMessage;","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" public boolean hasReadFileWithError() {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" return this.hasReadFileWithError;","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" public boolean isRunning() {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" return this.isRunning;","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" public String getWelcomeMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":" return \"Hello! I\u0027m Robert, your Personal Assistant Chatbot.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" + \"What can I do for you today?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" public String getErrorReadingFileMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" return \"WARNING: Your previously stored tasks seems to be corrupted.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" + \"As a result, your previous lists of tasks will now be cleared. Apologies!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":88}},{"path":"src/main/java/robert/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * An Add extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Adds new task to","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" * tasks given the task\u0027s necessary parameters such as description","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * and dates.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" /** The task to be added to tasks */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" private final Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * Constructs AddCommand using description. ToDo task is","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * initialised.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" public AddCommand(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" assert !description.isEmpty() : \"Description must not be empty\";","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" this.task \u003d new ToDo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" * Constructs AddCommand using description, a fromDate and a toDate. Event task is","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" * initialised.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" * @param fromDate the date where the task begins.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" * @param toDate the date where the task ends.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the toDate comes before the fromDate.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" public AddCommand(String description, LocalDate fromDate, LocalDate toDate) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" assert !description.isEmpty() : \"Description must not be empty\";","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" this.task \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" * Constructs AddCommand using description and a byDate. Deadline task is","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" * initialised.","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" * @param byDate the date where the task is due.","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" public AddCommand(String description, LocalDate byDate) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" assert !description.isEmpty() : \"Description must not be empty\";","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" this.task \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" * Executes the addition of task to tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" if (tasks.isInTaskList(this.task.getDescription())) {","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" return \"Hmm... You already have this task in your list.\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" + \"Check your list of tasks by using the \u0027list\u0027 command.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" return \"Got it. I have added this task:\\n \" + this.task","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" + \"\\nNow you have \" + tasks.getTaskCount() + \" \"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" + (tasks.getTaskCount() \u003e 1 ? \"tasks\" : \"task\")","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" + \" in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":87}},{"path":"src/main/java/robert/command/BlankCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * A Blank extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to indicate a lack of response by","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * Robert due to empty user input.","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"public class BlankCommand extends Command {","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * Executes nothing.","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @return Empty string.","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" return \"\";","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"leezhanpeng":27}},{"path":"src/main/java/robert/command/ClearCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * A Clear extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Removes all tasks from","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"public class ClearCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * Executes the removal of all tasks from the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" tasks.clearTasks();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" return \"Understood. I\u0027ve removed every task in your list.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" + \"Now your list of tasks is empty!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":29}},{"path":"src/main/java/robert/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * The base abstract class for commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" * Executes the intended task for its subclass.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException to allow subclasses to override the function with the throw property.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" public abstract String execute(TaskList tasks, Storage storage) throws RobertException;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * @return false.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":32}},{"path":"src/main/java/robert/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * A Delete extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Deletes a particular task","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * from the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /** The index of task to be deleted */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * Constructs DeleteCommand using the index of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * @param taskIndex the index of the task to be deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" assert taskIndex \u003e\u003d 0 : \"Index of task should never be negative\";","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * Executes the removal of task.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" Task deletedTask \u003d tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" return \"Noted. I\u0027ve removed this task:\\n \" + deletedTask","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" + \"\\nNow you have \" + tasks.getTaskCount() + \" \"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" + (tasks.getTaskCount() \u003e 1 ? \"tasks\" : \"task\")","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" + \" in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":46}},{"path":"src/main/java/robert/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * An Exit extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to indicate the exit of","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * Robert.","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * Retrieves a boolean on whether the Command is an Exit Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * @return true.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * Executes the display of exit message.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" return \"Goodbye. Hope to see you again soon! Closing in a few seconds...\";","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":37}},{"path":"src/main/java/robert/command/FilterCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * A Filter extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to filter out","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" * tasks that have deadline or an event happening on a particular date.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":"public class FilterCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" /** The date that is used for querying */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate date;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" * Constructs FilterCommand using a date.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * @param date the date to be used for querying of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" public FilterCommand(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * Executes the filtering of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" int deadlineIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" StringBuilder deadlinesOnDate \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" if (task instanceof Deadline \u0026\u0026 ((Deadline) task).isDueOn(this.date)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" deadlineIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" deadlinesOnDate.append(deadlineIndex).append(\". \").append(task).append(\"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" int eventIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" StringBuilder eventsHappeningOnDate \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" if (task instanceof Event \u0026\u0026 ((Event) task).isHappeningOn(this.date)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" eventIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" eventsHappeningOnDate.append(eventIndex).append(\". \").append(task).append(\"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" if (deadlineIndex \u003d\u003d 0 \u0026\u0026 eventIndex \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" return \"There are no tasks that are due and happening on \"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" + this.date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \".\";","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" if (deadlineIndex \u003e 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" output +\u003d (deadlineIndex \u003d\u003d 1 ? \"This is the task that is\" : \"Here are the tasks that are\")","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" + \" due on \" + this.date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \":\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" output +\u003d deadlinesOnDate.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" if (eventIndex \u003e 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" output +\u003d (eventIndex \u003d\u003d 1 ? \"This is the task that is\" : \"Here are the tasks that are\")","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" + \" happening on \" + this.date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \":\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" output +\u003d eventsHappeningOnDate.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" return output;","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":79}},{"path":"src/main/java/robert/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * A Find extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to find tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * that are associated to a particular keyword.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /** The keyword that is used for querying */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" private final String keyword;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * Constructs FindCommand using a date.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * @param keyword the keyword to be used for querying of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * Executes the finding of associated tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" int taskIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" StringBuilder taskListing \u003d new StringBuilder(\"Below is/are the task(s) associated with \u0027\"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" + this.keyword + \"\u0027:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" if (task.getDescription().contains(this.keyword)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" taskIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" taskListing.append(String.format(\"%d. %s\\n\", taskIndex, task));","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" if (taskIndex !\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" return taskListing.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" return \"Sorry, there are no tasks that are associated with \u0027\"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" + this.keyword + \"\u0027.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":56}},{"path":"src/main/java/robert/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * A List extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to list out","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * all stored tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * Executes the listing of all stored tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException as a mean of overriding the function.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" assert tasks.getTaskCount() \u003e 0 : \"The number of tasks should not be negative\";","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" if (tasks.getTaskCount() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" return \"You do not have any tasks stored. Add one!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" int taskIndex \u003d 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" StringBuilder taskListing \u003d new StringBuilder(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" taskListing.append(String.format(\"%d. %s\\n\", taskIndex, task));","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" taskIndex++;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" return taskListing.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":41}},{"path":"src/main/java/robert/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * A Mark extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to mark","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * a particular task in the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" /** The index of task to be marked */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" private final int markIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * Constructs MarkCommand using an index.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @param markIndex the index of task to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" public MarkCommand(int markIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" assert markIndex \u003e\u003d 0 : \"Index of task should never be negative\";","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" this.markIndex \u003d markIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" * Executes the marking of the particular task.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" tasks.markTask(this.markIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n \"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" + tasks.getTask(this.markIndex);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":43}},{"path":"src/main/java/robert/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import robert.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * An Unmark extension of the \u003ctt\u003eCommand\u003c/tt\u003e class. Used to unmark","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * a particular task in the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" /** The index of task to be unmarked */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" private final int unmarkIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * Constructs UnmarkCommand using an index.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @param unmarkIndex the index of task to be unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" public UnmarkCommand(int unmarkIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" assert unmarkIndex \u003e\u003d 0 : \"Index of task should never be negative\";","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" this.unmarkIndex \u003d unmarkIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" * Executes the unmarking of the particular task.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks the list of tasks to be added onto.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @param storage the storage that loads stored tasks from hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * @return String of output message.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" public String execute(TaskList tasks, Storage storage) throws RobertException {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" tasks.unmarkTask(this.unmarkIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" return \"Ok, I\u0027ve unmarked this task as not done yet:\\n \"","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" + tasks.getTask(this.unmarkIndex);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":43}},{"path":"src/main/java/robert/exception/RobertException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":" * An exception that is thrown when an error occurs within Robert.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"public class RobertException extends Exception {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" /** The error message */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" private final String errorMessage;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * Constructs RobertException using an error message.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * @param errorMessage the error message to be tagged to the exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" public RobertException(String errorMessage) {","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" super(\"OOPS!!! \" + errorMessage);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" this.errorMessage \u003d \"OOPS!!! \" + errorMessage;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" * Returns the error message unique to Robert.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * @return the error message.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" return errorMessage;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":32}},{"path":"src/main/java/robert/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.AddCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.BlankCommand;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ClearCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.DeleteCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ExitCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.FilterCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.FindCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ListCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.MarkCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.UnmarkCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * A parser that is used to read in and manipulate user commands.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * Parses the line of command given by the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * @param fullCommand the line of command to be parsed.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" * @return Command associated to the line of command given by the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" public static Command parse(String fullCommand) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" String[] splitCommand \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" switch (splitCommand[0]) {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" case \"\":","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" return new BlankCommand();","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" case \"list\":","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" return parseListCommand(splitCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" case \"bye\":","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" return parseExitCommand(splitCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" case \"mark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" return parseMarkCommand(splitCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" return parseUnmarkCommand(splitCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" return parseTodoCommand(splitCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" case \"event\":","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" return parseEventCommand(splitCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" return parseDeadlineCommand(splitCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" case \"delete\":","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" return parseDeleteCommand(splitCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" case \"clear\":","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" return new ClearCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" case \"filter\":","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" return parseFilterCommand(splitCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" case \"find\":","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" return parseFindCommand(splitCommand);","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"I\u0027m sorry, but I don\u0027t know what that command means :(\");","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" * Parses list command.","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" * @param splitCommand the list command that is to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" * @return ListCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" private static ListCommand parseListCommand(String[] splitCommand) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003e 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Unnecessary parameters added.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" + \"Type \u0027list\u0027 if you intend to list your tasks.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" * Parses exit command.","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" * @param splitCommand the exit command that is to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" * @return ExitCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" private static ExitCommand parseExitCommand(String[] splitCommand) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003e 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Additional parameters added.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" + \"Did you intend to exit? If not, be careful!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" * Parses mark command.","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":" * @param splitCommand the mark command that is to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":" * @return MarkCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"leezhanpeng"},"content":" private static MarkCommand parseMarkCommand(String[] splitCommand) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The index used to mark a task cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add an index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"leezhanpeng"},"content":" int markIndex \u003d Integer.parseInt(splitCommand[1]) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"leezhanpeng"},"content":" return new MarkCommand(markIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"leezhanpeng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Cannot convert given index as integer.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"leezhanpeng"},"content":" + \"Please use proper integer as the index!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"leezhanpeng"},"content":" * Parses unmark command.","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"leezhanpeng"},"content":" * @param splitCommand the unmark command that is to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"leezhanpeng"},"content":" * @return UnmarkCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"leezhanpeng"},"content":" private static UnmarkCommand parseUnmarkCommand(String[] splitCommand) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The index used to unmark a task cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add an index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"leezhanpeng"},"content":" int unmarkIndex \u003d Integer.parseInt(splitCommand[1]) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"leezhanpeng"},"content":" return new UnmarkCommand(unmarkIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"leezhanpeng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Cannot convert given index as integer.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"leezhanpeng"},"content":" + \"Please use proper integer as the index!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"leezhanpeng"},"content":" * Parses todo command.","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"leezhanpeng"},"content":" * @param splitCommand the todo command that is to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"leezhanpeng"},"content":" * @return AddCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"leezhanpeng"},"content":" private static AddCommand parseTodoCommand(String[] splitCommand) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The description of a todo cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add a description to your todo task.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"leezhanpeng"},"content":" return new AddCommand(splitCommand[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"leezhanpeng"},"content":" * Parses event command.","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"leezhanpeng"},"content":" * @param splitCommand the event command that is to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"leezhanpeng"},"content":" * @return AddCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"leezhanpeng"},"content":" private static AddCommand parseEventCommand(String[] splitCommand) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The description of an event cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add a description to your event task.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"leezhanpeng"},"content":" if (!splitCommand[1].contains(\"/from\") || !splitCommand[1].contains(\"/to\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The event\u0027s start and/or end time is/are not specified properly.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"leezhanpeng"},"content":" + \"Please make sure \u0027/from\u0027 and \u0027/to\u0027 are properly indicated.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"leezhanpeng"},"content":" String[] eventParameters \u003d splitCommand[1].split(\" /from \");","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"leezhanpeng"},"content":" if (eventParameters.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"There are parameters missing.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"leezhanpeng"},"content":" + \"Please make sure you have both the task description and the due date entered.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"leezhanpeng"},"content":" String eventDescription \u003d eventParameters[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"leezhanpeng"},"content":" String[] dateParameters \u003d eventParameters[1].split(\" /to \");","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"leezhanpeng"},"content":" if (dateParameters.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"There are parameters missing.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"leezhanpeng"},"content":" + \"Please make sure you have both the task description and the due date entered.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"leezhanpeng"},"content":" LocalDate[] parsedDates \u003d parseDates(dateParameters[0], dateParameters[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"leezhanpeng"},"content":" return new AddCommand(eventDescription, parsedDates[0], parsedDates[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"leezhanpeng"},"content":" * Parses deadline command.","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"leezhanpeng"},"content":" * @param splitCommand the deadline command that is to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"leezhanpeng"},"content":" * @return AddCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-09-16"},{"lineNumber":195,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":196,"author":{"gitId":"leezhanpeng"},"content":" private static AddCommand parseDeadlineCommand(String[] splitCommand) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The description of a deadline cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":199,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add a description to your deadline task.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":200,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":201,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":202,"author":{"gitId":"leezhanpeng"},"content":" String undividedDeadlineParameters \u003d splitCommand[1];","lastModifiedDate":"2023-09-11"},{"lineNumber":203,"author":{"gitId":"leezhanpeng"},"content":" if (!undividedDeadlineParameters.contains(\"/by\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":204,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The deadline\u0027s due date is not specified properly.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":205,"author":{"gitId":"leezhanpeng"},"content":" + \"Please make sure \u0027/by\u0027 is properly indicated.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":206,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":207,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"leezhanpeng"},"content":" String[] deadlineParameters \u003d undividedDeadlineParameters.split(\" /by \");","lastModifiedDate":"2023-09-11"},{"lineNumber":209,"author":{"gitId":"leezhanpeng"},"content":" if (deadlineParameters.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"There are parameters missing.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":211,"author":{"gitId":"leezhanpeng"},"content":" + \"Please make sure you have both the task description and the due date entered.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":212,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":213,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":214,"author":{"gitId":"leezhanpeng"},"content":" String deadlineDescription \u003d deadlineParameters[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":215,"author":{"gitId":"leezhanpeng"},"content":" LocalDate[] parsedDates \u003d parseDates(deadlineParameters[1]);","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"leezhanpeng"},"content":" return new AddCommand(deadlineDescription, parsedDates[0]);","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":219,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"leezhanpeng"},"content":" * Parses delete command.","lastModifiedDate":"2023-09-16"},{"lineNumber":221,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":222,"author":{"gitId":"leezhanpeng"},"content":" * @param splitCommand the delete command that is to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":223,"author":{"gitId":"leezhanpeng"},"content":" * @return DeleteCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":224,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-09-16"},{"lineNumber":225,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":226,"author":{"gitId":"leezhanpeng"},"content":" private static DeleteCommand parseDeleteCommand(String[] splitCommand) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":227,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":228,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The index used to delete a task cannot be empty.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":229,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add an index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":230,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":231,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":232,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":233,"author":{"gitId":"leezhanpeng"},"content":" int deleteIndex \u003d Integer.parseInt(splitCommand[1]) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":234,"author":{"gitId":"leezhanpeng"},"content":" return new DeleteCommand(deleteIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":235,"author":{"gitId":"leezhanpeng"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":236,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Cannot convert given index as integer.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":237,"author":{"gitId":"leezhanpeng"},"content":" + \"Please use proper integer as the index!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":238,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":239,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":240,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":241,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":242,"author":{"gitId":"leezhanpeng"},"content":" * Parses filter command.","lastModifiedDate":"2023-09-16"},{"lineNumber":243,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":244,"author":{"gitId":"leezhanpeng"},"content":" * @param splitCommand the filter command that is to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":245,"author":{"gitId":"leezhanpeng"},"content":" * @return FilterCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":246,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-09-16"},{"lineNumber":247,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":248,"author":{"gitId":"leezhanpeng"},"content":" private static FilterCommand parseFilterCommand(String[] splitCommand) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":249,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":250,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The date of the tasks is not indicated.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":251,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add a date in the format \u0027YYYY-MM-DD\u0027.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":252,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":253,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":254,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":255,"author":{"gitId":"leezhanpeng"},"content":" LocalDate date \u003d parseDates(splitCommand[1])[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":256,"author":{"gitId":"leezhanpeng"},"content":" return new FilterCommand(date);","lastModifiedDate":"2023-08-27"},{"lineNumber":257,"author":{"gitId":"leezhanpeng"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":258,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Your date seems to be incorrect.\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":259,"author":{"gitId":"leezhanpeng"},"content":" + \"Please write your date in the format of \u0027YYYY-MM-DD\u0027.\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":260,"author":{"gitId":"leezhanpeng"},"content":" + \"If it is in the correct format, make sure the correct \"","lastModifiedDate":"2023-09-16"},{"lineNumber":261,"author":{"gitId":"leezhanpeng"},"content":" + \"values are written.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":262,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":263,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":264,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":265,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":266,"author":{"gitId":"leezhanpeng"},"content":" * Parses find command.","lastModifiedDate":"2023-09-16"},{"lineNumber":267,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":268,"author":{"gitId":"leezhanpeng"},"content":" * @param splitCommand the find command that is to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":269,"author":{"gitId":"leezhanpeng"},"content":" * @return FindCommand.","lastModifiedDate":"2023-09-16"},{"lineNumber":270,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the line of command is of wrong format.","lastModifiedDate":"2023-09-16"},{"lineNumber":271,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":272,"author":{"gitId":"leezhanpeng"},"content":" private static FindCommand parseFindCommand(String[] splitCommand) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":273,"author":{"gitId":"leezhanpeng"},"content":" if (splitCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":274,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The keyword is not indicated.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":275,"author":{"gitId":"leezhanpeng"},"content":" + \"Please add a keyword so that I can find relevant tasks.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":276,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":277,"author":{"gitId":"leezhanpeng"},"content":" return new FindCommand(splitCommand[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":278,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":279,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":280,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":281,"author":{"gitId":"leezhanpeng"},"content":" * Parses given dates from String to LocalDate.","lastModifiedDate":"2023-09-16"},{"lineNumber":282,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":283,"author":{"gitId":"leezhanpeng"},"content":" * @param stringDate a varargs of dates to be converted to LocalDate.","lastModifiedDate":"2023-09-16"},{"lineNumber":284,"author":{"gitId":"leezhanpeng"},"content":" * @return An array of parsed LocalDates.","lastModifiedDate":"2023-09-16"},{"lineNumber":285,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the dates are of incorrect format.","lastModifiedDate":"2023-09-16"},{"lineNumber":286,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":287,"author":{"gitId":"leezhanpeng"},"content":" private static LocalDate[] parseDates(String ... stringDate) throws RobertException {","lastModifiedDate":"2023-09-16"},{"lineNumber":288,"author":{"gitId":"leezhanpeng"},"content":" LocalDate[] parsedDates \u003d new LocalDate[stringDate.length];","lastModifiedDate":"2023-09-16"},{"lineNumber":289,"author":{"gitId":"leezhanpeng"},"content":" for (int i \u003d 0; i \u003c stringDate.length; i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":290,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":291,"author":{"gitId":"leezhanpeng"},"content":" LocalDate date \u003d LocalDate.parse(stringDate[i]);","lastModifiedDate":"2023-09-16"},{"lineNumber":292,"author":{"gitId":"leezhanpeng"},"content":" parsedDates[i] \u003d date;","lastModifiedDate":"2023-09-16"},{"lineNumber":293,"author":{"gitId":"leezhanpeng"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":294,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Your date seems to be incorrect.\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":295,"author":{"gitId":"leezhanpeng"},"content":" + \"Please write your date in the format of \u0027YYYY-MM-DD\u0027.\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":296,"author":{"gitId":"leezhanpeng"},"content":" + \"If it is in the correct format, make sure the correct \"","lastModifiedDate":"2023-09-16"},{"lineNumber":297,"author":{"gitId":"leezhanpeng"},"content":" + \"values are written.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":298,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":299,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":300,"author":{"gitId":"leezhanpeng"},"content":" return parsedDates;","lastModifiedDate":"2023-09-16"},{"lineNumber":301,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":302,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"leezhanpeng":302}},{"path":"src/main/java/robert/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"import robert.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * A class that is used to load stored tasks to and from the hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" /** The file used to store the data of list of tasks */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" private final File tasksFile;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Storage using a file path.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param filePath the file path that stores the data of list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" Path tasksFilePath \u003d Paths.get(System.getProperty(\"user.dir\"), filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" this.tasksFile \u003d new File(tasksFilePath.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" * Loads the stored tasks from hard disk into Robert.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" * @return an ArrayList of Task stored in the hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if the stored tasks in hard disk is corrupted or wrongly formatted.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" public ArrayList\u003cTask\u003e load() throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" if (!this.tasksFile.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" this.tasksFile.getParentFile().mkdirs();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" this.tasksFile.createNewFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" ArrayList\u003cTask\u003e downloadedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" try (Scanner scanner \u003d new Scanner(this.tasksFile)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" String[] taskParameters \u003d scanner.nextLine().split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" switch (taskParameters[0]) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" ToDo newToDo \u003d new ToDo(taskParameters[2], taskParameters[1].equals(\"1\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" downloadedTasks.add(newToDo);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" LocalDate fromDate \u003d LocalDate.parse(taskParameters[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" LocalDate toDate \u003d LocalDate.parse(taskParameters[4]);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" Event newEvent \u003d new Event(taskParameters[2],","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" fromDate, toDate, taskParameters[1].equals(\"1\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" downloadedTasks.add(newEvent);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" LocalDate byDate \u003d LocalDate.parse(taskParameters[3]);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":" Deadline newDeadline \u003d new Deadline(taskParameters[2],","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" byDate, taskParameters[1].equals(\"1\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" downloadedTasks.add(newDeadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"An unknown task type was identified \"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" + \"when parsing previously stored tasks.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Unable to load data from storage.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" return downloadedTasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":" * Saves the tasks from Robert into the hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks a TaskList that contains all tasks that are currently recorded by Robert.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if there is an issue saving the tasks into the hard disk.","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"leezhanpeng"},"content":" public void saveToDisk(TaskList tasks) throws RobertException {","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"leezhanpeng"},"content":" FileWriter fw \u003d new FileWriter(this.tasksFile.toString(), false);","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"leezhanpeng"},"content":" String storedLine;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"leezhanpeng"},"content":" String taskDone \u003d task.getStatusIcon().equals(\"X\") ? \"1\" : \"0\";","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"leezhanpeng"},"content":" if (task instanceof ToDo) {","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"leezhanpeng"},"content":" storedLine \u003d \"T | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"leezhanpeng"},"content":" + taskDone + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"leezhanpeng"},"content":" + task.getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"leezhanpeng"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"leezhanpeng"},"content":" storedLine \u003d \"E | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"leezhanpeng"},"content":" + taskDone + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"leezhanpeng"},"content":" + task.getDescription() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"leezhanpeng"},"content":" + ((Event) task).getFromDate() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"leezhanpeng"},"content":" + ((Event) task).getToDate();","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"leezhanpeng"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"leezhanpeng"},"content":" storedLine \u003d \"D | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"leezhanpeng"},"content":" + taskDone + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"leezhanpeng"},"content":" + task.getDescription() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"leezhanpeng"},"content":" + ((Deadline) task).getByDate();","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"leezhanpeng"},"content":" fw.write(storedLine + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"leezhanpeng"},"content":" fw.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"leezhanpeng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"There seems to be a problem saving the tasks to your hard disk.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":137}},{"path":"src/main/java/robert/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" * A Deadline variation of the \u003ctt\u003eTask\u003c/tt\u003e class. Used to track","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" * a deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" /** The date that the task is due on */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate byDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Deadline using a description and a due date.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * @param by the due date.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" this.byDate \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Deadline using a description, a due date, and an indication on whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param by the due date.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" * @param isDone whether the task is completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" public Deadline(String description, LocalDate by, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" this.byDate \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" * Gets the due date.","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" * @return the due date.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" public LocalDate getByDate() {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" return this.byDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" * Identifies whether the task is due on a particular date.","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" public boolean isDueOn(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" return this.byDate.equals(date);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" * Returns the string representation of the deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" * @return the string representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" this.byDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":68}},{"path":"src/main/java/robert/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * An Event variation of the \u003ctt\u003eTask\u003c/tt\u003e class. Used to track","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * an event.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /** The date that the task begins from */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate fromDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" /** The date that the task ends on */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate toDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Event using a description, a start date and an end date.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * @param from the starting date.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * @param to the ending date.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if to date is before the from date.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" public Event(String description, LocalDate from, LocalDate to) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" this.fromDate \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" this.toDate \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" if (this.fromDate.isAfter(this.toDate)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The end date of the event is before the start date.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" + \"Please set the dates such that the start date is before/on the end date.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" * Constructs Event using a description, a start date, an end date, and an indication","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" * on whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" * @param from the starting date.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" * @param to the ending date.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" * @param isDone whether the task is completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if to date is before the from date.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" public Event(String description, LocalDate from, LocalDate to, boolean isDone) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" this.fromDate \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" this.toDate \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" if (this.fromDate.isAfter(this.toDate)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"The end date of the event is before the start date.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" + \"Please set the dates such that the start date is before/on the end date.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" * Gets the starting date.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" * @return the start date.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" public LocalDate getFromDate() {","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" return this.fromDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" * Gets the ending date.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" * @return the end date.","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" public LocalDate getToDate() {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" return this.toDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" * Identifies whether the task is happening on a particular date.","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" public boolean isHappeningOn(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" return !(this.toDate.isBefore(date) || this.fromDate.isAfter(date));","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" * Returns the string representation of the event task.","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":" * @return the string representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-08-20"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":" super.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":" this.fromDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")),","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":" this.toDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":101}},{"path":"src/main/java/robert/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":" * The base class for tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" /** The description of the task */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" /** The indication on whether it is marked */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * Constructs a generic task.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * Constructs a generic task.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * @param isDone whether the task is completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" * Gets the description.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" * @return the description.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" return this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" * Gets the status icon.","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" * @return the status icon of either \"X\" or \" \".","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" * Returns the string representation of a generic task.","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" * @return the string representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), description);","lastModifiedDate":"2023-08-20"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":77}},{"path":"src/main/java/robert/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import robert.exception.RobertException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":" * An implementation of the list of tasks using \u003ctt\u003eArrayList\u003c/tt\u003e. Used to track","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" * all tasks that are stored in Robert.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"public class TaskList implements Iterable\u003cTask\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /** The ArrayList of tasks stored */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * Constructs an empty task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" * Constructs a task list with an existing ArrayList of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * @param tasks an ArrayList of tasks for initialisation.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" * Gets the stored task in a particular index.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" * @param taskIndex the index of the task to be retrieved.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" * @return task associated to the index.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" public Task getTask(int taskIndex) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" if (taskIndex \u003c 0 || this.getTaskCount() \u003c\u003d taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Index is out of bounds.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" + \"Please choose a valid index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" return this.tasks.get(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" * Gets the number of tasks stored in the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" * @return the number of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" public int getTaskCount() {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" * Adds task into the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" * @param task the task to be added into the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" * Deletes task from the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" * @param taskIndex the index of the task to be deleted from the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" * @return the deleted task.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" public Task deleteTask(int taskIndex) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" if (taskIndex \u003c 0 || this.getTaskCount() \u003c\u003d taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Index is out of bounds.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" + \"Please choose a valid index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" Task deletedTask \u003d this.tasks.get(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" this.tasks.remove(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" return deletedTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" * Marks a task from the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":" * @param taskIndex the index of the task to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":" public void markTask(int taskIndex) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":" if (taskIndex \u003c 0 || this.getTaskCount() \u003c\u003d taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Index is out of bounds.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":" + \"Please choose a valid index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" this.tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" * Unmarks a task from the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"leezhanpeng"},"content":" * @param taskIndex the index of the task to be unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"leezhanpeng"},"content":" * @throws RobertException if index is out of bounds of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"leezhanpeng"},"content":" public void unmarkTask(int taskIndex) throws RobertException {","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"leezhanpeng"},"content":" if (taskIndex \u003c 0 || this.getTaskCount() \u003c\u003d taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"leezhanpeng"},"content":" throw new RobertException(\"Index is out of bounds.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"leezhanpeng"},"content":" + \"Please choose a valid index.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"leezhanpeng"},"content":" this.tasks.get(taskIndex).markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"leezhanpeng"},"content":" * Removes all tasks from the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"leezhanpeng"},"content":" public void clearTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"leezhanpeng"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"leezhanpeng"},"content":" * Checks whether a task exist in the task list.","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"leezhanpeng"},"content":" * @param description the exact description of the task to be identified.","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"leezhanpeng"},"content":" * @return boolean on whether the task is found.","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"leezhanpeng"},"content":" public boolean isInTaskList(String description) {","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"leezhanpeng"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"leezhanpeng"},"content":" if (task.getDescription().equals(description)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"leezhanpeng"},"content":" return true;","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"leezhanpeng"},"content":" return false;","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"leezhanpeng"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"leezhanpeng"},"content":" return new TaskIterator();","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"leezhanpeng"},"content":" * Initialises an iterator.","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"leezhanpeng"},"content":" private class TaskIterator implements Iterator\u003cTask\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"leezhanpeng"},"content":" /** The index of the task during iteration */","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"leezhanpeng"},"content":" private int currentIndex \u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"leezhanpeng"},"content":" public boolean hasNext() {","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"leezhanpeng"},"content":" return currentIndex \u003c tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"leezhanpeng"},"content":" public Task next() {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"leezhanpeng"},"content":" return tasks.get(currentIndex++);","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":159}},{"path":"src/main/java/robert/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":" * An Event variation of the \u003ctt\u003eTask\u003c/tt\u003e class. Used to track","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":" * a todo.","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" * Constructs ToDo using a description.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" * Constructs ToDo using a description and an indication","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" * on whether it is marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" * @param isDone whether the task is completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * Returns the string representation of the todo task.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" * @return the string representation.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":40}},{"path":"src/main/java/robert/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" * A dialogue box controller that is responsible for the output of user and Robert.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" * Constructs the dialogue box.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" * @param text message to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" * @param img image to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" public static DialogBox getRobertDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":67}},{"path":"src/main/java/robert/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import robert.Robert;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" private static final int MAX_INPUT_LENGTH \u003d 45;","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" private Robert robert;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" private Image robertImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaRobert.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" * Initialises the GUI of Robert with some configurations.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" displayPicture.setImage(new Image(this.getClass().getResourceAsStream(\"/images/DaRobert.png\")));","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" * Sets Robert as the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" * @param robert an instance of the chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" public void setRobert(Robert robert) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" this.robert \u003d robert;","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" if (this.robert.hasReadFileWithError()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" displayRobertTextBubble(robert.getErrorReadingFileMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" displayRobertTextBubble(robert.getWelcomeMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"leezhanpeng"},"content":" * Handles user input by funnelling it into Robert. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"leezhanpeng"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"leezhanpeng"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"leezhanpeng"},"content":" String response \u003d robert.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"leezhanpeng"},"content":" if (!response.isEmpty()) {","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"leezhanpeng"},"content":" displayUserTextBubble(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"leezhanpeng"},"content":" displayRobertTextBubble(response);","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"leezhanpeng"},"content":" scrollDown();","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"leezhanpeng"},"content":" userInput.clear();","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"leezhanpeng"},"content":" if (!this.robert.isRunning()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"leezhanpeng"},"content":" initialiseClosingSequence();","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"leezhanpeng"},"content":" return;","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"leezhanpeng"},"content":" * Displays command written by user.","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"leezhanpeng"},"content":" private void displayUserTextBubble(String text) {","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"leezhanpeng"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"leezhanpeng"},"content":" DialogBox.getUserDialog(text, userImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"leezhanpeng"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"leezhanpeng"},"content":" * Displays reply by Robert.","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"leezhanpeng"},"content":" private void displayRobertTextBubble(String text) {","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"leezhanpeng"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"leezhanpeng"},"content":" DialogBox.getRobertDialog(text, robertImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"leezhanpeng"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"leezhanpeng"},"content":" * Initialises buffer time for exiting GUI.","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"leezhanpeng"},"content":" private void initialiseClosingSequence() {","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"leezhanpeng"},"content":" userInput.setVisible(false);","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"leezhanpeng"},"content":" new Thread(() -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"leezhanpeng"},"content":" Thread.sleep(2500);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"leezhanpeng"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"leezhanpeng"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"leezhanpeng"},"content":" Platform.exit();","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"leezhanpeng"},"content":" }).start();","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"leezhanpeng"},"content":" * Scrolls down the GUI for new text bubbles.","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"leezhanpeng"},"content":" private void scrollDown() {","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"leezhanpeng"},"content":" scrollPane.applyCss();","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"leezhanpeng"},"content":" scrollPane.layout();","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"leezhanpeng"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"leezhanpeng"},"content":" * Restricts the input length of user commands.","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"leezhanpeng"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"leezhanpeng"},"content":" private void restrictInputLength() {","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"leezhanpeng"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"leezhanpeng"},"content":" if (input.length() \u003e MAX_INPUT_LENGTH) {","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"leezhanpeng"},"content":" userInput.setText(input.substring(0, MAX_INPUT_LENGTH));","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"leezhanpeng"},"content":" userInput.positionCaret(MAX_INPUT_LENGTH);","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":138}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.text.TextFlow?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"500.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-16"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" \u003cTextFlow\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" \u003cLabel fx:id\u003d\"dialog\" maxWidth\u003d\"380.0\" style\u003d\"-fx-background-color: #CCCCCC; -fx-background-radius: 5; -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.5), 10, 0, 0, 0); -fx-font-size: large;\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" \u003c/TextFlow\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" style\u003d\"-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.5), 10, 0, 0, 0);\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":32}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"750.0\" prefWidth\u003d\"500.0\" style\u003d\"-fx-background-insets: 0, 0, 0, 0;\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"robert.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" layoutY\u003d\"69.0\" prefHeight\u003d\"620.0\" prefWidth\u003d\"500.0\" style\u003d\"-fx-background-insets: 0, 0, 0, 0;\" vbarPolicy\u003d\"NEVER\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" focusTraversable\u003d\"true\" prefHeight\u003d\"620.0\" prefWidth\u003d\"500.0\" style\u003d\"-fx-background-color: #EEEEEE; -fx-background-insets: 0, 0, 0, 0;\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" \u003cHBox alignment\u003d\"CENTER_LEFT\" prefHeight\u003d\"70.0\" prefWidth\u003d\"500.0\" style\u003d\"-fx-border-color: #999999; -fx-border-width: 0 0 1 0;\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets left\u003d\"30.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" \u003cVBox alignment\u003d\"CENTER_LEFT\" prefHeight\u003d\"70.0\" prefWidth\u003d\"410.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" \u003cLabel text\u003d\"Robert - Your Personal Assistant\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont name\u003d\"System Bold\" size\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" \u003cLabel text\u003d\"Always available\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" \u003cHBox alignment\u003d\"CENTER\" layoutY\u003d\"680.0\" prefHeight\u003d\"70.0\" prefWidth\u003d\"500.0\" style\u003d\"-fx-background-color: #EEEEEE; -fx-background-insets: 0, 0, 0, 0;\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" \u003cTextField fx:id\u003d\"userInput\" onAction\u003d\"#handleUserInput\" onKeyTyped\u003d\"#restrictInputLength\" prefHeight\u003d\"42.0\" prefWidth\u003d\"400.0\" promptText\u003d\"Command\" style\u003d\"-fx-font-size: large; -fx-background-insets: 0, 0, 0, 0; -fx-background-radius: 20;\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" \u003cButton fx:id\u003d\"SendButton\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"30.0\" prefWidth\u003d\"60.0\" style\u003d\"-fx-background-color: #7393B3; -fx-background-radius: 50;\" text\u003d\"Send\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" \u003cInsets left\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" \u003cFont size\u003d\"13.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"leezhanpeng"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"leezhanpeng"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"leezhanpeng":58}},{"path":"src/test/java/robert/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.AddCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ClearCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ExitCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.FilterCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"import robert.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" public void testReturnedCommandType_nonErrorCommand_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"list\") instanceof ListCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"bye\") instanceof ExitCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"mark 1\") instanceof MarkCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"unmark 1\") instanceof UnmarkCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"todo swim\") instanceof AddCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"event marathon /from 2023-05-11 \"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" + \"/to 2023-05-13\") instanceof AddCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"deadline assignment \"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" + \"/by 2023-07-29\") instanceof AddCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"delete 1\") instanceof DeleteCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"clear\") instanceof ClearCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(Parser.parse(\"filter 2022-02-02\") instanceof FilterCommand);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":38}},{"path":"src/test/java/robert/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate sampleDateOne \u003d LocalDate.parse(\"2023-05-17\");","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate sampleDateTwo \u003d LocalDate.parse(\"2022-11-02\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" public void dateRetrieval() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(this.sampleDateOne.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" new Deadline(\"DEADLINETEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne).getByDate().toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" public void dueOnChecker() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(new Deadline(\"DEADLINETEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne).isDueOn(this.sampleDateOne));","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" assertFalse(new Deadline(\"DEADLINETEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne).isDueOn(this.sampleDateTwo));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":30}},{"path":"src/test/java/robert/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"public class EventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate sampleDateOne \u003d LocalDate.parse(\"2022-05-17\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate sampleDateTwo \u003d LocalDate.parse(\"2023-11-02\");","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" private final LocalDate sampleDateThree \u003d LocalDate.parse(\"2021-07-29\");","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" public void dateRetrieval() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(this.sampleDateOne.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" new Event(\"EVENTTEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne, this.sampleDateTwo).getFromDate().toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(this.sampleDateTwo.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" new Event(\"EVENTTEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne, this.sampleDateTwo).getToDate().toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" public void happeningOnChecker() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" assertTrue(new Event(\"EVENTTEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne, this.sampleDateTwo).isHappeningOn(this.sampleDateOne));","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" assertFalse(new Event(\"EVENTTEST\",","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" this.sampleDateOne, this.sampleDateTwo).isHappeningOn(this.sampleDateThree));","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" public void eventInitialise_toDateBeforeFromDate_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" new Event(\"EVENTTEST\", this.sampleDateTwo, this.sampleDateOne);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(\"OOPS!!! The end date of the event is before the start date.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":" + \"Please set the dates such that the start date is before/on the end date.\",","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"leezhanpeng"},"content":" e.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":56}},{"path":"src/test/java/robert/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":" private final ArrayList\u003cTask\u003e sampleTaskArrayList \u003d new ArrayList\u003c\u003e(","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" Arrays.asList(new TaskStub(), new TaskStub(), new TaskStub()));","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" public void testGetters() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(\"[X] TASKSTUB\",","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" new TaskList(this.sampleTaskArrayList).getTask(1).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(3,","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" new TaskList(this.sampleTaskArrayList).getTaskCount());","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" public void testDeletion_indexInBound_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(\"[X] TASKSTUB\",","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":" new TaskList(this.sampleTaskArrayList).deleteTask(1).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" public void testDeletion_indexOutOfBound_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(\"[X] TASKSTUB\",","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" new TaskList(this.sampleTaskArrayList).deleteTask(10).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" assertEquals(\"OOPS!!! Index is out of bounds.\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" + \"Please choose a valid index.\", e.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":50}},{"path":"src/test/java/robert/task/TaskStub.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"package robert.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":" * The stub class for tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":" * @author Lee Zhan Peng","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"public class TaskStub extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":" /** The description of the task */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"leezhanpeng"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"leezhanpeng"},"content":" /** The indication on whether it is marked */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"leezhanpeng"},"content":" private final boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"leezhanpeng"},"content":" * Constructs a generic task stub.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"leezhanpeng"},"content":" public TaskStub() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"leezhanpeng"},"content":" super(\"TASKSTUB\", true);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"leezhanpeng"},"content":" this.description \u003d \"TASKSTUB\";","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"leezhanpeng"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"leezhanpeng"},"content":" * A getter of the description.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"leezhanpeng"},"content":" * @return string \"TASKSTUB\".","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"leezhanpeng"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"leezhanpeng"},"content":" return \"TASKSTUB\";","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"leezhanpeng"},"content":" * A getter of the description.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"leezhanpeng"},"content":" * @return string \"X\".","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"leezhanpeng"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"leezhanpeng"},"content":" return \"X\"; // mark done task with X","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"leezhanpeng"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"leezhanpeng"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"leezhanpeng"},"content":" * Returns the string representation of a generic task.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"leezhanpeng"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"leezhanpeng"},"content":" * @return the string representation.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"leezhanpeng"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"leezhanpeng"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"leezhanpeng"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"leezhanpeng"},"content":" return \"[X] \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"leezhanpeng"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"leezhanpeng"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"leezhanpeng":52}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"leezhanpeng"},"content":"todo sweep floor","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"leezhanpeng"},"content":"event marathon /from Saturday 8am /to 2pm","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"leezhanpeng"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"leezhanpeng"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"leezhanpeng"},"content":"deadline cs2103 assignment /by 1 Sept","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"leezhanpeng"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"leezhanpeng"},"content":"unmark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"leezhanpeng"},"content":"mark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"leezhanpeng"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"leezhanpeng"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"leezhanpeng":10}},{"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":"leezhanpeng"},"content":"java -classpath ..\\bin Robert \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"leezhanpeng":1,"-":20}}] diff --git a/leezhanpeng_ip_master/commits.json b/leezhanpeng_ip_master/commits.json index e8e5b1a5..5a7f89f6 100644 --- a/leezhanpeng_ip_master/commits.json +++ b/leezhanpeng_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"leezhanpeng":[{"date":"2023-08-20","commitResults":[{"hash":"9acfad59e78ad669163b4b59c9a15844dc567e6a","isMergeCommit":false,"messageTitle":"Give chatbot a new name and implement an initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":10}}},{"hash":"a4880393ca69a7f0ab998e7de9063c089ee0a54e","isMergeCommit":false,"messageTitle":"Enable Robert to echo user commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"09a765cbb15033c1f18826a8f0c81eaea06cfb56","isMergeCommit":false,"messageTitle":"Add the ability to store and display user text","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":8}}},{"hash":"71187b80f18a5008277ba8d01fa9de73ea97d4bf","isMergeCommit":false,"messageTitle":"Enable marking and unmarking of tasks as done using Task class","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":19}}},{"hash":"948c8c0dcfa7adf13a91828bb9cc6ee7e4574b5e","isMergeCommit":false,"messageTitle":"Add support for ToDos, Events, and Deadline tasks via Task inheritance","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":20}}},{"hash":"bcc552d9b76977c39561a80fd7d20ba2d6570362","isMergeCommit":false,"messageTitle":"Add automated text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"859f1cd8309cd8448c51b2367e4f30de5a46e953","isMergeCommit":false,"messageTitle":"Add error handling using custom RobertException","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":53}}},{"hash":"84f91398602d45ecedfd097107eb55c8f3fe4fa4","isMergeCommit":false,"messageTitle":"Add support for deleting tasks and use ArrayList to store tasks","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":11}}}]},{"date":"2023-08-27","commitResults":[{"hash":"52e9286ccc895ac561a960bdbf326dea69d76bc6","isMergeCommit":false,"messageTitle":"Enable saving of tasks to hard disk","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":163,"deletions":38}}},{"hash":"f4cc83848060ff7e3622712443a29778fc52247a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"37be297cf5a70e8e6ce890b622b01ae10ed7648a","isMergeCommit":false,"messageTitle":"Make Robert understand Dates and Add clear and filter commands","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":132,"deletions":29}}},{"hash":"9e8bfa524979179f86810716a4be1d3a295b5e1a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"441be94b5b99600bb75fc4fffbcf3ead35077b13","isMergeCommit":false,"messageTitle":"Use more OOP for Robert","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":609,"deletions":421}}},{"hash":"cd6d64967a3e2416dd70942fc19c7d4053a9d5b4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b46be703a2cf18cda7a614a281adca0fe00b4396","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":166,"deletions":17}}},{"hash":"864639061da2eb19a30ef9551a9886e35d701c44","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"d7d6421ef453ef2a672f626815d618e305bb0bcf","isMergeCommit":false,"messageTitle":"Remove data folder from src","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5}}},{"hash":"b3ab50964d119ed9cb98ec59f3715aff1a0b4435","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ad05928af9f97a5d156df59d689b5e0cbbe55c1a","isMergeCommit":false,"messageTitle":"Automate project builds using Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":3}}},{"hash":"b12923efee7ab6045de483f77da20a3711efba73","isMergeCommit":false,"messageTitle":"Automate project builds using Gradle","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"bc888676a4280473fae060289fd6d2885642fb42","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"1a632d2fbc7f9ccdabf073d5653ddce5ccf08445","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":218,"deletions":5}}},{"hash":"ec9f3d3a809c659a2c62caf0449cb029820b05ce","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"b40cd103a095d95af0f1bdafb8c1da0c7791e944","isMergeCommit":false,"messageTitle":"Package the App as a JAR file","messageBody":"","tags":["v0.1.0","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"txt":{"insertions":0,"deletions":0}}},{"hash":"aabd936b69a8cc3f21b3f26ebabd0d5f1d2f0159","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":489,"deletions":8}}},{"hash":"fa0fa009b649ffbd59185fba4ec6080084074f33","isMergeCommit":false,"messageTitle":"Tweak the code to comply with checkstyle","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":112}}},{"hash":"07dc57241538741f1368f6d1e36a0a66037a5bbe","isMergeCommit":false,"messageTitle":"Add Find command for users to find tasks with keyword","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":50,"deletions":0}}},{"hash":"250ee6e5983c00511f075984237097cc611757a7","isMergeCommit":false,"messageTitle":"Add JavaDoc to FindCommand","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"8f5f14542d02dbc99d74a6a8a7bee3cc07b98447","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"952a8d52f1ad1ebbae53d788a12ea64fee7d6ef1","isMergeCommit":true,"messageTitle":"Resolve merge conflict between A-JavaDoc and A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc129e06ea1725814d3c189bbb0359b5740716c6","isMergeCommit":true,"messageTitle":"Resolve merge conflict between master and Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2eb68dab07477b6695bb6071356df23e5863cf50","isMergeCommit":false,"messageTitle":"Add JavaDoc for Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":1}}},{"hash":"05a504c2a2fc5c78351fb3849fad1f4d1b3823a2","isMergeCommit":false,"messageTitle":"Tweak the code to further comply with checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":59}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9de364f85c925580ae00fab0ffef0c7d8580e50f","isMergeCommit":false,"messageTitle":"Set up checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":43,"deletions":16}}}]},{"date":"2023-09-04","commitResults":[{"hash":"300d96d312eeb06a76e20ae9ba2d1bf57a979d07","isMergeCommit":false,"messageTitle":"Add GUI to the chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":51,"deletions":0},"java":{"insertions":287,"deletions":183}}}]},{"date":"2023-09-07","commitResults":[{"hash":"cb916facc3cff5a2bc795ecab4ff97f7483eafc4","isMergeCommit":false,"messageTitle":"Add GUI functions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"fxml":{"insertions":234,"deletions":7},"java":{"insertions":57,"deletions":1}}}]},{"date":"2023-09-09","commitResults":[{"hash":"c2edca21c8e63cff104d3ceee8d6553fe60f903b","isMergeCommit":false,"messageTitle":"Adjust some javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-11","commitResults":[{"hash":"b4010d22d3b6979f70b5183515c054a49431e648","isMergeCommit":false,"messageTitle":"Modify build.gradle file for JAR file generation","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"2d52059244cd2871c8fbe567487554aeec8c30af","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Using assertions at various points in the code allow for\ndocumentation of important assumptions.\n\nLet\u0027s use assert feature to conduct these documentation.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":16}}},{"hash":"6ab61523c6a70cbbfd02a3cda351730a757a48ba","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"It is intuitive that production code needs to be of high quality.\n\nLet\u0027s further improve the code\u0027s readability and naming of functions.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":40}}},{"hash":"d6367cd663e8f1057911675a2e206f2967f2bced","isMergeCommit":false,"messageTitle":"Adjust parser\u0027s import lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"3625b7fe8549da98183df55549a1accd535ceb59","isMergeCommit":true,"messageTitle":"Merge pull request #1 from leezhanpeng/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"10b55960684cf5cde38a0ba7a32d677765a1deb3","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6a73677d63babf5fe92cb79c0fd3fc77c777f556","isMergeCommit":true,"messageTitle":"Merge pull request #2 from leezhanpeng/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{}},{"hash":"1373ad4a4e2151e133c1cfbc860e3a74599f3f89","isMergeCommit":false,"messageTitle":"Add duplicate detection for new task","messageBody":"There may be instances where users mistakenly input the same tasks multiple times.\nWith duplicates in the task list, it may cause confusion for the user, especially when\nthere are no dates associated to it (e.g. todo tasks).\n\nLet\u0027s add a duplicate detection method during the addition of a new task.\n\nThis will prevent tasks of duplicate descriptions being in the list at the same time.\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":11,"deletions":9},"java":{"insertions":20,"deletions":0}}},{"hash":"60fff45f1916f0faee76097d855840b628d5a648","isMergeCommit":true,"messageTitle":"Merge pull request #3 from leezhanpeng/branch-C-DetectDuplicates","messageBody":"Add duplicate detection for new task","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"b789891d9a396808f48b2cb559ac78b4f08a288a","isMergeCommit":false,"messageTitle":"Modify code to conform to checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"94f7c6824826343fc69064c670dc346bf0b9f394","isMergeCommit":false,"messageTitle":"Modify code to conform to checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":13}}}]}]},"authorFileTypeContributionMap":{"leezhanpeng":{"java":1904,"md":0,"fxml":280,"sh":0,"bat":1,"gradle":25,"txt":15}},"authorContributionVariance":{"leezhanpeng":291268.88},"authorDisplayNameMap":{"leezhanpeng":"CS2103-T16-2 LEE ..PENG"}} +{"authorDailyContributionsMap":{"leezhanpeng":[{"date":"2023-08-20","commitResults":[{"hash":"9acfad59e78ad669163b4b59c9a15844dc567e6a","isMergeCommit":false,"messageTitle":"Give chatbot a new name and implement an initial skeletal version","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":10}}},{"hash":"a4880393ca69a7f0ab998e7de9063c089ee0a54e","isMergeCommit":false,"messageTitle":"Enable Robert to echo user commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"09a765cbb15033c1f18826a8f0c81eaea06cfb56","isMergeCommit":false,"messageTitle":"Add the ability to store and display user text","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":8}}},{"hash":"71187b80f18a5008277ba8d01fa9de73ea97d4bf","isMergeCommit":false,"messageTitle":"Enable marking and unmarking of tasks as done using Task class","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":19}}},{"hash":"948c8c0dcfa7adf13a91828bb9cc6ee7e4574b5e","isMergeCommit":false,"messageTitle":"Add support for ToDos, Events, and Deadline tasks via Task inheritance","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":20}}},{"hash":"bcc552d9b76977c39561a80fd7d20ba2d6570362","isMergeCommit":false,"messageTitle":"Add automated text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"859f1cd8309cd8448c51b2367e4f30de5a46e953","isMergeCommit":false,"messageTitle":"Add error handling using custom RobertException","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":53}}},{"hash":"84f91398602d45ecedfd097107eb55c8f3fe4fa4","isMergeCommit":false,"messageTitle":"Add support for deleting tasks and use ArrayList to store tasks","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":11}}}]},{"date":"2023-08-27","commitResults":[{"hash":"52e9286ccc895ac561a960bdbf326dea69d76bc6","isMergeCommit":false,"messageTitle":"Enable saving of tasks to hard disk","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":163,"deletions":38}}},{"hash":"f4cc83848060ff7e3622712443a29778fc52247a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"37be297cf5a70e8e6ce890b622b01ae10ed7648a","isMergeCommit":false,"messageTitle":"Make Robert understand Dates and Add clear and filter commands","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":132,"deletions":29}}},{"hash":"9e8bfa524979179f86810716a4be1d3a295b5e1a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"441be94b5b99600bb75fc4fffbcf3ead35077b13","isMergeCommit":false,"messageTitle":"Use more OOP for Robert","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":609,"deletions":421}}},{"hash":"cd6d64967a3e2416dd70942fc19c7d4053a9d5b4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b46be703a2cf18cda7a614a281adca0fe00b4396","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":166,"deletions":17}}},{"hash":"864639061da2eb19a30ef9551a9886e35d701c44","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"d7d6421ef453ef2a672f626815d618e305bb0bcf","isMergeCommit":false,"messageTitle":"Remove data folder from src","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5}}},{"hash":"b3ab50964d119ed9cb98ec59f3715aff1a0b4435","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ad05928af9f97a5d156df59d689b5e0cbbe55c1a","isMergeCommit":false,"messageTitle":"Automate project builds using Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":3}}},{"hash":"b12923efee7ab6045de483f77da20a3711efba73","isMergeCommit":false,"messageTitle":"Automate project builds using Gradle","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"bc888676a4280473fae060289fd6d2885642fb42","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"1a632d2fbc7f9ccdabf073d5653ddce5ccf08445","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":218,"deletions":5}}},{"hash":"ec9f3d3a809c659a2c62caf0449cb029820b05ce","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"b40cd103a095d95af0f1bdafb8c1da0c7791e944","isMergeCommit":false,"messageTitle":"Package the App as a JAR file","messageBody":"","tags":["v0.1.0","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":0},"txt":{"insertions":0,"deletions":0}}},{"hash":"aabd936b69a8cc3f21b3f26ebabd0d5f1d2f0159","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":489,"deletions":8}}},{"hash":"fa0fa009b649ffbd59185fba4ec6080084074f33","isMergeCommit":false,"messageTitle":"Tweak the code to comply with checkstyle","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":112}}},{"hash":"07dc57241538741f1368f6d1e36a0a66037a5bbe","isMergeCommit":false,"messageTitle":"Add Find command for users to find tasks with keyword","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":50,"deletions":0}}},{"hash":"250ee6e5983c00511f075984237097cc611757a7","isMergeCommit":false,"messageTitle":"Add JavaDoc to FindCommand","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}},{"hash":"8f5f14542d02dbc99d74a6a8a7bee3cc07b98447","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"952a8d52f1ad1ebbae53d788a12ea64fee7d6ef1","isMergeCommit":true,"messageTitle":"Resolve merge conflict between A-JavaDoc and A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc129e06ea1725814d3c189bbb0359b5740716c6","isMergeCommit":true,"messageTitle":"Resolve merge conflict between master and Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2eb68dab07477b6695bb6071356df23e5863cf50","isMergeCommit":false,"messageTitle":"Add JavaDoc for Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":1}}},{"hash":"05a504c2a2fc5c78351fb3849fad1f4d1b3823a2","isMergeCommit":false,"messageTitle":"Tweak the code to further comply with checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":59}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9de364f85c925580ae00fab0ffef0c7d8580e50f","isMergeCommit":false,"messageTitle":"Set up checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":43,"deletions":16}}}]},{"date":"2023-09-04","commitResults":[{"hash":"300d96d312eeb06a76e20ae9ba2d1bf57a979d07","isMergeCommit":false,"messageTitle":"Add GUI to the chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":51,"deletions":0},"java":{"insertions":287,"deletions":183}}}]},{"date":"2023-09-07","commitResults":[{"hash":"cb916facc3cff5a2bc795ecab4ff97f7483eafc4","isMergeCommit":false,"messageTitle":"Add GUI functions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"fxml":{"insertions":234,"deletions":7},"java":{"insertions":57,"deletions":1}}}]},{"date":"2023-09-09","commitResults":[{"hash":"c2edca21c8e63cff104d3ceee8d6553fe60f903b","isMergeCommit":false,"messageTitle":"Adjust some javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-11","commitResults":[{"hash":"b4010d22d3b6979f70b5183515c054a49431e648","isMergeCommit":false,"messageTitle":"Modify build.gradle file for JAR file generation","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"2d52059244cd2871c8fbe567487554aeec8c30af","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Using assertions at various points in the code allow for\ndocumentation of important assumptions.\n\nLet\u0027s use assert feature to conduct these documentation.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":16}}},{"hash":"6ab61523c6a70cbbfd02a3cda351730a757a48ba","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"It is intuitive that production code needs to be of high quality.\n\nLet\u0027s further improve the code\u0027s readability and naming of functions.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":40}}},{"hash":"d6367cd663e8f1057911675a2e206f2967f2bced","isMergeCommit":false,"messageTitle":"Adjust parser\u0027s import lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"3625b7fe8549da98183df55549a1accd535ceb59","isMergeCommit":true,"messageTitle":"Merge pull request #1 from leezhanpeng/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"10b55960684cf5cde38a0ba7a32d677765a1deb3","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6a73677d63babf5fe92cb79c0fd3fc77c777f556","isMergeCommit":true,"messageTitle":"Merge pull request #2 from leezhanpeng/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{}},{"hash":"1373ad4a4e2151e133c1cfbc860e3a74599f3f89","isMergeCommit":false,"messageTitle":"Add duplicate detection for new task","messageBody":"There may be instances where users mistakenly input the same tasks multiple times.\nWith duplicates in the task list, it may cause confusion for the user, especially when\nthere are no dates associated to it (e.g. todo tasks).\n\nLet\u0027s add a duplicate detection method during the addition of a new task.\n\nThis will prevent tasks of duplicate descriptions being in the list at the same time.\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":11,"deletions":9},"java":{"insertions":20,"deletions":0}}},{"hash":"60fff45f1916f0faee76097d855840b628d5a648","isMergeCommit":true,"messageTitle":"Merge pull request #3 from leezhanpeng/branch-C-DetectDuplicates","messageBody":"Add duplicate detection for new task","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"b789891d9a396808f48b2cb559ac78b4f08a288a","isMergeCommit":false,"messageTitle":"Modify code to conform to checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"94f7c6824826343fc69064c670dc346bf0b9f394","isMergeCommit":false,"messageTitle":"Modify code to conform to checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":13}}}]},{"date":"2023-09-16","commitResults":[{"hash":"3652f62739e5c8a96aef52e7b9d71dea2b363859","isMergeCommit":false,"messageTitle":"Improve GUI","messageBody":"","tags":["A-BetterGui"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":5},"fxml":{"insertions":40,"deletions":230},"java":{"insertions":57,"deletions":59}}},{"hash":"c721bac32749bcd3d00cd1c17da7fc5af4009d3a","isMergeCommit":false,"messageTitle":"Add more error handling","messageBody":"","tags":["A-MoreErrorHandling"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":12,"deletions":6}}},{"hash":"12a89fec1bd8b91402333da24e57da80263266c4","isMergeCommit":false,"messageTitle":"Adjust main window code trivially","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":4,"deletions":4}}},{"hash":"c5c441cb2bc4f7faeed23bdbc6578d7754d753f4","isMergeCommit":false,"messageTitle":"Add UI screenshot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"9b597f1bd7c3e764a9330ac0b68cd441de1f4088","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"md":{"insertions":238,"deletions":11}}},{"hash":"6ab2ca942572b8a6d3b486101085432638734fe5","isMergeCommit":false,"messageTitle":"Adjust README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":0}}},{"hash":"d9cfe70d0681158fcfe766fa79767cc44e8a3ffd","isMergeCommit":false,"messageTitle":"Fix code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":252,"deletions":157}}},{"hash":"a80ecd3270bb9577323ff0e742f36c9916b754dc","isMergeCommit":true,"messageTitle":"Merge pull request #5 from leezhanpeng/branch-fixCodeQuality","messageBody":"Fix code quality","tags":["A-Varargs"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"leezhanpeng":{"java":2003,"md":230,"fxml":90,"sh":0,"bat":1,"gradle":25,"txt":14}},"authorContributionVariance":{"leezhanpeng":283685.62},"authorDisplayNameMap":{"leezhanpeng":"CS2103-T16-2 LEE ..PENG"}} diff --git a/li-rongzhi_ip_master/authorship.json b/li-rongzhi_ip_master/authorship.json index 4d9137c9..4f3bf97d 100644 --- a/li-rongzhi_ip_master/authorship.json +++ b/li-rongzhi_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"# Jarvis Chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"\u003e \"Jarvis, sometimes you gotta run before you can walk.\" - Tony Stark","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"### Description","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"The name **Jarvis** stands for [Just A Rather Very Intelligent System](https://en.wikipedia.org/wiki/J.A.R.V.I.S.). The current version of Jarvis chatbot, allowing users to","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"* Create tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"* List tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"* Mark(unmark) tasks as completed(uncompleted)","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"* Check tasks with given date","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"* Store taskList in disk ","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"**Jarvis** currently supports three kinds of tasks:","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"*1. ToDo: without time component*","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"*2. Deadline: with a due time*","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"*3. Event: consists of a start time(from) and an end time(to)*","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":"The task management feature enhances Jarvis\u0027s utility by enabling users to keep track of their to-do list without leaving the chat interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"### Features","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"- [x] Basic task management operations","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"- [x] Store taskList in disk","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":"- [ ] A nice GUI (Coming soon)","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"- [ ] More exciting features...🤩","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":"### How to Test","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":"1. Install the Jarvis chatbot on your preferred platform.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":"2. Run `Launcher` file to launch the chatbot. 🥰","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"___","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"#### If you are a Java programmer, you can also use it to practice Java. Here\u0027s the `main` method in `Launcher`:","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":"```java","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":"public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"li-rongzhi":34,"-":4}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"checkstyle {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":"javafx {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" mainClass.set(\"jarvis.Jarvis\")","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" archiveBaseName \u003d \"jarvis\"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"li-rongzhi":10,"-":43}},{"path":"src/main/java/jarvis/Jarvis.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" * Jarvis is the entry class of Jarvis chatbot.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" * Jarvis could be used for task tracking.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"public class Jarvis {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" private Storage storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" private Ui ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" * Create a Jarvis instance","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" * @param filePath path of the record storage file","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" public Jarvis(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" this.taskList \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" public String getGreeting() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" return this.ui.greet();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" Command c \u003d parser.parse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" String output \u003d c.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" if (c.isExit()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" return this.ui.bye();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" return output;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":50}},{"path":"src/main/java/jarvis/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * Launch the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":12}},{"path":"src/main/java/jarvis/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.MainWindow;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * A GUI for Jarvis using fxml.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" private final Jarvis jarvis \u003d new Jarvis(\"records.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setJarvis(jarvis);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":33}},{"path":"src/main/java/jarvis/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.AddCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.CheckCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * Parser class is used for parsing user input into a command to be executed by Jarvis chatbot.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" * An enum for keywords in user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public enum Keyword {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" LIST(\"list\"), MARK(\"mark\"), UNMARK(\"unmark\"), DELETE(\"delete\"), CHECK(\"check\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" FIND(\"find\"), TODO(\"todo\"), DEADLINE(\"deadline\"), EVENT(\"event\"), BYE(\"bye\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" private String keyword;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" private Keyword(String keyword) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" public String getKeyword() {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" return this.keyword;","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" * Parse the user input into a command to be executed by Jarvis chatbot.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" * @param input the user input.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" * @return A command to be executed by Jarvis chatbot.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" * @throws InvalidCommandException If user input is invalid for any command.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" public Command parse(String input) throws InvalidCommandException {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" if (isAddCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" return new AddCommand(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" } else if (isListCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" } else if (isCheckCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" return new CheckCommand(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" } else if (isFindCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" return new FindCommand(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" } else if (isMarkCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" return new MarkCommand(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" } else if (isUnmarkCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" return new UnmarkCommand(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" } else if (isDeleteCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" return new DeleteCommand(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" } else if (isByeCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":" // Helper methods","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":" private boolean isAddCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.TODO.keyword) || input.startsWith(Keyword.DEADLINE.keyword)","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"li-rongzhi"},"content":" || input.startsWith(Keyword.EVENT.keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"li-rongzhi"},"content":" private boolean isListCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"li-rongzhi"},"content":" return input.equalsIgnoreCase(Keyword.LIST.keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"li-rongzhi"},"content":" private boolean isCheckCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.CHECK.keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"li-rongzhi"},"content":" private boolean isFindCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.FIND.keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"li-rongzhi"},"content":" private boolean isMarkCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.MARK.keyword + \" \") \u0026\u0026 input.length() \u003e 5","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(5).matches(\"-?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"li-rongzhi"},"content":" private boolean isUnmarkCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.UNMARK.keyword + \" \") \u0026\u0026 input.length() \u003e 7","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(7).matches(\"-?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"li-rongzhi"},"content":" private boolean isDeleteCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.DELETE.keyword + \" \") \u0026\u0026 input.length() \u003e 7","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(7).matches(\"-?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"li-rongzhi"},"content":" private boolean isByeCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"li-rongzhi"},"content":" return input.equalsIgnoreCase(Keyword.BYE.keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":103}},{"path":"src/main/java/jarvis/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.RecordLoadingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.RecordUpdateException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * Storage class is used for providing backup of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" private String filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" * Load records from the previous storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * @return A list of records in string.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" * @throws RecordLoadingException If an error occurs when loading records.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" public ArrayList\u003cString\u003e load() throws RecordLoadingException {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(this.filePath))) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" ArrayList\u003cString\u003e records \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" String currRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" while ((currRecord \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" records.add(currRecord);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" return records;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" throw new RecordLoadingException();","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" * Update the records.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the new taskList to be stored.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" * @throws RecordUpdateException If an error occurs when updating records.","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" public void update(TaskList taskList) throws RecordUpdateException {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" try (PrintWriter writer \u003d new PrintWriter(new FileWriter(this.filePath))) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" writer.println(taskList.toRecord());","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" throw new RecordUpdateException();","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":54}},{"path":"src/main/java/jarvis/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.ContentMissingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidTimeFormatException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.TimeClashException;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" * AddCommand class is a subclass of Command class.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * It is used for adding tasks into taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" private static DateTimeFormatter formatterWithTime \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" * Create an AddCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" public AddCommand(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.TODO.getKeyword())","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" || input.startsWith(Parser.Keyword.DEADLINE.getKeyword())","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" || input.startsWith(Parser.Keyword.EVENT.getKeyword())","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for AddCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" * Execute the AddCommand to add task into taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks currently held, where the new task is to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" String keyword \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" String content \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" switch (keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" if (!Character.isWhitespace(input.charAt(4))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":" content \u003d input.substring(4).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":" if (content.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":" throw new ContentMissingException(\"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new ToDo(content);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"li-rongzhi"},"content":" int byIndex \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"li-rongzhi"},"content":" content \u003d input.substring(\"deadline\".length(), byIndex).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"li-rongzhi"},"content":" String time \u003d input.substring(byIndex + 3).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"li-rongzhi"},"content":" if (content.equals(\"\") || time.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"li-rongzhi"},"content":" throw new ContentMissingException(\"deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime formattedTime \u003d LocalDateTime.parse(time, formatterWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new Deadline(content, formattedTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"li-rongzhi"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"li-rongzhi"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"li-rongzhi"},"content":" int fromIndex \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"li-rongzhi"},"content":" int toIndex \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"li-rongzhi"},"content":" content \u003d input.substring(\"event\".length(), fromIndex).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"li-rongzhi"},"content":" String from \u003d input.substring(fromIndex + 5, toIndex).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"li-rongzhi"},"content":" String to \u003d input.substring(toIndex + 3).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"li-rongzhi"},"content":" if (content.equals(\"\")","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"li-rongzhi"},"content":" || from.equals(\"\") || to.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"li-rongzhi"},"content":" throw new ContentMissingException(\"event\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime formattedFrom \u003d LocalDateTime.parse(from, formatterWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime formattedTo \u003d LocalDateTime.parse(to, formatterWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"li-rongzhi"},"content":" if (taskList.detectAnomalies(new LocalDateTime[]{formattedFrom, formattedTo}) !\u003d \"\") {","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"li-rongzhi"},"content":" throw new TimeClashException();","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new Event(content, formattedFrom, formattedTo);","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"li-rongzhi"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"li-rongzhi"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"li-rongzhi"},"content":" storage.update(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportTaskAdded(taskList, task);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"li-rongzhi"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(new ContentMissingException(keyword));","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"li-rongzhi"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(new InvalidTimeFormatException(formatterWithTime));","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"li-rongzhi":116}},{"path":"src/main/java/jarvis/command/CheckCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.ContentMissingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidTimeFormatException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * CheckCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * It is used for checking tasks in the list on a specific date","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":"public class CheckCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" private static DateTimeFormatter formatterWithoutTime \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" * Create a CheckCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" public CheckCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.CHECK.getKeyword())","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for CheckCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" * Execute the AddCommand to add task into taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks where the search or check operation will be conducted.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" String time \u003d this.input.substring(6);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" LocalDate formattedTime \u003d LocalDate.parse(time, formatterWithoutTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" String output \u003d taskList.checkTask(formattedTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportCheckDate(output, formattedTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(new InvalidTimeFormatException(formatterWithoutTime));","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(new ContentMissingException(\"check\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":58}},{"path":"src/main/java/jarvis/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.ContentMissingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidTimeFormatException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * Command class is an abstract class for all commands defined for Jarvis.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage)","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" throws InvalidCommandException, ContentMissingException, InvalidTimeFormatException;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":21}},{"path":"src/main/java/jarvis/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * DeleteCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" * It is used for deleting task with a specific index in the given taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" * Create a DeleteCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" public DeleteCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.DELETE.getKeyword() + \" \") \u0026\u0026 input.length() \u003e 7","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(7).matches(\"-?\\\\d+\")","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for DeleteCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" * Execute the ExecuteCommand to delete the target task.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks currently held.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" int index \u003d Integer.parseInt(this.input.substring(7));","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d taskList.deleteTask(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" storage.update(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportTaskDeleted(target);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":53}},{"path":"src/main/java/jarvis/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" * ExitCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" * It is used for exiting the program.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":26}},{"path":"src/main/java/jarvis/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.ContentMissingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" * FindCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * It is used for finding related tasks with a given content.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" * Create a FindCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public FindCommand(String input) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.FIND.getKeyword())","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for FindCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" String target \u003d this.input.substring(6).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" String output \u003d taskList.findTask(target);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportFindContent(output, target);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(new ContentMissingException(\"find\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"li-rongzhi":44}},{"path":"src/main/java/jarvis/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" * ListCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" * It is used for listing all tasks on the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" * Execute the ListCommand to display all tasks on the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks currently held.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":31}},{"path":"src/main/java/jarvis/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * MarkCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * It is used for marking a specific task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" * Create a MarkCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" public MarkCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.MARK.getKeyword() + \" \") \u0026\u0026 input.length() \u003e 5","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(5).matches(\"-?\\\\d+\")","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for MarkCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" * Execute the MarkCommand to mark the task with given index.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks currently held.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" int index \u003d Integer.parseInt(this.input.substring(5));","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d taskList.markTask(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" target.mark();","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" storage.update(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportTaskMarked(target);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":57}},{"path":"src/main/java/jarvis/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" * UnmarkCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * It is used for unmarking a specific task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" * Create an UnmarkCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public UnmarkCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.UNMARK.getKeyword() + \" \") \u0026\u0026 input.length() \u003e 7","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(7).matches(\"-?\\\\d+\")","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for UnmarkCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" * Execute the UnmarkCommand to unmark the task with given index.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks currently held.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" int index \u003d Integer.parseInt(this.input.substring(7));","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d taskList.unmarkTask(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" target.unmark();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" storage.update(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportTaskUnmarked(target);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":54}},{"path":"src/main/java/jarvis/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"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":"li-rongzhi"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"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":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" public static DialogBox getJarvisDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":62}},{"path":"src/main/java/jarvis/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Jarvis;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" private Jarvis jarvis;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.jpg\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" private Image jarvisImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Jarvis.jpg\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" * Initialize the GUI.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" public void setJarvis(Jarvis j) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" this.jarvis \u003d j;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" DialogBox.getJarvisDialog(this.jarvis.getGreeting(), jarvisImage));","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"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":45,"author":{"gitId":"li-rongzhi"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" String response \u003d this.jarvis.getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" DialogBox.getJarvisDialog(response, jarvisImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":58}},{"path":"src/main/java/jarvis/gui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * Ui is an interface for interaction with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" * Greeting the user when chatbot is launched.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" * @return A greeting message.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" public String greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" return \"Hello from Jarvis.\\n\" + \"What can I do for you, sir?\";","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * Say bye to the user when exits.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" * @return A Bye message.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" public String bye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" return \"Bye! Hope to see you again, sir.\";","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" * Report when a new task is added","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList The taskList where the new task will be added.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" * @param task The new task to be added.","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" * @return A message indicating that task is added.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" public String reportTaskAdded(TaskList taskList, Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" return \"Got it, sir. I\u0027ve added this task: \" + \"\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" + task.toString() + \"\\n\" + taskList.countTaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" * Report when a task is deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" * @param task The deleted task.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" * @return A message indicating hat the task is deleted.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" public String reportTaskDeleted(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" return \" Noted. I\u0027ve removed this task:\" + \"\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" + \"\\t\" + task.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" * Report when a task is marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" * @param task The task got marked.","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" * @return A message indicating that the task is marked.","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" public String reportTaskMarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":" return \"Nice! I\u0027ve marked this task as done:\" + \"\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":" + task.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":" * Report when a task is unmarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":" * @param task The task got unmarked.","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":" * @return A message indicating that the task is unmarked.","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":" public String reportTaskUnmarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"li-rongzhi"},"content":" return \"Nice! I\u0027ve marked this task as not done yet:\" + \"\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"li-rongzhi"},"content":" + task.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"li-rongzhi"},"content":" * Report the whole task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList The taskList to be displayed.","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"li-rongzhi"},"content":" * @return The taskList in display format.","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"li-rongzhi"},"content":" public String reportList(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"li-rongzhi"},"content":" return \"Sir, here is your list:\" + \"\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"li-rongzhi"},"content":" + taskList.displayList();","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"li-rongzhi"},"content":" * Report the result of check command.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"li-rongzhi"},"content":" * @param output The output of CheckCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"li-rongzhi"},"content":" * @param time The time specified to check.","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"li-rongzhi"},"content":" * @return The output of CheckCommand in display format.","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"li-rongzhi"},"content":" public String reportCheckDate(String output, LocalDate time) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"li-rongzhi"},"content":" if (output \u003d\u003d \"\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"li-rongzhi"},"content":" return \"There is no task on \" + time.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"li-rongzhi"},"content":" return \"The followings are tasks on \" + time.toString() + \":\\n\" + output;","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"li-rongzhi"},"content":" * Report the result of find command.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"li-rongzhi"},"content":" * @param output The output of FindCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"li-rongzhi"},"content":" * @param target The specified searching keyword.","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"li-rongzhi"},"content":" * @return The output of FindCommand in display format.","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"li-rongzhi"},"content":" public String reportFindContent(String output, String target) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"li-rongzhi"},"content":" return \"Sir, here are tasks related to \" + target + \"\\n\" + output;","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"li-rongzhi"},"content":" * Report an error when error occurs.","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"li-rongzhi"},"content":" * @param e The error to be reported.","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"li-rongzhi"},"content":" * @return Error in display format.","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"li-rongzhi"},"content":" public String reportError(JarvisException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"li-rongzhi"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":116}},{"path":"src/main/java/jarvis/jarvisexception/ContentMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * ContentMissingException is a type of JarvisException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that content is missing in the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class ContentMissingException extends JarvisException {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" private String type;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * Create a ContentMissingException instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" * @param type the type of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" public ContentMissingException(String type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" super();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"I\u0027m sorry, sir. The content of a \" + this.type + \" cannot be empty.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"li-rongzhi":24}},{"path":"src/main/java/jarvis/jarvisexception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * InvalidCommandException is a type of JarvisException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that the input command is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class InvalidCommandException extends JarvisException {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"I\u0027m sorry, sir. I am still learning \"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" + \"but currently I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"li-rongzhi":15}},{"path":"src/main/java/jarvis/jarvisexception/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * InvalidTaskIndexException is a type of JarvisException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that the target index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class InvalidTaskIndexException extends JarvisException {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" private int index;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * Create an InvalidTaskIndexException instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" * @param index the invalid index.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" public InvalidTaskIndexException(int index) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" super();","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"I\u0027m sorry, sir. Your target task is not found.\";","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"li-rongzhi":24}},{"path":"src/main/java/jarvis/jarvisexception/InvalidTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * InvalidTimeFormatException is a type of JarvisException.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that the input time format is invalid.","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"public class InvalidTimeFormatException extends JarvisException {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" private DateTimeFormatter formatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * Create an InvalidTimeFormatException.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * @param formatter The formatter which is supposed to be satisfied.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" public InvalidTimeFormatException(DateTimeFormatter formatter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" super();","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" this.formatter \u003d formatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"Sir, the time you provided is in an invalid format. \"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" + String.format(\"The time should be in \u0027%s\u0027 format\", this.formatter);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":27}},{"path":"src/main/java/jarvis/jarvisexception/InvalidTimePeriodException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * InvalidTimePeriodException is a type of JarvisException.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that the start time of the event is later than the end time.","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class InvalidTimePeriodException extends JarvisException {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"Your input start date/time is later than end/time.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"li-rongzhi":15}},{"path":"src/main/java/jarvis/jarvisexception/JarvisException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * A general version of exceptions from Jarvis.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"public class JarvisException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" return \"OOPS!!! \";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"li-rongzhi":12}},{"path":"src/main/java/jarvis/jarvisexception/RecordLoadingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * RecordLoadingException is a type of JarvisException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that an error occurs when loading records.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class RecordLoadingException extends JarvisException {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" return super.toString() + \"Error occur when loading records.\";","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":14}},{"path":"src/main/java/jarvis/jarvisexception/RecordUpdateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * RecordUpdateException is a type of JarvisException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that an error occurs when updating records.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class RecordUpdateException extends JarvisException {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" return super.toString() + \"Error occur when updating records.\";","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":13}},{"path":"src/main/java/jarvis/jarvisexception/TimeClashException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * TimeClashException is a type of JarvisException.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that an Event being added clashes with another Event in the list.","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class TimeClashException extends JarvisException {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"There is another event clashes with the new event.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"li-rongzhi":13}},{"path":"src/main/java/jarvis/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * Deadline class is a subclass of Task class.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" * Deadline is a type of Task with a due time (due).","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" private LocalDateTime due;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * Create a Deadline task instance without state.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * @param content task content.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" * @param due the due time.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" public Deadline(String content, LocalDateTime due) {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" super(content);","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" * Create a Deadline task instance with state.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * @param content task content.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" * @param due the due time.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" * @param state done or not done yet","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" public Deadline(String content, LocalDateTime due, Boolean state) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" super(content, state);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" public LocalDateTime[] get_time_components() {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" return new LocalDateTime[]{this.due};","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public String toRecord() {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" return \"[D]\" + super.toRecord() + \" (by: \" + this.due + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" return \"[D]\" + super.toString() + \" (by: \" + super.time_printer(due) + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"li-rongzhi":49}},{"path":"src/main/java/jarvis/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * Event class is a subclass of Task class.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" * Event is a type of Task with a time period (from and to).","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * Create an Event task instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" * @param content the content of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" * @param from start time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" * @param to end time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" public Event(String content, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" super(content);","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" * Create an Event task instance with state.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" * @param content the content of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" * @param from start time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" * @param to end time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" * @param state done or not done yet.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" public Event(String content, LocalDateTime from, LocalDateTime to, Boolean state) {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" super(content, state);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public LocalDateTime[] get_time_components() {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" return new LocalDateTime[]{this.from, this.to};","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" public String toRecord() {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" return \"[E]\" + super.toRecord() + \" (from: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" + time_printer(this.from) + \" to: \" + time_printer(this.to) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"li-rongzhi":55}},{"path":"src/main/java/jarvis/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.time.Month;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" * Task is a parent class for all types of task defined for Jarvis.","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"public class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" private String content;","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * Constructs a new Task with the specified content.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * @param content The content or description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" public Task(String content) {","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" * Constructs a new Task with the specified content.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" * @param content The content or description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * @param state Done or not done yet.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" public Task(String content, Boolean state) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" this.isDone \u003d state;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" * Mark the task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" public void mark() {","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" * Unmark the task as not done yet.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" public void unmark() {","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" * Get the status icon of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" * \"X\" stands for done while \" \" stands for not done yet.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" * @return the status icon in String.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" private String get_status_icon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" return \"[\" + get_status_icon() + \"] \" + this.content;","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":" * Transform the given time into a specific format.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":" * @param time the time to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":" * @return time in a specific format in String.","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":" protected String time_printer(LocalDateTime time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":" Month month \u003d time.getMonth();","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":" int day \u003d time.getDayOfMonth();","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":" int year \u003d time.getYear();","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"li-rongzhi"},"content":" int hour \u003d time.getHour();","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"li-rongzhi"},"content":" int minute \u003d time.getMinute();","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"li-rongzhi"},"content":" return month.toString() + \" \" + day + \" \" + year + \" \" + hour + \":\" + minute;","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"li-rongzhi"},"content":" * Get the format for record storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"li-rongzhi"},"content":" * @return task in format for record storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"li-rongzhi"},"content":" public String toRecord() {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"li-rongzhi"},"content":" return \"[\" + get_status_icon() + \"] \" + this.content;","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"li-rongzhi"},"content":" * Get time components contained in the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"li-rongzhi"},"content":" * @return an array of time components.","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"li-rongzhi"},"content":" public LocalDateTime[] get_time_components() {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"li-rongzhi"},"content":" return new LocalDateTime[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"li-rongzhi"},"content":" public boolean checkContent(String input) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"li-rongzhi"},"content":" return this.content.contains(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"li-rongzhi":94}},{"path":"src/main/java/jarvis/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import java.util.stream.IntStream;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidTaskIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.RecordLoadingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * TaskList class is an abstraction of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" private static DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\u0027T\u0027HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * Construct a new TaskList instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" * @param records previous records represented in string.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" * @throws RecordLoadingException If an error occurs when loading records.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" public TaskList(ArrayList\u003cString\u003e records) throws RecordLoadingException {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" String[] recordArray \u003d records.toArray(new String[records.size()]);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" decodeRecordInBatch(recordArray);","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" * Decode record in batch.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" * @param records","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" private void decodeRecordInBatch(String... records) throws RecordLoadingException {","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" for (String record: records) {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" Task task \u003d this.decodeRecord(record);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" * Decode the record in String into a Task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" * @param record a string recording a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" * @return a task with the recorded information.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" * @throws RecordLoadingException","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" private Task decodeRecord(String record) throws RecordLoadingException {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" if (record \u003d\u003d null || record.length() \u003c\u003d 3) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":" String type \u003d record.substring(0, 3);","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":" // isDone indicates mark(True) or unmark(False)","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":" Boolean isDone \u003d (record.substring(3, 6) \u003d\u003d \"[X]\");","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":" String content;","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":" switch (type) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":" case \"[T]\":","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":" content \u003d record.substring(7).trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new ToDo(content, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"li-rongzhi"},"content":" case \"[D]\":","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"li-rongzhi"},"content":" int splitPoint \u003d record.indexOf(\" (by: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"li-rongzhi"},"content":" content \u003d record.substring(7, splitPoint).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"li-rongzhi"},"content":" String time \u003d record.substring(splitPoint + 6, record.length() - 1).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime deadline \u003d LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new Deadline(content, deadline, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"li-rongzhi"},"content":" case \"[E]\":","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"li-rongzhi"},"content":" content \u003d record.substring(7, record.indexOf(\" (from: \")).trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime from \u003d LocalDateTime.parse(","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"li-rongzhi"},"content":" record.substring(record.indexOf(\" (from: \") + 8, record.indexOf(\" to: \")).trim(),","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"li-rongzhi"},"content":" formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime to \u003d LocalDateTime.parse(","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"li-rongzhi"},"content":" record.substring(record.indexOf(\" to: \") + 5, record.length() - 1).trim(), formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new Event(content, from, to, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"li-rongzhi"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"li-rongzhi"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"li-rongzhi"},"content":" throw new RecordLoadingException();","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"li-rongzhi"},"content":" return task;","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"li-rongzhi"},"content":" * Add the given task into the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"li-rongzhi"},"content":" * @param task task to be added.","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"li-rongzhi"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"li-rongzhi"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"li-rongzhi"},"content":" * Delete the task with given index from the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"li-rongzhi"},"content":" * @param index the index of the task to be deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"li-rongzhi"},"content":" * @return the task deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"li-rongzhi"},"content":" * @throws InvalidTaskIndexException If the specified target index is out of range.","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"li-rongzhi"},"content":" public Task deleteTask(int index) throws InvalidTaskIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d this.taskList.remove(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"li-rongzhi"},"content":" return target;","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"li-rongzhi"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidTaskIndexException(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"li-rongzhi"},"content":" * Mark the task with given index as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"li-rongzhi"},"content":" * @param index The specified target index.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"li-rongzhi"},"content":" * @return the task marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"li-rongzhi"},"content":" * @throws InvalidTaskIndexException If the specifies target index is out of range.","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"li-rongzhi"},"content":" public Task markTask(int index) throws InvalidTaskIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"li-rongzhi"},"content":" target.mark();","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"li-rongzhi"},"content":" return target;","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"li-rongzhi"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidTaskIndexException(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"li-rongzhi"},"content":" * Unmark the task with given index as not done yet.","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"li-rongzhi"},"content":" * @param index The specified target index.","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"li-rongzhi"},"content":" * @return the task unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"li-rongzhi"},"content":" * @throws InvalidTaskIndexException If the specifies target index is out of range.","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"li-rongzhi"},"content":" public Task unmarkTask(int index) throws InvalidTaskIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"li-rongzhi"},"content":" target.unmark();","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"li-rongzhi"},"content":" return target;","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"li-rongzhi"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidTaskIndexException(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"li-rongzhi"},"content":" * Check tasks on a specific date.","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"li-rongzhi"},"content":" * @param time The specified time to be checked.","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"li-rongzhi"},"content":" * @return tasks on the given date in String.","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"li-rongzhi"},"content":" public String checkTask(LocalDate time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"li-rongzhi"},"content":" ArrayList\u003cTask\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"li-rongzhi"},"content":" ArrayList\u003cInteger\u003e indexes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"li-rongzhi"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"li-rongzhi"},"content":" Task task \u003d this.taskList.get(i);","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"li-rongzhi"},"content":" if (task instanceof ToDo) {","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"li-rongzhi"},"content":" continue;","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime[] timeCollection \u003d task.get_time_components();","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"li-rongzhi"},"content":" for (LocalDateTime taskTime: timeCollection) {","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"li-rongzhi"},"content":" if (taskTime.toLocalDate().isEqual(time)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"li-rongzhi"},"content":" results.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":168,"author":{"gitId":"li-rongzhi"},"content":" indexes.add(i);","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":171,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":172,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":173,"author":{"gitId":"li-rongzhi"},"content":" return IntStream.range(0, results.size())","lastModifiedDate":"2023-09-08"},{"lineNumber":174,"author":{"gitId":"li-rongzhi"},"content":" .mapToObj(j -\u003e (indexes.get(j) + 1) + \". \" + results.get(j).toString())","lastModifiedDate":"2023-09-08"},{"lineNumber":175,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":176,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":177,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":178,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"li-rongzhi"},"content":" * Searches for tasks in the task list that match the specified target content.","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"li-rongzhi"},"content":" * @param target The target content to search for in task descriptions.","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"li-rongzhi"},"content":" * @return A formatted string containing matching task descriptions along with their indexes.","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"li-rongzhi"},"content":" public String findTask(String target) {","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"li-rongzhi"},"content":" return IntStream.range(0, this.taskList.size())","lastModifiedDate":"2023-09-08"},{"lineNumber":186,"author":{"gitId":"li-rongzhi"},"content":" .filter(index -\u003e this.taskList.get(index).checkContent(target))","lastModifiedDate":"2023-09-08"},{"lineNumber":187,"author":{"gitId":"li-rongzhi"},"content":" .mapToObj(index -\u003e (index + 1) + \". \" + this.taskList.get(index).toString())","lastModifiedDate":"2023-09-08"},{"lineNumber":188,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":189,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"li-rongzhi"},"content":" * Count number of tasks currently in the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"li-rongzhi"},"content":" * @return The number of tasks in the taskList.","lastModifiedDate":"2023-09-08"},{"lineNumber":195,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"li-rongzhi"},"content":" public String countTaskList() {","lastModifiedDate":"2023-09-08"},{"lineNumber":197,"author":{"gitId":"li-rongzhi"},"content":" int num \u003d this.taskList.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":198,"author":{"gitId":"li-rongzhi"},"content":" if (num \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":199,"author":{"gitId":"li-rongzhi"},"content":" return \"Sir, there\u0027s nothing on the list currently.\";","lastModifiedDate":"2023-08-26"},{"lineNumber":200,"author":{"gitId":"li-rongzhi"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":201,"author":{"gitId":"li-rongzhi"},"content":" return \"Now you have \" + num + \" tasks in the list.\";","lastModifiedDate":"2023-08-26"},{"lineNumber":202,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":203,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":204,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":205,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":206,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":207,"author":{"gitId":"li-rongzhi"},"content":" * Get the whole taskList in display format.","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"li-rongzhi"},"content":" * @return The taskList in display format.","lastModifiedDate":"2023-09-08"},{"lineNumber":209,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"li-rongzhi"},"content":" public String displayList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":211,"author":{"gitId":"li-rongzhi"},"content":" return IntStream.range(0, this.taskList.size())","lastModifiedDate":"2023-09-08"},{"lineNumber":212,"author":{"gitId":"li-rongzhi"},"content":" .mapToObj(index -\u003e (index + 1) + \". \" + this.taskList.get(index).toString())","lastModifiedDate":"2023-09-08"},{"lineNumber":213,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":214,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":215,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":216,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":217,"author":{"gitId":"li-rongzhi"},"content":" * Get the whole taskList in record format.","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"li-rongzhi"},"content":" * @return The taskList in record format.","lastModifiedDate":"2023-09-08"},{"lineNumber":219,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":220,"author":{"gitId":"li-rongzhi"},"content":" public String toRecord() {","lastModifiedDate":"2023-08-26"},{"lineNumber":221,"author":{"gitId":"li-rongzhi"},"content":" return this.taskList.stream()","lastModifiedDate":"2023-09-08"},{"lineNumber":222,"author":{"gitId":"li-rongzhi"},"content":" .map(Task::toRecord)","lastModifiedDate":"2023-09-08"},{"lineNumber":223,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":224,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":225,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":226,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":227,"author":{"gitId":"li-rongzhi"},"content":" * Check if there exists any Event clashes with the new Event.","lastModifiedDate":"2023-09-10"},{"lineNumber":228,"author":{"gitId":"li-rongzhi"},"content":" * @param timeComponents The start and end time of Event","lastModifiedDate":"2023-09-10"},{"lineNumber":229,"author":{"gitId":"li-rongzhi"},"content":" * @return A string of the list of task that clashes with the new Event.","lastModifiedDate":"2023-09-10"},{"lineNumber":230,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":231,"author":{"gitId":"li-rongzhi"},"content":" public String detectAnomalies(LocalDateTime[] timeComponents) {","lastModifiedDate":"2023-09-10"},{"lineNumber":232,"author":{"gitId":"li-rongzhi"},"content":" ArrayList\u003cTask\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":233,"author":{"gitId":"li-rongzhi"},"content":" ArrayList\u003cInteger\u003e indexes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":234,"author":{"gitId":"li-rongzhi"},"content":" boolean isNoAnomaly \u003d true;","lastModifiedDate":"2023-09-10"},{"lineNumber":235,"author":{"gitId":"li-rongzhi"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":236,"author":{"gitId":"li-rongzhi"},"content":" Task task \u003d this.taskList.get(i);","lastModifiedDate":"2023-09-10"},{"lineNumber":237,"author":{"gitId":"li-rongzhi"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-09-10"},{"lineNumber":238,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime[] existingEventTime \u003d task.get_time_components();","lastModifiedDate":"2023-09-10"},{"lineNumber":239,"author":{"gitId":"li-rongzhi"},"content":" if (existingEventTime[1].isBefore(timeComponents[0])","lastModifiedDate":"2023-09-10"},{"lineNumber":240,"author":{"gitId":"li-rongzhi"},"content":" || timeComponents[1].isBefore(existingEventTime[0])) {","lastModifiedDate":"2023-09-10"},{"lineNumber":241,"author":{"gitId":"li-rongzhi"},"content":" // No clash, intervals do not overlap","lastModifiedDate":"2023-09-10"},{"lineNumber":242,"author":{"gitId":"li-rongzhi"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":243,"author":{"gitId":"li-rongzhi"},"content":" results.add(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":244,"author":{"gitId":"li-rongzhi"},"content":" indexes.add(i);","lastModifiedDate":"2023-09-10"},{"lineNumber":245,"author":{"gitId":"li-rongzhi"},"content":" isNoAnomaly \u003d true;","lastModifiedDate":"2023-09-10"},{"lineNumber":246,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":247,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":248,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":249,"author":{"gitId":"li-rongzhi"},"content":" if (isNoAnomaly) {","lastModifiedDate":"2023-09-10"},{"lineNumber":250,"author":{"gitId":"li-rongzhi"},"content":" return \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":251,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":252,"author":{"gitId":"li-rongzhi"},"content":" return IntStream.range(0, results.size())","lastModifiedDate":"2023-09-10"},{"lineNumber":253,"author":{"gitId":"li-rongzhi"},"content":" .mapToObj(j -\u003e (indexes.get(j) + 1) + \". \" + results.get(j).toString())","lastModifiedDate":"2023-09-10"},{"lineNumber":254,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":255,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":256,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":257,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":258,"author":{"gitId":"li-rongzhi"},"content":" return this.taskList.stream()","lastModifiedDate":"2023-09-08"},{"lineNumber":259,"author":{"gitId":"li-rongzhi"},"content":" .map(Task::toString)","lastModifiedDate":"2023-09-08"},{"lineNumber":260,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":261,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":262,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":262}},{"path":"src/main/java/jarvis/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * ToDo class is a subclass of Task class.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * ToDo is a type of Task without time information.","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" public ToDo(String content) {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" super(content);","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" public ToDo(String content, Boolean state) {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" super(content, state);","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" public String toRecord() {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" return \"[T]\" + super.toRecord();","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":26}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"\u003c!-- Author: Li Rongzhi --\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"\u003c!-- Adapted from @elroygohjy --\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.geometry.*?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.control.*?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.image.*?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.text.*?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: transparent;\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/11\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"BASELINE_CENTER\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-background-color: #254f77; -fx-background-radius: 20;\" text\u003d\"Label\" textFill\u003d\"WHITE\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" \u003cFont name\u003d\"Verdana\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"80.0\" fitWidth\u003d\"80.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" \u003cCircle radius\u003d\"40\" centerX\u003d\"40\" centerY\u003d\"40\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" bottom\u003d\"5.0\"/\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets bottom\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":45}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"\u003c!-- Author: Li Rongzhi --\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"\u003c!-- Adapted from @elroygohjy --\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"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/11\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"jarvis.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" style\u003d\"-fx-background-radius: 10px; -fx-border-radius: 10px; -fx-background-color: #223138; -fx-text-fill: #ffffff; -fx-border-color: #223138;\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" style\u003d\"-fx-background-color: #1c2931; -fx-background-radius: 6;\" text\u003d\"Send\" textFill\u003d\"#315566\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" \u003cFont name\u003d\"System Bold\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #1c2931; -fx-border-color: #1c2931;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" style\u003d\"-fx-background-color: #1c2931;\" styleClass\u003d\"root\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets top\u003d\"30.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":34}},{"path":"src/test/java/jarvis/JarvisTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import java.io.File;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"public class JarvisTest {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" private Jarvis jarvis;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" @BeforeEach","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" public void setUp() {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" // Create a Jarvis instance with a test file path","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" jarvis \u003d new Jarvis(\"testFilePath.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" public void testGetGreeting() {","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" String greeting \u003d jarvis.getGreeting();","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" assertNotNull(greeting);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"Hello from Jarvis.\\n\" + \"What can I do for you, sir?\", greeting);","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" public void testGetResponse() {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" // Test a valid input","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" String validInput \u003d \"todo read\";","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" String response \u003d jarvis.getResponse(validInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" assertNotNull(response);","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" assertTrue(response.startsWith(\"Got it, sir. I\u0027ve added this task: \"));","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" // Test an invalid input that should throw an exception","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" String invalidInput \u003d \"todo\";","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" String errorResponse \u003d jarvis.getResponse(invalidInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" assertNotNull(errorResponse);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" assertTrue(errorResponse.startsWith(\"OOPS!\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" // Test an exit command","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" String exitInput \u003d \"bye\";","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" String exitResponse \u003d jarvis.getResponse(exitInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" assertNotNull(exitResponse);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"Bye! Hope to see you again, sir.\", exitResponse);","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" @AfterEach","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" public void tearDown() throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" // Clean up the test file after each test","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" File file \u003d new File(\"testFilePath.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" file.delete();","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"li-rongzhi":61}},{"path":"src/test/java/jarvis/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" public void toRecordTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][ ] quiz (by: 2023-08-27T12:00)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" new Deadline(\"quiz\", LocalDateTime.of(2023, 8, 27, 12, 00)).toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" Deadline temp \u003d new Deadline(\"quiz\",","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 12, 00), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][X] quiz (by: 2023-08-27T12:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][ ] quiz (by: 2023-08-27T12:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][X] quiz (by: 2023-08-27T12:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][ ] quiz (by: AUGUST 27 2023 12:0)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" new Deadline(\"quiz\", LocalDateTime.of(2023, 8, 27, 12, 00)).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" Deadline temp \u003d new Deadline(\"quiz\",","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 12, 00), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][X] quiz (by: AUGUST 27 2023 12:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][ ] quiz (by: AUGUST 27 2023 12:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][X] quiz (by: AUGUST 27 2023 12:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" public void get_time_componentsTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" Deadline temp \u003d new Deadline(\"quiz\",","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 12, 00), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" assertArrayEquals(new LocalDateTime[]{LocalDateTime.of(2023, 8, 27, 12, 00)},","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" temp.get_time_components());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":43}},{"path":"src/test/java/jarvis/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"public class EventTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" public void toRecordTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][ ] party (from: 2023-08-27T19:00 to: 2023-08-27T22:00)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" new Event(\"party\",","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00)).toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" Event temp \u003d new Event(\"party\",","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" true);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][X] party (from: 2023-08-27T19:00 to: 2023-08-27T22:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][ ] party (from: 2023-08-27T19:00 to: 2023-08-27T22:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][X] party (from: 2023-08-27T19:00 to: 2023-08-27T22:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][ ] party (from: AUGUST 27 2023 19:0 to: AUGUST 27 2023 22:0)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" new Event(\"party\",","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00)).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" Event temp \u003d new Event(\"party\",","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" true);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][X] party (from: AUGUST 27 2023 19:0 to: AUGUST 27 2023 22:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][ ] party (from: AUGUST 27 2023 19:0 to: AUGUST 27 2023 22:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][X] party (from: AUGUST 27 2023 19:0 to: AUGUST 27 2023 22:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" public void get_time_componentsTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" Event temp \u003d new Event(\"party\",","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" true);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" assertArrayEquals(","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" new LocalDateTime[]{","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00)},","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" temp.get_time_components());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":56}},{"path":"src/test/java/jarvis/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" public void toRecordTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[ ] read\", new Task(\"read\").toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" Task temp \u003d new Task(\"read\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[X] read\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[ ] read\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[X] read\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[ ] read\", new Task(\"read\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" Task temp \u003d new Task(\"read\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[X] read\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[ ] read\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[X] read\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" public void time_printerTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"AUGUST 27 2023 12:0\",","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" new Task(\"read\").time_printer(","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 12, 0)));","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public void get_time_componentsTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" Task temp \u003d new Task(\"read book\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" assertArrayEquals(new LocalDateTime[0],","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" temp.get_time_components());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":46}},{"path":"src/test/java/jarvis/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" public void toRecordTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][ ] read book\", new ToDo(\"read book\").toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" ToDo temp \u003d new ToDo(\"read book\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][X] read book\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][ ] read book\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][X] read book\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][ ] read book\", new ToDo(\"read book\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" ToDo temp \u003d new ToDo(\"read book\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][X] read book\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][ ] read book\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][X] read book\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" public void get_time_componentsTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" ToDo temp \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" assertArrayEquals(new LocalDateTime[0],","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" temp.get_time_components());","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":40}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"todo borrow book","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"todo return book","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"li-rongzhi":4}},{"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":"li-rongzhi"},"content":"java -classpath ../bin Jarvis \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-19"},{"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":{"li-rongzhi":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"# Jarvis Chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"\u003e \"Jarvis, sometimes you gotta run before you can walk.\" - Tony Stark","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"### Description","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"The name **Jarvis** stands for [Just A Rather Very Intelligent System](https://en.wikipedia.org/wiki/J.A.R.V.I.S.). The current version of Jarvis chatbot, allowing users to","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"* Create tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"* List tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"* Mark(unmark) tasks as completed(uncompleted)","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"* Check tasks with given date","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"* Store taskList in disk ","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"**Jarvis** currently supports three kinds of tasks:","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"*1. ToDo: without time component*","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"*2. Deadline: with a due time*","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"*3. Event: consists of a start time(from) and an end time(to)*","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":"The task management feature enhances Jarvis\u0027s utility by enabling users to keep track of their to-do list without leaving the chat interface.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"### Features","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"- [x] Basic task management operations","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"- [x] Store taskList in disk","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":"- [ ] A nice GUI (Coming soon)","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"- [ ] More exciting features...🤩","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":"### How to Test","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":"1. Install the Jarvis chatbot on your preferred platform.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":"2. Run `Launcher` file to launch the chatbot. 🥰","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"___","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"#### If you are a Java programmer, you can also use it to practice Java. Here\u0027s the `main` method in `Launcher`:","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":"```java","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":"public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"li-rongzhi":34,"-":4}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"checkstyle {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":"javafx {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" mainClass.set(\"jarvis.Jarvis\")","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" archiveBaseName \u003d \"jarvis\"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"li-rongzhi":10,"-":43}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"# Jarvis User Guide","lastModifiedDate":"2023-09-16"},{"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":"li-rongzhi"},"content":"### Add task: ```todo / deadline / event```","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"Jarvis currently support three types of tasks: ","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"1. ToDo is a task without time constraints.","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" ***Format:***","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" ```todo {task description}```","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"2. Deadline is a task with a due time.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" ***Format:***","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" ```deadline {task description} /by {dd/MM/yyyy HH:mm}```","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"3. Event is a task with a start time and an end time.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" ***Format:***","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" ```event {task description} /from {dd/MM/yyyy HH:mm} /to {dd/MM/yyyy HH:mm}```","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":"### Delete task: ```delete```","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"Delete a specific task by index.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2019-07-29"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"***Format:***","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" ```delete {index}```","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"### Mark / Unmark task: ```mark / unmark```","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":"Mark a task as done or unmark a task as not done yet by indicating index.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":"(Mark) ***Format:***","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" ```mark {index}```","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"(Unmark) ***Format:***","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" ```unmark {index}```","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":"### List all tasks: ```list```","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":"Display all tasks currently in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":"***Format:***","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" ```list```","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":"### Find tasks with keyword: ```find```","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":"Find all tasks currently in the task list, ","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":"whose description contains the given keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":"***Format:***","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" ```find {keyword}```","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":"### Check tasks on a given day: ```check```","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":"Check if there is any task on the given day.","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":"***Format:***","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" ```check {dd/MM/yyyy}```","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":"### Exiting the program: ```bye```","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":"Exits the program.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":"***Format:***","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" ```bye```","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":"## FAQ","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":"***Q:*** Can I use keyword in with letters in different cases?","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":"***A:*** Yes. Jarvis is capable of recognizing keywords ","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":"even if letters are in a different case.","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":"***Q:*** Can I use date and time formats other than the format specified above?","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":"***A:*** No, Jarvis currently supports tasks with dates and times in the ```dd/MM/yyyy HH:mm``` format when adding task,","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":"and ```dd/MM/yy``` format when checking tasks. Please ensure your input follows this format when dealing with tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"li-rongzhi":56,"-":15}},{"path":"src/main/java/jarvis/Jarvis.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" * Jarvis is the entry class of Jarvis chatbot.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" * Jarvis could be used for task tracking.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"public class Jarvis {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" private Storage storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" private Ui ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" * Create a Jarvis instance","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" * @param filePath path of the record storage file","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" public Jarvis(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" this.taskList \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" public String getGreeting() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" return this.ui.greet();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" Command c \u003d parser.parse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" String output \u003d c.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" if (c.isExit()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" return this.ui.bye();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" return output;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":50}},{"path":"src/main/java/jarvis/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * Launch the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":12}},{"path":"src/main/java/jarvis/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.MainWindow;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * A GUI for Jarvis using fxml.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" private final Jarvis jarvis \u003d new Jarvis(\"records.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" stage.setTitle(\"Jarvis\");","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setJarvis(jarvis);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":34}},{"path":"src/main/java/jarvis/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.AddCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.CheckCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.command.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * Parser class is used for parsing user input into a command to be executed by Jarvis chatbot.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" * An enum for keywords in user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public enum Keyword {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" LIST(\"list\"), MARK(\"mark\"), UNMARK(\"unmark\"), DELETE(\"delete\"), CHECK(\"check\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" FIND(\"find\"), TODO(\"todo\"), DEADLINE(\"deadline\"), EVENT(\"event\"), BYE(\"bye\");","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" private String keyword;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" private Keyword(String keyword) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" public String getKeyword() {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" return this.keyword;","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" * Parse the user input into a command to be executed by Jarvis chatbot.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" * @param input the user input.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" * @return A command to be executed by Jarvis chatbot.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" * @throws InvalidCommandException If user input is invalid for any command.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" public Command parse(String input) throws InvalidCommandException {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" if (isAddCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" return new AddCommand(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" } else if (isListCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" } else if (isCheckCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" return new CheckCommand(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" } else if (isFindCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" return new FindCommand(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" } else if (isMarkCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" return new MarkCommand(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" } else if (isUnmarkCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" return new UnmarkCommand(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" } else if (isDeleteCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" return new DeleteCommand(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" } else if (isByeCommand(input)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":" // Helper methods","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":" private boolean isAddCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.TODO.keyword) || input.startsWith(Keyword.DEADLINE.keyword)","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"li-rongzhi"},"content":" || input.startsWith(Keyword.EVENT.keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"li-rongzhi"},"content":" private boolean isListCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"li-rongzhi"},"content":" return input.equalsIgnoreCase(Keyword.LIST.keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"li-rongzhi"},"content":" private boolean isCheckCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.CHECK.keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"li-rongzhi"},"content":" private boolean isFindCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.FIND.keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"li-rongzhi"},"content":" private boolean isMarkCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.MARK.keyword + \" \") \u0026\u0026 input.length() \u003e 5","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(5).matches(\"-?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"li-rongzhi"},"content":" private boolean isUnmarkCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.UNMARK.keyword + \" \") \u0026\u0026 input.length() \u003e 7","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(7).matches(\"-?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"li-rongzhi"},"content":" private boolean isDeleteCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"li-rongzhi"},"content":" return input.startsWith(Keyword.DELETE.keyword + \" \") \u0026\u0026 input.length() \u003e 7","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(7).matches(\"-?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"li-rongzhi"},"content":" private boolean isByeCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"li-rongzhi"},"content":" return input.equalsIgnoreCase(Keyword.BYE.keyword);","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":103}},{"path":"src/main/java/jarvis/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.RecordLoadingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.RecordUpdateException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * Storage class is used for providing backup of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" private String filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" * Load records from the previous storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * @return A list of records in string.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" * @throws RecordLoadingException If an error occurs when loading records.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" public ArrayList\u003cString\u003e load() throws RecordLoadingException {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(this.filePath))) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" ArrayList\u003cString\u003e records \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" String currRecord;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" while ((currRecord \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" records.add(currRecord);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" return records;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" throw new RecordLoadingException();","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" * Update the records.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the new taskList to be stored.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" * @throws RecordUpdateException If an error occurs when updating records.","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" public void update(TaskList taskList) throws RecordUpdateException {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" try (PrintWriter writer \u003d new PrintWriter(new FileWriter(this.filePath))) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" writer.println(taskList.toRecord());","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" throw new RecordUpdateException();","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":54}},{"path":"src/main/java/jarvis/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.ContentMissingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidTimeFormatException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.TimeClashException;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" * AddCommand class is a subclass of Command class.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * It is used for adding tasks into taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" private static DateTimeFormatter formatterWithTime \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" * Create an AddCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" public AddCommand(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.TODO.getKeyword())","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" || input.startsWith(Parser.Keyword.DEADLINE.getKeyword())","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" || input.startsWith(Parser.Keyword.EVENT.getKeyword())","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for AddCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" * Execute the AddCommand to add task into taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks currently held, where the new task is to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" String keyword \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" String content \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" switch (keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" if (!Character.isWhitespace(input.charAt(4))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":" content \u003d input.substring(4).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":" if (content.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":" throw new ContentMissingException(\"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new ToDo(content);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"li-rongzhi"},"content":" int byIndex \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"li-rongzhi"},"content":" content \u003d input.substring(\"deadline\".length(), byIndex).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"li-rongzhi"},"content":" String time \u003d input.substring(byIndex + 3).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"li-rongzhi"},"content":" if (content.equals(\"\") || time.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"li-rongzhi"},"content":" throw new ContentMissingException(\"deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime formattedTime \u003d LocalDateTime.parse(time, formatterWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new Deadline(content, formattedTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"li-rongzhi"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"li-rongzhi"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"li-rongzhi"},"content":" int fromIndex \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"li-rongzhi"},"content":" int toIndex \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"li-rongzhi"},"content":" content \u003d input.substring(\"event\".length(), fromIndex).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"li-rongzhi"},"content":" String from \u003d input.substring(fromIndex + 5, toIndex).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"li-rongzhi"},"content":" String to \u003d input.substring(toIndex + 3).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"li-rongzhi"},"content":" if (content.equals(\"\")","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"li-rongzhi"},"content":" || from.equals(\"\") || to.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"li-rongzhi"},"content":" throw new ContentMissingException(\"event\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime formattedFrom \u003d LocalDateTime.parse(from, formatterWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime formattedTo \u003d LocalDateTime.parse(to, formatterWithTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"li-rongzhi"},"content":" if (taskList.detectAnomalies(new LocalDateTime[]{formattedFrom, formattedTo}) !\u003d \"\") {","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"li-rongzhi"},"content":" throw new TimeClashException();","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new Event(content, formattedFrom, formattedTo);","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"li-rongzhi"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"li-rongzhi"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"li-rongzhi"},"content":" storage.update(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportTaskAdded(taskList, task);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"li-rongzhi"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(new ContentMissingException(keyword));","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"li-rongzhi"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(new InvalidTimeFormatException(formatterWithTime));","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"li-rongzhi":116}},{"path":"src/main/java/jarvis/command/CheckCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.ContentMissingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidTimeFormatException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * CheckCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * It is used for checking tasks in the list on a specific date","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":"public class CheckCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" private static DateTimeFormatter formatterWithoutTime \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" * Create a CheckCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" public CheckCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.CHECK.getKeyword())","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for CheckCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" * Execute the AddCommand to add task into taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks where the search or check operation will be conducted.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" String time \u003d this.input.substring(6);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" LocalDate formattedTime \u003d LocalDate.parse(time, formatterWithoutTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" String output \u003d taskList.checkTask(formattedTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportCheckDate(output, formattedTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(new InvalidTimeFormatException(formatterWithoutTime));","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(new ContentMissingException(\"check\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":58}},{"path":"src/main/java/jarvis/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.ContentMissingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidTimeFormatException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * Command class is an abstract class for all commands defined for Jarvis.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage)","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" throws InvalidCommandException, ContentMissingException, InvalidTimeFormatException;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":21}},{"path":"src/main/java/jarvis/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * DeleteCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" * It is used for deleting task with a specific index in the given taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" * Create a DeleteCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" public DeleteCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.DELETE.getKeyword() + \" \") \u0026\u0026 input.length() \u003e 7","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(7).matches(\"-?\\\\d+\")","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for DeleteCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" * Execute the ExecuteCommand to delete the target task.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks currently held.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" int index \u003d Integer.parseInt(this.input.substring(7));","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d taskList.deleteTask(index - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" storage.update(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportTaskDeleted(target);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":53}},{"path":"src/main/java/jarvis/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" * ExitCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" * It is used for exiting the program.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":26}},{"path":"src/main/java/jarvis/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.ContentMissingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" * FindCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * It is used for finding related tasks with a given content.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" * Create a FindCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public FindCommand(String input) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.FIND.getKeyword())","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for FindCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" String target \u003d this.input.substring(6).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" String output \u003d taskList.findTask(target);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportFindContent(output, target);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(new ContentMissingException(\"find\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"li-rongzhi":44}},{"path":"src/main/java/jarvis/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" * ListCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" * It is used for listing all tasks on the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" * Execute the ListCommand to display all tasks on the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks currently held.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportList(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":31}},{"path":"src/main/java/jarvis/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * MarkCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * It is used for marking a specific task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" * Create a MarkCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" public MarkCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.MARK.getKeyword() + \" \") \u0026\u0026 input.length() \u003e 5","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(5).matches(\"-?\\\\d+\")","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for MarkCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" * Execute the MarkCommand to mark the task with given index.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks currently held.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" int index \u003d Integer.parseInt(this.input.substring(5));","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d taskList.markTask(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" target.mark();","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" storage.update(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportTaskMarked(target);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":57}},{"path":"src/main/java/jarvis/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.gui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" * UnmarkCommand class is a subclass of Command class.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * It is used for unmarking a specific task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" private String input;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" * Create an UnmarkCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public UnmarkCommand(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" assert input.startsWith(Parser.Keyword.UNMARK.getKeyword() + \" \") \u0026\u0026 input.length() \u003e 7","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" \u0026\u0026 input.substring(7).matches(\"-?\\\\d+\")","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" : \"Invalid input for UnmarkCommand\";","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" * Execute the UnmarkCommand to unmark the task with given index.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList the list of tasks currently held.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" * @param ui ui for interaction with user.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" * @param storage backup storage of the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" int index \u003d Integer.parseInt(this.input.substring(7));","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d taskList.unmarkTask(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" target.unmark();","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" storage.update(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportTaskUnmarked(target);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" } catch (JarvisException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" return ui.reportError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" return false;","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":54}},{"path":"src/main/java/jarvis/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"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":"li-rongzhi"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"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":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" public static DialogBox getJarvisDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":62}},{"path":"src/main/java/jarvis/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.Jarvis;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" private Jarvis jarvis;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.jpg\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" private Image jarvisImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Jarvis.jpg\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" * Initialize the GUI.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" public void setJarvis(Jarvis j) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" this.jarvis \u003d j;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" DialogBox.getJarvisDialog(this.jarvis.getGreeting(), jarvisImage));","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"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":45,"author":{"gitId":"li-rongzhi"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" String response \u003d this.jarvis.getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" DialogBox.getJarvisDialog(response, jarvisImage)","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":58}},{"path":"src/main/java/jarvis/gui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.gui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.JarvisException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * Ui is an interface for interaction with the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" * Greeting the user when chatbot is launched.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" * @return A greeting message.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" public String greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" return \"Hello from Jarvis.\\n\" + \"What can I do for you, sir?\";","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * Say bye to the user when exits.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" * @return A Bye message.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" public String bye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" return \"Bye! Hope to see you again, sir.\";","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" * Report when a new task is added","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList The taskList where the new task will be added.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" * @param task The new task to be added.","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" * @return A message indicating that task is added.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" public String reportTaskAdded(TaskList taskList, Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" return \"Got it, sir. I\u0027ve added this task: \" + \"\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" + task.toString() + \"\\n\" + taskList.countTaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" * Report when a task is deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" * @param task The deleted task.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" * @return A message indicating hat the task is deleted.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" public String reportTaskDeleted(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" return \" Noted. I\u0027ve removed this task:\" + \"\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" + \"\\t\" + task.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" * Report when a task is marked.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" * @param task The task got marked.","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" * @return A message indicating that the task is marked.","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" public String reportTaskMarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":" return \"Nice! I\u0027ve marked this task as done:\" + \"\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":" + task.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":" * Report when a task is unmarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":" * @param task The task got unmarked.","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":" * @return A message indicating that the task is unmarked.","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":" public String reportTaskUnmarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"li-rongzhi"},"content":" return \"Nice! I\u0027ve marked this task as not done yet:\" + \"\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"li-rongzhi"},"content":" + task.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"li-rongzhi"},"content":" * Report the whole task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"li-rongzhi"},"content":" * @param taskList The taskList to be displayed.","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"li-rongzhi"},"content":" * @return The taskList in display format.","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"li-rongzhi"},"content":" public String reportList(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"li-rongzhi"},"content":" return \"Sir, here is your list:\" + \"\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"li-rongzhi"},"content":" + taskList.displayList();","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"li-rongzhi"},"content":" * Report the result of check command.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"li-rongzhi"},"content":" * @param output The output of CheckCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"li-rongzhi"},"content":" * @param time The time specified to check.","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"li-rongzhi"},"content":" * @return The output of CheckCommand in display format.","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"li-rongzhi"},"content":" public String reportCheckDate(String output, LocalDate time) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"li-rongzhi"},"content":" if (output \u003d\u003d \"\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"li-rongzhi"},"content":" return \"There is no task on \" + time.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"li-rongzhi"},"content":" return \"The followings are tasks on \" + time.toString() + \":\\n\" + output;","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"li-rongzhi"},"content":" * Report the result of find command.","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"li-rongzhi"},"content":" * @param output The output of FindCommand.","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"li-rongzhi"},"content":" * @param target The specified searching keyword.","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"li-rongzhi"},"content":" * @return The output of FindCommand in display format.","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"li-rongzhi"},"content":" public String reportFindContent(String output, String target) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"li-rongzhi"},"content":" return \"Sir, here are tasks related to \" + target + \"\\n\" + output;","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"li-rongzhi"},"content":" * Report an error when error occurs.","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"li-rongzhi"},"content":" * @param e The error to be reported.","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"li-rongzhi"},"content":" * @return Error in display format.","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"li-rongzhi"},"content":" public String reportError(JarvisException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"li-rongzhi"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":116}},{"path":"src/main/java/jarvis/jarvisexception/ContentMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * ContentMissingException is a type of JarvisException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that content is missing in the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class ContentMissingException extends JarvisException {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" private String type;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * Create a ContentMissingException instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" * @param type the type of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" public ContentMissingException(String type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" super();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"I\u0027m sorry, sir. The content of a \" + this.type + \" cannot be empty.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"li-rongzhi":24}},{"path":"src/main/java/jarvis/jarvisexception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * InvalidCommandException is a type of JarvisException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that the input command is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class InvalidCommandException extends JarvisException {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"I\u0027m sorry, sir. I am still learning \"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" + \"but currently I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"li-rongzhi":15}},{"path":"src/main/java/jarvis/jarvisexception/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * InvalidTaskIndexException is a type of JarvisException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that the target index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class InvalidTaskIndexException extends JarvisException {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" private int index;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" * Create an InvalidTaskIndexException instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" * @param index the invalid index.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" public InvalidTaskIndexException(int index) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" super();","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"I\u0027m sorry, sir. Your target task is not found.\";","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"li-rongzhi":24}},{"path":"src/main/java/jarvis/jarvisexception/InvalidTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * InvalidTimeFormatException is a type of JarvisException.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that the input time format is invalid.","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"public class InvalidTimeFormatException extends JarvisException {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" private DateTimeFormatter formatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * Create an InvalidTimeFormatException.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * @param formatter The formatter which is supposed to be satisfied.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" public InvalidTimeFormatException(DateTimeFormatter formatter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" super();","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" this.formatter \u003d formatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"Sir, the time you provided is in an invalid format. \"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" + String.format(\"The time should be in \u0027%s\u0027 format\", this.formatter);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":27}},{"path":"src/main/java/jarvis/jarvisexception/InvalidTimePeriodException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * InvalidTimePeriodException is a type of JarvisException.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that the start time of the event is later than the end time.","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class InvalidTimePeriodException extends JarvisException {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"Your input start date/time is later than end/time.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"li-rongzhi":15}},{"path":"src/main/java/jarvis/jarvisexception/JarvisException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * A general version of exceptions from Jarvis.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"public class JarvisException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" return \"OOPS!!! \";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"li-rongzhi":12}},{"path":"src/main/java/jarvis/jarvisexception/RecordLoadingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * RecordLoadingException is a type of JarvisException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that an error occurs when loading records.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class RecordLoadingException extends JarvisException {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" return super.toString() + \"Error occur when loading records.\";","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":14}},{"path":"src/main/java/jarvis/jarvisexception/RecordUpdateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * RecordUpdateException is a type of JarvisException.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that an error occurs when updating records.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class RecordUpdateException extends JarvisException {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" return super.toString() + \"Error occur when updating records.\";","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":13}},{"path":"src/main/java/jarvis/jarvisexception/TimeClashException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.jarvisexception;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * TimeClashException is a type of JarvisException.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * It indicates that an Event being added clashes with another Event in the list.","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"public class TimeClashException extends JarvisException {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" public String getMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" return super.getMessage() + \"There is another event clashes with the new event.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"li-rongzhi":13}},{"path":"src/main/java/jarvis/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * Deadline class is a subclass of Task class.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" * Deadline is a type of Task with a due time (due).","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" private LocalDateTime due;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * Create a Deadline task instance without state.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * @param content task content.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" * @param due the due time.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" public Deadline(String content, LocalDateTime due) {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" super(content);","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" * Create a Deadline task instance with state.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * @param content task content.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" * @param due the due time.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" * @param state done or not done yet","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" public Deadline(String content, LocalDateTime due, Boolean state) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" super(content, state);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" this.due \u003d due;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" public LocalDateTime[] get_time_components() {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" return new LocalDateTime[]{this.due};","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public String toRecord() {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" return \"[D]\" + super.toRecord() + \" (by: \" + this.due + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" return \"[D]\" + super.toString() + \" (by: \" + super.time_printer(due) + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"li-rongzhi":49}},{"path":"src/main/java/jarvis/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" * Event class is a subclass of Task class.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" * Event is a type of Task with a time period (from and to).","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * Create an Event task instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" * @param content the content of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" * @param from start time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" * @param to end time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" public Event(String content, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" super(content);","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" * Create an Event task instance with state.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" * @param content the content of the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" * @param from start time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" * @param to end time of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" * @param state done or not done yet.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" public Event(String content, LocalDateTime from, LocalDateTime to, Boolean state) {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" super(content, state);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public LocalDateTime[] get_time_components() {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" return new LocalDateTime[]{this.from, this.to};","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" public String toRecord() {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" return \"[E]\" + super.toRecord() + \" (from: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" + time_printer(this.from) + \" to: \" + time_printer(this.to) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"li-rongzhi":55}},{"path":"src/main/java/jarvis/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.time.Month;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" * Task is a parent class for all types of task defined for Jarvis.","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"public class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" private String content;","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" * Constructs a new Task with the specified content.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * @param content The content or description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" public Task(String content) {","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" * Constructs a new Task with the specified content.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" * @param content The content or description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * @param state Done or not done yet.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" public Task(String content, Boolean state) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" this.content \u003d content;","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" this.isDone \u003d state;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" * Mark the task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" public void mark() {","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" * Unmark the task as not done yet.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" public void unmark() {","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" * Get the status icon of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" * \"X\" stands for done while \" \" stands for not done yet.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" * @return the status icon in String.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" private String get_status_icon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" return \"[\" + get_status_icon() + \"] \" + this.content;","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":" * Transform the given time into a specific format.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":" * @param time the time to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":" * @return time in a specific format in String.","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":" protected String time_printer(LocalDateTime time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":" Month month \u003d time.getMonth();","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":" int day \u003d time.getDayOfMonth();","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":" int year \u003d time.getYear();","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"li-rongzhi"},"content":" int hour \u003d time.getHour();","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"li-rongzhi"},"content":" int minute \u003d time.getMinute();","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"li-rongzhi"},"content":" return month.toString() + \" \" + day + \" \" + year + \" \" + hour + \":\" + minute;","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"li-rongzhi"},"content":" * Get the format for record storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"li-rongzhi"},"content":" * @return task in format for record storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"li-rongzhi"},"content":" public String toRecord() {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"li-rongzhi"},"content":" return \"[\" + get_status_icon() + \"] \" + this.content;","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"li-rongzhi"},"content":" * Get time components contained in the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"li-rongzhi"},"content":" * @return an array of time components.","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"li-rongzhi"},"content":" public LocalDateTime[] get_time_components() {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"li-rongzhi"},"content":" return new LocalDateTime[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"li-rongzhi"},"content":" public boolean checkContent(String input) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"li-rongzhi"},"content":" return this.content.contains(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"li-rongzhi":94}},{"path":"src/main/java/jarvis/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import java.util.stream.IntStream;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.InvalidTaskIndexException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import jarvis.jarvisexception.RecordLoadingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" * TaskList class is an abstraction of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" private static DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\u0027T\u0027HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" * Construct a new TaskList instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" * @param records previous records represented in string.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" * @throws RecordLoadingException If an error occurs when loading records.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" public TaskList(ArrayList\u003cString\u003e records) throws RecordLoadingException {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" String[] recordArray \u003d records.toArray(new String[records.size()]);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" decodeRecordInBatch(recordArray);","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" * Decode record in batch.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" * @param records","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" private void decodeRecordInBatch(String... records) throws RecordLoadingException {","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" for (String record: records) {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" Task task \u003d this.decodeRecord(record);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" * Decode the record in String into a Task object.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" * @param record a string recording a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" * @return a task with the recorded information.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" * @throws RecordLoadingException","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" private Task decodeRecord(String record) throws RecordLoadingException {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" if (record \u003d\u003d null || record.length() \u003c\u003d 3) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":" String type \u003d record.substring(0, 3);","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":" // isDone indicates mark(True) or unmark(False)","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"li-rongzhi"},"content":" Boolean isDone \u003d (record.substring(3, 6) \u003d\u003d \"[X]\");","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"li-rongzhi"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"li-rongzhi"},"content":" String content;","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"li-rongzhi"},"content":" switch (type) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"li-rongzhi"},"content":" case \"[T]\":","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"li-rongzhi"},"content":" content \u003d record.substring(7).trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new ToDo(content, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"li-rongzhi"},"content":" case \"[D]\":","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"li-rongzhi"},"content":" int splitPoint \u003d record.indexOf(\" (by: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"li-rongzhi"},"content":" content \u003d record.substring(7, splitPoint).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"li-rongzhi"},"content":" String time \u003d record.substring(splitPoint + 6, record.length() - 1).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime deadline \u003d LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new Deadline(content, deadline, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"li-rongzhi"},"content":" case \"[E]\":","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"li-rongzhi"},"content":" content \u003d record.substring(7, record.indexOf(\" (from: \")).trim();","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime from \u003d LocalDateTime.parse(","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"li-rongzhi"},"content":" record.substring(record.indexOf(\" (from: \") + 8, record.indexOf(\" to: \")).trim(),","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"li-rongzhi"},"content":" formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime to \u003d LocalDateTime.parse(","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"li-rongzhi"},"content":" record.substring(record.indexOf(\" to: \") + 5, record.length() - 1).trim(), formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"li-rongzhi"},"content":" task \u003d new Event(content, from, to, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"li-rongzhi"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"li-rongzhi"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"li-rongzhi"},"content":" throw new RecordLoadingException();","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"li-rongzhi"},"content":" return task;","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"li-rongzhi"},"content":" * Add the given task into the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"li-rongzhi"},"content":" * @param task task to be added.","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"li-rongzhi"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"li-rongzhi"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"li-rongzhi"},"content":" * Delete the task with given index from the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"li-rongzhi"},"content":" * @param index the index of the task to be deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"li-rongzhi"},"content":" * @return the task deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"li-rongzhi"},"content":" * @throws InvalidTaskIndexException If the specified target index is out of range.","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"li-rongzhi"},"content":" public Task deleteTask(int index) throws InvalidTaskIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d this.taskList.remove(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"li-rongzhi"},"content":" return target;","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"li-rongzhi"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidTaskIndexException(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"li-rongzhi"},"content":" * Mark the task with given index as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"li-rongzhi"},"content":" * @param index The specified target index.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"li-rongzhi"},"content":" * @return the task marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"li-rongzhi"},"content":" * @throws InvalidTaskIndexException If the specifies target index is out of range.","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"li-rongzhi"},"content":" public Task markTask(int index) throws InvalidTaskIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"li-rongzhi"},"content":" target.mark();","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"li-rongzhi"},"content":" return target;","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"li-rongzhi"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidTaskIndexException(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"li-rongzhi"},"content":" * Unmark the task with given index as not done yet.","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"li-rongzhi"},"content":" * @param index The specified target index.","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"li-rongzhi"},"content":" * @return the task unmarked.","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"li-rongzhi"},"content":" * @throws InvalidTaskIndexException If the specifies target index is out of range.","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"li-rongzhi"},"content":" public Task unmarkTask(int index) throws InvalidTaskIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"li-rongzhi"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"li-rongzhi"},"content":" Task target \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"li-rongzhi"},"content":" target.unmark();","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"li-rongzhi"},"content":" return target;","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"li-rongzhi"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"li-rongzhi"},"content":" throw new InvalidTaskIndexException(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"li-rongzhi"},"content":" * Check tasks on a specific date.","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"li-rongzhi"},"content":" * @param time The specified time to be checked.","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"li-rongzhi"},"content":" * @return tasks on the given date in String.","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"li-rongzhi"},"content":" public String checkTask(LocalDate time) {","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"li-rongzhi"},"content":" ArrayList\u003cTask\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"li-rongzhi"},"content":" ArrayList\u003cInteger\u003e indexes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"li-rongzhi"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"li-rongzhi"},"content":" Task task \u003d this.taskList.get(i);","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"li-rongzhi"},"content":" if (task instanceof ToDo) {","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"li-rongzhi"},"content":" continue;","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime[] timeCollection \u003d task.get_time_components();","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"li-rongzhi"},"content":" for (LocalDateTime taskTime: timeCollection) {","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"li-rongzhi"},"content":" if (taskTime.toLocalDate().isEqual(time)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"li-rongzhi"},"content":" results.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":168,"author":{"gitId":"li-rongzhi"},"content":" indexes.add(i);","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"li-rongzhi"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":171,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":172,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":173,"author":{"gitId":"li-rongzhi"},"content":" return IntStream.range(0, results.size())","lastModifiedDate":"2023-09-08"},{"lineNumber":174,"author":{"gitId":"li-rongzhi"},"content":" .mapToObj(j -\u003e (indexes.get(j) + 1) + \". \" + results.get(j).toString())","lastModifiedDate":"2023-09-08"},{"lineNumber":175,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":176,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":177,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":178,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"li-rongzhi"},"content":" * Searches for tasks in the task list that match the specified target content.","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"li-rongzhi"},"content":" * @param target The target content to search for in task descriptions.","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"li-rongzhi"},"content":" * @return A formatted string containing matching task descriptions along with their indexes.","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"li-rongzhi"},"content":" public String findTask(String target) {","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"li-rongzhi"},"content":" return IntStream.range(0, this.taskList.size())","lastModifiedDate":"2023-09-08"},{"lineNumber":186,"author":{"gitId":"li-rongzhi"},"content":" .filter(index -\u003e this.taskList.get(index).checkContent(target))","lastModifiedDate":"2023-09-08"},{"lineNumber":187,"author":{"gitId":"li-rongzhi"},"content":" .mapToObj(index -\u003e (index + 1) + \". \" + this.taskList.get(index).toString())","lastModifiedDate":"2023-09-08"},{"lineNumber":188,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":189,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"li-rongzhi"},"content":" * Count number of tasks currently in the taskList.","lastModifiedDate":"2023-08-27"},{"lineNumber":194,"author":{"gitId":"li-rongzhi"},"content":" * @return The number of tasks in the taskList.","lastModifiedDate":"2023-09-08"},{"lineNumber":195,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"li-rongzhi"},"content":" public String countTaskList() {","lastModifiedDate":"2023-09-08"},{"lineNumber":197,"author":{"gitId":"li-rongzhi"},"content":" int num \u003d this.taskList.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":198,"author":{"gitId":"li-rongzhi"},"content":" if (num \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":199,"author":{"gitId":"li-rongzhi"},"content":" return \"Sir, there\u0027s nothing on the list currently.\";","lastModifiedDate":"2023-08-26"},{"lineNumber":200,"author":{"gitId":"li-rongzhi"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":201,"author":{"gitId":"li-rongzhi"},"content":" return \"Now you have \" + num + \" tasks in the list.\";","lastModifiedDate":"2023-08-26"},{"lineNumber":202,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":203,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":204,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":205,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":206,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":207,"author":{"gitId":"li-rongzhi"},"content":" * Get the whole taskList in display format.","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"li-rongzhi"},"content":" * @return The taskList in display format.","lastModifiedDate":"2023-09-08"},{"lineNumber":209,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":210,"author":{"gitId":"li-rongzhi"},"content":" public String displayList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":211,"author":{"gitId":"li-rongzhi"},"content":" return IntStream.range(0, this.taskList.size())","lastModifiedDate":"2023-09-08"},{"lineNumber":212,"author":{"gitId":"li-rongzhi"},"content":" .mapToObj(index -\u003e (index + 1) + \". \" + this.taskList.get(index).toString())","lastModifiedDate":"2023-09-08"},{"lineNumber":213,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":214,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":215,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":216,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":217,"author":{"gitId":"li-rongzhi"},"content":" * Get the whole taskList in record format.","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"li-rongzhi"},"content":" * @return The taskList in record format.","lastModifiedDate":"2023-09-08"},{"lineNumber":219,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":220,"author":{"gitId":"li-rongzhi"},"content":" public String toRecord() {","lastModifiedDate":"2023-08-26"},{"lineNumber":221,"author":{"gitId":"li-rongzhi"},"content":" return this.taskList.stream()","lastModifiedDate":"2023-09-08"},{"lineNumber":222,"author":{"gitId":"li-rongzhi"},"content":" .map(Task::toRecord)","lastModifiedDate":"2023-09-08"},{"lineNumber":223,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":224,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":225,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":226,"author":{"gitId":"li-rongzhi"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":227,"author":{"gitId":"li-rongzhi"},"content":" * Check if there exists any Event clashes with the new Event.","lastModifiedDate":"2023-09-10"},{"lineNumber":228,"author":{"gitId":"li-rongzhi"},"content":" * @param timeComponents The start and end time of Event","lastModifiedDate":"2023-09-10"},{"lineNumber":229,"author":{"gitId":"li-rongzhi"},"content":" * @return A string of the list of task that clashes with the new Event.","lastModifiedDate":"2023-09-10"},{"lineNumber":230,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":231,"author":{"gitId":"li-rongzhi"},"content":" public String detectAnomalies(LocalDateTime[] timeComponents) {","lastModifiedDate":"2023-09-10"},{"lineNumber":232,"author":{"gitId":"li-rongzhi"},"content":" ArrayList\u003cTask\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":233,"author":{"gitId":"li-rongzhi"},"content":" ArrayList\u003cInteger\u003e indexes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":234,"author":{"gitId":"li-rongzhi"},"content":" boolean isNoAnomaly \u003d true;","lastModifiedDate":"2023-09-10"},{"lineNumber":235,"author":{"gitId":"li-rongzhi"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":236,"author":{"gitId":"li-rongzhi"},"content":" Task task \u003d this.taskList.get(i);","lastModifiedDate":"2023-09-10"},{"lineNumber":237,"author":{"gitId":"li-rongzhi"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-09-10"},{"lineNumber":238,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime[] existingEventTime \u003d task.get_time_components();","lastModifiedDate":"2023-09-10"},{"lineNumber":239,"author":{"gitId":"li-rongzhi"},"content":" if (existingEventTime[1].isBefore(timeComponents[0])","lastModifiedDate":"2023-09-10"},{"lineNumber":240,"author":{"gitId":"li-rongzhi"},"content":" || timeComponents[1].isBefore(existingEventTime[0])) {","lastModifiedDate":"2023-09-10"},{"lineNumber":241,"author":{"gitId":"li-rongzhi"},"content":" // No clash, intervals do not overlap","lastModifiedDate":"2023-09-10"},{"lineNumber":242,"author":{"gitId":"li-rongzhi"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":243,"author":{"gitId":"li-rongzhi"},"content":" results.add(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":244,"author":{"gitId":"li-rongzhi"},"content":" indexes.add(i);","lastModifiedDate":"2023-09-10"},{"lineNumber":245,"author":{"gitId":"li-rongzhi"},"content":" isNoAnomaly \u003d true;","lastModifiedDate":"2023-09-10"},{"lineNumber":246,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":247,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":248,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":249,"author":{"gitId":"li-rongzhi"},"content":" if (isNoAnomaly) {","lastModifiedDate":"2023-09-10"},{"lineNumber":250,"author":{"gitId":"li-rongzhi"},"content":" return \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":251,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":252,"author":{"gitId":"li-rongzhi"},"content":" return IntStream.range(0, results.size())","lastModifiedDate":"2023-09-10"},{"lineNumber":253,"author":{"gitId":"li-rongzhi"},"content":" .mapToObj(j -\u003e (indexes.get(j) + 1) + \". \" + results.get(j).toString())","lastModifiedDate":"2023-09-10"},{"lineNumber":254,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":255,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":256,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":257,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":258,"author":{"gitId":"li-rongzhi"},"content":" return this.taskList.stream()","lastModifiedDate":"2023-09-08"},{"lineNumber":259,"author":{"gitId":"li-rongzhi"},"content":" .map(Task::toString)","lastModifiedDate":"2023-09-08"},{"lineNumber":260,"author":{"gitId":"li-rongzhi"},"content":" .collect(Collectors.joining(\"\\n\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":261,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":262,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":262}},{"path":"src/main/java/jarvis/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":" * ToDo class is a subclass of Task class.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":" * ToDo is a type of Task without time information.","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":" * @author Rongzhi","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" public ToDo(String content) {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" super(content);","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" public ToDo(String content, Boolean state) {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" super(content, state);","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" public String toRecord() {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" return \"[T]\" + super.toRecord();","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"li-rongzhi":26}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"\u003c!-- GUI design below inspired by https://github.com/elroygohjy/ip--\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.geometry.*?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.control.*?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.image.*?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.layout.*?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.text.*?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: transparent;\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/11\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" \u003cLabel fx:id\u003d\"dialog\" maxWidth\u003d\"250\" alignment\u003d\"BASELINE_CENTER\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-background-color: #254f77; -fx-background-radius: 15;\" text\u003d\"Label\" textFill\u003d\"WHITE\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" \u003cFont name\u003d\"Times New Roman\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"70.0\" fitWidth\u003d\"70.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" \u003cCircle radius\u003d\"35\" centerX\u003d\"35\" centerY\u003d\"35\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" bottom\u003d\"5.0\"/\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets bottom\u003d\"20.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":44}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"\u003c!-- GUI design below inspired by https://github.com/elroygohjy/ip--\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"\u003c?import javafx.scene.control.ScrollBar?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"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/11\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"jarvis.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutX\u003d\"3.0\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"317.0\" style\u003d\"-fx-background-radius: 10px; -fx-border-radius: 10px; -fx-background-color: #223138; -fx-text-fill: #ffffff; -fx-border-color: #223138;\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"322.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"75.0\" style\u003d\"-fx-background-color: #1c2931; -fx-background-radius: 10;\" text\u003d\"Send\" textFill\u003d\"#ffffff\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" \u003cFont name\u003d\"System Bold\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #1c2931; -fx-border-color: #1c2931;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" style\u003d\"-fx-background-color: #1c2931;\" styleClass\u003d\"root\"\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" \u003cInsets top\u003d\"30.0\" /\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":35}},{"path":"src/test/java/jarvis/JarvisTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import java.io.File;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":"public class JarvisTest {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" private Jarvis jarvis;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" @BeforeEach","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" public void setUp() {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" // Create a Jarvis instance with a test file path","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" jarvis \u003d new Jarvis(\"testFilePath.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" public void testGetGreeting() {","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" String greeting \u003d jarvis.getGreeting();","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" assertNotNull(greeting);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"Hello from Jarvis.\\n\" + \"What can I do for you, sir?\", greeting);","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" public void testGetResponse() {","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" // Test a valid input","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" String validInput \u003d \"todo read\";","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" String response \u003d jarvis.getResponse(validInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" assertNotNull(response);","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" assertTrue(response.startsWith(\"Got it, sir. I\u0027ve added this task: \"));","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" // Test an invalid input that should throw an exception","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" String invalidInput \u003d \"todo\";","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" String errorResponse \u003d jarvis.getResponse(invalidInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" assertNotNull(errorResponse);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" assertTrue(errorResponse.startsWith(\"OOPS!\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" // Test an exit command","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" String exitInput \u003d \"bye\";","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" String exitResponse \u003d jarvis.getResponse(exitInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" assertNotNull(exitResponse);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"Bye! Hope to see you again, sir.\", exitResponse);","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" @AfterEach","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" public void tearDown() throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" // Clean up the test file after each test","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" File file \u003d new File(\"testFilePath.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"li-rongzhi"},"content":" file.delete();","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"li-rongzhi":61}},{"path":"src/test/java/jarvis/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" public void toRecordTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][ ] quiz (by: 2023-08-27T12:00)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" new Deadline(\"quiz\", LocalDateTime.of(2023, 8, 27, 12, 00)).toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" Deadline temp \u003d new Deadline(\"quiz\",","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 12, 00), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][X] quiz (by: 2023-08-27T12:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][ ] quiz (by: 2023-08-27T12:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][X] quiz (by: 2023-08-27T12:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][ ] quiz (by: AUGUST 27 2023 12:0)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" new Deadline(\"quiz\", LocalDateTime.of(2023, 8, 27, 12, 00)).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" Deadline temp \u003d new Deadline(\"quiz\",","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 12, 00), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][X] quiz (by: AUGUST 27 2023 12:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][ ] quiz (by: AUGUST 27 2023 12:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[D][X] quiz (by: AUGUST 27 2023 12:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" public void get_time_componentsTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" Deadline temp \u003d new Deadline(\"quiz\",","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 12, 00), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" assertArrayEquals(new LocalDateTime[]{LocalDateTime.of(2023, 8, 27, 12, 00)},","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" temp.get_time_components());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":43}},{"path":"src/test/java/jarvis/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"public class EventTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" public void toRecordTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][ ] party (from: 2023-08-27T19:00 to: 2023-08-27T22:00)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" new Event(\"party\",","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00)).toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" Event temp \u003d new Event(\"party\",","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" true);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][X] party (from: 2023-08-27T19:00 to: 2023-08-27T22:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][ ] party (from: 2023-08-27T19:00 to: 2023-08-27T22:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][X] party (from: 2023-08-27T19:00 to: 2023-08-27T22:00)\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][ ] party (from: AUGUST 27 2023 19:0 to: AUGUST 27 2023 22:0)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" new Event(\"party\",","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00)).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" Event temp \u003d new Event(\"party\",","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" true);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][X] party (from: AUGUST 27 2023 19:0 to: AUGUST 27 2023 22:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][ ] party (from: AUGUST 27 2023 19:0 to: AUGUST 27 2023 22:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[E][X] party (from: AUGUST 27 2023 19:0 to: AUGUST 27 2023 22:0)\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" public void get_time_componentsTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":" Event temp \u003d new Event(\"party\",","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"li-rongzhi"},"content":" true);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"li-rongzhi"},"content":" assertArrayEquals(","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"li-rongzhi"},"content":" new LocalDateTime[]{","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 19, 00),","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 22, 00)},","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"li-rongzhi"},"content":" temp.get_time_components());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":56}},{"path":"src/test/java/jarvis/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":" public void toRecordTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[ ] read\", new Task(\"read\").toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" Task temp \u003d new Task(\"read\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[X] read\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[ ] read\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[X] read\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[ ] read\", new Task(\"read\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" Task temp \u003d new Task(\"read\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[X] read\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[ ] read\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[X] read\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" public void time_printerTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"AUGUST 27 2023 12:0\",","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" new Task(\"read\").time_printer(","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" LocalDateTime.of(2023, 8, 27, 12, 0)));","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"li-rongzhi"},"content":" public void get_time_componentsTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"li-rongzhi"},"content":" Task temp \u003d new Task(\"read book\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"li-rongzhi"},"content":" assertArrayEquals(new LocalDateTime[0],","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"li-rongzhi"},"content":" temp.get_time_components());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":46}},{"path":"src/test/java/jarvis/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"package jarvis.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"li-rongzhi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"li-rongzhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"li-rongzhi"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"li-rongzhi"},"content":" public void toRecordTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][ ] read book\", new ToDo(\"read book\").toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"li-rongzhi"},"content":" ToDo temp \u003d new ToDo(\"read book\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][X] read book\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][ ] read book\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][X] read book\", temp.toRecord());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"li-rongzhi"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][ ] read book\", new ToDo(\"read book\").toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"li-rongzhi"},"content":" ToDo temp \u003d new ToDo(\"read book\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][X] read book\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"li-rongzhi"},"content":" temp.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][ ] read book\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"li-rongzhi"},"content":" temp.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"li-rongzhi"},"content":" assertEquals(\"[T][X] read book\", temp.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"li-rongzhi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"li-rongzhi"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"li-rongzhi"},"content":" public void get_time_componentsTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"li-rongzhi"},"content":" ToDo temp \u003d new ToDo(\"read book\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"li-rongzhi"},"content":" assertArrayEquals(new LocalDateTime[0],","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"li-rongzhi"},"content":" temp.get_time_components());","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"li-rongzhi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"li-rongzhi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"li-rongzhi":40}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"li-rongzhi"},"content":"todo borrow book","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"li-rongzhi"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"li-rongzhi"},"content":"todo return book","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"li-rongzhi"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"li-rongzhi":4}},{"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":"li-rongzhi"},"content":"java -classpath ../bin Jarvis \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-19"},{"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":{"li-rongzhi":1,"-":37}}] diff --git a/li-rongzhi_ip_master/commits.json b/li-rongzhi_ip_master/commits.json index b9961a6c..1a222d2b 100644 --- a/li-rongzhi_ip_master/commits.json +++ b/li-rongzhi_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"li-rongzhi":[{"date":"2023-08-19","commitResults":[{"hash":"2a824f8a1398ddf7d0293708ea2ea2b11770db1f","isMergeCommit":false,"messageTitle":"Increment to Level-0, added greet and exit methods","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":10}}},{"hash":"f20f7b4fb26ced2635329d637037c680c8a6b115","isMergeCommit":false,"messageTitle":"Increment to Level-1, added echo system","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":4}}},{"hash":"17903c0f70f0318f3e0e4c2140e31b147a0615cc","isMergeCommit":false,"messageTitle":"Increment to Level-2, added store_inputs method","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":7}}},{"hash":"bebccb20646f71488c736aafa0a744e8e2dca27c","isMergeCommit":false,"messageTitle":"Increment to Level-3, added methods for marking task status","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":26}}},{"hash":"cd13a76e2cf150f8c4ad1a8b3e00a23fd43104a0","isMergeCommit":false,"messageTitle":"Increment to Level-4, added three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":6}}},{"hash":"90525af9151c6fe86a140fd55d1dac9a3cd86313","isMergeCommit":false,"messageTitle":"Increment to Level-5, added testing part","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"bc28b68caaf4222d7b9a968957017e1fed527087","isMergeCommit":false,"messageTitle":"Increment to Level-5, handling possible errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":132,"deletions":64}}},{"hash":"7641effeca6632b1c718278987439503e7beb5f4","isMergeCommit":false,"messageTitle":"Increment to Level-6, supporting delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":10}}},{"hash":"29490002c80c8e311fb471550eab576fe0bedc8b","isMergeCommit":false,"messageTitle":"Added enum","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":7}}}]},{"date":"2023-08-24","commitResults":[{"hash":"9e43dfdd4bcb2f3620872c4923dd286ac498c79c","isMergeCommit":false,"messageTitle":"Update ui testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"8056f1d91a8ff8f5746e4134ee1268dbc4d1d30d","isMergeCommit":false,"messageTitle":"Update Enum","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-25","commitResults":[{"hash":"1896d95f4f1b423e1f7b99c62f6d336bf561856f","isMergeCommit":false,"messageTitle":"Increment to Level-7: Adding save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":4}}},{"hash":"d2b94d94f2ba6bf90260f944c3da51d4ba99a998","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":8,"deletions":7}}},{"hash":"44e5514358dfb630e2edff688dc7550da5f7f1e1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Merge to branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"8696663369dce35e12e4fa779eeaedcaca2208ea","isMergeCommit":false,"messageTitle":"Increment to Level-7: implement the date and time format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":12}}},{"hash":"a3e13f15ed79a53d41f06b364eb22b08e03508cb","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":1}}},{"hash":"ce629d8cdd45c431b977d3981fd18aba4b431861","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 Merge to Master branch.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"59738c429e54a1008b20daf507cfaa4fd1ccfdc0","isMergeCommit":false,"messageTitle":"Increment to a More-OOP version","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":704,"deletions":330}}},{"hash":"3fb2ee6c9896a42c713e516b37c827b1b1ece376","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"43e7b83ade7a1af55258a6d0b8d949f472e66111","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027 Merge a more OOP version","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"542cc7b441156280e2e827fcd80fe5441e9f3298","isMergeCommit":false,"messageTitle":"Increment to package-based version","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":106,"deletions":117},"md":{"insertions":2,"deletions":2}}},{"hash":"74ded2aeadcb428dfd1bb6c96edcf84f3a8a552f","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"9560fa76670b7eda646e7c074611a90b76c2e5af","isMergeCommit":true,"messageTitle":"Increment to more packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4fea93740d6b9e1031c039a9fbbeb3b3729c17f4","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 Merge to add Gradle support.","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"49f4343c67dff06b2c7d96e38689a2ec355d0316","isMergeCommit":false,"messageTitle":"Increment Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":0},"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"5eb38ff2c9d93a7797c590a1f5feb8a3fe162a7d","isMergeCommit":false,"messageTitle":"Implement Gradle","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":2,"deletions":1}}},{"hash":"cdd53a9a7f7ce1bb91006b3dfdaa1f3393127f46","isMergeCommit":false,"messageTitle":"Implement Junit test for some classes","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":211,"deletions":0}}},{"hash":"a2dfa4a99fe6c79ffbfc09dc6ad19c9b3ebb75e5","isMergeCommit":false,"messageTitle":"Create Jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"f7cf037f1cca3d4854b010245f2548aa449abbb7","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":227,"deletions":2}}},{"hash":"b1cd240e503ec4385888ad4b13bacdde86cb294e","isMergeCommit":false,"messageTitle":"Add Find operation","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":1}}},{"hash":"bc41ba28536ed1b39969f76b1a361db3f6b7293d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 merge to support find operation","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"345331b0cd40a9425e4249c086ae21c483ec9064","isMergeCommit":true,"messageTitle":"Merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9d880fb3aca0229aeff637d13610e2de3b517bc1","isMergeCommit":false,"messageTitle":"Aplly coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":227}}},{"hash":"7ea6739838d4e67e9674add0a6e4508e6aba64e2","isMergeCommit":true,"messageTitle":"Combine","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3d32ea43c26d829d76b481a213857c34b42ffee4","isMergeCommit":false,"messageTitle":"Increment CodingStandard part","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":31}}}]},{"date":"2023-09-01","commitResults":[{"hash":"f716d69a21c059be0fb1121d5748980d8c695fd0","isMergeCommit":false,"messageTitle":"Check code style","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":430,"deletions":261},"md":{"insertions":3,"deletions":3}}},{"hash":"aa1567e71eb12efa2620936a91011cda785a939d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027 Check code style.","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"219c2c1069466e10ebdd063099db0a22ff9870c9","isMergeCommit":false,"messageTitle":"Increment to Level-10, with a simple GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"txt":{"insertions":3,"deletions":1},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":364,"deletions":420}}},{"hash":"e95edde316c4e92b05b36e06c63935367a853551","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":3,"deletions":16}}},{"hash":"c523e665f5bc7e1b0280a10aacb6bf4860e9165c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027 Increment to Level 10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8bddef68bdde5c26671406edc712d13b84872357","isMergeCommit":false,"messageTitle":"Update Test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":0}}},{"hash":"7ccb960cc066215748b104e590b6acaef53006cb","isMergeCommit":false,"messageTitle":"Implement Java Varargs","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"559f5c06506bd64748737bae9b4c61264ee866a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Varargs\u0027 Implement Java Varargs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a10e1b0b5c5bc52607edc6986b93da41d9d6acd6","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":31,"deletions":13}}},{"hash":"6980efa4cfaf9ef4ef89ba0a891bd981e04feed5","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":6,"deletions":3}}},{"hash":"e8c3c1f1d0965b62de150fb33f295719ed224e2d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"008702c8c249dd7cd019ee6f4b254c4b5a651043","isMergeCommit":false,"messageTitle":"Update .gitignore file","messageBody":"The file records.txt is added into .gitignore file.\n\nIt is used for record storage, and thus no need to be pushed.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"57d170ea2a6ef7952ddd2b0de73884bedf54f1bd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/li-rongzhi/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ed5a300ab97fa73a9daa4c59c38cee424d26e4f8","isMergeCommit":false,"messageTitle":"Increment Checks for Important Assumptions Inside Procedure","messageBody":"In this commit, we have introduced enhanced validation checks within the procedure to ensure the validity of input parameters. Specifically, we have employed the `assert` feature to thoroughly validate and confirm the validity of input data during initialization.\n\nThese checks play a crucial role in preventing potential failures or unexpected behavior that may occur as a result of invalid or unexpected input. By asserting the correctness of input parameters, we safeguard the successful execution of commands, reducing the likelihood of unintended issues.\n\nThis proactive approach to input validation not only enhances the reliability of our code but also contributes to the overall robustness of the system, helping to maintain smooth and error-free command execution.\n","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}},{"hash":"b64484b71224ed4afb05158216982be5cfcfb6d0","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Code quality is improved by the following actions:\n* Rename some method names to follow naming convention\n* Break down complicated expressions\n* Add incomplete JavaDoc\n\nWith better code quality, it makes the code more readable and more friendly for other developers.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":68}}},{"hash":"5dea1d2489a8a1cf9cf6c93872876bc42a21b743","isMergeCommit":false,"messageTitle":"Use Stream to replace some for loop","messageBody":"In this commit, I replaced several traditional for loops with Java Streams to improve code readability and maintainability.\n\n The original for loop was replaced with a stream-based approach, making the code more concise and expressive.\n- I utilized the `filter` and `collect` operations to filter tasks and collect them into collections efficiently.\n- This change adheres to best practices for functional programming and stream usage in Java.\n\nOverall, this refactoring enhances the clarity of the code while preserving the same functionality.\n","tags":["A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":32}}},{"hash":"6874c651f31701b0423c961accec4f930cd616e6","isMergeCommit":true,"messageTitle":"Merge pull request #1 from li-rongzhi/branch-A-Assertions","messageBody":"Increment Checks for Important Assumptions Inside Procedure","fileTypesAndContributionMap":{}},{"hash":"9fc912b72f1cf4bcc55f048a1f8cc19b0794f5e4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality Get branch-A-CodeQuality sync with master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9d2cc74d0f621de92534b9470cd98d075dc84757","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Streams Get branch-A-Streams sync with master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cdfc0d8abbec20c267e4a62111260138fc404d91","isMergeCommit":true,"messageTitle":"Merge pull request #2 from li-rongzhi/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"046339428eaf393399ac21142e6e0d9dbbdf21a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Streams Get branch-A-Streams sync with master branch after merging branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0bbdc977718d534a92167d73b2b4dcc85b41710f","isMergeCommit":true,"messageTitle":"Merge pull request #3 from li-rongzhi/branch-A-Streams","messageBody":"Use Stream to replace some for loop","fileTypesAndContributionMap":{}},{"hash":"abb9dbd461d8137bf112cc6e3cfc956d48f725c5","isMergeCommit":false,"messageTitle":"Slight modification","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":3,"deletions":4}}},{"hash":"74ecac282e80c3bbfc75f54e65e8185a7b9e6976","isMergeCommit":false,"messageTitle":"Add Continuous Integration(CI)","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":5},"java":{"insertions":86,"deletions":47}}}]},{"date":"2023-09-10","commitResults":[{"hash":"0f851bdc56b30cbf5dc0b7f1b7d53b9b7894247c","isMergeCommit":false,"messageTitle":"Implement anomaly detection","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":1}}},{"hash":"8b5ea43d3acb6382cdfcb1b060951fec537d57d4","isMergeCommit":true,"messageTitle":"Merge pull request #4 from li-rongzhi/branch-B-DetectAnomalies","messageBody":"Implement anomaly detection","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"940be3ab1514b53192941fd9e328703009a3669a","isMergeCommit":false,"messageTitle":"Update with a better GUI","messageBody":"","tags":["A-BetterGui"],"fileTypesAndContributionMap":{"fxml":{"insertions":52,"deletions":13},"java":{"insertions":1,"deletions":1}}},{"hash":"7c9fbb01de22e4edc3278da80d60a50c8836e55b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-BetterGui\u0027 Implement a better Gui","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5156377de723f21118db4a67efbfeb2794f88e12","isMergeCommit":false,"messageTitle":"Add some personal features","messageBody":"","tags":["A-Personality"],"fileTypesAndContributionMap":{"fxml":{"insertions":6,"deletions":2},"java":{"insertions":17,"deletions":53}}},{"hash":"c8de1f061ccd10516b57a12eed4b7a69feb17d45","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Personality\u0027 Add some features for personality.","messageBody":"","tags":["A-MoreErrorHandling"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"3d8fd1f003912329566ab3904dd8fe158fb3cd94","isMergeCommit":false,"messageTitle":"Update InvalidTimePeriodException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"f18c4b5b3b77fc7a945d551b5a5a4fea660b790d","isMergeCommit":false,"messageTitle":"Add more Testing","messageBody":"","tags":["A-MoreTesting"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":0}}},{"hash":"079a9e2ddedaa51639dfc2254da569ac9bb19eba","isMergeCommit":true,"messageTitle":"Merge pull request #5 from li-rongzhi/branch-A-MoreTesting","messageBody":"Add more Testing","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"li-rongzhi":{"java":1837,"md":34,"fxml":79,"sh":1,"bat":0,"gradle":10,"txt":4}},"authorContributionVariance":{"li-rongzhi":133677.48},"authorDisplayNameMap":{"li-rongzhi":"CS2103T-T10-4 LI R..GZHI"}} +{"authorDailyContributionsMap":{"li-rongzhi":[{"date":"2023-08-19","commitResults":[{"hash":"2a824f8a1398ddf7d0293708ea2ea2b11770db1f","isMergeCommit":false,"messageTitle":"Increment to Level-0, added greet and exit methods","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":10}}},{"hash":"f20f7b4fb26ced2635329d637037c680c8a6b115","isMergeCommit":false,"messageTitle":"Increment to Level-1, added echo system","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":4}}},{"hash":"17903c0f70f0318f3e0e4c2140e31b147a0615cc","isMergeCommit":false,"messageTitle":"Increment to Level-2, added store_inputs method","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":7}}},{"hash":"bebccb20646f71488c736aafa0a744e8e2dca27c","isMergeCommit":false,"messageTitle":"Increment to Level-3, added methods for marking task status","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":26}}},{"hash":"cd13a76e2cf150f8c4ad1a8b3e00a23fd43104a0","isMergeCommit":false,"messageTitle":"Increment to Level-4, added three types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":6}}},{"hash":"90525af9151c6fe86a140fd55d1dac9a3cd86313","isMergeCommit":false,"messageTitle":"Increment to Level-5, added testing part","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"bc28b68caaf4222d7b9a968957017e1fed527087","isMergeCommit":false,"messageTitle":"Increment to Level-5, handling possible errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":132,"deletions":64}}},{"hash":"7641effeca6632b1c718278987439503e7beb5f4","isMergeCommit":false,"messageTitle":"Increment to Level-6, supporting delete tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":10}}},{"hash":"29490002c80c8e311fb471550eab576fe0bedc8b","isMergeCommit":false,"messageTitle":"Added enum","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":7}}}]},{"date":"2023-08-24","commitResults":[{"hash":"9e43dfdd4bcb2f3620872c4923dd286ac498c79c","isMergeCommit":false,"messageTitle":"Update ui testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"8056f1d91a8ff8f5746e4134ee1268dbc4d1d30d","isMergeCommit":false,"messageTitle":"Update Enum","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-25","commitResults":[{"hash":"1896d95f4f1b423e1f7b99c62f6d336bf561856f","isMergeCommit":false,"messageTitle":"Increment to Level-7: Adding save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":4}}},{"hash":"d2b94d94f2ba6bf90260f944c3da51d4ba99a998","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":8,"deletions":7}}},{"hash":"44e5514358dfb630e2edff688dc7550da5f7f1e1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Merge to branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"8696663369dce35e12e4fa779eeaedcaca2208ea","isMergeCommit":false,"messageTitle":"Increment to Level-7: implement the date and time format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":12}}},{"hash":"a3e13f15ed79a53d41f06b364eb22b08e03508cb","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":1}}},{"hash":"ce629d8cdd45c431b977d3981fd18aba4b431861","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027 Merge to Master branch.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"59738c429e54a1008b20daf507cfaa4fd1ccfdc0","isMergeCommit":false,"messageTitle":"Increment to a More-OOP version","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":704,"deletions":330}}},{"hash":"3fb2ee6c9896a42c713e516b37c827b1b1ece376","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"43e7b83ade7a1af55258a6d0b8d949f472e66111","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027 Merge a more OOP version","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"542cc7b441156280e2e827fcd80fe5441e9f3298","isMergeCommit":false,"messageTitle":"Increment to package-based version","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":106,"deletions":117},"md":{"insertions":2,"deletions":2}}},{"hash":"74ded2aeadcb428dfd1bb6c96edcf84f3a8a552f","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"9560fa76670b7eda646e7c074611a90b76c2e5af","isMergeCommit":true,"messageTitle":"Increment to more packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4fea93740d6b9e1031c039a9fbbeb3b3729c17f4","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 Merge to add Gradle support.","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"49f4343c67dff06b2c7d96e38689a2ec355d0316","isMergeCommit":false,"messageTitle":"Increment Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":0},"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"5eb38ff2c9d93a7797c590a1f5feb8a3fe162a7d","isMergeCommit":false,"messageTitle":"Implement Gradle","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":2,"deletions":1}}},{"hash":"cdd53a9a7f7ce1bb91006b3dfdaa1f3393127f46","isMergeCommit":false,"messageTitle":"Implement Junit test for some classes","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":211,"deletions":0}}},{"hash":"a2dfa4a99fe6c79ffbfc09dc6ad19c9b3ebb75e5","isMergeCommit":false,"messageTitle":"Create Jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"f7cf037f1cca3d4854b010245f2548aa449abbb7","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":227,"deletions":2}}},{"hash":"b1cd240e503ec4385888ad4b13bacdde86cb294e","isMergeCommit":false,"messageTitle":"Add Find operation","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":1}}},{"hash":"bc41ba28536ed1b39969f76b1a361db3f6b7293d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 merge to support find operation","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"345331b0cd40a9425e4249c086ae21c483ec9064","isMergeCommit":true,"messageTitle":"Merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9d880fb3aca0229aeff637d13610e2de3b517bc1","isMergeCommit":false,"messageTitle":"Aplly coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":227}}},{"hash":"7ea6739838d4e67e9674add0a6e4508e6aba64e2","isMergeCommit":true,"messageTitle":"Combine","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3d32ea43c26d829d76b481a213857c34b42ffee4","isMergeCommit":false,"messageTitle":"Increment CodingStandard part","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":31}}}]},{"date":"2023-09-01","commitResults":[{"hash":"f716d69a21c059be0fb1121d5748980d8c695fd0","isMergeCommit":false,"messageTitle":"Check code style","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":430,"deletions":261},"md":{"insertions":3,"deletions":3}}},{"hash":"aa1567e71eb12efa2620936a91011cda785a939d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027 Check code style.","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"219c2c1069466e10ebdd063099db0a22ff9870c9","isMergeCommit":false,"messageTitle":"Increment to Level-10, with a simple GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"txt":{"insertions":3,"deletions":1},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":364,"deletions":420}}},{"hash":"e95edde316c4e92b05b36e06c63935367a853551","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":3,"deletions":16}}},{"hash":"c523e665f5bc7e1b0280a10aacb6bf4860e9165c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027 Increment to Level 10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8bddef68bdde5c26671406edc712d13b84872357","isMergeCommit":false,"messageTitle":"Update Test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":0}}},{"hash":"7ccb960cc066215748b104e590b6acaef53006cb","isMergeCommit":false,"messageTitle":"Implement Java Varargs","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"559f5c06506bd64748737bae9b4c61264ee866a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Varargs\u0027 Implement Java Varargs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a10e1b0b5c5bc52607edc6986b93da41d9d6acd6","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":31,"deletions":13}}},{"hash":"6980efa4cfaf9ef4ef89ba0a891bd981e04feed5","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":6,"deletions":3}}},{"hash":"e8c3c1f1d0965b62de150fb33f295719ed224e2d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"008702c8c249dd7cd019ee6f4b254c4b5a651043","isMergeCommit":false,"messageTitle":"Update .gitignore file","messageBody":"The file records.txt is added into .gitignore file.\n\nIt is used for record storage, and thus no need to be pushed.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"57d170ea2a6ef7952ddd2b0de73884bedf54f1bd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/li-rongzhi/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ed5a300ab97fa73a9daa4c59c38cee424d26e4f8","isMergeCommit":false,"messageTitle":"Increment Checks for Important Assumptions Inside Procedure","messageBody":"In this commit, we have introduced enhanced validation checks within the procedure to ensure the validity of input parameters. Specifically, we have employed the `assert` feature to thoroughly validate and confirm the validity of input data during initialization.\n\nThese checks play a crucial role in preventing potential failures or unexpected behavior that may occur as a result of invalid or unexpected input. By asserting the correctness of input parameters, we safeguard the successful execution of commands, reducing the likelihood of unintended issues.\n\nThis proactive approach to input validation not only enhances the reliability of our code but also contributes to the overall robustness of the system, helping to maintain smooth and error-free command execution.\n","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}},{"hash":"b64484b71224ed4afb05158216982be5cfcfb6d0","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Code quality is improved by the following actions:\n* Rename some method names to follow naming convention\n* Break down complicated expressions\n* Add incomplete JavaDoc\n\nWith better code quality, it makes the code more readable and more friendly for other developers.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":68}}},{"hash":"5dea1d2489a8a1cf9cf6c93872876bc42a21b743","isMergeCommit":false,"messageTitle":"Use Stream to replace some for loop","messageBody":"In this commit, I replaced several traditional for loops with Java Streams to improve code readability and maintainability.\n\n The original for loop was replaced with a stream-based approach, making the code more concise and expressive.\n- I utilized the `filter` and `collect` operations to filter tasks and collect them into collections efficiently.\n- This change adheres to best practices for functional programming and stream usage in Java.\n\nOverall, this refactoring enhances the clarity of the code while preserving the same functionality.\n","tags":["A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":32}}},{"hash":"6874c651f31701b0423c961accec4f930cd616e6","isMergeCommit":true,"messageTitle":"Merge pull request #1 from li-rongzhi/branch-A-Assertions","messageBody":"Increment Checks for Important Assumptions Inside Procedure","fileTypesAndContributionMap":{}},{"hash":"9fc912b72f1cf4bcc55f048a1f8cc19b0794f5e4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality Get branch-A-CodeQuality sync with master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9d2cc74d0f621de92534b9470cd98d075dc84757","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Streams Get branch-A-Streams sync with master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cdfc0d8abbec20c267e4a62111260138fc404d91","isMergeCommit":true,"messageTitle":"Merge pull request #2 from li-rongzhi/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"046339428eaf393399ac21142e6e0d9dbbdf21a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Streams Get branch-A-Streams sync with master branch after merging branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0bbdc977718d534a92167d73b2b4dcc85b41710f","isMergeCommit":true,"messageTitle":"Merge pull request #3 from li-rongzhi/branch-A-Streams","messageBody":"Use Stream to replace some for loop","fileTypesAndContributionMap":{}},{"hash":"abb9dbd461d8137bf112cc6e3cfc956d48f725c5","isMergeCommit":false,"messageTitle":"Slight modification","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":5},"java":{"insertions":3,"deletions":4}}},{"hash":"74ecac282e80c3bbfc75f54e65e8185a7b9e6976","isMergeCommit":false,"messageTitle":"Add Continuous Integration(CI)","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":5},"java":{"insertions":86,"deletions":47}}}]},{"date":"2023-09-10","commitResults":[{"hash":"0f851bdc56b30cbf5dc0b7f1b7d53b9b7894247c","isMergeCommit":false,"messageTitle":"Implement anomaly detection","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":1}}},{"hash":"8b5ea43d3acb6382cdfcb1b060951fec537d57d4","isMergeCommit":true,"messageTitle":"Merge pull request #4 from li-rongzhi/branch-B-DetectAnomalies","messageBody":"Implement anomaly detection","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"940be3ab1514b53192941fd9e328703009a3669a","isMergeCommit":false,"messageTitle":"Update with a better GUI","messageBody":"","tags":["A-BetterGui"],"fileTypesAndContributionMap":{"fxml":{"insertions":52,"deletions":13},"java":{"insertions":1,"deletions":1}}},{"hash":"7c9fbb01de22e4edc3278da80d60a50c8836e55b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-BetterGui\u0027 Implement a better Gui","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5156377de723f21118db4a67efbfeb2794f88e12","isMergeCommit":false,"messageTitle":"Add some personal features","messageBody":"","tags":["A-Personality"],"fileTypesAndContributionMap":{"fxml":{"insertions":6,"deletions":2},"java":{"insertions":17,"deletions":53}}},{"hash":"c8de1f061ccd10516b57a12eed4b7a69feb17d45","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Personality\u0027 Add some features for personality.","messageBody":"","tags":["A-MoreErrorHandling"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"3d8fd1f003912329566ab3904dd8fe158fb3cd94","isMergeCommit":false,"messageTitle":"Update InvalidTimePeriodException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"f18c4b5b3b77fc7a945d551b5a5a4fea660b790d","isMergeCommit":false,"messageTitle":"Add more Testing","messageBody":"","tags":["A-MoreTesting"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":0}}},{"hash":"079a9e2ddedaa51639dfc2254da569ac9bb19eba","isMergeCommit":true,"messageTitle":"Merge pull request #5 from li-rongzhi/branch-A-MoreTesting","messageBody":"Add more Testing","fileTypesAndContributionMap":{}},{"hash":"53d1dc6cb76b7d54d57e02f0ea8d201fd30d830d","isMergeCommit":false,"messageTitle":"Updte README.md for docs","messageBody":"","tags":["A-UserGuide","A-Release"],"fileTypesAndContributionMap":{"fxml":{"insertions":11,"deletions":11},"java":{"insertions":1,"deletions":0},"md":{"insertions":57,"deletions":15}}}]}]},"authorFileTypeContributionMap":{"li-rongzhi":{"java":1838,"md":90,"fxml":79,"sh":1,"bat":0,"gradle":10,"txt":4}},"authorContributionVariance":{"li-rongzhi":133305.19},"authorDisplayNameMap":{"li-rongzhi":"CS2103T-T10-4 LI R..GZHI"}} diff --git a/lipwei1808_ip_master/authorship.json b/lipwei1808_ip_master/authorship.json index 9b2cc8be..73e4c4e8 100644 --- a/lipwei1808_ip_master/authorship.json +++ b/lipwei1808_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"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":"lipwei1808"},"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":{"lipwei1808":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"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":"lipwei1808"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"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":"lipwei1808"},"content":"javafx {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lipwei1808":26,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"deadline report /by 31/12/2023 23:000","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"deadline report10 /by 12/12/2023 01:001","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"todo hi1","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"deadline project report /by 31/12/2001 18:000","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"todo run0","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"todo run1","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"event dirnk occfee /from 18/08/2001 18:00 /to 21/08/2003 22:001","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"todo run0","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"lipwei1808":8}},{"path":"data/storageTest.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"todo take a run0","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"deadline project report /by 18/08/2001 19:001","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from 18/09/2001 19:00 /to 18/10/2001 19:001","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"deadline exam paper /by 18/11/2001 19:000","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lipwei1808":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" * Runs the Duke Application","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" private final Tasks tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" * \u003cp\u003eInitialises data structures used by the application.\u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" this.storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" tasks \u003d storage.load();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" * Handler method for GUI application to respond to user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" * @param input the input passed by user from the GUI","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" * @return string response for the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" Command c \u003d Parser.parse(input, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" // Empty or unknown command","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" if (c \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" return ui.showUnknownCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" // Check if is duke.commands.ExitCommand","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" if (c.willExit()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" // Execute command","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" return c.execute(this.tasks, this.ui, this.storage, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" } catch (DukeException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" return ui.showError(ex.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"lipwei1808":53,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":" * The main entry point to the application.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" * Entry point main method to the application.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" * @param args Any user arguments passed in","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":18}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" private final Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":33}},{"path":"src/main/java/duke/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" * Represents an AddCommand where this command should add into Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD_D \u003d \"deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD_E \u003d \"event\";","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD_T \u003d \"todo\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" private final Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for AddCommand","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" * @param task the Task to be added","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" // Check for duplicated task","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" for (Task task: tasks.getAll()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" if (task.equals(this.task)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" return ui.showDuplicateTask();","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" tasks.add(this.task);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" if (!isRestoring) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" output +\u003d ui.showAddTask(this.task, tasks.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":45}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" * Encapsulates the Command to run by the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" * Executes the command, updates Tasks, Storage and prints to standard output and user feedback.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" * @param tasks the Tasks object to be updated","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" * @param ui Ui instance to print to standard output any user feedback","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" * @param storage Storage instance to save into persistent storage","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" * @param isRestoring boolean flag to track if the Command is executing in a restoring state","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * @throws DukeException if the Command cannot be executed due to invalid user input","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" public abstract String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) throws DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" * Checks if the program should exit after the execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" * @return a boolean value if the program should exit","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" public boolean willExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":31}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" * Represents a DeleteCommand where this command should delete a Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" private int target;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for DeleteCommand","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" * @param target the targeted index of the Task to be deleted","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" public DeleteCommand(int target) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" this.target \u003d target;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" Task task \u003d tasks.getTaskByIndex(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" Task t \u003d tasks.remove(this.target - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" if (!isRestoring) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" output +\u003d ui.showSuccessDelete(t, tasks.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":42}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Represents an ExitCommand where the program should quit.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" return ui.showExit();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" public boolean willExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":22}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.util.List;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" * Represents an FindCommand where the user is finding tasks based on a target string.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" private String target;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for FindCommand","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" * @param target the targeted string that the user is searching for","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" public FindCommand(String target) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" this.target \u003d target;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" assert !this.target.equals(\"\") : \"target string to find shouldn\u0027t be empty!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" List\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" for (Task task: tasks.getAll()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" if (task.getDescription().contains(this.target)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" foundTasks.add(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" if (foundTasks.size() \u003e 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" output +\u003d ui.showTasks(foundTasks, true);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" output +\u003d ui.showNoTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"lipwei1808":46}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Represents a ListCommand which should print all Tasks into standard output.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" if (isRestoring) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" return ui.showNoTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" return ui.showTasks(tasks.getAll(), false);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":25}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" * Represents a MarkCommand which should set the marked value of a Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD_MARK \u003d \"mark\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD_UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" private boolean isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" private int target;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for MarkCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Task should be marked","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" * @param target the targeted index of the Task to be marked","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" public MarkCommand(boolean isMarked, int target) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" this.target \u003d target;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" Task task \u003d tasks.getTaskByIndex(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" task.setMarked(this.isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" if (!isRestoring) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" output +\u003d ui.showSuccessMark(this.isMarked, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":47}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * Encapsulations of all exceptions thrown by the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" * @param message the message describing the exception","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" super(\"OOPS!!! \" + message);","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" * String representation of the Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" * @return The string representation","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" return \"OOPS!!! \" + this.getMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":24}},{"path":"src/main/java/duke/exceptions/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * Signals an invalid argument provided by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class InvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for InvalidArgumentException","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" public InvalidArgumentException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" super(\"I\u0027m sorry, but you have entered an invalid argument :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":13}},{"path":"src/main/java/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * Signals an invalid command provided by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for InvalidCommandException","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" super(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":13}},{"path":"src/main/java/duke/exceptions/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * Signals an invalid deadline due to invalid format given by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class InvalidDeadlineException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for InvalidDeadlineException","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" super(\"Please enter a deadline with the format \u0027\u003c\u003cmessage\u003e\u003e /by dd/mm/yyyy HH:mm\u0027 format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":13}},{"path":"src/main/java/duke/exceptions/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * Signals an invalid event due to invalid format given by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class InvalidEventException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for InvalidEventException","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" super(\"Please enter an event with the format \u0027\u003c\u003cmessage\u003e\u003e /from dd/mm/yyyy HH:mm /to dd/mm/yyyy HH:mm\u0027 format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":13}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.AddCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.ExitCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidArgumentException;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidDeadlineException;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidEventException;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" * Parses user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" * Parses user input into a Command object for execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" * @param input the text input by the user","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" * @param isRestoring boolean value if this is parsing from a data file or real user input","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" * @return Command to be executed","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" * @throws DukeException when the user passes in invalid input","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" public static Command parse(String input, boolean isRestoring) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" if (input.trim().equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" String[] parsedText \u003d parseText(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" String action \u003d parsedText[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" String arguments \u003d parsedText[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" boolean marked \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" if (isRestoring) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" String marker \u003d arguments.substring(arguments.length() - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" marked \u003d marker.equals(\"1\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" arguments \u003d arguments.substring(0, arguments.length() - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" switch (action) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_D:","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_E:","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_T:","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" return handleAdd(action, arguments, marked);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" if (arguments.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" return new DeleteCommand(parseArgs(arguments));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":" if (!arguments.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" case MarkCommand.COMMAND_WORD_UNMARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" if (arguments.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":" return new MarkCommand(false, parseArgs(arguments));","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" case MarkCommand.COMMAND_WORD_MARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" if (arguments.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":" return new MarkCommand(true, parseArgs(arguments));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" if (arguments.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":" return new FindCommand(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"lipwei1808"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"lipwei1808"},"content":" * Parses user input for adding into tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"lipwei1808"},"content":" * @param taskInput the type of Task","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"lipwei1808"},"content":" * @param args the arguments to be parsed for the Task","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"lipwei1808"},"content":" * @return AddCommand to be executed","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"lipwei1808"},"content":" * @throws DukeException if there is invalid user input","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"lipwei1808"},"content":" protected static AddCommand handleAdd(String taskInput, String args, boolean isMarked) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"lipwei1808"},"content":" if (args.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"lipwei1808"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"lipwei1808"},"content":" switch (taskInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_D:","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"lipwei1808"},"content":" task \u003d parseDeadline(args, isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"lipwei1808"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_E:","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"lipwei1808"},"content":" task \u003d parseEvent(args, isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"lipwei1808"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_T:","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"lipwei1808"},"content":" task \u003d new Todo(args, isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"lipwei1808"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"lipwei1808"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"lipwei1808"},"content":" return new AddCommand(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"lipwei1808"},"content":" * Parses user text into the action type and the arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"lipwei1808"},"content":" * @param text the text to be parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"lipwei1808"},"content":" * @return String[] where the first index is the action type and second index is the arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"lipwei1808"},"content":" protected static String[] parseText(String text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"lipwei1808"},"content":" String[] words \u003d text.trim().split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"lipwei1808"},"content":" String[] remainingWords \u003d Arrays.copyOfRange(words, 1, words.length);","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"lipwei1808"},"content":" String restOfText \u003d String.join(\" \", remainingWords);","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"lipwei1808"},"content":" return new String[] {words[0], restOfText};","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"lipwei1808"},"content":" * Parse string arguments into integers.","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"lipwei1808"},"content":" * @param args the string number to be parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"lipwei1808"},"content":" * @return the integer","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"lipwei1808"},"content":" * @throws DukeException if an invalid string of number is provided","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"lipwei1808"},"content":" protected static int parseArgs(String args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"lipwei1808"},"content":" assert !args.equals(\"\") : \"arguments shouldn\u0027t be empty string!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"lipwei1808"},"content":" return Integer.parseInt(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"lipwei1808"},"content":" } catch (NumberFormatException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"lipwei1808"},"content":" * Parses a string into a LocalDateTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"lipwei1808"},"content":" * @param text the string to be parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"lipwei1808"},"content":" * @return LocalDateTime object after parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"lipwei1808"},"content":" protected static LocalDateTime parseDateTime(String text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"lipwei1808"},"content":" String[] datetime \u003d text.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime parsedDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"lipwei1808"},"content":" if (datetime.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"lipwei1808"},"content":" String dateTimeString \u003d datetime[0] + \"T\" + datetime[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"lipwei1808"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"lipwei1808"},"content":" parsedDateTime \u003d LocalDateTime.parse(dateTimeString, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"lipwei1808"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"lipwei1808"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"lipwei1808"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"lipwei1808"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"lipwei1808"},"content":" return parsedDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"lipwei1808"},"content":" * Parses arguments for the deadline action type.","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"lipwei1808"},"content":" * @param text the arguments to be parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"lipwei1808"},"content":" * @return Deadline object created by the arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"lipwei1808"},"content":" * @throws InvalidDeadlineException if invalid arguments are provided","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"lipwei1808"},"content":" private static Deadline parseDeadline(String text, boolean isMarked) throws InvalidDeadlineException {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"lipwei1808"},"content":" String[] deadline \u003d text.split(\" /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"lipwei1808"},"content":" if (deadline.length !\u003d 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime parsedDateTime \u003d parseDateTime(deadline[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"lipwei1808"},"content":" if (parsedDateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"lipwei1808"},"content":" return new Deadline(deadline[0], parsedDateTime, isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"lipwei1808"},"content":" * Parses arguments for the event action type.","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"lipwei1808"},"content":" * @param text the arguments to be parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"lipwei1808"},"content":" * @return Event object created by the arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"lipwei1808"},"content":" * @throws InvalidEventException if invalid arguments are provided","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"lipwei1808"},"content":" private static Event parseEvent(String text, boolean isMarked) throws InvalidEventException {","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"lipwei1808"},"content":" String[] first \u003d text.split(\" /from \");","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"lipwei1808"},"content":" if (first.length !\u003d 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"lipwei1808"},"content":" String[] second \u003d first[1].split(\" /to \");","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"lipwei1808"},"content":" if (second.length !\u003d 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime fromDate \u003d parseDateTime(second[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime toDate \u003d parseDateTime(second[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"lipwei1808"},"content":" if (fromDate \u003d\u003d null || toDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"lipwei1808"},"content":" return new Event(first[0], fromDate, toDate, isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":222}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * Represents a Storage function for the specified filepath.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" private final String filepath;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" private final Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for the Storage class.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" * @param filepath the filepath to the file to be tracked","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" * Loads the data from the given filepath into a Tasks object.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" * @return the Tasks object containing data from the data file","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" public Tasks load() {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" Tasks tasks \u003d new Tasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" File myObj \u003d new File(this.filepath);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" Scanner myReader \u003d new Scanner(myObj);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" ui.showSuccessLoadingStorage(this.filepath);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" String text \u003d myReader.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" Command c \u003d Parser.parse(text, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" if (c \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" c.execute(tasks, ui, new Storage(this.filepath), true);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" } catch (FileNotFoundException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" this.handleFileNotFound(myObj);","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" } catch (DukeException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" ui.showErrorLoadingFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" ui.showError(ex.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" System.exit(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" * Save tasks into the specified filepath.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" * @param tasks the Tasks to be saved","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" public void save(Tasks tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" // Delete everything in","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":" PrintWriter writer \u003d new PrintWriter(this.filepath);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":" writer.print(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" ui.showErrorWritingFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" System.exit(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" // Rewrite everything","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":" this.saveTask(tasks.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"lipwei1808"},"content":" * Save a task into the specified filepath.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"lipwei1808"},"content":" * @param task the Task to be saved","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"lipwei1808"},"content":" private void saveTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"lipwei1808"},"content":" FileWriter myWriter \u003d new FileWriter(this.filepath, true);","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"lipwei1808"},"content":" myWriter.write(String.format(\"%s%s\\n\", task.getOriginalMessage(), task.getMarked() ? \"1\" : \"0\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"lipwei1808"},"content":" myWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"lipwei1808"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"lipwei1808"},"content":" System.out.println(\" Error saving to file\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"lipwei1808"},"content":" System.exit(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"lipwei1808"},"content":" * Create the File when a FileNotFound exception is thrown.","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"lipwei1808"},"content":" * @param myObj the file object to create","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"lipwei1808"},"content":" private void handleFileNotFound(File myObj) {","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"lipwei1808"},"content":" ui.showErrorFileNotFound();","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"lipwei1808"},"content":" String[] filepathSplit \u003d this.filepath.split(\"/\");","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"lipwei1808"},"content":" String fileLocation \u003d String.join(\"/\", Arrays.copyOfRange(filepathSplit, 0, filepathSplit.length - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"lipwei1808"},"content":" File dir \u003d new File(fileLocation);","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"lipwei1808"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"lipwei1808"},"content":" dir.mkdirs();","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"lipwei1808"},"content":" myObj.createNewFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"lipwei1808"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"lipwei1808"},"content":" ui.showErrorLoadingFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"lipwei1808"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"lipwei1808"},"content":" System.exit(1);","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":124}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":" * A task object that tracks Deadlines.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" private final LocalDateTime by;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" * @param description of the deadline object","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" * @param by the LocalDateTime object tracking when the deadline should be completed by","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Deadline task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" public Deadline(String description, LocalDateTime by, boolean isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" super(description, \"deadline\", isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" public String getOriginalMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" return String.format(\"%s %s /by %s\", this.type, this.getDescription(), this.stringifyDate(this.by));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" return super.toString() + \" (by: \" + this.formatDate(this.by) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" if (!super.equals(o)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" if (o instanceof Deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" Deadline d \u003d (Deadline) o;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" return this.by.equals(d.by);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":46}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":" * A task object that tracks Events.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" * @param description of the event object","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" * @param from the LocalDateTime object tracking when the event starts","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" * @param to the LocalDateTime object tracking when the event ends","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Event task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" super(description, \"event\", isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" public String getOriginalMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" return String.format(","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" \"%s %s /from %s /to %s\",","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" this.type,","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" this.getDescription(),","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" this.stringifyDate(this.from),","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" this.stringifyDate(this.to)","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" return super.toString() + \" (from: \" + this.formatDate(this.from) + \" to: \" + this.formatDate(this.to) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" if (!super.equals(o)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" if (o instanceof Event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" Event d \u003d (Event) o;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" if (!this.from.equals(d.from)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" return this.to.equals(d.to);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":60}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" * Represents a task entered by a user.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" public final String type;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" private final String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" private boolean isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" * Public constructor to be called by child classes.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" * @param description the description describing the task","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" * @param type the type of task","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value tracking whether the task has been marked","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" public Task(String description, String type, boolean isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" * An abstract method to reconstruct the original message passed by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" * @return text string of the original user entered message","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" public abstract String getOriginalMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" * Getter method for the description field.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" * @return the description of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" return this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" * Getter method for the isMarked field.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" * @return the boolean value if the task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" public boolean getMarked() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" return this.isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" * A setter method for the isMarked field.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked the boolean value to be set","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" public void setMarked(boolean isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" * Helper method to stringify LocalDateTime objects into original text string","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":" * pass by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" * @param dateTime the LocalDateTime object to be stringified","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" * @return text string of the LocalDateTime object","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" public String stringifyDate(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" String formatted \u003d dateTime.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" return String.join(\" \", formatted.split(\"T\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" * Helper method to stringify LocalDateTime objects into user-friendly date format.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" * @param dateTime the LocalDateTime object to be stringified","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" * @return text string of the formatted date","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":" public String formatDate(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" return dateTime.format(DateTimeFormatter.ofPattern(\"HHmm, MMM d yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"lipwei1808"},"content":" * String representation of the Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"lipwei1808"},"content":" * @return The string representation","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"lipwei1808"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"lipwei1808"},"content":" String typeLetter \u003d this.type.substring(0, 1).toUpperCase();","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"lipwei1808"},"content":" return String.format(\"[%s][%s] %s\", typeLetter, this.getStatusIcon(), this.description);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"lipwei1808"},"content":" * Checks if an object is equal to the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"lipwei1808"},"content":" * @param o the object to be checked","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"lipwei1808"},"content":" * @return boolean value if the objects are equal","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"lipwei1808"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"lipwei1808"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"lipwei1808"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"lipwei1808"},"content":" if (o instanceof Task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"lipwei1808"},"content":" Task t \u003d (Task) o;","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"lipwei1808"},"content":" return this.isMarked \u003d\u003d t.isMarked \u0026\u0026 this.description.equals(t.description);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"lipwei1808"},"content":" * Returns a string form of whether the Task is marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"lipwei1808"},"content":" * @return string representation of the isMarked value","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"lipwei1808"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"lipwei1808"},"content":" return (isMarked ? \"X\" : \" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":122}},{"path":"src/main/java/duke/tasks/Tasks.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" * Represents a collection of Task instances.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"public class Tasks {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" private final List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" * Total number of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" * @return an integer value of the number of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" * Returns a Task object given an index.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" * @param idx the index to select the Task from","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" * @return the Task object returned","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" public Task get(int idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" return this.tasks.get(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" * Removes a Task object given the index.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" * @param idx the index of the Task to be removed","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" * @return the Task object removed","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" public Task remove(int idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" return this.tasks.remove(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" * Adds a new Task","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" * @param task the Task to be added","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" * Returns a Task given an index while checking if the index is valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" * @param id the index to retrieve the Task","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" * @return the Task returned by the index","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" public Task getTaskByIndex(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" if (id \u003e this.tasks.size() || id \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" return null;","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" return this.tasks.get(id - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" * Gets all the Tasks currently held.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" * @return a List of all the Tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" public List\u003cTask\u003e getAll() {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" return this.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":72}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * A task object that tracks Todos.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" * @param description of the todo object","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Event task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" public Todo(String description, boolean isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" super(description, \"todo\", isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" public String getOriginalMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" return \"todo \" + this.getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":22}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for DialogBox","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" * @param text the text in the dialog","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" * @param img image of the dialog","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" displayPicture.setClip(new Circle(50, 50, 50));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" * Returns a User Dialog box.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":" * @param text the text to display","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" * @param img the image of the user","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" * @return DialogBox object representing the user text","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":" * Returns a Duke Dialog box.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" * @param text the text returned by the application","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" * @param img image of the application bot","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" * @return DialogBox object representing the reply by the application","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":83}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" // Exit the program","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" if (response.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" Platform.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":59}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * UI of the application","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" * Returns success message for setting marked value of a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" * @param isMark boolean value whether to mark the task","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" * @param task the task to be marked","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" public String showSuccessMark(boolean isMark, Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" if (isMark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" res +\u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" res +\u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" res +\u003d String.format(\"%s\\n\", task);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" return res;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" * Returns message after adding a task to Tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" * @param task the task to be added","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" * @param totalTasks the updated total number of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" public String showAddTask(Task task, int totalTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" + String.format(\" %s\\n\", task)","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" + String.format(\"Now you have %s tasks in the list.\\n\", totalTasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" * Returns message after adding a duplicated task to Tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" public String showDuplicateTask() {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" return \"Oops you have already added this task. Cannot add the same task twice!\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" * Returns message with no tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" public String showNoTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" return \"No tasks found!\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" * Returns all tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" * @param tasks the tasks object to be printed","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" * @param isFiltered boolean flag for whether the tasks are filtered","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":" public String showTasks(List\u003cTask\u003e tasks, boolean isFiltered) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" String header \u003d isFiltered","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" ? \"Here are the matching tasks in your list:\"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":" : \"Here are the tasks in your list:\";","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" String res \u003d header + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" res +\u003d String.format(\"%s.%s\\n\", i + 1, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" return res;","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":" * Returns success message after deleting a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" * @param task the task to be deleted","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" * @param totalTasks total number of tasks left after deletion","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":" public String showSuccessDelete(Task task, int totalTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" + String.format(\"%s\\n\", task)","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" + \"Now you have \" + totalTasks + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"lipwei1808"},"content":" * Returns error messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"lipwei1808"},"content":" * @param message the error message to be outputted","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"lipwei1808"},"content":" public String showError(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"lipwei1808"},"content":" return message + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"lipwei1808"},"content":" * Returns a prompt to enter a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"lipwei1808"},"content":" public String showUnknownCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"lipwei1808"},"content":" return \"Please enter something :-)\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"lipwei1808"},"content":" * Returns a success message for loading storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"lipwei1808"},"content":" * @param filepath the filepath where the storage loaded data from","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"lipwei1808"},"content":" public String showSuccessLoadingStorage(String filepath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"lipwei1808"},"content":" return \"Data has been restored from \" + filepath + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"lipwei1808"},"content":" * Returns an error message when data file is not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"lipwei1808"},"content":" public String showErrorFileNotFound() {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"lipwei1808"},"content":" return \"Data file not found, creating a new one\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"lipwei1808"},"content":" * Returns an error message when loading of data failed.","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"lipwei1808"},"content":" public String showErrorLoadingFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"lipwei1808"},"content":" return \"Error creating new file, quitting program now...\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"lipwei1808"},"content":" * Returns an error message when writing to data file failed.","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"lipwei1808"},"content":" public String showErrorWritingFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"lipwei1808"},"content":" return \"Error saving to file, quitting program now...\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"lipwei1808"},"content":" * Returns a greeting message.","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"lipwei1808"},"content":" public String showGreetings() {","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"lipwei1808"},"content":" return \"Hello I\u0027m lynn the koala \u003c3\\n\" + \" What can I do for you?\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"lipwei1808"},"content":" * Returns the exit message.","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"lipwei1808"},"content":" public String showExit() {","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"lipwei1808"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":143}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-spacing: 10;\" 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-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" \u003cLabel fx:id\u003d\"dialog\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-background-color: #eaeaea; -fx-background-radius: 15; -fx-border-radius: 32;\" text\u003d\"Label\" wrapText\u003d\"true\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" \u003cInsets bottom\u003d\"8.0\" left\u003d\"16.0\" right\u003d\"16.0\" top\u003d\"8.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":20}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #222222;\" 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-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutX\u003d\"3.0\" layoutY\u003d\"563.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"39.0\" prefWidth\u003d\"310.0\" promptText\u003d\"Enter something here\" style\u003d\"-fx-background-color: #555555; -fx-text-fill: #51ff00;\" AnchorPane.bottomAnchor\u003d\"2.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"323.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"39.0\" prefWidth\u003d\"76.0\" style\u003d\"-fx-background-color: #555555;\" text\u003d\"Send\" textFill\u003d\"#51ff00\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #222222;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" style\u003d\"-fx-background-color: #222222;\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":19}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lipwei1808":4}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" public void parse_emptyInput_returnsNull() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" String[] testCases \u003d { \"\", \" \", \"\\n \\n\" };","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" for (String input: testCases) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" Command c \u003d Parser.parse(input, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" System.out.println(\"HI \" + c);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" assertNull(c);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" } catch (DukeException ex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" // ignore","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" public void parse_addCommandWithArgs_noExceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" String[] testCases \u003d {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" \"todo run\",","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" \"deadline project /by 18/08/2001 18:00\",","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" \"event project meeting /from 18/08/2001 18:00 /to 31/08/2001 22:00\"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" for (String str: testCases) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" assertDoesNotThrow(() -\u003e Parser.parse(str, false));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" public void parse_listCommand_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" assertDoesNotThrow(() -\u003e Parser.parse(\"list\", false));","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" public void parse_listCommandWithArgs_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" assertThrows(InvalidCommandException.class, () -\u003e Parser.parse(\"list 3\", false));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" public void parseText_validString_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" String[] testCases \u003d {\"todo deadline\", \"event project meeting\", \" hello, i am a friend \"};","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" String[][] answers \u003d {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" new String[] {\"todo\", \"deadline\"},","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" new String[] {\"event\", \"project meeting\"},","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":" new String[] {\"hello,\", \"i am a friend\"},","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" for (int i \u003d 0; i \u003c testCases.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":" String[] result \u003d Parser.parseText(testCases[i]);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" assertEquals(result[0], answers[i][0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" assertEquals(result[1], answers[i][1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" public void parseArgs_integerString_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" assertDoesNotThrow(() -\u003e Parser.parseArgs(\"3\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" public void parseArgs_decimalString_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" assertThrows(InvalidCommandException.class, () -\u003e Parser.parseArgs(\"3.01\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" public void parseArgs_emptyString_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" assertThrows(InvalidCommandException.class, () -\u003e Parser.parseArgs(\" \"));","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_dateWithCorrectFormat_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"lipwei1808"},"content":" assertDoesNotThrow(() -\u003e Parser.parseDateTime(\"deadline project /by 18/08/2001 18:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_dateWithWrongDay_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"lipwei1808"},"content":" assertNull(Parser.parseDateTime(\"32/12/2001 18:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_dateWithWrongMonth_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"lipwei1808"},"content":" assertNull(Parser.parseDateTime(\"18/13/2001 18:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_dateWithWrongYear_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"lipwei1808"},"content":" assertNull(Parser.parseDateTime(\"18/12/0 18:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_wrongTime_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"lipwei1808"},"content":" assertNull(Parser.parseDateTime(\"18/12/2001 25:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_wrongTimeFormat_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"lipwei1808"},"content":" assertNull(Parser.parseDateTime(\"18/12/2001 1800\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lipwei1808":113}},{"path":"src/test/java/duke/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" public void load_validData_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" Tasks tasks \u003d new Storage(\"./data/storageTest.txt\").load();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" Tasks expected \u003d this.getTestTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" if (tasks.size() !\u003d expected.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" if (!tasks.get(i).equals(expected.get(i))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" private Tasks getTestTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" Tasks tasks \u003d new Tasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime dt1 \u003d LocalDateTime.parse(\"18/08/2001T19:00\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime dt2 \u003d LocalDateTime.parse(\"18/09/2001T19:00\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime dt3 \u003d LocalDateTime.parse(\"18/10/2001T19:00\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime dt4 \u003d LocalDateTime.parse(\"18/11/2001T19:00\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" tasks.add(new Todo(\"take a run\", false));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" tasks.add(new Deadline(\"project report\", dt1, true));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" tasks.add(new Event(\"project meeting\", dt2, dt3, true));","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" tasks.add(new Deadline(\"exam paper\", dt4, false));","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lipwei1808":47}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from 12/01/2001 18:00 /to 31/12/2001 22:000","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"deadline report /by 31/12/2023 23:000","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"todo meet friend1","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"deadline report10 /by 12/12/2023 01:001","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"deadline project report /by 31/12/2001 18:000","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"event project meetup /from 21/08/2012 18:00 /to 31/12/2033 22:001","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"lipwei1808":6}},{"path":"text-ui-test/data/original.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from 12/01/2001 18:00 /to 31/12/2001 22:001","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"deadline report /by 31/12/2023 23:000","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"deadline report2 /by 01/01/2100 00:000","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"todo meet friend1","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"deadline report10 /by 12/12/2023 01:000","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"lipwei1808":5}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"delete 3","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"mark 4","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"unmark 1","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"unmark 1","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"todo hi","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"todo","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"deadline project report","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"deadline project report /by 31/12/2001 18:00","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from Mon /to 2pm","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from 21/07/2012 /to 31/12/2031","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from 21/08/2012 18:00 /to 31/12/203 22:00","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"event project meetup /from 21/08/2012 18:00 /to 31/12/2033 22:00","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"delete","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"delete 5","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":"mark 6","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":22}},{"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":"lipwei1808"},"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":{"lipwei1808":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":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"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":24,"author":{"gitId":"lipwei1808"},"content":"java -classpath ../bin duke/Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lipwei1808":3,"-":36}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"# Duke User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"Duke is a chatbot built with Java aimed at helping you to remeber your tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"effectively!","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"## Features","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"- List all tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"- Add a task","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"- Mark and unmark a task","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"- Delete a task","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"- Search for a task","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"- Save tasks to file automatically","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"- Restore tasks automatically","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"## Other stuff to know","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"- The first word of the input is the command","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"- Available commands","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" - todo","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" - deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" - event","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" - find","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" - list","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" - delete","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" - mark","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" - unmark","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":"- Duke was built with Java 11!","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":"## Usage","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":"1. Clone the repository","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":"git clone https://github.com/lipwei1808/ip.git","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":"2. Build Duke","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"./gradlew shadowJar","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":"3. Run Duke","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":"```aidl","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":"java -jar ./build/libs/duke.jar","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lipwei1808":40,"-":6}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"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":"lipwei1808"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"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":"lipwei1808"},"content":"javafx {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lipwei1808":26,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"deadline report10 /by 12/12/2023 01:001","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"todo hi1","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"deadline project report /by 31/12/2001 18:000","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"todo run0","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"todo run1","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"event dirnk occfee /from 18/08/2001 18:00 /to 21/08/2003 22:001","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"todo report /by 18/08/2023 23:590","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"lipwei1808":7}},{"path":"data/storageTest.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"todo take a run0","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"deadline project report /by 18/08/2001 19:001","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from 18/09/2001 19:00 /to 18/10/2001 19:001","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"deadline exam paper /by 18/11/2001 19:000","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lipwei1808":4}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"# Duke User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"Duke is a chatbot built with Java aimed at helping you to remeber your tasks ","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"effectively!","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"## Features","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"- List all tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"- Add a task","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"- Mark and unmark a task","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"- Delete a task","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"- Search for a task","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"- Save tasks to file automatically ","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"- Restore tasks automatically","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"## Other stuff to know","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"- The first word of the input is the command","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"- Available commands","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" - todo","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" - deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" - event","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" - find","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" - list","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" - delete","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" - mark","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" - unmark","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":"- Duke was built with Java 11!","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":"1. Clone the repository","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":"git clone https://github.com/lipwei1808/ip.git","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":"2. Build Duke","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"./gradlew shadowJar","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":"3. Run Duke","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":"```aidl","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":"java -jar ./build/libs/duke.jar","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"lipwei1808":35,"-":11}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" * Runs the Duke Application","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" private final Tasks tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" * \u003cp\u003eInitialises data structures used by the application.\u003c/p\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" public Duke() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" this.storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" tasks \u003d storage.load();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" * Returns response to user input in the GUI application.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" * @param input the input passed by user from the GUI","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" * @return string response for the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" Command c \u003d Parser.parse(input, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" // Empty or unknown command","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" if (c \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" return ui.showUnknownCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" // Check if is duke.commands.ExitCommand","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" if (c.willExit()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" // Execute command","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" return c.execute(this.tasks, this.ui, this.storage, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" } catch (DukeException ex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" return ui.showError(ex.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"lipwei1808":53,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":" * The main entry point to the application.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" * Entry point main method to the application.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" * @param args Any user arguments passed in","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":18}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" private final Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":33}},{"path":"src/main/java/duke/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" * Represents an AddCommand where this command should add into Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD_D \u003d \"deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD_E \u003d \"event\";","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD_T \u003d \"todo\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" private final Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for AddCommand","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" * @param task the Task to be added","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" // Check for duplicated task","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" for (Task task: tasks.getAll()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" if (task.equals(this.task)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" return ui.showDuplicateTask();","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" tasks.add(this.task);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" if (!isRestoring) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" output +\u003d ui.showAddTask(this.task, tasks.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":45}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" * Encapsulates the Command to run by the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" * Executes the command, updates Tasks, Storage and prints to standard output and user feedback.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" * @param tasks the Tasks object to be updated","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" * @param ui Ui instance to print to standard output any user feedback","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" * @param storage Storage instance to save into persistent storage","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" * @param isRestoring boolean flag to track if the Command is executing in a restoring state","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * @throws DukeException if the Command cannot be executed due to invalid user input","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" public abstract String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) throws DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" * Checks if the program should exit after the execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" * @return a boolean value if the program should exit","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" public boolean willExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":31}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" * Represents a DeleteCommand where this command should delete a Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" private int target;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for DeleteCommand","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" * @param target the targeted index of the Task to be deleted","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" public DeleteCommand(int target) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" this.target \u003d target;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" Task task \u003d tasks.getTaskByIndex(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" Task t \u003d tasks.remove(this.target - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" if (!isRestoring) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" output +\u003d ui.showSuccessDelete(t, tasks.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":42}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Represents an ExitCommand where the program should quit.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" return ui.showExit();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" public boolean willExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":22}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.util.List;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" * Represents an FindCommand where the user is finding tasks based on a target string.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" private String target;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for FindCommand","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" * @param target the targeted string that the user is searching for","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" public FindCommand(String target) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" this.target \u003d target;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" assert !this.target.equals(\"\") : \"target string to find shouldn\u0027t be empty!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" List\u003cTask\u003e foundTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" for (Task task: tasks.getAll()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" if (task.getDescription().contains(this.target)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" foundTasks.add(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" if (foundTasks.size() \u003e 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" output +\u003d ui.showTasks(foundTasks, true);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" output +\u003d ui.showNoTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"lipwei1808":46}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Represents a ListCommand which should print all Tasks into standard output.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" if (isRestoring) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" return ui.showNoTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" return ui.showTasks(tasks.getAll(), false);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":25}},{"path":"src/main/java/duke/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.commands;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" * Represents a MarkCommand which should set the marked value of a Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD_MARK \u003d \"mark\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" public static final String COMMAND_WORD_UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" private boolean isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" private int target;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for MarkCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Task should be marked","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" * @param target the targeted index of the Task to be marked","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" public MarkCommand(boolean isMarked, int target) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" this.target \u003d target;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" public String execute(Tasks tasks, Ui ui, Storage storage, boolean isRestoring) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" Task task \u003d tasks.getTaskByIndex(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" task.setMarked(this.isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" if (!isRestoring) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" output +\u003d ui.showSuccessMark(this.isMarked, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":47}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * Encapsulations of all exceptions thrown by the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" * @param message the message describing the exception","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" super(\"OOPS!!! \" + message);","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" * String representation of the Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" * @return The string representation","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" return \"OOPS!!! \" + this.getMessage();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":24}},{"path":"src/main/java/duke/exceptions/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * Signals an invalid argument provided by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class InvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for InvalidArgumentException","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" public InvalidArgumentException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" super(\"I\u0027m sorry, but you have entered an invalid argument :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":13}},{"path":"src/main/java/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * Signals an invalid command provided by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for InvalidCommandException","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" super(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":13}},{"path":"src/main/java/duke/exceptions/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * Signals an invalid deadline due to invalid format given by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class InvalidDeadlineException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for InvalidDeadlineException","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" super(\"Please enter a deadline with the format \u0027\u003c\u003cmessage\u003e\u003e /by dd/mm/yyyy HH:mm\u0027 format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":13}},{"path":"src/main/java/duke/exceptions/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * Signals an invalid event due to invalid format given by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class InvalidEventException extends DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for InvalidEventException","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" super(\"Please enter an event with the format \u0027\u003c\u003cmessage\u003e\u003e /from dd/mm/yyyy HH:mm /to dd/mm/yyyy HH:mm\u0027 format\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":13}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.AddCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.ExitCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidArgumentException;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidDeadlineException;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidEventException;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" * Parses user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" * Parses user input into a Command object for execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" * @param input the text input by the user","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" * @param isRestoring boolean value if this is parsing from a data file or real user input","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" * @return Command to be executed","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" * @throws DukeException when the user passes in invalid input","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" public static Command parse(String input, boolean isRestoring) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" if (input.trim().equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" String[] parsedText \u003d parseText(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" String action \u003d parsedText[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" String arguments \u003d parsedText[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" boolean isMarked \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" if (isRestoring) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" String marker \u003d arguments.substring(arguments.length() - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" isMarked \u003d marker.equals(\"1\");","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" arguments \u003d arguments.substring(0, arguments.length() - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" switch (action) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_D:","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_E:","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_T:","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" return handleAdd(action, arguments, isMarked);","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" if (arguments.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" return new DeleteCommand(parseArgs(arguments));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":" if (!arguments.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" case MarkCommand.COMMAND_WORD_UNMARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" if (arguments.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":" return new MarkCommand(false, parseArgs(arguments));","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" case MarkCommand.COMMAND_WORD_MARK:","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" if (arguments.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":" return new MarkCommand(true, parseArgs(arguments));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" if (arguments.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":" return new FindCommand(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"lipwei1808"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"lipwei1808"},"content":" * Parses user input for adding into tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"lipwei1808"},"content":" * @param taskInput the type of Task","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"lipwei1808"},"content":" * @param args the arguments to be parsed for the Task","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"lipwei1808"},"content":" * @return AddCommand to be executed","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"lipwei1808"},"content":" * @throws DukeException if there is invalid user input","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"lipwei1808"},"content":" protected static AddCommand handleAdd(String taskInput, String args, boolean isMarked) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"lipwei1808"},"content":" if (args.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"lipwei1808"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"lipwei1808"},"content":" switch (taskInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_D:","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"lipwei1808"},"content":" task \u003d parseDeadline(args, isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"lipwei1808"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_E:","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"lipwei1808"},"content":" task \u003d parseEvent(args, isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"lipwei1808"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"lipwei1808"},"content":" case AddCommand.COMMAND_WORD_T:","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"lipwei1808"},"content":" task \u003d new Todo(args, isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"lipwei1808"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"lipwei1808"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"lipwei1808"},"content":" return new AddCommand(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"lipwei1808"},"content":" * Parses user text into the action type and the arguments.","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"lipwei1808"},"content":" * @param text the text to be parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"lipwei1808"},"content":" * @return String[] where the first index is the action type and second index is the arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"lipwei1808"},"content":" protected static String[] parseText(String text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"lipwei1808"},"content":" String[] words \u003d text.trim().split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"lipwei1808"},"content":" String[] remainingWords \u003d Arrays.copyOfRange(words, 1, words.length);","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"lipwei1808"},"content":" String restOfText \u003d String.join(\" \", remainingWords);","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"lipwei1808"},"content":" return new String[] {words[0], restOfText};","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"lipwei1808"},"content":" * Parse string arguments into integers.","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"lipwei1808"},"content":" * @param args the string number to be parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"lipwei1808"},"content":" * @return the integer","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"lipwei1808"},"content":" * @throws DukeException if an invalid string of number is provided","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"lipwei1808"},"content":" protected static int parseArgs(String args) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"lipwei1808"},"content":" assert !args.equals(\"\") : \"arguments shouldn\u0027t be empty string!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"lipwei1808"},"content":" return Integer.parseInt(args);","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"lipwei1808"},"content":" } catch (NumberFormatException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"lipwei1808"},"content":" * Parses a string into a LocalDateTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"lipwei1808"},"content":" * @param text the string to be parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"lipwei1808"},"content":" * @return LocalDateTime object after parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"lipwei1808"},"content":" protected static LocalDateTime parseDateTime(String text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"lipwei1808"},"content":" String[] datetime \u003d text.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime parsedDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"lipwei1808"},"content":" if (datetime.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"lipwei1808"},"content":" String dateTimeString \u003d datetime[0] + \"T\" + datetime[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"lipwei1808"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"lipwei1808"},"content":" parsedDateTime \u003d LocalDateTime.parse(dateTimeString, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"lipwei1808"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"lipwei1808"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"lipwei1808"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"lipwei1808"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"lipwei1808"},"content":" return parsedDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"lipwei1808"},"content":" * Parses arguments for the deadline action type.","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"lipwei1808"},"content":" * @param text the arguments to be parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"lipwei1808"},"content":" * @return Deadline object created by the arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"lipwei1808"},"content":" * @throws InvalidDeadlineException if invalid arguments are provided","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"lipwei1808"},"content":" private static Deadline parseDeadline(String text, boolean isMarked) throws InvalidDeadlineException {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"lipwei1808"},"content":" String[] deadline \u003d text.split(\" /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"lipwei1808"},"content":" if (deadline.length !\u003d 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime parsedDateTime \u003d parseDateTime(deadline[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"lipwei1808"},"content":" if (parsedDateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"lipwei1808"},"content":" return new Deadline(deadline[0], parsedDateTime, isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"lipwei1808"},"content":" * Parses arguments for the event action type.","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"lipwei1808"},"content":" * @param text the arguments to be parsed","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"lipwei1808"},"content":" * @return Event object created by the arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"lipwei1808"},"content":" * @throws InvalidEventException if invalid arguments are provided","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"lipwei1808"},"content":" private static Event parseEvent(String text, boolean isMarked) throws InvalidEventException {","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"lipwei1808"},"content":" String[] first \u003d text.split(\" /from \");","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"lipwei1808"},"content":" if (first.length !\u003d 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"lipwei1808"},"content":" String[] second \u003d first[1].split(\" /to \");","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"lipwei1808"},"content":" if (second.length !\u003d 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime fromDate \u003d parseDateTime(second[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime toDate \u003d parseDateTime(second[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"lipwei1808"},"content":" if (fromDate \u003d\u003d null || toDate \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"lipwei1808"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"lipwei1808"},"content":" return new Event(first[0], fromDate, toDate, isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":222}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * Represents a Storage function for the specified filepath.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" private final String filepath;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" private final Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for the Storage class.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" * @param filepath the filepath to the file to be tracked","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" * Loads the data from the given filepath into a Tasks object.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" * @return the Tasks object containing data from the data file","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" public Tasks load() {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" Tasks tasks \u003d new Tasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" File myObj \u003d new File(this.filepath);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" Scanner myReader \u003d new Scanner(myObj);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" ui.showSuccessLoadingStorage(this.filepath);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" String text \u003d myReader.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" Command c \u003d Parser.parse(text, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" if (c \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" c.execute(tasks, ui, new Storage(this.filepath), true);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" } catch (FileNotFoundException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" this.handleFileNotFound(myObj);","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" } catch (DukeException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" ui.showErrorLoadingFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" ui.showError(ex.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" System.exit(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" * Save tasks into the specified filepath.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" * @param tasks the Tasks to be saved","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" public void save(Tasks tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" // Delete everything in","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":" PrintWriter writer \u003d new PrintWriter(this.filepath);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":" writer.print(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" ui.showErrorWritingFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" System.exit(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" // Rewrite everything","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":" this.saveTask(tasks.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"lipwei1808"},"content":" * Save a task into the specified filepath.","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"lipwei1808"},"content":" * @param task the Task to be saved","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"lipwei1808"},"content":" private void saveTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"lipwei1808"},"content":" FileWriter myWriter \u003d new FileWriter(this.filepath, true);","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"lipwei1808"},"content":" myWriter.write(String.format(\"%s%s\\n\", task.getOriginalMessage(), task.getMarked() ? \"1\" : \"0\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"lipwei1808"},"content":" myWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"lipwei1808"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"lipwei1808"},"content":" System.out.println(\" Error saving to file\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"lipwei1808"},"content":" System.exit(1);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"lipwei1808"},"content":" * Create the File when a FileNotFound exception is thrown.","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"lipwei1808"},"content":" * @param myObj the file object to create","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"lipwei1808"},"content":" private void handleFileNotFound(File myObj) {","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"lipwei1808"},"content":" ui.showErrorFileNotFound();","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"lipwei1808"},"content":" String[] filepathSplit \u003d this.filepath.split(\"/\");","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"lipwei1808"},"content":" String fileLocation \u003d String.join(\"/\", Arrays.copyOfRange(filepathSplit, 0, filepathSplit.length - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"lipwei1808"},"content":" File dir \u003d new File(fileLocation);","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"lipwei1808"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"lipwei1808"},"content":" dir.mkdirs();","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"lipwei1808"},"content":" myObj.createNewFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"lipwei1808"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"lipwei1808"},"content":" ui.showErrorLoadingFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"lipwei1808"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"lipwei1808"},"content":" System.exit(1);","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":124}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":" * A task object that tracks Deadlines.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" private final LocalDateTime by;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" * @param description of the deadline object","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" * @param by the LocalDateTime object tracking when the deadline should be completed by","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Deadline task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" public Deadline(String description, LocalDateTime by, boolean isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" super(description, \"deadline\", isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" public String getOriginalMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" return String.format(\"%s %s /by %s\", this.type, this.getDescription(), this.stringifyDate(this.by));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" return super.toString() + \" (by: \" + this.formatDate(this.by) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" if (!super.equals(o)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" if (o instanceof Deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" Deadline d \u003d (Deadline) o;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" return this.by.equals(d.by);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":46}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":" * A task object that tracks Events.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" * @param description of the event object","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" * @param from the LocalDateTime object tracking when the event starts","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" * @param to the LocalDateTime object tracking when the event ends","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Event task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to, boolean isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" super(description, \"event\", isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" public String getOriginalMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" return String.format(","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" \"%s %s /from %s /to %s\",","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" this.type,","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" this.getDescription(),","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" this.stringifyDate(this.from),","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" this.stringifyDate(this.to)","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" return super.toString() + \" (from: \" + this.formatDate(this.from) + \" to: \" + this.formatDate(this.to) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" if (!super.equals(o)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" if (o instanceof Event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" Event d \u003d (Event) o;","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" if (!this.from.equals(d.from)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" return this.to.equals(d.to);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":60}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" * Represents a task entered by a user.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" public final String type;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" private final String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" private boolean isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" * Public constructor to be called by child classes.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" * @param description the description describing the task","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" * @param type the type of task","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value tracking whether the task has been marked","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" public Task(String description, String type, boolean isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" * An abstract method to reconstruct the original message passed by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" * @return text string of the original user entered message","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" public abstract String getOriginalMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" * Getter method for the description field.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" * @return the description of the task","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" return this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" * Getter method for the isMarked field.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" * @return the boolean value if the task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" public boolean getMarked() {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" return this.isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" * A setter method for the isMarked field.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked the boolean value to be set","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" public void setMarked(boolean isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" this.isMarked \u003d isMarked;","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" * Helper method to stringify LocalDateTime objects into original text string","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":" * pass by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" * @param dateTime the LocalDateTime object to be stringified","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" * @return text string of the LocalDateTime object","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" public String stringifyDate(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" String formatted \u003d dateTime.format(DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" return String.join(\" \", formatted.split(\"T\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" * Helper method to stringify LocalDateTime objects into user-friendly date format.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" * @param dateTime the LocalDateTime object to be stringified","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" * @return text string of the formatted date","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":" public String formatDate(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" return dateTime.format(DateTimeFormatter.ofPattern(\"HHmm, MMM d yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"lipwei1808"},"content":" * String representation of the Task object.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"lipwei1808"},"content":" * @return The string representation","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"lipwei1808"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"lipwei1808"},"content":" String typeLetter \u003d this.type.substring(0, 1).toUpperCase();","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"lipwei1808"},"content":" return String.format(\"[%s][%s] %s\", typeLetter, this.getStatusIcon(), this.description);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"lipwei1808"},"content":" * Checks if an object is equal to the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"lipwei1808"},"content":" * @param o the object to be checked","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"lipwei1808"},"content":" * @return boolean value if the objects are equal","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"lipwei1808"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"lipwei1808"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"lipwei1808"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"lipwei1808"},"content":" if (o instanceof Task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"lipwei1808"},"content":" Task t \u003d (Task) o;","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"lipwei1808"},"content":" return this.isMarked \u003d\u003d t.isMarked \u0026\u0026 this.description.equals(t.description);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"lipwei1808"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"lipwei1808"},"content":" * Returns a string form of whether the Task is marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"lipwei1808"},"content":" * @return string representation of the isMarked value","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"lipwei1808"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"lipwei1808"},"content":" return (isMarked ? \"X\" : \" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":122}},{"path":"src/main/java/duke/tasks/Tasks.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.util.List;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" * Represents a collection of Task instances.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"public class Tasks {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" private final List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" * Total number of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" * @return an integer value of the number of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" * Returns a Task object given an index.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" * @param idx the index to select the Task from","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" * @return the Task object returned","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" public Task get(int idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" return this.tasks.get(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" * Removes a Task object given the index.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" * @param idx the index of the Task to be removed","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" * @return the Task object removed","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" public Task remove(int idx) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" return this.tasks.remove(idx);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" * Adds a new Task","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" * @param task the Task to be added","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" * Returns a Task given an index while checking if the index is valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" * @param id the index to retrieve the Task","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" * @return the Task returned by the index","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" public Task getTaskByIndex(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" if (id \u003e this.tasks.size() || id \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" return null;","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" return this.tasks.get(id - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" * Gets all the Tasks currently held.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" * @return a List of all the Tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" public List\u003cTask\u003e getAll() {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" return this.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":72}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":" * A task object that tracks Todos.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for Todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" * @param description of the todo object","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" * @param isMarked boolean value if the Event task is marked","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" public Todo(String description, boolean isMarked) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" super(description, \"todo\", isMarked);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" public String getOriginalMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" return \"todo \" + this.getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":22}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" * Public constructor for DialogBox","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" * @param text the text in the dialog","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" * @param img image of the dialog","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" displayPicture.setClip(new Circle(20, 20, 20));","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" * Returns a User Dialog box.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":" * @param text the text to display","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" * @param img the image of the user","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" * @return DialogBox object representing the user text","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":" * Returns a Duke Dialog box.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" * @param text the text returned by the application","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" * @param img image of the application bot","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" * @return DialogBox object representing the reply by the application","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":83}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" // Exit the program","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" if (response.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" Platform.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":59}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":" * UI of the application","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" * Returns success message for setting marked value of a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" * @param isMark boolean value whether to mark the task","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" * @param task the task to be marked","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" public String showSuccessMark(boolean isMark, Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" if (isMark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" res +\u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" res +\u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" res +\u003d String.format(\"%s\\n\", task);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" return res;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" * Returns message after adding a task to Tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" * @param task the task to be added","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" * @param totalTasks the updated total number of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" public String showAddTask(Task task, int totalTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" + String.format(\" %s\\n\", task)","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" + String.format(\"Now you have %s tasks in the list.\\n\", totalTasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" * Returns message after adding a duplicated task to Tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" public String showDuplicateTask() {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" return \"Oops you have already added this task. Cannot add the same task twice!\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":" * Returns message with no tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" public String showNoTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" return \"No tasks found!\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" * Returns all tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" * @param tasks the tasks object to be printed","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" * @param isFiltered boolean flag for whether the tasks are filtered","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":" public String showTasks(List\u003cTask\u003e tasks, boolean isFiltered) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" String header \u003d isFiltered","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" ? \"Here are the matching tasks in your list:\"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":" : \"Here are the tasks in your list:\";","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" String res \u003d header + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" res +\u003d String.format(\"%s.%s\\n\", i + 1, task);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" return res;","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":" * Returns success message after deleting a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" * @param task the task to be deleted","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" * @param totalTasks total number of tasks left after deletion","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":" public String showSuccessDelete(Task task, int totalTasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":" return \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" + String.format(\"%s\\n\", task)","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" + \"Now you have \" + totalTasks + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"lipwei1808"},"content":" * Returns error messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"lipwei1808"},"content":" * @param message the error message to be outputted","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"lipwei1808"},"content":" public String showError(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"lipwei1808"},"content":" return \"[ERROR]\\n\\n\" + message + \"\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"lipwei1808"},"content":" * Returns a prompt to enter a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"lipwei1808"},"content":" public String showUnknownCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"lipwei1808"},"content":" return \"Please enter something :-)\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"lipwei1808"},"content":" * Returns a success message for loading storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"lipwei1808"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"lipwei1808"},"content":" * @param filepath the filepath where the storage loaded data from","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"lipwei1808"},"content":" public String showSuccessLoadingStorage(String filepath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"lipwei1808"},"content":" return \"Data has been restored from \" + filepath + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"lipwei1808"},"content":" * Returns an error message when data file is not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"lipwei1808"},"content":" public String showErrorFileNotFound() {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"lipwei1808"},"content":" return \"Data file not found, creating a new one\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"lipwei1808"},"content":" * Returns an error message when loading of data failed.","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"lipwei1808"},"content":" public String showErrorLoadingFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"lipwei1808"},"content":" return \"Error creating new file, quitting program now...\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"lipwei1808"},"content":" * Returns an error message when writing to data file failed.","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"lipwei1808"},"content":" public String showErrorWritingFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"lipwei1808"},"content":" return \"Error saving to file, quitting program now...\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"lipwei1808"},"content":" * Returns a greeting message.","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"lipwei1808"},"content":" public String showGreetings() {","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"lipwei1808"},"content":" return \"Hello I\u0027m lynn the koala \u003c3\\n\" + \" What can I do for you?\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"lipwei1808"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"lipwei1808"},"content":" * Returns the exit message.","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"lipwei1808"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"lipwei1808"},"content":" public String showExit() {","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"lipwei1808"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"lipwei1808":143}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-spacing: 10;\" 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-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":" \u003cLabel fx:id\u003d\"dialog\" minHeight\u003d\"-Infinity\" style\u003d\"-fx-background-color: #eaeaea; -fx-background-radius: 15; -fx-border-radius: 32;\" text\u003d\"Label\" wrapText\u003d\"true\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" \u003cInsets bottom\u003d\"8.0\" left\u003d\"16.0\" right\u003d\"16.0\" top\u003d\"8.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitWidth\u003d\"40.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":20}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"\u003cAnchorPane maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"388.0\" style\u003d\"-fx-background-color: #222222;\" 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-16"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToHeight\u003d\"true\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #222222;\" vvalue\u003d\"1.0\" AnchorPane.bottomAnchor\u003d\"40.0\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"-0.0\" AnchorPane.topAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" style\u003d\"-fx-background-color: #222222;\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" \u003cHBox maxHeight\u003d\"40.0\" minHeight\u003d\"40.0\" prefHeight\u003d\"40.0\" spacing\u003d\"10.0\" AnchorPane.bottomAnchor\u003d\"0.0\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" \u003cTextField fx:id\u003d\"userInput\" maxWidth\u003d\"1.7976931348623157E308\" minWidth\u003d\"150.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" promptText\u003d\"Enter something here\" style\u003d\"-fx-background-color: #555555; -fx-text-fill: #51ff00;\" HBox.hgrow\u003d\"ALWAYS\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" \u003cButton fx:id\u003d\"sendButton\" alignment\u003d\"CENTER\" minWidth\u003d\"60.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"76.0\" style\u003d\"-fx-background-color: #555555;\" text\u003d\"Send\" textFill\u003d\"#51ff00\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"lipwei1808":24}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lipwei1808":4}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import duke.commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" public void parse_emptyInput_returnsNull() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" String[] testCases \u003d { \"\", \" \", \"\\n \\n\" };","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" for (String input: testCases) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" Command c \u003d Parser.parse(input, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" System.out.println(\"HI \" + c);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" assertNull(c);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":" } catch (DukeException ex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" // ignore","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" public void parse_addCommandWithArgs_noExceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" String[] testCases \u003d {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":" \"todo run\",","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" \"deadline project /by 18/08/2001 18:00\",","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" \"event project meeting /from 18/08/2001 18:00 /to 31/08/2001 22:00\"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":" for (String str: testCases) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" assertDoesNotThrow(() -\u003e Parser.parse(str, false));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" public void parse_listCommand_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" assertDoesNotThrow(() -\u003e Parser.parse(\"list\", false));","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"lipwei1808"},"content":" public void parse_listCommandWithArgs_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"lipwei1808"},"content":" assertThrows(InvalidCommandException.class, () -\u003e Parser.parse(\"list 3\", false));","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"lipwei1808"},"content":" public void parseText_validString_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"lipwei1808"},"content":" String[] testCases \u003d {\"todo deadline\", \"event project meeting\", \" hello, i am a friend \"};","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"lipwei1808"},"content":" String[][] answers \u003d {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"lipwei1808"},"content":" new String[] {\"todo\", \"deadline\"},","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"lipwei1808"},"content":" new String[] {\"event\", \"project meeting\"},","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"lipwei1808"},"content":" new String[] {\"hello,\", \"i am a friend\"},","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"lipwei1808"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"lipwei1808"},"content":" for (int i \u003d 0; i \u003c testCases.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"lipwei1808"},"content":" String[] result \u003d Parser.parseText(testCases[i]);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"lipwei1808"},"content":" assertEquals(result[0], answers[i][0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"lipwei1808"},"content":" assertEquals(result[1], answers[i][1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"lipwei1808"},"content":" public void parseArgs_integerString_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"lipwei1808"},"content":" assertDoesNotThrow(() -\u003e Parser.parseArgs(\"3\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"lipwei1808"},"content":" public void parseArgs_decimalString_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"lipwei1808"},"content":" assertThrows(InvalidCommandException.class, () -\u003e Parser.parseArgs(\"3.01\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"lipwei1808"},"content":" public void parseArgs_emptyString_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"lipwei1808"},"content":" assertThrows(InvalidCommandException.class, () -\u003e Parser.parseArgs(\" \"));","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_dateWithCorrectFormat_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"lipwei1808"},"content":" assertDoesNotThrow(() -\u003e Parser.parseDateTime(\"deadline project /by 18/08/2001 18:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_dateWithWrongDay_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"lipwei1808"},"content":" assertNull(Parser.parseDateTime(\"32/12/2001 18:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_dateWithWrongMonth_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"lipwei1808"},"content":" assertNull(Parser.parseDateTime(\"18/13/2001 18:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_dateWithWrongYear_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"lipwei1808"},"content":" assertNull(Parser.parseDateTime(\"18/12/0 18:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_wrongTime_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"lipwei1808"},"content":" assertNull(Parser.parseDateTime(\"18/12/2001 25:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"lipwei1808"},"content":" public void parseDateTime_wrongTimeFormat_throwException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"lipwei1808"},"content":" assertNull(Parser.parseDateTime(\"18/12/2001 1800\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lipwei1808":113}},{"path":"src/test/java/duke/storage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"package duke.storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":" public void load_validData_success() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":" Tasks tasks \u003d new Storage(\"./data/storageTest.txt\").load();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":" Tasks expected \u003d this.getTestTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":" if (tasks.size() !\u003d expected.size()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"lipwei1808"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"lipwei1808"},"content":" if (!tasks.get(i).equals(expected.get(i))) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"lipwei1808"},"content":" fail();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"lipwei1808"},"content":" private Tasks getTestTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"lipwei1808"},"content":" Tasks tasks \u003d new Tasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime dt1 \u003d LocalDateTime.parse(\"18/08/2001T19:00\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime dt2 \u003d LocalDateTime.parse(\"18/09/2001T19:00\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime dt3 \u003d LocalDateTime.parse(\"18/10/2001T19:00\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"lipwei1808"},"content":" LocalDateTime dt4 \u003d LocalDateTime.parse(\"18/11/2001T19:00\", DateTimeFormatter.ofPattern(\"dd/MM/yyyy\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"lipwei1808"},"content":" tasks.add(new Todo(\"take a run\", false));","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"lipwei1808"},"content":" tasks.add(new Deadline(\"project report\", dt1, true));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"lipwei1808"},"content":" tasks.add(new Event(\"project meeting\", dt2, dt3, true));","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"lipwei1808"},"content":" tasks.add(new Deadline(\"exam paper\", dt4, false));","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"lipwei1808"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"lipwei1808"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"lipwei1808"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"lipwei1808":47}},{"path":"text-ui-test/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from 12/01/2001 18:00 /to 31/12/2001 22:000","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"deadline report /by 31/12/2023 23:000","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"todo meet friend1","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"deadline report10 /by 12/12/2023 01:001","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"deadline project report /by 31/12/2001 18:000","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"event project meetup /from 21/08/2012 18:00 /to 31/12/2033 22:001","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"lipwei1808":6}},{"path":"text-ui-test/data/original.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from 12/01/2001 18:00 /to 31/12/2001 22:001","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"deadline report /by 31/12/2023 23:000","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"deadline report2 /by 01/01/2100 00:000","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"todo meet friend1","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"deadline report10 /by 12/12/2023 01:000","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"lipwei1808":5}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"lipwei1808"},"content":"delete 3","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"lipwei1808"},"content":"mark 4","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"lipwei1808"},"content":"unmark 1","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"lipwei1808"},"content":"unmark 1","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"lipwei1808"},"content":"todo hi","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"lipwei1808"},"content":"todo","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"lipwei1808"},"content":"deadline project report","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"lipwei1808"},"content":"deadline project report /by 31/12/2001 18:00","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from Mon /to 2pm","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from 21/07/2012 /to 31/12/2031","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"lipwei1808"},"content":"event project meeting /from 21/08/2012 18:00 /to 31/12/203 22:00","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"lipwei1808"},"content":"event project meetup /from 21/08/2012 18:00 /to 31/12/2033 22:00","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"delete","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"lipwei1808"},"content":"delete 5","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"lipwei1808"},"content":"mark 6","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"lipwei1808"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"lipwei1808"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"lipwei1808":22}},{"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":"lipwei1808"},"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":{"lipwei1808":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":"lipwei1808"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"lipwei1808"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"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":24,"author":{"gitId":"lipwei1808"},"content":"java -classpath ../bin duke/Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"lipwei1808":3,"-":36}}] diff --git a/lipwei1808_ip_master/commits.json b/lipwei1808_ip_master/commits.json index 9aafa814..8fd38adb 100644 --- a/lipwei1808_ip_master/commits.json +++ b/lipwei1808_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"lipwei1808":[{"date":"2023-08-24","commitResults":[{"hash":"25a46eaf517ed6bfd098d21e879eaacc5bdb7a0b","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":6}}},{"hash":"109aa4337d9dbf51293c399d48c3bfbe47527ea1","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"8cd1f5aa7f16510def6c9c6aedd816a62218c1b6","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":1}}},{"hash":"6080c4f6b3d0c586f1d79b06818bcb2bf9976461","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":1}}},{"hash":"20907fd4a2c305f3f07d60470d438f34b065af73","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":46}}},{"hash":"72d975ededfc93bf01bdfa7701bdd48fbf30741a","isMergeCommit":false,"messageTitle":"Fix bug with event and added testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":14,"deletions":8},"sh":{"insertions":0,"deletions":0}}},{"hash":"69e1101df480573ce7ea751e67e5c7f71f9f45db","isMergeCommit":false,"messageTitle":"Added exception handling for adding of tasks","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":73}}},{"hash":"3fdfa5de574cdf0b0cde2f3f0e6f280c2358bde6","isMergeCommit":false,"messageTitle":"Added delete functionality and updated test","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":5},"java":{"insertions":28,"deletions":1},"sh":{"insertions":1,"deletions":0}}},{"hash":"406eb9cb61790b08908e5b239fbbfad536748727","isMergeCommit":false,"messageTitle":"Change bot name ah","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"6e79b6c17d50004892a8cdc78d22fb415d16719c","isMergeCommit":false,"messageTitle":"Add saving functionality on new task","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":134,"deletions":31}}},{"hash":"c31c18c01f89a33d29a22c2f1d434d0f35c4d678","isMergeCommit":false,"messageTitle":"Add auto-save mark and unmark information","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":32,"deletions":37}}},{"hash":"b076b0a24df0a6c229f0e550a93cf1e46ac0340c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"813738c802a573e35f3a499dbd9271942e8fa97a","isMergeCommit":false,"messageTitle":"Add DateTime parsing by the chatbot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":63,"deletions":17}}},{"hash":"6fbefcd51ff7ea0cca8ea4464475316dbf670a1c","isMergeCommit":false,"messageTitle":"Allow for formatted dates when listing tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":8,"deletions":8}}},{"hash":"f88dde479e12eb4bd0d4583cb0c9927c93279120","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"763e06233520c25726ca8e08304634c3d66dc224","isMergeCommit":false,"messageTitle":"Test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":31,"deletions":14}}}]},{"date":"2023-08-30","commitResults":[{"hash":"67372e809a5fc3c3519e832dba397d3d7ca06f1b","isMergeCommit":false,"messageTitle":"Add UI, Parser, Command and Storage class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":455,"deletions":331}}},{"hash":"016106e0e85f3c6d8d71053c150f548f49045777","isMergeCommit":false,"messageTitle":"cleanup code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":24}}},{"hash":"207e148f8ca3651ee23db67b20bf179bf298b2f7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-more-oop\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"334cd41790df0019fa9f676180d3d849dd4af92b","isMergeCommit":false,"messageTitle":"Refactor to packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":39},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2},"md":{"insertions":2,"deletions":2}}},{"hash":"9949a736ef0c5e546cc1d0592b35532e33258b71","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"1bac62554198c845b7a580afef676165b34b1286","isMergeCommit":false,"messageTitle":"Bump gradle and lib version","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":4}}},{"hash":"eeccf3a8fa8641fcd9b5a45809904a1424aa36d8","isMergeCommit":false,"messageTitle":"Update class used in build gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"801336c3c0410741c2293c5b663d3733434b0d19","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"0254bb293c48219cb11659845ea7f127284e1519","isMergeCommit":false,"messageTitle":"Add junit test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":219,"deletions":21}}},{"hash":"ae8a007d759c66f6f789d0e207344868e98c13b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-junit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"5b834796641bdb1569cfd02eeb0b441e054928a5","isMergeCommit":false,"messageTitle":"Add handling for missing directories when creating data file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"ef4420330a993258da80d3e212fe55cf6461d608","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"5f943e8b2541fb770c32517ce1317177ba40fe79","isMergeCommit":false,"messageTitle":"Add FindCommand and Parser to handle new case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":5}}},{"hash":"ec67705131f59ebcc8d8b19a15b0dc04690b09ff","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"1874d81401e056640926a12e03b08ce29a257fbc","isMergeCommit":false,"messageTitle":"Refactor lines printing in UI class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":53}}},{"hash":"7d6e6a3d3a8d78b8ad846c1379ef33da4278cdd4","isMergeCommit":false,"messageTitle":"Refactor codebase to align with Coding Standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":104}}},{"hash":"55c699d1acb7876d8d6b7e5c00f9d117171eb919","isMergeCommit":false,"messageTitle":"Fix lines that are too long","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":5}}},{"hash":"481a1e9c6c34fb9734d73e6d785e7a4f6fba3df7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"fdc8fa913c9f62fa4606d3ac752e57bf88ac2692","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":8}}},{"hash":"3a753726cf59e66ea94b078dc66f78982e067fc6","isMergeCommit":false,"messageTitle":"Complete javadocs for rest of the classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":282,"deletions":20}}},{"hash":"3aebd99245f33764b0b93d84f3cb16601a5872b6","isMergeCommit":false,"messageTitle":"Write javaDocs for new methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":1}}},{"hash":"75c4c988d81c860bd92163da3b0177d313b1f378","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"69406efd6c83dfb1af2b0569de3e61e985430a04","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":76,"deletions":44}}},{"hash":"ec43c418668d9512cc4de53a9d6bbd315cc11961","isMergeCommit":false,"messageTitle":"Fix style for tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":22}}},{"hash":"71f47122e7fef1703587a0524b31b71c2f71bd8e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"01d30129090c038cc57a094df58097b95a011a74","isMergeCommit":false,"messageTitle":"Add javafx and refactor UI class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":1},"txt":{"insertions":3,"deletions":0},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":271,"deletions":140}}},{"hash":"b0d3ff728bf251b0db47fd3a988a8288d244d9a6","isMergeCommit":false,"messageTitle":"Add theme color and fix layout issues","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"fxml":{"insertions":11,"deletions":10}}},{"hash":"42a36c193ab506b6ab984ee283330868bdaf48e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"d8f1ea3b2e44b13a088053cd1c0d98ae6955203f","isMergeCommit":false,"messageTitle":"Add javadocs for ui classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":8}}}]},{"date":"2023-09-09","commitResults":[{"hash":"8355845b4aa07b3a43d40ebdc2a1f54d78ba53d2","isMergeCommit":false,"messageTitle":"fix the nits","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":9,"deletions":9}}},{"hash":"1f29b7f7a6548d48a2e0b792774715bd9c0675eb","isMergeCommit":false,"messageTitle":"Add assertions for important assumptions in program","messageBody":"There are some important assumptions made in the program made in\nthe program that should hold. For example, arguments should not\nbe an empty string, etc.\n\nThis allows for early catching of bugs in the program.\n\nJava Assertions can be used to assert a certain value in the program\nat a certain point in the code. Hence, adding assertions to assert\na certain value can target this problem.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"b40b8f6c9df797256245b3e10b300e0ac20d17bb","isMergeCommit":false,"messageTitle":"Improve code quality by refactoring methods","messageBody":"Long method with too many lines could cause future developers reading\nthe code from quickly understanding what the method is doing. It could\nalso be a sign that the method is not following the SLAP principle.\n\nThere could also be high level of nestings leading to the arrowhead\nstyle code - making it harder for people to read the code.\n\nBy extracting certain parts of the method into their own method can\nreduce the number of levels of abstraction in a single method.\n","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":17}}},{"hash":"c05c0dbe66703036acf31e5e88c50fe043bfa43b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from lipwei1808/branch-A-Assertions","messageBody":"Add assertions for important assumptions in program","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"9d2188f7131de5468bd85134c3ee5de46b2d736f","isMergeCommit":true,"messageTitle":"Merge pull request #2 from lipwei1808/branch-A-CodeQuality","messageBody":"Improve code quality by refactoring methods","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"b45ba4922437e0f04225af6fd8a57f54eccc04bc","isMergeCommit":false,"messageTitle":"Update test case for Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"cb4ea4a757c5ab4a2462afdc2091d81da474a6be","isMergeCommit":true,"messageTitle":"Merge pull request #3 from lipwei1808/branch-CI","messageBody":"Add a CI file","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"bff406f998f10631b4f60b667de68d6ed25b246a","isMergeCommit":false,"messageTitle":"Chcek for duplicate tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"bf48ab6217b4115b8ab107eaa63abb3c6a280eb8","isMergeCommit":true,"messageTitle":"Merge pull request #4 from lipwei1808/branch-BCD","messageBody":"Chcek for duplicate tasks","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"lipwei1808":{"java":1555,"md":2,"fxml":39,"sh":3,"bat":1,"gradle":26,"txt":45}},"authorContributionVariance":{"lipwei1808":86362.984},"authorDisplayNameMap":{"lipwei1808":"CS2103-T16-3 TAN .. WEI"}} +{"authorDailyContributionsMap":{"lipwei1808":[{"date":"2023-08-24","commitResults":[{"hash":"25a46eaf517ed6bfd098d21e879eaacc5bdb7a0b","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":6}}},{"hash":"109aa4337d9dbf51293c399d48c3bfbe47527ea1","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"8cd1f5aa7f16510def6c9c6aedd816a62218c1b6","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":1}}},{"hash":"6080c4f6b3d0c586f1d79b06818bcb2bf9976461","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":1}}},{"hash":"20907fd4a2c305f3f07d60470d438f34b065af73","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":46}}},{"hash":"72d975ededfc93bf01bdfa7701bdd48fbf30741a","isMergeCommit":false,"messageTitle":"Fix bug with event and added testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":14,"deletions":8},"sh":{"insertions":0,"deletions":0}}},{"hash":"69e1101df480573ce7ea751e67e5c7f71f9f45db","isMergeCommit":false,"messageTitle":"Added exception handling for adding of tasks","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":73}}},{"hash":"3fdfa5de574cdf0b0cde2f3f0e6f280c2358bde6","isMergeCommit":false,"messageTitle":"Added delete functionality and updated test","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":5},"java":{"insertions":28,"deletions":1},"sh":{"insertions":1,"deletions":0}}},{"hash":"406eb9cb61790b08908e5b239fbbfad536748727","isMergeCommit":false,"messageTitle":"Change bot name ah","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"6e79b6c17d50004892a8cdc78d22fb415d16719c","isMergeCommit":false,"messageTitle":"Add saving functionality on new task","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":134,"deletions":31}}},{"hash":"c31c18c01f89a33d29a22c2f1d434d0f35c4d678","isMergeCommit":false,"messageTitle":"Add auto-save mark and unmark information","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":32,"deletions":37}}},{"hash":"b076b0a24df0a6c229f0e550a93cf1e46ac0340c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"813738c802a573e35f3a499dbd9271942e8fa97a","isMergeCommit":false,"messageTitle":"Add DateTime parsing by the chatbot","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":63,"deletions":17}}},{"hash":"6fbefcd51ff7ea0cca8ea4464475316dbf670a1c","isMergeCommit":false,"messageTitle":"Allow for formatted dates when listing tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":8,"deletions":8}}},{"hash":"f88dde479e12eb4bd0d4583cb0c9927c93279120","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"763e06233520c25726ca8e08304634c3d66dc224","isMergeCommit":false,"messageTitle":"Test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":31,"deletions":14}}}]},{"date":"2023-08-30","commitResults":[{"hash":"67372e809a5fc3c3519e832dba397d3d7ca06f1b","isMergeCommit":false,"messageTitle":"Add UI, Parser, Command and Storage class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":455,"deletions":331}}},{"hash":"016106e0e85f3c6d8d71053c150f548f49045777","isMergeCommit":false,"messageTitle":"cleanup code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":24}}},{"hash":"207e148f8ca3651ee23db67b20bf179bf298b2f7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-more-oop\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"334cd41790df0019fa9f676180d3d849dd4af92b","isMergeCommit":false,"messageTitle":"Refactor to packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":39},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2},"md":{"insertions":2,"deletions":2}}},{"hash":"9949a736ef0c5e546cc1d0592b35532e33258b71","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"1bac62554198c845b7a580afef676165b34b1286","isMergeCommit":false,"messageTitle":"Bump gradle and lib version","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":4}}},{"hash":"eeccf3a8fa8641fcd9b5a45809904a1424aa36d8","isMergeCommit":false,"messageTitle":"Update class used in build gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"801336c3c0410741c2293c5b663d3733434b0d19","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"0254bb293c48219cb11659845ea7f127284e1519","isMergeCommit":false,"messageTitle":"Add junit test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":219,"deletions":21}}},{"hash":"ae8a007d759c66f6f789d0e207344868e98c13b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-junit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"5b834796641bdb1569cfd02eeb0b441e054928a5","isMergeCommit":false,"messageTitle":"Add handling for missing directories when creating data file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"ef4420330a993258da80d3e212fe55cf6461d608","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"5f943e8b2541fb770c32517ce1317177ba40fe79","isMergeCommit":false,"messageTitle":"Add FindCommand and Parser to handle new case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":5}}},{"hash":"ec67705131f59ebcc8d8b19a15b0dc04690b09ff","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"1874d81401e056640926a12e03b08ce29a257fbc","isMergeCommit":false,"messageTitle":"Refactor lines printing in UI class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":53}}},{"hash":"7d6e6a3d3a8d78b8ad846c1379ef33da4278cdd4","isMergeCommit":false,"messageTitle":"Refactor codebase to align with Coding Standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":104}}},{"hash":"55c699d1acb7876d8d6b7e5c00f9d117171eb919","isMergeCommit":false,"messageTitle":"Fix lines that are too long","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":5}}},{"hash":"481a1e9c6c34fb9734d73e6d785e7a4f6fba3df7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"fdc8fa913c9f62fa4606d3ac752e57bf88ac2692","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":8}}},{"hash":"3a753726cf59e66ea94b078dc66f78982e067fc6","isMergeCommit":false,"messageTitle":"Complete javadocs for rest of the classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":282,"deletions":20}}},{"hash":"3aebd99245f33764b0b93d84f3cb16601a5872b6","isMergeCommit":false,"messageTitle":"Write javaDocs for new methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":1}}},{"hash":"75c4c988d81c860bd92163da3b0177d313b1f378","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"69406efd6c83dfb1af2b0569de3e61e985430a04","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":76,"deletions":44}}},{"hash":"ec43c418668d9512cc4de53a9d6bbd315cc11961","isMergeCommit":false,"messageTitle":"Fix style for tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":22}}},{"hash":"71f47122e7fef1703587a0524b31b71c2f71bd8e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"01d30129090c038cc57a094df58097b95a011a74","isMergeCommit":false,"messageTitle":"Add javafx and refactor UI class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":1},"txt":{"insertions":3,"deletions":0},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":271,"deletions":140}}},{"hash":"b0d3ff728bf251b0db47fd3a988a8288d244d9a6","isMergeCommit":false,"messageTitle":"Add theme color and fix layout issues","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"fxml":{"insertions":11,"deletions":10}}},{"hash":"42a36c193ab506b6ab984ee283330868bdaf48e8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"d8f1ea3b2e44b13a088053cd1c0d98ae6955203f","isMergeCommit":false,"messageTitle":"Add javadocs for ui classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":8}}}]},{"date":"2023-09-09","commitResults":[{"hash":"8355845b4aa07b3a43d40ebdc2a1f54d78ba53d2","isMergeCommit":false,"messageTitle":"fix the nits","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":9,"deletions":9}}},{"hash":"1f29b7f7a6548d48a2e0b792774715bd9c0675eb","isMergeCommit":false,"messageTitle":"Add assertions for important assumptions in program","messageBody":"There are some important assumptions made in the program made in\nthe program that should hold. For example, arguments should not\nbe an empty string, etc.\n\nThis allows for early catching of bugs in the program.\n\nJava Assertions can be used to assert a certain value in the program\nat a certain point in the code. Hence, adding assertions to assert\na certain value can target this problem.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"b40b8f6c9df797256245b3e10b300e0ac20d17bb","isMergeCommit":false,"messageTitle":"Improve code quality by refactoring methods","messageBody":"Long method with too many lines could cause future developers reading\nthe code from quickly understanding what the method is doing. It could\nalso be a sign that the method is not following the SLAP principle.\n\nThere could also be high level of nestings leading to the arrowhead\nstyle code - making it harder for people to read the code.\n\nBy extracting certain parts of the method into their own method can\nreduce the number of levels of abstraction in a single method.\n","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":17}}},{"hash":"c05c0dbe66703036acf31e5e88c50fe043bfa43b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from lipwei1808/branch-A-Assertions","messageBody":"Add assertions for important assumptions in program","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"9d2188f7131de5468bd85134c3ee5de46b2d736f","isMergeCommit":true,"messageTitle":"Merge pull request #2 from lipwei1808/branch-A-CodeQuality","messageBody":"Improve code quality by refactoring methods","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"b45ba4922437e0f04225af6fd8a57f54eccc04bc","isMergeCommit":false,"messageTitle":"Update test case for Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"cb4ea4a757c5ab4a2462afdc2091d81da474a6be","isMergeCommit":true,"messageTitle":"Merge pull request #3 from lipwei1808/branch-CI","messageBody":"Add a CI file","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"bff406f998f10631b4f60b667de68d6ed25b246a","isMergeCommit":false,"messageTitle":"Chcek for duplicate tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"bf48ab6217b4115b8ab107eaa63abb3c6a280eb8","isMergeCommit":true,"messageTitle":"Merge pull request #4 from lipwei1808/branch-BCD","messageBody":"Chcek for duplicate tasks","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"a433496ad734b46b0103acb87f1b1bd2c590d656","isMergeCommit":false,"messageTitle":"make duke auto size","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":10,"deletions":5}}},{"hash":"97f10573b8bb9ba9eb010c0a40eabcd864c404ae","isMergeCommit":false,"messageTitle":"Improve the UI for error and dialog box","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":2,"deletions":2}}},{"hash":"e47afa7fc688930c035f0c31947dc9d8ed77e172","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-BetterGui\u0027","messageBody":"","tags":["A-BetterGui"],"fileTypesAndContributionMap":{}},{"hash":"3d8acc0cdb7793a652f10ff9d56a8778546fe125","isMergeCommit":false,"messageTitle":"Update README and add UI pic","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":37,"deletions":20}}},{"hash":"1f15ad6f79c2c5440026467ae89549bec3c9d727","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-UserGuide\u0027","messageBody":"","tags":["A-UserGuide","A-Release"],"fileTypesAndContributionMap":{}},{"hash":"098ca4269532cbec1c13622ec5d3bb7f72c5b69c","isMergeCommit":false,"messageTitle":"Update UserGuide on root README","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"md":{"insertions":46,"deletions":24}}},{"hash":"f9a20dd666c587fe21444f9071c82db3204486bc","isMergeCommit":false,"messageTitle":"Update some javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"e977798c5ac335c1ab23d98363f146654ba032f1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-CodeQuality\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"lipwei1808":{"java":1555,"md":75,"fxml":44,"sh":3,"bat":1,"gradle":26,"txt":44}},"authorContributionVariance":{"lipwei1808":70877.52},"authorDisplayNameMap":{"lipwei1808":"CS2103-T16-3 TAN .. WEI"}} diff --git a/mamayuan_ip_master/authorship.json b/mamayuan_ip_master/authorship.json index 501148bc..cf53664a 100644 --- a/mamayuan_ip_master/authorship.json +++ b/mamayuan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"CONTRIBUTORS.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Contributors","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Homepage","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---|:---:|:---:|:---:","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![](https://avatars0.githubusercontent.com/u/22460123?s\u003d100) | Jeffry Lum | [Github](https://github.com/j-lum/) | [Homepage](https://se.kasugano.moe)","lastModifiedDate":"2019-08-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"![](https://avatars0.githubusercontent.com/u/1673303?s\u003d100) | Damith C. Rajapakse | [Github](https://github.com/damithc/) | [Homepage](https://www.comp.nus.edu.sg/~damithch/)","lastModifiedDate":"2019-08-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"# I would like to join this list. How can I help the project","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"For more information, please refer to our [contributor\u0027s guide](https://oss-generic.github.duke.io/process/).","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"-":8,"mamayuan":1}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.io.Loader;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.io.Saver;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" private static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" tasks \u003d new Loader(\"data/tasks.txt\").load();","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" } catch (UnknownCommandException | FileIoException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"OOPS!!! Could not load data from file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Hello! I\u0027m DaDaYuan\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" new Saver(\"data/tasks.txt\").save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c tasks.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" System.out.println((i + 1) + \".\" + tasks.getTask(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" String description \u003d input.length() \u003e 5 ? input.substring(5) : \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(new Todo(description));","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(tasks.getNumberOfTasks() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /by \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The deadline of a task cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"mamayuan"},"content":" String description \u003d parts[0].substring(9);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(new Deadline(description, parts[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(tasks.getNumberOfTasks() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /from | /to \", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The event timing details are incomplete.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(new Event(parts[0].substring(6), parts[1], parts[2]));","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(tasks.getNumberOfTasks() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"mamayuan"},"content":" int index \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"mamayuan"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.getNumberOfTasks()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"mamayuan"},"content":" tasks.removeTask(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"mamayuan"},"content":" new Saver(\"data/tasks.txt\").save(tasks); // saving to file after each operation","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"mamayuan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"mamayuan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"mamayuan"},"content":" scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"mamayuan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"mamayuan"},"content":" new Duke().run();","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":110}},{"path":"src/main/java/duke/commands/AddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"public class AddTaskCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" private final Task task;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public AddTaskCommand(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" String format \u003d \"Got it. I\u0027ve added this task:\\n%s\\n\" + \"Now you have %d tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" String message \u003d String.format(format, this.task, tasks.getNumberOfTasks());","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":25}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" return false;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws Exception;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":13}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" private final int indexToDelete;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" indexToDelete \u003d index;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public boolean isValidIndex(TaskList list) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" return this.indexToDelete \u003e\u003d 0 \u0026\u0026 this.indexToDelete \u003c list.getNumberOfTasks();","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" //if the task list is empty, throw an exception","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" if (!isValidIndex(tasks)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" //if the index passed is not valid, throw an exception","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" Task deletedTask \u003d tasks.removeTask(indexToDelete);","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" String format \u003d \"Noted. I\u0027ve removed this task:\\n %s \\n\" + \"Now you have %d tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" String message \u003d String.format(format, deletedTask.toString(), tasks.getNumberOfTasks());","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":38}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" * An ExitCommand class that encapsulates the event of terminating the Duke program.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" String message \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" return true;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":22}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" * A FindCommand class that take in a description and find all tasks that match the given","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" * description.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" private final String[] patterns;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" public FindCommand(String... patterns) {","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" this.patterns \u003d patterns;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" for (String description : this.patterns) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" TaskList matchedTaskList \u003d findMatchedTasks(tasks, description);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" message.append(messagetoReturn(matchedTaskList, description));","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" private TaskList findMatchedTasks(TaskList tasks, String pattern) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" List\u003cTask\u003e matchedTasks \u003d tasks.getTasks().stream()","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" .filter(task -\u003e task.contains(pattern))","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" TaskList matchedTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" matchedTasks.forEach(matchedTaskList::addTask);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" return matchedTaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" private String messagetoReturn(TaskList matchedTaskList, String pattern) {","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" if (!matchedTaskList.getTasks().isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" String foundFormat \u003d \"Here are the tasks matching \\\"%s\\\" :\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" return String.format(foundFormat, pattern) + matchedTaskList + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" String notFoundFormat \u003d \"No tasks matching \\\"%s\\\" were found.\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" return String.format(notFoundFormat, pattern);","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":54}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" String emptyListMessage \u003d \"There are no tasks in your list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(emptyListMessage);","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" String message \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message + tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":19}},{"path":"src/main/java/duke/commands/MarkAsDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"public class MarkAsDoneCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" private final int indexToMark;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public MarkAsDoneCommand(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" indexToMark \u003d index;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public boolean isValidIndex(TaskList list) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" return indexToMark \u003e\u003d 0 \u0026\u0026 indexToMark \u003c list.getNumberOfTasks();","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" if (!isValidIndex(tasks)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" Task currentTask \u003d tasks.getTask(indexToMark);","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" currentTask.markAsDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" String message \u003d \"Nice! I\u0027ve marked this task as done:\\n \" + currentTask;","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":37}},{"path":"src/main/java/duke/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" private final int indexToUnmark;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" indexToUnmark \u003d index;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public boolean isValidIndex(TaskList list) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" return indexToUnmark \u003e\u003d 0 \u0026\u0026 indexToUnmark \u003c list.getNumberOfTasks();","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" if (!isValidIndex(tasks)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" Task currentTask \u003d tasks.getTask(indexToUnmark);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" currentTask.unmark();","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" String message \u003d \"OK, I\u0027ve marked this task as not done yet:\\n \" + currentTask;","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":38}},{"path":"src/main/java/duke/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/duke/exceptions/ErrorMessages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class ErrorMessages {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_DEADLINE_ERROR \u003d \"OOPS!!! The description of a deadline task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_EVENT_ERROR \u003d \"OOPS!!! The description of an event task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_TODO_ERROR \u003d \"OOPS!!! The description of a todo task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DESCRIPTION_ERROR \u003d \"OOPS!!! The description cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_INDEX_ERROR \u003d \"OOPS!!! The input index is not within the range of [1, %d]. \"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" + \"Please input a index that is within the given range\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_TASK_INDEX_ERROR \u003d \"OOPS!!! The input task index is not a number. \"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" + \"Please input a valid task index.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DATE_ERROR \u003d \"OOPS!!! The input date format is invalid. \";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DATETIME_ERROR \u003d \"OOPS!!! The input date time format is invalid. \";","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DEADLINE_FORMAT_ERROR \u003d \"OOPS!!! Please input the deadline task in the \"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" + \"correct format. Example: deadline Quiz 1 /by 01/09/2023 2030\";","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_EVENT_FORMAT_ERROR \u003d \"OOPS!!! Please input the event task in the \"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" + \"correct format. Example: event Tp /from 01/09/2023 2030 /to 01/09/2023 2230\";","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_FROM_AND_TO_ERROR \u003d \"OOPS!!! Start date can not be after than the End date\";","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_TYPE_ERROR \u003d \"Type tag of event should be [T], [D], or [E]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_STATUS_ERROR \u003d \"IsDone tag of event should be [ ], or [X]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_ERROR \u003d \"OOPS!!! The instruction cannot be empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public static final String STORAGE_ERROR \u003d \"OOPS!!! There\u0027s something wrong when reading the storage list\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" public static final String TASK_LIST_EMPTY_ERROR \u003d \"OOPS!!! Your task list is currently empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" public static final String UNRECOGNIZED_ERROR \u003d \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" + \"Please type in \\\"help\\\" to check all available commands.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":31}},{"path":"src/main/java/duke/exceptions/FileIoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class FileIoException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String FILEIO_ERROR_MESSAGE \u003d \"OOPS!!! Errors in handling the file ...\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public FileIoException(String error) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" super(FILEIO_ERROR_MESSAGE + error);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":9}},{"path":"src/main/java/duke/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public UnknownCommandException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":7}},{"path":"src/main/java/duke/io/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.io;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"public class Storage {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" private static final String TODO_FLAG \u003d \"[T]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" private static final String DEADLINE_FLAG \u003d \"[D]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" private static final String EVENT_FLAG \u003d \"[E]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" private static final String IS_DONE_FLAG \u003d \"[X]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" private static final String NOT_DONE_FLAG \u003d \"[ ]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" private final String completeFilePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" private final Path parentDirectory;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" private final File dataFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" String baseDirectoryPath \u003d Paths.get(\"\").toAbsolutePath().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" this.completeFilePath \u003d Paths.get(baseDirectoryPath, filePath).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" this.parentDirectory \u003d Paths.get(baseDirectoryPath, Paths.get(filePath).getParent().toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" this.dataFile \u003d new File(this.completeFilePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" public TaskList load() throws UnknownCommandException, FileIoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" List\u003cString\u003e fileContents \u003d extractFileContents(dataFile);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" for (String contentLine : fileContents) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" interpretAndAddTask(tasks, contentLine);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" throw new FileIoException(ErrorMessages.STORAGE_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" private List\u003cString\u003e extractFileContents(File file) throws FileNotFoundException {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" List\u003cString\u003e fileLines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"mamayuan"},"content":" String line \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" fileLines.add(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"mamayuan"},"content":" return fileLines;","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"mamayuan"},"content":" private void interpretAndAddTask(TaskList tasks, String lineContent) throws UnknownCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mamayuan"},"content":" String[] taskData \u003d lineContent.split(\"\\\\s\\\\|\\\\s\");","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"mamayuan"},"content":" boolean isTaskCompleted \u003d taskData[1].equals(IS_DONE_FLAG);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"mamayuan"},"content":" switch (taskData[0]) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"mamayuan"},"content":" case TODO_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"mamayuan"},"content":" addTask(tasks, new Todo(taskData[2].strip()), isTaskCompleted);","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"mamayuan"},"content":" case DEADLINE_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"mamayuan"},"content":" addTask(tasks, new Deadline(taskData[2].trim(), taskData[3]), isTaskCompleted);","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"mamayuan"},"content":" case EVENT_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"mamayuan"},"content":" addTask(tasks, new Event(taskData[2].strip(), taskData[3], taskData[4]), isTaskCompleted);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"mamayuan"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException(\"OOPS!!! Unrecognized task type: \" + taskData[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"mamayuan"},"content":" private static void addTask(TaskList list, Task task, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"mamayuan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"mamayuan"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"mamayuan"},"content":" list.addTask(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"mamayuan"},"content":" public void save(TaskList taskList) throws FileIoException {","lastModifiedDate":"2023-09-07"},{"lineNumber":96,"author":{"gitId":"mamayuan"},"content":" createParentFolderIfNotExists();","lastModifiedDate":"2023-09-07"},{"lineNumber":97,"author":{"gitId":"mamayuan"},"content":" StringBuilder record \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":98,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":99,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c taskList.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":100,"author":{"gitId":"mamayuan"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"mamayuan"},"content":" record.append(task.saveString()).append(System.lineSeparator());","lastModifiedDate":"2023-09-07"},{"lineNumber":102,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":103,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":105,"author":{"gitId":"mamayuan"},"content":" writeToFile(record.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":106,"author":{"gitId":"mamayuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"mamayuan"},"content":" throw new FileIoException(ErrorMessages.STORAGE_ERROR);","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":110,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"mamayuan"},"content":" private void writeToFile(String textToAdd) throws IOException {","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"mamayuan"},"content":" Files.write(Paths.get(completeFilePath), textToAdd.getBytes());","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"mamayuan"},"content":" private void createParentFolderIfNotExists() {","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"mamayuan"},"content":" if (Files.notExists(parentDirectory)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"mamayuan"},"content":" Files.createDirectories(parentDirectory);","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"mamayuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Error occurred in creating directory\");","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":124}},{"path":"src/main/java/duke/parsers/TimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.parsers;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"public class TimeParser {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" private static final String[] DATETIME_FORMATS \u003d {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" \"MMM dd yyyy HHmm\", \"MMM dd yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" \"yyyy-MM-dd\u0027T\u0027HH:mm\", \"dd/MM/yyyy HHmm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" \"dd/MM/yyyy HH:mm\", \"yyyy/MM/dd HHmm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" \"yyyy/MM/dd HH:mm\", \"yyyy/MM/dd\u0027T\u0027HHmm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" \"yyyy-MM-dd HHmm\", \"yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" \"dd MMM yyyy HHmm\", \"dd MMM yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" \"MMM dd, yyyy HHmm\", \"MMM dd, yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" \"dd-MM-yyyy HH:mm\", \"dd.MM.yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" \"dd/MM/yy HH:mm\", \"yyyy-MM-dd\u0027T\u0027HH:mmZ\",","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" \"MMM dd yyyy hh:mm a\", \"yyyy-MM-dd HH:mm:ss\"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" };","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" private static final String[] DATE_FORMATS \u003d {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" \"MMM dd yyyy\", \"yyyy-MM-dd\", \"dd/MM/yyyy\", \"yyyy/MM/dd\",","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" \"dd MMM yyyy\", \"MMM dd, yyyy\", \"dd-mm-yyyy\",","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" \"dd/MM/yy\", \"yy-MM-dd\", \"dd.MM.yyyy\"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" };","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" private static final List\u003cDateTimeFormatter\u003e ACCEPTABLE_DATE_FORMATTERS \u003d Arrays.stream(DATE_FORMATS)","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" .map(DateTimeFormatter::ofPattern)","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" private static final List\u003cDateTimeFormatter\u003e ACCEPTABLE_DATETIME_FORMATTERS \u003d Arrays.stream(DATETIME_FORMATS)","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" .map(DateTimeFormatter::ofPattern)","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" public static LocalDate parseToLocalDate(String date) throws UnknownCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" for (DateTimeFormatter formatter : ACCEPTABLE_DATE_FORMATTERS) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" return LocalDate.parse(date, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException(ErrorMessages.INVALID_DATE_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" public static LocalDateTime parseToLocalDateTime(String date) throws UnknownCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" for (DateTimeFormatter formatter : ACCEPTABLE_DATETIME_FORMATTERS) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" return LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException(ErrorMessages.INVALID_DATETIME_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":59}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[D]%s %s (%s)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" private static final String STORE_FORMAT \u003d \"[D] | %s | %s | %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public Deadline(String info, LocalDateTime by) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" super(info, TaskType.DEADLINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" this.end \u003d by;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public LocalDateTime getEnd() {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" return end;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public String saveString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" DateTimeFormatter dtFormat \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" return String.format(STORE_FORMAT, getFlag(), this.getDescription().trim(), end.format(dtFormat));","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" DateTimeFormatter dtFormat \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, getFlag(), this.getDescription(), end.format(dtFormat));","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":32}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[E]%s %s (from: %s to: %s)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" private static final String STORE_FORMAT \u003d \"[E] | %s %s | %s | %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" private final LocalDateTime start;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" this.start \u003d from;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" this.end \u003d to;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" public LocalDateTime getStart() {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" return this.start;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" public LocalDateTime getEnd() {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" return this.end;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public String saveString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" return String.format(STORE_FORMAT, getFlag(), this.getDescription().trim(), start, end);","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" DateTimeFormatter dtFormat \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, getFlag(), this.getDescription(),","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" start.format(dtFormat), end.format(dtFormat));","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":39}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" private final String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" private final TaskType type;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public Task(String description, TaskType type) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" return description;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" return isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" public void unmark() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" public String getFlag() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" return this.isDone() ? DONE_FLAG : UNDONE_FLAG;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" public abstract String saveString();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" public boolean contains(String pattern) {","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" if (pattern \u003d\u003d null || this.description \u003d\u003d null) {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" return false;","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" int patternLength \u003d pattern.length();","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c\u003d this.description.length() - patternLength; i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" if (this.description.regionMatches(true, i, pattern, 0, patternLength)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" return true;","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" return false;","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" return (isDone() ? DONE_FLAG : UNDONE_FLAG) + getDescription();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":61}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" public TaskList(TaskList list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(list.tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public Task removeTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" Task taskToRemove \u003d tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" return taskToRemove;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" return this.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" public void clearTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" return this.tasks.isEmpty();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" StringBuilder listContent \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c this.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" listContent.append(i + 1).append(\". \").append(this.getTask(i)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" return listContent.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":60}},{"path":"src/main/java/duke/tasks/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" * An enum class that specify the type of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public enum TaskType {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" TODO, EVENT, DEADLINE","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[T]%s %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String STORE_FORMAT \u003d \"[T] | %s | %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public String saveString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" return String.format(STORE_FORMAT, getFlag(), this.getDescription().trim());","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, getFlag(), this.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":19}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Ui {","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" public void appendResponse(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" this.response.append(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":8}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke.java","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"mamayuan":1}}] +[{"path":"CONTRIBUTORS.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Contributors","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Homepage","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---|:---:|:---:|:---:","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![](https://avatars0.githubusercontent.com/u/22460123?s\u003d100) | Jeffry Lum | [Github](https://github.com/j-lum/) | [Homepage](https://se.kasugano.moe)","lastModifiedDate":"2019-08-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"![](https://avatars0.githubusercontent.com/u/1673303?s\u003d100) | Damith C. Rajapakse | [Github](https://github.com/damithc/) | [Homepage](https://www.comp.nus.edu.sg/~damithch/)","lastModifiedDate":"2019-08-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"# I would like to join this list. How can I help the project","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"For more information, please refer to our [contributor\u0027s guide](https://oss-generic.github.duke.io/process/).","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"-":8,"mamayuan":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":"mamayuan"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-16"},{"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":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"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":"mamayuan"},"content":" mainClassName \u003d \"duke.ui.Launcher\"","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" mainClass.set(\"duke.ui.Launcher\")","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":"checkstyle {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" standardOutput \u003d System.out","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"mamayuan":24}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":1}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.*;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" private static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" tasks \u003d new Loader(\"data/tasks.txt\").load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" } catch (UnknownCommandException | FileIoException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"OOPS!!! Could not load data from file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Hello! I\u0027m DaDaYuan\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" new Saver(\"data/tasks.txt\").save(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c tasks.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" System.out.println((i + 1) + \".\" + tasks.getTask(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" String description \u003d input.length() \u003e 5 ? input.substring(5) : \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(new Todo(description));","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(tasks.getNumberOfTasks() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /by \", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The deadline of a task cannot be empty.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"mamayuan"},"content":" String description \u003d parts[0].substring(9);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(new Deadline(description, parts[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(tasks.getNumberOfTasks() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"mamayuan"},"content":" String[] parts \u003d input.split(\" /from | /to \", 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"mamayuan"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! The event timing details are incomplete.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(new Event(parts[0].substring(6), parts[1], parts[2]));","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(tasks.getNumberOfTasks() - 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"mamayuan"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"mamayuan"},"content":" int index \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"mamayuan"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.getNumberOfTasks()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"mamayuan"},"content":" System.out.println(\" \" + tasks.getTask(index));","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"mamayuan"},"content":" tasks.removeTask(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Now you have \" + tasks.getNumberOfTasks() + \" task(s) in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"mamayuan"},"content":" throw new Exception(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"mamayuan"},"content":" new Saver(\"data/tasks.txt\").save(tasks); // saving to file after each operation","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"mamayuan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"mamayuan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"mamayuan"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"mamayuan"},"content":" scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"mamayuan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"mamayuan"},"content":" new Duke().run();","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":109}},{"path":"src/main/java/duke/commands/AddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"public class AddTaskCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" private final Task task;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public AddTaskCommand(Task task) {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" String format \u003d \"Got it. I\u0027ve added this task:\\n%s\\n\" + \"Now you have %d tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" String message \u003d String.format(format, this.task, tasks.getNumberOfTasks());","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":25}},{"path":"src/main/java/duke/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" return false;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws Exception;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":13}},{"path":"src/main/java/duke/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" private final int indexToDelete;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" indexToDelete \u003d index;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public boolean isValidIndex(TaskList list) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" return this.indexToDelete \u003e\u003d 0 \u0026\u0026 this.indexToDelete \u003c list.getNumberOfTasks();","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" //if the task list is empty, throw an exception","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" if (!isValidIndex(tasks)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" //if the index passed is not valid, throw an exception","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" Task deletedTask \u003d tasks.removeTask(indexToDelete);","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" String format \u003d \"Noted. I\u0027ve removed this task:\\n %s \\n\" + \"Now you have %d tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" String message \u003d String.format(format, deletedTask.toString(), tasks.getNumberOfTasks());","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":38}},{"path":"src/main/java/duke/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" * An ExitCommand class that encapsulates the event of terminating the Duke program.","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" String message \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" return true;","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":22}},{"path":"src/main/java/duke/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" * A FindCommand class that take in a description and find all tasks that match the given","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" * description.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" private final String[] patterns;","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" public FindCommand(String... patterns) {","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" this.patterns \u003d patterns;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" for (String description : this.patterns) {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" TaskList matchedTaskList \u003d findMatchedTasks(tasks, description);","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" message.append(messagetoReturn(matchedTaskList, description));","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" private TaskList findMatchedTasks(TaskList tasks, String pattern) {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" List\u003cTask\u003e matchedTasks \u003d tasks.getTasks().stream()","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" .filter(task -\u003e task.contains(pattern))","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" TaskList matchedTaskList \u003d new TaskList();","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" matchedTasks.forEach(matchedTaskList::addTask);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" return matchedTaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" private String messagetoReturn(TaskList matchedTaskList, String pattern) {","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" if (!matchedTaskList.getTasks().isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" String foundFormat \u003d \"Here are the tasks matching \\\"%s\\\" :\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" return String.format(foundFormat, pattern) + matchedTaskList + \"\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" String notFoundFormat \u003d \"No tasks matching \\\"%s\\\" were found.\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" return String.format(notFoundFormat, pattern);","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":54}},{"path":"src/main/java/duke/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" String emptyListMessage \u003d \"There are no tasks in your list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(emptyListMessage);","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" return;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" String message \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message + tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":19}},{"path":"src/main/java/duke/commands/MarkAsDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"public class MarkAsDoneCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" private final int indexToMark;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public MarkAsDoneCommand(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" indexToMark \u003d index;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public boolean isValidIndex(TaskList list) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" return indexToMark \u003e\u003d 0 \u0026\u0026 indexToMark \u003c list.getNumberOfTasks();","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" if (!isValidIndex(tasks)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" Task currentTask \u003d tasks.getTask(indexToMark);","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" currentTask.markAsDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" String message \u003d \"Nice! I\u0027ve marked this task as done:\\n \" + currentTask;","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":37}},{"path":"src/main/java/duke/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.commands;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import duke.io.Storage;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" private final int indexToUnmark;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" indexToUnmark \u003d index;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public boolean isValidIndex(TaskList list) {","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" return indexToUnmark \u003e\u003d 0 \u0026\u0026 indexToUnmark \u003c list.getNumberOfTasks();","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws Exception {","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" if (!isValidIndex(tasks)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" Task currentTask \u003d tasks.getTask(indexToUnmark);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" currentTask.unmark();","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" String message \u003d \"OK, I\u0027ve marked this task as not done yet:\\n \" + currentTask;","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" ui.appendResponse(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":38}},{"path":"src/main/java/duke/exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/duke/exceptions/ErrorMessages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class ErrorMessages {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_DEADLINE_ERROR \u003d \"OOPS!!! The description of a deadline task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_EVENT_ERROR \u003d \"OOPS!!! The description of an event task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_TODO_ERROR \u003d \"OOPS!!! The description of a todo task cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DESCRIPTION_ERROR \u003d \"OOPS!!! The description cannot be empty.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_INDEX_ERROR \u003d \"OOPS!!! The input index is not within the range of [1, %d]. \"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" + \"Please input a index that is within the given range\";","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_TASK_INDEX_ERROR \u003d \"OOPS!!! The input task index is not a number. \"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" + \"Please input a valid task index.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DATE_ERROR \u003d \"OOPS!!! The input date format is invalid. \";","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DATETIME_ERROR \u003d \"OOPS!!! The input date time format is invalid. \";","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_DEADLINE_FORMAT_ERROR \u003d \"OOPS!!! Please input the deadline task in the \"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" + \"correct format. Example: deadline Quiz 1 /by 01/09/2023 2030\";","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_EVENT_FORMAT_ERROR \u003d \"OOPS!!! Please input the event task in the \"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" + \"correct format. Example: event Tp /from 01/09/2023 2030 /to 01/09/2023 2230\";","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_FROM_AND_TO_ERROR \u003d \"OOPS!!! Start date can not be after than the End date\";","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_TYPE_ERROR \u003d \"Type tag of event should be [T], [D], or [E]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" public static final String INVALID_STATUS_ERROR \u003d \"IsDone tag of event should be [ ], or [X]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" public static final String EMPTY_ERROR \u003d \"OOPS!!! The instruction cannot be empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public static final String STORAGE_ERROR \u003d \"OOPS!!! There\u0027s something wrong when reading the storage list\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" public static final String TASK_LIST_EMPTY_ERROR \u003d \"OOPS!!! Your task list is currently empty\";","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" public static final String UNRECOGNIZED_ERROR \u003d \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n \"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" + \"Please type in \\\"help\\\" to check all available commands.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":31}},{"path":"src/main/java/duke/exceptions/FileIoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class FileIoException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String FILEIO_ERROR_MESSAGE \u003d \"OOPS!!! Errors in handling the file ...\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public FileIoException(String error) {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" super(FILEIO_ERROR_MESSAGE + error);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":9}},{"path":"src/main/java/duke/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" public UnknownCommandException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":7}},{"path":"src/main/java/duke/io/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.io;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.FileIoException;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"import duke.parsers.TimeParser;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":"import duke.tasks.Todo;","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"public class Storage {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" private static final String TODO_FLAG \u003d \"[T]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" private static final String DEADLINE_FLAG \u003d \"[D]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" private static final String EVENT_FLAG \u003d \"[E]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" private static final String IS_DONE_FLAG \u003d \"[X]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" private static final String NOT_DONE_FLAG \u003d \"[ ]\";","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" private static final String INVALID_TYPE_ERROR \u003d \"Type of event can only be [T], [D], or [E]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" private static final String INVALID_STATUS_ERROR \u003d \"IsDone flag of event can only be [ ], or [X]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" private final String completeFilePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" private final Path parentDirectory;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" private final File dataFile;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" String baseDirectoryPath \u003d Paths.get(\"\").toAbsolutePath().toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" this.completeFilePath \u003d Paths.get(baseDirectoryPath, filePath).toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" this.parentDirectory \u003d Paths.get(baseDirectoryPath, Paths.get(filePath).getParent().toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" this.dataFile \u003d new File(this.completeFilePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" public TaskList load() throws UnknownCommandException, FileIoException {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" if (!dataFile.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" List\u003cString\u003e fileContents \u003d extractFileContents(dataFile);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" for (String contentLine : fileContents) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" interpretAndAddTask(tasks, contentLine);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" throw new FileIoException(ErrorMessages.STORAGE_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"mamayuan"},"content":" private List\u003cString\u003e extractFileContents(File file) throws FileNotFoundException {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"mamayuan"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"mamayuan"},"content":" List\u003cString\u003e fileLines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"mamayuan"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"mamayuan"},"content":" String line \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"mamayuan"},"content":" fileLines.add(line);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"mamayuan"},"content":" return fileLines;","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"mamayuan"},"content":" private void interpretAndAddTask(TaskList tasks, String lineContent) throws UnknownCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"mamayuan"},"content":" String[] taskData \u003d lineContent.split(\"\\\\s\\\\|\\\\s\");","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"mamayuan"},"content":" boolean isTaskCompleted \u003d taskData[1].equals(IS_DONE_FLAG);","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"mamayuan"},"content":" switch (taskData[0]) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"mamayuan"},"content":" case TODO_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"mamayuan"},"content":" addTask(tasks, new Todo(taskData[2].strip()), isTaskCompleted);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"mamayuan"},"content":" case DEADLINE_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"mamayuan"},"content":" LocalDateTime ddl \u003d TimeParser.parseToLocalDateTime(taskData[3]);","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"mamayuan"},"content":" addTask(tasks, new Deadline(taskData[2].trim(), ddl), isTaskCompleted);","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"mamayuan"},"content":" case EVENT_FLAG:","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"mamayuan"},"content":" LocalDateTime from \u003d TimeParser.parseToLocalDateTime(taskData[3]);","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"mamayuan"},"content":" LocalDateTime to \u003d TimeParser.parseToLocalDateTime(taskData[4]);","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"mamayuan"},"content":" addTask(tasks, new Event(taskData[2].strip(), from, to), isTaskCompleted);","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"mamayuan"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"mamayuan"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException(\"OOPS!!! Unrecognized task type: \" + taskData[0]);","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"mamayuan"},"content":" private static void checkStorageFormat(String tag, String isDone) {","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"mamayuan"},"content":" assert Objects.equals(tag, TODO_FLAG) || Objects.equals(tag, DEADLINE_FLAG)","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"mamayuan"},"content":" || Objects.equals(tag, EVENT_FLAG) : INVALID_TYPE_ERROR;","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"mamayuan"},"content":" assert Objects.equals(isDone, IS_DONE_FLAG) || Objects.equals(isDone, NOT_DONE_FLAG) : INVALID_STATUS_ERROR;","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"mamayuan"},"content":" private static void addTask(TaskList list, Task task, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"mamayuan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"mamayuan"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"mamayuan"},"content":" list.addTask(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"mamayuan"},"content":" public void save(TaskList taskList) throws FileIoException {","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"mamayuan"},"content":" createParentFolderIfNotExists();","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"mamayuan"},"content":" StringBuilder record \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":115,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c taskList.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":116,"author":{"gitId":"mamayuan"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-07"},{"lineNumber":117,"author":{"gitId":"mamayuan"},"content":" record.append(task.saveString()).append(System.lineSeparator());","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":119,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"mamayuan"},"content":" writeToFile(record.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"mamayuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"mamayuan"},"content":" throw new FileIoException(ErrorMessages.STORAGE_ERROR);","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":126,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"mamayuan"},"content":" private void writeToFile(String textToAdd) throws IOException {","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"mamayuan"},"content":" Files.write(Paths.get(completeFilePath), textToAdd.getBytes());","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"mamayuan"},"content":" private void createParentFolderIfNotExists() {","lastModifiedDate":"2023-09-07"},{"lineNumber":132,"author":{"gitId":"mamayuan"},"content":" if (Files.notExists(parentDirectory)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":134,"author":{"gitId":"mamayuan"},"content":" Files.createDirectories(parentDirectory);","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"mamayuan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":136,"author":{"gitId":"mamayuan"},"content":" System.out.println(\"Error occurred in creating directory\");","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":140}},{"path":"src/main/java/duke/parsers/TimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.parsers;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"import duke.exceptions.ErrorMessages;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"public class TimeParser {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" private static final String[] DATETIME_FORMATS \u003d {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" \"MMM dd yyyy HHmm\", \"MMM dd yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" \"yyyy-MM-dd\u0027T\u0027HH:mm\", \"dd/MM/yyyy HHmm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" \"dd/MM/yyyy HH:mm\", \"yyyy/MM/dd HHmm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" \"yyyy/MM/dd HH:mm\", \"yyyy/MM/dd\u0027T\u0027HHmm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" \"yyyy-MM-dd HHmm\", \"yyyy-MM-dd HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" \"dd MMM yyyy HHmm\", \"dd MMM yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" \"MMM dd, yyyy HHmm\", \"MMM dd, yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" \"dd-MM-yyyy HH:mm\", \"dd.MM.yyyy HH:mm\",","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" \"dd/MM/yy HH:mm\", \"yyyy-MM-dd\u0027T\u0027HH:mmZ\",","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" \"MMM dd yyyy hh:mm a\", \"yyyy-MM-dd HH:mm:ss\"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" };","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" private static final String[] DATE_FORMATS \u003d {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" \"MMM dd yyyy\", \"yyyy-MM-dd\", \"dd/MM/yyyy\", \"yyyy/MM/dd\",","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" \"dd MMM yyyy\", \"MMM dd, yyyy\", \"dd-mm-yyyy\",","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" \"dd/MM/yy\", \"yy-MM-dd\", \"dd.MM.yyyy\"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" };","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" private static final List\u003cDateTimeFormatter\u003e ACCEPTABLE_DATE_FORMATTERS \u003d Arrays.stream(DATE_FORMATS)","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" .map(DateTimeFormatter::ofPattern)","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" private static final List\u003cDateTimeFormatter\u003e ACCEPTABLE_DATETIME_FORMATTERS \u003d Arrays.stream(DATETIME_FORMATS)","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" .map(DateTimeFormatter::ofPattern)","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" public static LocalDate parseToLocalDate(String date) throws UnknownCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" for (DateTimeFormatter formatter : ACCEPTABLE_DATE_FORMATTERS) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" return LocalDate.parse(date, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException(ErrorMessages.INVALID_DATE_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" public static LocalDateTime parseToLocalDateTime(String date) throws UnknownCommandException {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" for (DateTimeFormatter formatter : ACCEPTABLE_DATETIME_FORMATTERS) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" return LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" throw new UnknownCommandException(ErrorMessages.INVALID_DATETIME_ERROR);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":59}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[D]%s %s (%s)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" private static final String STORE_FORMAT \u003d \"[D] | %s | %s | %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public Deadline(String info, LocalDateTime by) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" super(info, TaskType.DEADLINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" this.end \u003d by;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" public LocalDateTime getEnd() {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" return end;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public String saveString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" DateTimeFormatter dtFormat \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" return String.format(STORE_FORMAT, getFlag(), this.getDescription().trim(), end.format(dtFormat));","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" DateTimeFormatter dtFormat \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, getFlag(), this.getDescription(), end.format(dtFormat));","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":32}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[E]%s %s (from: %s to: %s)\";","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" private static final String STORE_FORMAT \u003d \"[E] | %s %s | %s | %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" private final LocalDateTime start;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" this.start \u003d from;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" this.end \u003d to;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" public LocalDateTime getStart() {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":" return this.start;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" public LocalDateTime getEnd() {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" return this.end;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public String saveString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" return String.format(STORE_FORMAT, getFlag(), this.getDescription().trim(), start, end);","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" DateTimeFormatter dtFormat \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, getFlag(), this.getDescription(),","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" start.format(dtFormat), end.format(dtFormat));","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":39}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String DONE_FLAG \u003d \"[X] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String UNDONE_FLAG \u003d \"[ ] \";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" private final String description;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" private final TaskType type;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public Task(String description, TaskType type) {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" return description;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" return isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" public void unmark() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" public String getFlag() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":" return this.isDone() ? DONE_FLAG : UNDONE_FLAG;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" public abstract String saveString();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" public boolean contains(String pattern) {","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" if (pattern \u003d\u003d null || this.description \u003d\u003d null) {","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" return false;","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" int patternLength \u003d pattern.length();","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c\u003d this.description.length() - patternLength; i++) {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" if (this.description.regionMatches(true, i, pattern, 0, patternLength)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" return true;","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" return false;","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" return (isDone() ? DONE_FLAG : UNDONE_FLAG) + getDescription();","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":61}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" public TaskList(TaskList list) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(list.tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"mamayuan"},"content":" public Task removeTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"mamayuan"},"content":" Task taskToRemove \u003d tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"mamayuan"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"mamayuan"},"content":" return taskToRemove;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"mamayuan"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"mamayuan"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"mamayuan"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"mamayuan"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"mamayuan"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"mamayuan"},"content":" return this.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"mamayuan"},"content":" public void clearTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"mamayuan"},"content":" public void setTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"mamayuan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"mamayuan"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"mamayuan"},"content":" return this.tasks.isEmpty();","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"mamayuan"},"content":" StringBuilder listContent \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"mamayuan"},"content":" for (int i \u003d 0; i \u003c this.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"mamayuan"},"content":" listContent.append(i + 1).append(\". \").append(this.getTask(i)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"mamayuan"},"content":" return listContent.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":60}},{"path":"src/main/java/duke/tasks/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" * An enum class that specify the type of the task.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"public enum TaskType {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" TODO, EVENT, DEADLINE","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private static final String PRINT_FORMAT \u003d \"[T]%s %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" private static final String STORE_FORMAT \u003d \"[T] | %s | %s\";","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" public String saveString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":" return String.format(STORE_FORMAT, getFlag(), this.getDescription().trim());","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" return String.format(PRINT_FORMAT, getFlag(), this.getDescription());","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"mamayuan":19}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke.ui;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"public class Ui {","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":" private StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":" public void appendResponse(String message) {","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":" this.response.append(message);","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"mamayuan":8}},{"path":"src/test/java/duke/someTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mamayuan"},"content":"package duke;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"mamayuan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"mamayuan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"mamayuan"},"content":"public class someTest {","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"mamayuan"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"mamayuan"},"content":" public void dummyTest(){","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"mamayuan"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"mamayuan"},"content":" public void anotherDummyTest(){","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"mamayuan"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"mamayuan"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"mamayuan"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"mamayuan"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"mamayuan":18}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"mamayuan"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke.java","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"mamayuan":1}}] diff --git a/mamayuan_ip_master/commits.json b/mamayuan_ip_master/commits.json index 7b40acd7..5d5a0231 100644 --- a/mamayuan_ip_master/commits.json +++ b/mamayuan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"mamayuan":[{"date":"2023-09-03","commitResults":[{"hash":"5c08f4a7a7fb73816eb8cbefcd55526ae40190d3","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a3d3ef334050fab3111d7755cb11a908cd1ef15c","isMergeCommit":false,"messageTitle":"Rename of file","messageBody":"","tags":["Level-0-new"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"c920eb5108cb9d57b7049fae43ba748c64ff0fb0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e749d9b586f20808ffc6a4866af0986dd5756d4b","isMergeCommit":false,"messageTitle":"Correct missing colon","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5313878f6616fa7485883eac96dff15dd494ef55","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"8fbe6a71be4295037d5cf78736f8e53b732ea6ce","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"190c265a2024e744ce5dbd874f899bebbb61e34c","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":4}}},{"hash":"c5b73f0b32121e8136b88e9114c9229343d9067f","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":21}}},{"hash":"54a8f4649dbaccdf2662ca120205b0b499845530","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":118},"bat":{"insertions":1,"deletions":1}}},{"hash":"0e1f88214fa05bd8bf70838c8cec12daf3526345","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"ffc3beae2ed9054728e98069122215260e6ab450","isMergeCommit":false,"messageTitle":"Packages inner classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":85}}},{"hash":"4254a9df1fad39d979d79379282921991964ef1c","isMergeCommit":false,"messageTitle":"Reorganise packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":26}}}]},{"date":"2023-09-05","commitResults":[{"hash":"293be328ce29520b8f1cae8a4e6f17d2f82e56a4","isMergeCommit":false,"messageTitle":"Reorganises packages again","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":12,"deletions":12}}},{"hash":"69d7ab7bd4f1e221bd15e9ad6781ffe96231b246","isMergeCommit":false,"messageTitle":"Fix bugs up to level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":14}}},{"hash":"e6dac5a50befda9d6de9219427da7ac43ff883ea","isMergeCommit":true,"messageTitle":"Merges branches","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8427364167cb345a7e998c9a1851ebc2af2f9c11","isMergeCommit":false,"messageTitle":"fixes bugs up to level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"1b7b3253349548e34831a1073086a7d7987ab6d3","isMergeCommit":false,"messageTitle":"Adds Store","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":281,"deletions":0},"md":{"insertions":1,"deletions":1}}},{"hash":"52cfcb3a60e624fc66f7cb3c89a6d7502b31e021","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/mamayuan/ip into branch-Level-7","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/io/Loader.java\n#\tsrc/main/java/duke/io/Saver.java\n","fileTypesAndContributionMap":{}},{"hash":"1d6bdf77f489f69d02d5379d8e010c2d508ed11a","isMergeCommit":false,"messageTitle":"Settles conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":40}}},{"hash":"27bdd651a9b842bfe9b303a420fba45ed15d94e5","isMergeCommit":false,"messageTitle":"Settles conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":118}}},{"hash":"b8c497f00819a15250e8c609568478d49d82d6fb","isMergeCommit":false,"messageTitle":"Finalises level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":38}}},{"hash":"c56540dcb775e6bb9320868e2eab532af866a0f3","isMergeCommit":false,"messageTitle":"Adds TimeParser.java","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":34}}}]},{"date":"2023-09-07","commitResults":[{"hash":"fb7167376f5f2a4f46209e5e55663914ee1226a5","isMergeCommit":false,"messageTitle":"Adds OOP and Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":307,"deletions":66}}}]},{"date":"2023-09-08","commitResults":[{"hash":"1470ddd7aaf84351a5a24493a1cf50da45719c84","isMergeCommit":false,"messageTitle":"Fixes bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":18}}}]}]},"authorFileTypeContributionMap":{"mamayuan":{"java":821,"md":1,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":1}},"authorContributionVariance":{"mamayuan":39145.535},"authorDisplayNameMap":{"mamayuan":"CS2103-W14-3 MA Y..YUAN"}} +{"authorDailyContributionsMap":{"mamayuan":[{"date":"2023-09-03","commitResults":[{"hash":"5c08f4a7a7fb73816eb8cbefcd55526ae40190d3","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a3d3ef334050fab3111d7755cb11a908cd1ef15c","isMergeCommit":false,"messageTitle":"Rename of file","messageBody":"","tags":["Level-0-new"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"c920eb5108cb9d57b7049fae43ba748c64ff0fb0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e749d9b586f20808ffc6a4866af0986dd5756d4b","isMergeCommit":false,"messageTitle":"Correct missing colon","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"5313878f6616fa7485883eac96dff15dd494ef55","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":4}}},{"hash":"8fbe6a71be4295037d5cf78736f8e53b732ea6ce","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"190c265a2024e744ce5dbd874f899bebbb61e34c","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":4}}},{"hash":"c5b73f0b32121e8136b88e9114c9229343d9067f","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":21}}},{"hash":"54a8f4649dbaccdf2662ca120205b0b499845530","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":118},"bat":{"insertions":1,"deletions":1}}},{"hash":"0e1f88214fa05bd8bf70838c8cec12daf3526345","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"ffc3beae2ed9054728e98069122215260e6ab450","isMergeCommit":false,"messageTitle":"Packages inner classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":85}}},{"hash":"4254a9df1fad39d979d79379282921991964ef1c","isMergeCommit":false,"messageTitle":"Reorganise packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":26}}}]},{"date":"2023-09-05","commitResults":[{"hash":"293be328ce29520b8f1cae8a4e6f17d2f82e56a4","isMergeCommit":false,"messageTitle":"Reorganises packages again","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":12,"deletions":12}}},{"hash":"69d7ab7bd4f1e221bd15e9ad6781ffe96231b246","isMergeCommit":false,"messageTitle":"Fix bugs up to level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":14}}},{"hash":"e6dac5a50befda9d6de9219427da7ac43ff883ea","isMergeCommit":true,"messageTitle":"Merges branches","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8427364167cb345a7e998c9a1851ebc2af2f9c11","isMergeCommit":false,"messageTitle":"fixes bugs up to level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"1b7b3253349548e34831a1073086a7d7987ab6d3","isMergeCommit":false,"messageTitle":"Adds Store","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":281,"deletions":0},"md":{"insertions":1,"deletions":1}}},{"hash":"52cfcb3a60e624fc66f7cb3c89a6d7502b31e021","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/mamayuan/ip into branch-Level-7","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/io/Loader.java\n#\tsrc/main/java/duke/io/Saver.java\n","fileTypesAndContributionMap":{}},{"hash":"1d6bdf77f489f69d02d5379d8e010c2d508ed11a","isMergeCommit":false,"messageTitle":"Settles conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":40}}},{"hash":"27bdd651a9b842bfe9b303a420fba45ed15d94e5","isMergeCommit":false,"messageTitle":"Settles conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":118}}},{"hash":"b8c497f00819a15250e8c609568478d49d82d6fb","isMergeCommit":false,"messageTitle":"Finalises level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":38}}},{"hash":"c56540dcb775e6bb9320868e2eab532af866a0f3","isMergeCommit":false,"messageTitle":"Adds TimeParser.java","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":34}}}]},{"date":"2023-09-07","commitResults":[{"hash":"fb7167376f5f2a4f46209e5e55663914ee1226a5","isMergeCommit":false,"messageTitle":"Adds OOP and Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":307,"deletions":66}}}]},{"date":"2023-09-08","commitResults":[{"hash":"1470ddd7aaf84351a5a24493a1cf50da45719c84","isMergeCommit":false,"messageTitle":"Fixes bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":18}}}]},{"date":"2023-09-16","commitResults":[{"hash":"9bd78212e27e10fa4af8863962fa58f6ac7906a8","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":25,"deletions":2},"java":{"insertions":19,"deletions":2}}},{"hash":"a03917171ba10a566b510d4d9b4d8a73ff513b0d","isMergeCommit":false,"messageTitle":"Fix bugs on datetime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":31}}}]}]},"authorFileTypeContributionMap":{"mamayuan":{"java":854,"md":1,"fxml":0,"sh":0,"bat":1,"gradle":24,"txt":1}},"authorContributionVariance":{"mamayuan":30241.305},"authorDisplayNameMap":{"mamayuan":"CS2103-W14-3 MA Y..YUAN"}} diff --git a/marcellaantania_ip_master/authorship.json b/marcellaantania_ip_master/authorship.json index 379b1b8b..f698efed 100644 --- a/marcellaantania_ip_master/authorship.json +++ b/marcellaantania_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":"marcellaantania"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"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":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"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":"marcellaantania"},"content":" mainClass.set(\"thea.Thea\")","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":"checkstyle {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" archiveBaseName \u003d \"thea\"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" archiveFileName \u003d \u0027thea.jar\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"marcellaantania":21,"-":42}},{"path":"data/thea.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"T | 1 | buy gift for mom","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"D | 0 | cs2103 ip | 2023-09-03 23:59","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"T | 0 | sweep the floor","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"E | 1 | career fair for engineering | 2023-09-12 13:00 | 2023-09-13 17:00","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":4}},{"path":"src/main/java/thea/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which adds a new task to a taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the task type and the Task that needs to be added to a taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private String taskType;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" private Task task;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new AddCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * @param taskType type of task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * @param task task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public AddCommand(String taskType, Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * Add the new task to the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" return ui.taskAdded(task, tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":37}},{"path":"src/main/java/thea/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * Subclasses of this abstract class are specific","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * commands with specified execute method behaviours.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private final boolean isExit;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Command object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * If the Command type is ExitCommand, isExit is true.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * @param isExit boolean representing if command is ExitCommand.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public Command(boolean isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" public boolean getIsExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" return this.isExit;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * Execute the user command to the data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * To be implemented by subclasses.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":34}},{"path":"src/main/java/thea/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * This class has dueDate which is the characteristic of a Deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" private final LocalDateTime dueDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Deadline object.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * Converts the dueDate from String to LocalDateTime.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @param dueDate dueDate in String.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" public Deadline(String taskName, String dueDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDay \u003d dueDate.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinute \u003d dueDate.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" this.dueDate \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDay[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"D | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.dueDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[D][%s] %s (by: %s)\", (super.isDone ? \"X\" : \" \"), super.taskName,","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" this.dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":54}},{"path":"src/main/java/thea/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which deletes an existing task in the taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the index of task to be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private int index;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new DeleteCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param index the index of task to be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Delete the task specified by index from the taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" String output;","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" output \u003d ui.taskDeleted(tasks.get(this.index), tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" } catch (java.lang.IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" tasks.delete(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" return ui.showError(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":44}},{"path":"src/main/java/thea/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.paint.ImagePattern;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" private Circle circle;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" circle.setFill(new ImagePattern(img));","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" public static DialogBox getTheaDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":62}},{"path":"src/main/java/thea/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users do not write description of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new EmptyDescriptionException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public EmptyDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":15}},{"path":"src/main/java/thea/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" * Represents an Event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * This class has from and to which are the characteristics of an Event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Event object.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" * Converts the from and to from String to LocalDateTime.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * @param from date and time when the event starts.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @param to date and time when the event ends.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" public Event(String taskName, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayFrom \u003d from.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteFrom \u003d from.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayTo \u003d to.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteTo \u003d to.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" this.from \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDayFrom[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" this.to \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDayTo[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"E | %s | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")),","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" super.isDone ? \"X\" : \" \", super.taskName,","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")),","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":66}},{"path":"src/main/java/thea/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which exits the program.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new ExitCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" * IsExit is true as this is an ExitCommand.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" super(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * Print the exiting message and notify Main","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * to exit the program.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * Saves the taskList before exiting.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" return ui.exit();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":31}},{"path":"src/main/java/thea/FileCorruptedException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when data loaded is not in expected format.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class FileCorruptedException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new FileCorruptedException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public FileCorruptedException(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"marcellaantania":15}},{"path":"src/main/java/thea/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which finds tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * in the task list according to a keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" private final String keyword;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new FindCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * @param keyword the keyword to be found in tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * Finds the tasks containing the keyword from the taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" return ui.relevantTasksFound(tasks.find(keyword));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":33}},{"path":"src/main/java/thea/IndexOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users try to change a task that does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class IndexOutOfBoundsException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new IndexOutOfBoundsException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public IndexOutOfBoundsException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":15}},{"path":"src/main/java/thea/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":12}},{"path":"src/main/java/thea/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" private final Thea thea \u003d new Thea(\"thea.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setThea(thea);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" stage.setTitle(\"Thea\");","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":33}},{"path":"src/main/java/thea/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.Timer;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.util.TimerTask;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" private Thea thea;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" private Image theaImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Thea.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * Initializes MainWindow.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" public void initialize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" greet();","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" public void setThea(Thea t) {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" thea \u003d t;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Thea\u0027s reply and then appends them to","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" String response;","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" response \u003d c.execute(thea.tasks, thea.ui, thea.storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" } catch (EmptyDescriptionException | WrongCommandException","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" | WrongDateTimeFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" response \u003d e.getMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" DialogBox.getTheaDialog(response, theaImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" Timer timer \u003d new Timer();","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" int fiveSeconds \u003d 5 * 1000;","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" timer.schedule(new TimerTask() {","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" public void run() {","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" javafx.application.Platform.exit();","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" }, fiveSeconds);","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" private void greet() {","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" DialogBox.getTheaDialog(Ui.greet(), theaImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":83}},{"path":"src/main/java/thea/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable command that marks a task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the index of task to be marked.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private final int index;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new MarkCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param index the index of task to be marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Marks the task specified by index as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" tasks.mark(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" output +\u003d ui.taskMarked(tasks.get(this.index));","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" output +\u003d ui.showError(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":40}},{"path":"src/main/java/thea/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Represents a Parser that translates the user input from String to Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * Returns the user input as subclasses of Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * Translates the user input as Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" * @param fullCommand user input in String.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * @return executable Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @throws EmptyDescriptionException if user tries to add a new task with no description.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * @throws WrongCommandException if user write the wrong command (first word input).","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @throws WrongDateTimeFormatException if the inputted date time fails to follow the expected date time format.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" public static Command parse(String fullCommand) throws EmptyDescriptionException,","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" WrongCommandException, WrongDateTimeFormatException {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" String[] commandWords \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cString\u003e commandWordsArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" Collections.addAll(commandWordsArray, commandWords);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" String command \u003d commandWords[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" case \"bye\":","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" case \"list\":","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" return new PrintListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" int index \u003d Integer.parseInt(commandWords[1]) - 1;","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" case \"find\":","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" return new FindCommand(commandWords[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" case \"todo\":","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(commandWords[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"T\", todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a todo cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" String relevantData \u003d commandWords[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d relevantData.split(\" /by \");","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDay \u003d nameAndTime[1].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinute \u003d nameAndTime[1].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime dueDate \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDay[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" throw new WrongDateTimeFormatException(\"I cannot understand your due date \u0027^\u0027 \"","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" + \"Please write your due date in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(nameAndTime[0], nameAndTime[1]);","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"D\", deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a deadline cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" case \"event\":","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" if (commandWordsArray.size() !\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" String relevantData \u003d commandWords[1];","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d relevantData.split(\" /from | /to \");","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayFrom \u003d nameAndTime[1].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteFrom \u003d nameAndTime[1].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayTo \u003d nameAndTime[2].split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteTo \u003d nameAndTime[2].split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime from \u003d LocalDateTime.of(","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime to \u003d LocalDateTime.of(","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" throw new WrongDateTimeFormatException(\"I cannot understand your date and time \u0027^\u0027 \"","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" + \"Please write your event date and time in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(nameAndTime[0], nameAndTime[1], nameAndTime[2]);","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"E\", event);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of an event cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" default:","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" throw new WrongCommandException(\"Sorry, I don\u0027t understand what that means.. \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":110}},{"path":"src/main/java/thea/PrintListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable command that prints the current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class PrintListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new MarkCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public PrintListCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" * Prints the current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" return ui.printList(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":27}},{"path":"src/main/java/thea/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Represents a class that deals with saving and loading data.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" private final String fileName;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Storage object.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * @param fileName name of file containing past data.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" public Storage(String fileName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * Loads data from file.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * @return a past saved task list from last time use of program,an empty task list if not present.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" * @throws FileCorruptedException when the data is not in expected format.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileCorruptedException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003d Paths.get(currentDir, \"data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", this.fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(dataDirPath)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" String line;","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cTask\u003e retrievedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" Task task;","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" try (BufferedReader bufferReader \u003d Files.newBufferedReader(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" String[] splitLine \u003d line.split(\" [|] \");","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[0].equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" task \u003d new ToDo(splitLine[2]);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" } else if (splitLine[0].equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Deadline(splitLine[2], splitLine[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" } else if (splitLine[0].equals(\"E\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Event(splitLine[2], splitLine[3], splitLine[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" throw new FileCorruptedException(\"Unexpected File Format Found. File might be corrupted.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" retrievedTasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" return retrievedTasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" * Saves the current task list to the file.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" * If the file does not exist, makes a new file with","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" * file name as specified during the creation of the Storage object.","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" public void saveTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003d Paths.get(currentDir, \"data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", this.fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(dataDirPath)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" Files.createDirectories(dataDirPath);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" try (BufferedWriter bufferWriter \u003d Files.newBufferedWriter(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.write(tasks.get(i).toMemoryFormat());","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.newLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":105}},{"path":"src/main/java/thea/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents a task.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has a description and an indicator of whether the task is done.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" protected final String taskName;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Task object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Marks itself as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * Unmarks itself as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" * Gets description of task.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" * @return description of task.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" public String getTaskName() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" return this.taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" return this.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[%s] %s\", (this.isDone ? \"X\" : \" \"), this.taskName);","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"marcellaantania":63}},{"path":"src/main/java/thea/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * Represents a list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private ArrayList\u003cTask\u003e taskArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new empty TaskList object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new TaskList object from an existing list.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @param taskArrayList ArrayList of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList \u003d taskArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" * Indicates whether itself is empty.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.isEmpty();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" * Gets a task of a specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" * @return task of the specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.get(index);","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * Returns the size of the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" * @return size of the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" public int size() {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" * Adds a task to itself.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" * @param task the task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" * Deletes a task of a specified index","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" * @throws IndexOutOfBoundsException if index does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" public void delete(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" * Marks a task of a specified index","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" * @throws IndexOutOfBoundsException if index does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" public void mark(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.get(index).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" * Unmarks a task of a specified index","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" * @throws IndexOutOfBoundsException if index does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" public void unmark(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.get(index).unmarkAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" * Finds a task containing the specified keyword","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" * @param keyword keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":" * @return a TaskList of the relevant tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":" public TaskList find(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"marcellaantania"},"content":" TaskList relevantTasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"marcellaantania"},"content":" if (this.get(i).getTaskName().contains(keyword)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"marcellaantania"},"content":" relevantTasks.add(this.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"marcellaantania"},"content":" return relevantTasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":119}},{"path":"src/main/java/thea/Thea.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Thea is a chatbot that manages user tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class Thea {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" protected Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" protected TaskList tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" protected Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" protected Parser parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Thea object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * Initializes Ui, Storage and TaskList objects.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * @param fileName the fileName in which the task data is/should be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public Thea(String fileName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" this.storage \u003d new Storage(fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" this.tasks \u003d new TaskList(storage.retrieveTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" } catch (FileCorruptedException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" * Contains logic the main logic of Thea that needs to be run.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" String fullCommand \u003d ui.readNextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" isExit \u003d c.getIsExit();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" } catch (EmptyDescriptionException | WrongCommandException","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" | WrongDateTimeFormatException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" public String greetings() {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" return ui.greet();","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":56}},{"path":"src/main/java/thea/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is the simplest task subclass with just a description.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new ToDo object.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" public ToDo(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"T | %s | %s\", (super.isDone ? \"1\" : \"0\"), super.taskName);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[T][%s] %s\", (super.isDone ? \"X\" : \" \"), super.taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":39}},{"path":"src/main/java/thea/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * Represents the UI which deals with all the interactions with user.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private final Scanner input;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Ui object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * Greets the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" public static String greet() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" return (\"Hello! I\u0027m Thea\\nHow can I help you?\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * Sends exiting message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" public String exit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" return (\"I hope I made your day easier with my service. See you again! \u003e\u003c\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task marked.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" * @param task marked task.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" public String taskMarked(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" return (\"Great job! I\u0027ve marked this task as done:\\n \" + task + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task unmarked.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" * @param task unmarked task.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" public String taskUnmarked(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" return (\"Okay, I\u0027ve marked this task as not done yet:\\n \" + task + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" * Prints the current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" * @param tasks current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" public String printList(TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" output +\u003d (i + 1 + \". \" + tasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" return (\"Yay! You have no tasks in your list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task added.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" * @param task added task.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" * @param tasks new task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" public String taskAdded(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" return (\"I have added the following task to your list:\\n \"","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + tasks.size()","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" + (tasks.size() \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" + \" in the list. You can do this!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" * Shows an error message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage error message to be shown.","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" public String showError(String errorMessage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" return (errorMessage);","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" * Reads the next line of the user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" * @return the next line of input.","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" public String readNextLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" return input.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" * @param task deleted task.","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" * @param tasks old task list before deletion.","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" public String taskDeleted(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" return (\"I have removed the following task to your list:\\n \"","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + (tasks.size() - 1)","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" + ((tasks.size() - 1) \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":" + \" in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"marcellaantania"},"content":" * Shows user the relevant tasks found from a keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"marcellaantania"},"content":" * @param relevantTasks list of the relevant tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"marcellaantania"},"content":" public String relevantTasksFound(TaskList relevantTasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"marcellaantania"},"content":" if (relevantTasks.isEmpty()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"marcellaantania"},"content":" return (\"No matching task found. Maybe you have finished them?\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"marcellaantania"},"content":" String output \u003d \"Here are the matching tasks on your list:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c relevantTasks.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"marcellaantania"},"content":" output +\u003d ((i + 1) + \". \" + relevantTasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"marcellaantania"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":127}},{"path":"src/main/java/thea/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable command that unmarks a task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the index of task to be unmarked.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private final int index;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new UnmarkCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param index the index of task to be unmarked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Unmarks the task specified by index as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" String output;","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" tasks.unmark(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" output \u003d ui.taskUnmarked(tasks.get(this.index));","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" output \u003d ui.showError(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":40}},{"path":"src/main/java/thea/WrongCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users writes a wrong command (first word of input).","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class WrongCommandException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new WrongCommandException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public WrongCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":17}},{"path":"src/main/java/thea/WrongDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users input date and time in wrong formats.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class WrongDateTimeFormatException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new WrongDateTimeFormatException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" public WrongDateTimeFormatException(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":16}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"-Infinity\" 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-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"15.0\" right\u003d\"15.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" textOverrun\u003d\"CLIP\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" \u003cFont name\u003d\"Roboto\" size\u003d\"15\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" \u003cCircle fx:id\u003d\"circle\" fill\u003d\"#007df2\" radius\u003d\"30.0\" stroke\u003d\"BLACK\" strokeType\u003d\"INSIDE\" strokeWidth\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" \u003c/Circle\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":26}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"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\"thea.MainWindow\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"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-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"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-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"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-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"398.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":19}},{"path":"src/test/java/thea/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void toMemoryFormatTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"D | 0 | CS2103 Week 4 ip | 2023-09-07 23:59\",","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" deadline.toMemoryFormat());","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[D][ ] CS2103 Week 4 ip (by: Sep 7 2023 23:59)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" deadline.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[D][X] CS2103 Week 4 ip (by: Sep 7 2023 23:59)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" deadline.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" deadline.unmarkAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[D][ ] CS2103 Week 4 ip (by: Sep 7 2023 23:59)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" deadline.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":39}},{"path":"src/test/java/thea/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class EventTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void toMemoryFormatTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"E | 0 | Career Fair | 2023-09-12 13:00 | 2023-09-13 17:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" event.toMemoryFormat());","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[E][ ] Career Fair (from: Sep 12 2023 13:00 to: Sep 13 2023 17:00)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" event.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[E][X] Career Fair (from: Sep 12 2023 13:00 to: Sep 13 2023 17:00)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" event.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" event.unmarkAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[E][ ] Career Fair (from: Sep 12 2023 13:00 to: Sep 13 2023 17:00)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" event.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":43}},{"path":"src/test/java/thea/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void toMemoryFormatTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"T | 0 | Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" todo.toMemoryFormat());","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[T][ ] Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" todo.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[T][X] Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" todo.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" todo.unmarkAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[T][ ] Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" todo.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":39}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"todo read a book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"todo sweep the floor","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"deadline CS2103 iP /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"event workshop /from Monday 1pm /to 3pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":11}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"if not exist C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin mkdir C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"javac -cp C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java -Xlint:none -d C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"java -classpath C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin Thea \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"pause","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":5,"-":18}}] +[{"path":"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":"marcellaantania"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"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":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"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":"marcellaantania"},"content":" mainClass.set(\"thea.Thea\")","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":"checkstyle {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" archiveBaseName \u003d \"thea\"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" archiveFileName \u003d \u0027thea.jar\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"marcellaantania":21,"-":42}},{"path":"data/thea.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"T | 1 | buy gift for mom","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"D | 0 | cs2103 ip | 2023-09-03 23:59","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"T | 0 | sweep the floor","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"E | 1 | career fair for engineering | 2023-09-12 13:00 | 2023-09-13 17:00","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":4}},{"path":"src/main/java/thea/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which adds a new task to a taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the task type and the Task that needs to be added to a taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private String taskType;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" private Task task;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new AddCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * @param taskType type of task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * @param task task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public AddCommand(String taskType, Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * Add the new task to the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" return ui.taskAdded(task, tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":37}},{"path":"src/main/java/thea/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * Subclasses of this abstract class are specific","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * commands with specified execute method behaviours.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private final boolean isExit;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Command object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * If the Command type is ExitCommand, isExit is true.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * @param isExit boolean representing if command is ExitCommand.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public Command(boolean isExit) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" public boolean getIsExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" return this.isExit;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * Execute the user command to the data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * To be implemented by subclasses.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":34}},{"path":"src/main/java/thea/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * This class has dueDate which is the characteristic of a Deadline task.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" private final LocalDateTime dueDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Deadline object.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * Converts the dueDate from String to LocalDateTime.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @param dueDate dueDate in String.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" public Deadline(String taskName, String dueDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDay \u003d dueDate.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinute \u003d dueDate.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" this.dueDate \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDay[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"D | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.dueDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[D][%s] %s (by: %s)\", (super.isDone ? \"X\" : \" \"), super.taskName,","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" this.dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":54}},{"path":"src/main/java/thea/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which deletes an existing task in the taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the index of task to be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private int index;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new DeleteCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param index the index of task to be deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Delete the task specified by index from the taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" String output;","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" output \u003d ui.taskDeleted(tasks.get(this.index), tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" } catch (java.lang.IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" tasks.delete(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" return ui.showError(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":44}},{"path":"src/main/java/thea/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.paint.ImagePattern;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" private Circle circle;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" circle.setFill(new ImagePattern(img));","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" public static DialogBox getTheaDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":62}},{"path":"src/main/java/thea/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users do not write description of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new EmptyDescriptionException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public EmptyDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":15}},{"path":"src/main/java/thea/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" * Represents an Event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * This class has from and to which are the characteristics of an Event task.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Event object.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" * Converts the from and to from String to LocalDateTime.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * @param from date and time when the event starts.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @param to date and time when the event ends.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" public Event(String taskName, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayFrom \u003d from.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteFrom \u003d from.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDayTo \u003d to.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinuteTo \u003d to.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" this.from \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDayFrom[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayFrom[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteFrom[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" this.to \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDayTo[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDayTo[2]),","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[0]),","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinuteTo[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"E | %s | %s | %s | %s\", (super.isDone ? \"1\" : \"0\"),","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" super.taskName, this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")),","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[E][%s] %s (from: %s to: %s)\",","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" super.isDone ? \"X\" : \" \", super.taskName,","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" this.from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")),","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":66}},{"path":"src/main/java/thea/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which exits the program.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new ExitCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" * IsExit is true as this is an ExitCommand.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" super(true);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * Print the exiting message and notify Main","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * to exit the program.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * Saves the taskList before exiting.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" return ui.exit();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":31}},{"path":"src/main/java/thea/FileCorruptedException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when data loaded is not in expected format.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class FileCorruptedException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new FileCorruptedException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public FileCorruptedException(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"marcellaantania":15}},{"path":"src/main/java/thea/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable user command which finds tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * in the task list according to a keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" private final String keyword;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new FindCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * @param keyword the keyword to be found in tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * Finds the tasks containing the keyword from the taskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" return ui.relevantTasksFound(tasks.find(keyword));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":33}},{"path":"src/main/java/thea/IndexOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users try to change a task that does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class IndexOutOfBoundsException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new IndexOutOfBoundsException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public IndexOutOfBoundsException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":15}},{"path":"src/main/java/thea/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":12}},{"path":"src/main/java/thea/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" private final Thea thea \u003d new Thea(\"thea.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setThea(thea);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" stage.setTitle(\"Thea\");","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":33}},{"path":"src/main/java/thea/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.Timer;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.util.TimerTask;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" private Thea thea;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" private Image theaImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Thea.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * Initializes MainWindow.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" public void initialize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" greet();","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" public void setThea(Thea t) {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" thea \u003d t;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Thea\u0027s reply and then appends them to","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" String response \u003d getResponse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" DialogBox.getTheaDialog(response, theaImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" exitProgramIfRequested(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" private static void exitProgramIfRequested(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" Timer timer \u003d new Timer();","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" int fiveSeconds \u003d 5 * 1000;","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" timer.schedule(new TimerTask() {","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" public void run() {","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" javafx.application.Platform.exit();","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" }, fiveSeconds);","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" private String getResponse(String input) {","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" String response;","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" response \u003d c.execute(thea.tasks, thea.ui, thea.storage);","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" } catch (EmptyDescriptionException | WrongCommandException","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" | WrongDateTimeFormatException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" response \u003d e.getMessage();","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" return response;","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" private void greet() {","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" DialogBox.getTheaDialog(Ui.greet(), theaImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":93}},{"path":"src/main/java/thea/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable command that marks a task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the index of task to be marked.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private final int index;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new MarkCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param index the index of task to be marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Marks the task specified by index as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" tasks.mark(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" output +\u003d ui.taskMarked(tasks.get(this.index));","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" output +\u003d ui.showError(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":40}},{"path":"src/main/java/thea/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import java.util.List;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" * Represents a Parser that translates the user input from String to Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * Returns the user input as subclasses of Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" * Translates the user input as Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" * @param fullCommand user input in String.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * @return executable Command class.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @throws EmptyDescriptionException if user tries to add a new task with no description.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * @throws WrongCommandException if user write the wrong command (first word input).","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @throws WrongDateTimeFormatException if the inputted date time fails to follow the expected date time format.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" public static Command parse(String fullCommand) throws EmptyDescriptionException,","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" WrongCommandException, WrongDateTimeFormatException {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" String[] splitCommand \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cString\u003e commandWords \u003d new ArrayList\u003c\u003e(List.of(splitCommand));","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" String command \u003d commandWords.get(0);","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" int index;","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" switch (command) {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" case \"bye\":","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" case \"list\":","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" return new PrintListCommand();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" case \"mark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" index \u003d Integer.parseInt(commandWords.get(1)) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" index \u003d Integer.parseInt(commandWords.get(1)) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" case \"delete\":","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" index \u003d Integer.parseInt(commandWords.get(1)) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" case \"find\":","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" return new FindCommand(commandWords.get(1));","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" case \"todo\":","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" if(commandWords.size() \u003d\u003d 1) {","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a todo cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(commandWords.get(1));","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"T\", todo);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d createDeadline(commandWords);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"D\", deadline);","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" case \"event\":","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d createEvent(commandWords);","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" return new AddCommand(\"E\", event);","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" throw new WrongCommandException(\"Sorry, I don\u0027t understand what that means.. \u0027^\u0027\");","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" * Creates an Event class from user command.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" * @param commandWords user input in ArrayList of Strings.","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" * @return the created Event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" * @throws EmptyDescriptionException if user tries to add a new task with no description.","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" * @throws WrongDateTimeFormatException if the inputted date time fails to follow the expected date time format.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" private static Event createEvent(ArrayList\u003cString\u003e commandWords) throws EmptyDescriptionException, WrongDateTimeFormatException {","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" if(commandWords.size() \u003d\u003d 1) {","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of an event cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" String eventData \u003d commandWords.get(1);","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d eventData.split(\" /from | /to \");","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" String eventName \u003d nameAndTime[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" String eventStartDate \u003d nameAndTime[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" String eventFinishDate \u003d nameAndTime[2];","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" checkDateValidity(eventStartDate);","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" checkDateValidity(eventFinishDate);","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" return new Event(eventName, eventStartDate, eventFinishDate);","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" * Creates a Deadline class from user command.","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" * @param commandWords user input in ArrayList of Strings.","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" * @return the created Deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" * @throws EmptyDescriptionException if user tries to add a new task with no description.","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" * @throws WrongDateTimeFormatException if the inputted date time fails to follow the expected date time format.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" private static Deadline createDeadline(ArrayList\u003cString\u003e commandWords) throws EmptyDescriptionException, WrongDateTimeFormatException {","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" if(commandWords.size() \u003d\u003d 1) {","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" throw new EmptyDescriptionException(\"The description of a deadline cannot be empty! \u0027^\u0027\");","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" String deadlineData \u003d commandWords.get(1);","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" String[] nameAndTime \u003d deadlineData.split(\" /by \");","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" String deadlineName \u003d nameAndTime[0];","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" String deadlineDate \u003d nameAndTime[1];","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" checkDateValidity(deadlineDate);","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" return new Deadline(deadlineName, deadlineDate);","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" * Validates a string of date to be of a specified format.","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" * @param date the date to be validated","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":" * @throws WrongDateTimeFormatException when the date is not in expected format.","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":" private static void checkDateValidity(String date) throws WrongDateTimeFormatException {","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"marcellaantania"},"content":" String[] dateYearMonthDay \u003d date.split(\" \")[0].split(\"-\");","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"marcellaantania"},"content":" String[] timeHourMinute \u003d date.split(\" \")[1].split(\":\");","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"marcellaantania"},"content":" LocalDateTime dueDate \u003d LocalDateTime.of(Integer.parseInt(dateYearMonthDay[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[1]),","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(dateYearMonthDay[2]),","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[0]),","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"marcellaantania"},"content":" Integer.parseInt(timeHourMinute[1]));","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"marcellaantania"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"marcellaantania"},"content":" throw new WrongDateTimeFormatException(\"I cannot understand your date \u0027^\u0027 \"","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"marcellaantania"},"content":" + \"Please write your date(s) in format yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":124}},{"path":"src/main/java/thea/PrintListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable command that prints the current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class PrintListCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new MarkCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" public PrintListCommand() {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" * Prints the current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" return ui.printList(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":27}},{"path":"src/main/java/thea/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Represents a class that deals with saving and loading data.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" private final String fileName;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Storage object.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * @param fileName name of file containing past data.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" public Storage(String fileName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" this.fileName \u003d fileName;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" * Loads data from file.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * @return a past saved task list from last time use of program,an empty task list if not present.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" * @throws FileCorruptedException when the data is not in expected format.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileCorruptedException {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003d Paths.get(currentDir, \"data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", this.fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(dataDirPath) || !Files.exists(path)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" ArrayList\u003cTask\u003e retrievedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" try (BufferedReader bufferReader \u003d Files.newBufferedReader(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" String line \u003d bufferReader.readLine();","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" Task task \u003d parseTask(line);","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" retrievedTasks.add(task);","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" line \u003d bufferReader.readLine();","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" return retrievedTasks;","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" * Parses data from file.","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" * @return parsed task.","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" * @throws FileCorruptedException when the data is not in expected format.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" private static Task parseTask(String line) throws FileCorruptedException {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" String[] splitLine \u003d line.split(\" [|] \");","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" Task task;","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" switch (splitLine[0]) {","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" case \"T\":","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" task \u003d new ToDo(splitLine[2]);","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" case \"D\":","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Deadline(splitLine[2], splitLine[3]);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" case \"E\":","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" task \u003d new Event(splitLine[2], splitLine[3], splitLine[4]);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" throw new FileCorruptedException(\"Unexpected File Format Found. File might be corrupted.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" if (splitLine[1].equals(\"1\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" return task;","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" * Saves the current task list to the file.","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" * If the file does not exist, makes a new file with","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" * file name as specified during the creation of the Storage object.","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" public void saveTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" Path dataDirPath \u003d Paths.get(currentDir, \"data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" Path path \u003d Paths.get(currentDir, \"data\", this.fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" createFileIfNotExist(dataDirPath, path);","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" try (BufferedWriter bufferWriter \u003d Files.newBufferedWriter(path)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.write(tasks.get(i).toMemoryFormat());","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" bufferWriter.newLine();","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" * Creates directory and file if they do not exist.","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" * @param dataDirPath path to directory.","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" * @param path path to file.","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" private static void createFileIfNotExist(Path dataDirPath, Path path) {","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":" if (!Files.exists(dataDirPath)) try {","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"marcellaantania"},"content":" Files.createDirectories(dataDirPath);","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"marcellaantania"},"content":" else if (!Files.exists(path)) try {","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"marcellaantania"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"marcellaantania"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"marcellaantania"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":121}},{"path":"src/main/java/thea/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents a task.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has a description and an indicator of whether the task is done.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" protected final String taskName;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Task object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Marks itself as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" * Unmarks itself as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" * Gets description of task.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" * @return description of task.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" public String getTaskName() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" return this.taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" return this.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[%s] %s\", (this.isDone ? \"X\" : \" \"), this.taskName);","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"marcellaantania":63}},{"path":"src/main/java/thea/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * Represents a list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private ArrayList\u003cTask\u003e taskArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new empty TaskList object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public TaskList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new TaskList object from an existing list.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * @param taskArrayList ArrayList of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList \u003d taskArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" * Indicates whether itself is empty.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.isEmpty();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" * Gets a task of a specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" * @return task of the specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.get(index);","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" * Returns the size of the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" * @return size of the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":" public int size() {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" return this.taskArrayList.size();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" * Adds a task to itself.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" * @param task the task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.add(task);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" * Deletes a task of a specified index","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":" * @throws IndexOutOfBoundsException if index does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" public void delete(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.remove(index);","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" * Marks a task of a specified index","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" * @throws IndexOutOfBoundsException if index does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" public void mark(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.get(index).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" * Unmarks a task of a specified index","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" * @param index index.","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" * @throws IndexOutOfBoundsException if index does not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" public void unmark(int index) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":" if (index \u003e (this.size() - 1)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" throw new IndexOutOfBoundsException(\"There is currently no task \" + (index + 1));","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" this.taskArrayList.get(index).unmarkAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" * Finds a task containing the specified keyword","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" * @param keyword keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":" * @return a TaskList of the relevant tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":" public TaskList find(String keyword) {","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"marcellaantania"},"content":" TaskList relevantTasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"marcellaantania"},"content":" if (this.get(i).getTaskName().contains(keyword)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"marcellaantania"},"content":" relevantTasks.add(this.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"marcellaantania"},"content":" return relevantTasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":119}},{"path":"src/main/java/thea/Thea.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Thea is a chatbot that manages user tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class Thea {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" protected Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" protected TaskList tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" protected Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" protected Parser parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Thea object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * Initializes Ui, Storage and TaskList objects.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" * @param fileName the fileName in which the task data is/should be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public Thea(String fileName) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" this.storage \u003d new Storage(fileName);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" this.tasks \u003d new TaskList(storage.retrieveTasks());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" } catch (FileCorruptedException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":30}},{"path":"src/main/java/thea/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is the simplest task subclass with just a description.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new ToDo object.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" * @param taskName description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" public ToDo(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in memory format, which means the format","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" * of which the task is saved to the hard disk.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" * @return task in memory format.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" public String toMemoryFormat() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"T | %s | %s\", (super.isDone ? \"1\" : \"0\"), super.taskName);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" * Returns the task in desired string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * @return task in string format.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" return String.format(\"[T][%s] %s\", (super.isDone ? \"X\" : \" \"), super.taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":39}},{"path":"src/main/java/thea/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * Represents the UI which deals with all the interactions with user.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private final Scanner input;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new Ui object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public Ui() {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" * Greets the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" public static String greet() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" return (\"Hello! I\u0027m Thea\\nHow can I help you?\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * Sends exiting message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" public String exit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" return (\"I hope I made your day easier with my service. See you again! \u003e\u003c\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task marked.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" * @param task marked task.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" public String taskMarked(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" return (\"Great job! I\u0027ve marked this task as done:\\n \" + task + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task unmarked.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"marcellaantania"},"content":" * @param task unmarked task.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"marcellaantania"},"content":" public String taskUnmarked(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"marcellaantania"},"content":" return (\"Okay, I\u0027ve marked this task as not done yet:\\n \" + task + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"marcellaantania"},"content":" * Prints the current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"marcellaantania"},"content":" * @param tasks current task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"marcellaantania"},"content":" public String printList(TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"marcellaantania"},"content":" if (!tasks.isEmpty()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"marcellaantania"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"marcellaantania"},"content":" output +\u003d (i + 1 + \". \" + tasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"marcellaantania"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"marcellaantania"},"content":" return (\"Yay! You have no tasks in your list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task added.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"marcellaantania"},"content":" * @param task added task.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"marcellaantania"},"content":" * @param tasks new task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"marcellaantania"},"content":" public String taskAdded(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"marcellaantania"},"content":" return (\"I have added the following task to your list:\\n \"","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + tasks.size()","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"marcellaantania"},"content":" + (tasks.size() \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"marcellaantania"},"content":" + \" in the list. You can do this!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"marcellaantania"},"content":" * Shows an error message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage error message to be shown.","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"marcellaantania"},"content":" public String showError(String errorMessage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"marcellaantania"},"content":" return (errorMessage);","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"marcellaantania"},"content":" * Reads the next line of the user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"marcellaantania"},"content":" * @return the next line of input.","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"marcellaantania"},"content":" public String readNextLine() {","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"marcellaantania"},"content":" return input.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"marcellaantania"},"content":" * Notifies user of the task deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"marcellaantania"},"content":" * @param task deleted task.","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"marcellaantania"},"content":" * @param tasks old task list before deletion.","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"marcellaantania"},"content":" public String taskDeleted(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"marcellaantania"},"content":" return (\"I have removed the following task to your list:\\n \"","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"marcellaantania"},"content":" + task.toString() + \"\\nNow you have \" + (tasks.size() - 1)","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"marcellaantania"},"content":" + ((tasks.size() - 1) \u003d\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"marcellaantania"},"content":" + \" in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"marcellaantania"},"content":" * Shows user the relevant tasks found from a keyword.","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"marcellaantania"},"content":" * @param relevantTasks list of the relevant tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"marcellaantania"},"content":" public String relevantTasksFound(TaskList relevantTasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"marcellaantania"},"content":" if (relevantTasks.isEmpty()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"marcellaantania"},"content":" return (\"No matching task found. Maybe you have finished them?\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"marcellaantania"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"marcellaantania"},"content":" String output \u003d \"Here are the matching tasks on your list:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"marcellaantania"},"content":" for (int i \u003d 0; i \u003c relevantTasks.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"marcellaantania"},"content":" output +\u003d ((i + 1) + \". \" + relevantTasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"marcellaantania"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":127}},{"path":"src/main/java/thea/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an executable command that unmarks a task as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" * This class has data on the index of task to be unmarked.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":" * This class is a subclass of the abstract class Command with abstract method execute.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" private final int index;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new UnmarkCommand object.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" * @param index the index of task to be unmarked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" super(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" * Unmarks the task specified by index as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" * @param tasks list of current tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" * @param ui Ui class that deals with user interaction.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" * @param storage Storage class that deals with saving data.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" String output;","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" tasks.unmark(this.index);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" output \u003d ui.taskUnmarked(tasks.get(this.index));","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" output \u003d ui.showError(e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" storage.saveTaskList(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" return output;","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":40}},{"path":"src/main/java/thea/WrongCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users writes a wrong command (first word of input).","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class WrongCommandException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new WrongCommandException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" public WrongCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":17}},{"path":"src/main/java/thea/WrongDateTimeFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":" * Represents an exception to use when users input date and time in wrong formats.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"public class WrongDateTimeFormatException extends Exception {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" * Constructs a new WrongDateTimeFormatException object.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" * @param errorMessage errorMessage of the exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" public WrongDateTimeFormatException(String errorMessage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"marcellaantania":16}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"-Infinity\" 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-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"15.0\" right\u003d\"15.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" textOverrun\u003d\"CLIP\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" \u003cFont name\u003d\"Roboto\" size\u003d\"15\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" \u003cCircle fx:id\u003d\"circle\" fill\u003d\"#007df2\" radius\u003d\"30.0\" stroke\u003d\"BLACK\" strokeType\u003d\"INSIDE\" strokeWidth\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" \u003c/Circle\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":26}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"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\"thea.MainWindow\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"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-09"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"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-09"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"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-09"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"398.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"marcellaantania":19}},{"path":"src/test/java/thea/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void toMemoryFormatTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"D | 0 | CS2103 Week 4 ip | 2023-09-07 23:59\",","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" deadline.toMemoryFormat());","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[D][ ] CS2103 Week 4 ip (by: Sep 7 2023 23:59)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" deadline.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[D][X] CS2103 Week 4 ip (by: Sep 7 2023 23:59)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" deadline.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" Deadline deadline \u003d new Deadline(\"CS2103 Week 4 ip\", \"2023-09-07 23:59\");","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" deadline.unmarkAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[D][ ] CS2103 Week 4 ip (by: Sep 7 2023 23:59)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" deadline.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":39}},{"path":"src/test/java/thea/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class EventTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void toMemoryFormatTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"E | 0 | Career Fair | 2023-09-12 13:00 | 2023-09-13 17:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" event.toMemoryFormat());","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[E][ ] Career Fair (from: Sep 12 2023 13:00 to: Sep 13 2023 17:00)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":" event.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[E][X] Career Fair (from: Sep 12 2023 13:00 to: Sep 13 2023 17:00)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" event.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" Event event \u003d new Event(\"Career Fair\", \"2023-09-12 13:00\",","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" \"2023-09-13 17:00\");","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":" event.unmarkAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[E][ ] Career Fair (from: Sep 12 2023 13:00 to: Sep 13 2023 17:00)\",","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"marcellaantania"},"content":" event.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":43}},{"path":"src/test/java/thea/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"package thea;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":" public void toMemoryFormatTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"T | 0 | Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"marcellaantania"},"content":" todo.toMemoryFormat());","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"marcellaantania"},"content":" public void toStringTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[T][ ] Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"marcellaantania"},"content":" todo.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"marcellaantania"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"marcellaantania"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[T][X] Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"marcellaantania"},"content":" todo.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"marcellaantania"},"content":" @Test","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"marcellaantania"},"content":" public void unmarkAsDoneTest() {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"marcellaantania"},"content":" ToDo todo \u003d new ToDo(\"Buy Textbook\");","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"marcellaantania"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"marcellaantania"},"content":" todo.unmarkAsDone();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"marcellaantania"},"content":" assertEquals(\"[T][ ] Buy Textbook\",","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"marcellaantania"},"content":" todo.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"marcellaantania"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"marcellaantania"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"marcellaantania":39}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"marcellaantania"},"content":"todo read a book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"marcellaantania"},"content":"todo sweep the floor","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"marcellaantania"},"content":"deadline CS2103 iP /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"event workshop /from Monday 1pm /to 3pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"marcellaantania"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"marcellaantania"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"marcellaantania"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"marcellaantania"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"marcellaantania"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":11}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"marcellaantania"},"content":"if not exist C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin mkdir C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"marcellaantania"},"content":"javac -cp C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java -Xlint:none -d C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"marcellaantania"},"content":"java -classpath C:\\Users\\Marcella\\Documents\\NUS\\Y4S1\\CS2103\\repos\\ip\\bin Thea \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"marcellaantania"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"marcellaantania"},"content":"pause","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"marcellaantania":5,"-":18}}] diff --git a/marcellaantania_ip_master/commits.json b/marcellaantania_ip_master/commits.json index e64d874b..b1ec858a 100644 --- a/marcellaantania_ip_master/commits.json +++ b/marcellaantania_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"marcellaantania":[{"date":"2023-08-23","commitResults":[{"hash":"be790b0b5a8662742103ea027706491d22bdd0ae","isMergeCommit":false,"messageTitle":"Name change from Duke to Thea, changed greeting and exiting message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"dd21a96ab13978cc3a187a9de09ede3f4e024a72","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"620b910d4ea3368ecedc82168ff908694a434d46","isMergeCommit":false,"messageTitle":"echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f14d6fe2740b5b39d0f1c53bb4ae341bff961774","isMergeCommit":false,"messageTitle":"add, list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"3063e4d93a1dcf3e3b2746f17be737647cfe7544","isMergeCommit":false,"messageTitle":"added Task class","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"235c93c60d1777bcb486c9ffd7c33575d14fe244","isMergeCommit":false,"messageTitle":"integrate Thea with Task class, add mark/unmark function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}}]},{"date":"2023-08-24","commitResults":[{"hash":"5f22824c2452d21e98e4d2e0706f418e7edaa12c","isMergeCommit":false,"messageTitle":"Made three different subclasses of Task (ToDo, Deadline, Event)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"916a1b37f8b987ebf5d4fd20e4fe03414ae31ee4","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e8c672585d45486a7de85221be114594eb7443d5","isMergeCommit":false,"messageTitle":"change access modifier","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8424b3e2667c0f6f74557e2f0aaac5546c23586c","isMergeCommit":false,"messageTitle":"update Thea to support 3 types of tasks: ToDo, Deadline and Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"7ae0c237a99a3a323e7bb2c651af85a696af34fa","isMergeCommit":false,"messageTitle":"remove extra nextline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"66786787dd2182a50c0e2a56349edf88295713f9","isMergeCommit":false,"messageTitle":"remove emoji that cannot be run","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1b45aa47f2bfa252dcb7f4c8e538451cc4a93b62","isMergeCommit":false,"messageTitle":"Automated Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":5,"deletions":3}}},{"hash":"af87e8f9f002220a648d30a51db13cb628e30d64","isMergeCommit":false,"messageTitle":"Thea-specific exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"8f639b10622b36fa74bed2f5ba3b12dcf81f2a7f","isMergeCommit":false,"messageTitle":"Update code to throw three types of thea-specific exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":16}}},{"hash":"99c4e21e2f81aeed66f57c5e004d5444f126662d","isMergeCommit":false,"messageTitle":"Add delete function","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3db93ac8e369ff5ec267ff426ef874dce707a5b3","isMergeCommit":false,"messageTitle":"Read file functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":24,"deletions":2}}},{"hash":"44f47829fb1f1c0e7a0eea3c69c6f934c5648d2d","isMergeCommit":false,"messageTitle":"Add an exception for unexpected file format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"dfa44623d9dca43361218c93e558563b7ed1f271","isMergeCommit":false,"messageTitle":"Update Thea to retrieve data as tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":20,"deletions":5}}},{"hash":"fa7d0c58dba6baca0a7b633e02ede75c72003427","isMergeCommit":false,"messageTitle":"Write tasks to hard disk, not fully functional yet","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":3}}},{"hash":"48aa2c9a928105f625a001a6e563c2b20a5bd697","isMergeCommit":false,"messageTitle":"Update Thea and subclasses of Task to support task saving","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":55,"deletions":30}}},{"hash":"3ad456a6cb5d422e9dd6de1e0ab399abd285a62d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"4a106d08fa46722fd26cfcb57da8165a69e9298b","isMergeCommit":false,"messageTitle":"Save deadline duedates and event timings as LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":48,"deletions":13}}},{"hash":"804274a848b68ce5f21568f4b12bf5513caf818c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"d0680275d3c9e53e73d38e37afc7ac1c5332fe9c","isMergeCommit":false,"messageTitle":"Add a new exception to handle wrong date and time format from the user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"fca294fc934f44b33ccf602ea1e1df0e3c753c69","isMergeCommit":false,"messageTitle":"Extract classes from the main Thea class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":0}}},{"hash":"698ef877c307836fa951fa29a089cd0dfcff2be9","isMergeCommit":false,"messageTitle":"Add parser and command class to understand user input and return them as commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":197,"deletions":0}}},{"hash":"aca6cabdcc9061b0443c0af1da0c6852f6c08fe1","isMergeCommit":false,"messageTitle":"Modify Thea class to use the extracted classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":175}}},{"hash":"c8c592023ebc640d743c7b73349ac4b6b031e835","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"09e640b30b0607e8511ec46025c596062cf8dc31","isMergeCommit":false,"messageTitle":"Package everything to the package \"thea\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":562,"deletions":524}}},{"hash":"0775ce5a30c17f4d8ce9b7ece9f941dcfadef4ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"6a748d4521cfdcc20af213d88da1e161dbab0b4e","isMergeCommit":false,"messageTitle":"Update gradle to work with Thea","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"37de31a3dc84d1c243e1ea6174300b667c59095d","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"898fac89261e2e9687ef2fd66479581f31d0320b","isMergeCommit":false,"messageTitle":"Add test class with dummy tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"52b39c67d13ec19707797210c4203f19cd7ec28e","isMergeCommit":false,"messageTitle":"Add unit tests for ToDo, Deadline and Event classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":0}}},{"hash":"a53162505a8499205dc8a2e80e3ca08ded3d647e","isMergeCommit":false,"messageTitle":"Remove the dummy TheaTest class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":17}}},{"hash":"107cf7a168c577c16ae4f000e2b03718fa13a235","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"3a04a9c1d703fb01f5e342210b1e0667819f9d66","isMergeCommit":false,"messageTitle":"Add jar filename","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"f3506902160c9cf98dc548e794ae1138e3abc559","isMergeCommit":false,"messageTitle":"Add JavaDoc to all classes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":429,"deletions":4}}},{"hash":"14a115300e75dbcb7449342aaa1fb00e90a1177b","isMergeCommit":false,"messageTitle":"Edit to follow java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":74}}},{"hash":"6154c6970fbb8fd4e576c3360370ab99b2d8012f","isMergeCommit":false,"messageTitle":"Add keyword find functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":111,"deletions":73}}},{"hash":"ea025e069ee661c7eb22c408232dd166d997aba4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a0ff72506f58eb642a75d550c6c47ad9e38d27db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/thea/DeleteCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"c1b1c0e4d6b601dd4994e5f954e0a16d838e9dd6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/thea/Parser.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"7090a972f7d93464979ff3bf514e33cabe7093e1","isMergeCommit":false,"messageTitle":"Add JavaDoc for the new Find functionality","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"4d15435579e966f0c92de8daf99b98921becfa7a","isMergeCommit":false,"messageTitle":"Change method name to adhere to standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}}]},{"date":"2023-09-09","commitResults":[{"hash":"0f4c4ab8ce597fdacb2cb175189ec19d1d2336e1","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":1,"deletions":2},"java":{"insertions":51,"deletions":59}}},{"hash":"04cad9389ff0ab737a0fc6ed784ab952577e4747","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Checkstyle\u0027","messageBody":"","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{}},{"hash":"741c7559bab9a2ca64fbb4d7ab89abc46d33a27e","isMergeCommit":false,"messageTitle":"Add JavaFX (unfinished)","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"java":{"insertions":188,"deletions":2}}},{"hash":"ccdfa62e126cd4a8c9106f40c7caa8031adfe767","isMergeCommit":false,"messageTitle":"Add basic working GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":209,"deletions":189}}},{"hash":"42f5ad1c24e35836ab2064ebe802e792e8cc6b2d","isMergeCommit":false,"messageTitle":"Crop display pictures to circle, add padding to the text","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":11,"deletions":6},"java":{"insertions":7,"deletions":2}}},{"hash":"dad17a2d0259e8cde9b923df91050c938d916544","isMergeCommit":false,"messageTitle":"Change GUI style","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"fxml":{"insertions":17,"deletions":12},"java":{"insertions":3,"deletions":2}}},{"hash":"0f66d1d0bc22c3c9eb367d5c396173b2e0e7da3e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"7eb9e4e798c0bb3443ddb09f9a5f18765c1335ed","isMergeCommit":false,"messageTitle":"Changes to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":11}}}]}]},"authorFileTypeContributionMap":{"marcellaantania":{"java":1414,"md":0,"fxml":45,"sh":0,"bat":5,"gradle":21,"txt":15}},"authorContributionVariance":{"marcellaantania":168664.31},"authorDisplayNameMap":{"marcellaantania":"CS2103-F13-2 MARC.. TAN"}} +{"authorDailyContributionsMap":{"marcellaantania":[{"date":"2023-08-23","commitResults":[{"hash":"be790b0b5a8662742103ea027706491d22bdd0ae","isMergeCommit":false,"messageTitle":"Name change from Duke to Thea, changed greeting and exiting message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"dd21a96ab13978cc3a187a9de09ede3f4e024a72","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"620b910d4ea3368ecedc82168ff908694a434d46","isMergeCommit":false,"messageTitle":"echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f14d6fe2740b5b39d0f1c53bb4ae341bff961774","isMergeCommit":false,"messageTitle":"add, list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"3063e4d93a1dcf3e3b2746f17be737647cfe7544","isMergeCommit":false,"messageTitle":"added Task class","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"235c93c60d1777bcb486c9ffd7c33575d14fe244","isMergeCommit":false,"messageTitle":"integrate Thea with Task class, add mark/unmark function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}}]},{"date":"2023-08-24","commitResults":[{"hash":"5f22824c2452d21e98e4d2e0706f418e7edaa12c","isMergeCommit":false,"messageTitle":"Made three different subclasses of Task (ToDo, Deadline, Event)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"916a1b37f8b987ebf5d4fd20e4fe03414ae31ee4","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e8c672585d45486a7de85221be114594eb7443d5","isMergeCommit":false,"messageTitle":"change access modifier","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8424b3e2667c0f6f74557e2f0aaac5546c23586c","isMergeCommit":false,"messageTitle":"update Thea to support 3 types of tasks: ToDo, Deadline and Event","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"7ae0c237a99a3a323e7bb2c651af85a696af34fa","isMergeCommit":false,"messageTitle":"remove extra nextline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"66786787dd2182a50c0e2a56349edf88295713f9","isMergeCommit":false,"messageTitle":"remove emoji that cannot be run","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1b45aa47f2bfa252dcb7f4c8e538451cc4a93b62","isMergeCommit":false,"messageTitle":"Automated Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"bat":{"insertions":5,"deletions":3}}},{"hash":"af87e8f9f002220a648d30a51db13cb628e30d64","isMergeCommit":false,"messageTitle":"Thea-specific exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"8f639b10622b36fa74bed2f5ba3b12dcf81f2a7f","isMergeCommit":false,"messageTitle":"Update code to throw three types of thea-specific exceptions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":16}}},{"hash":"99c4e21e2f81aeed66f57c5e004d5444f126662d","isMergeCommit":false,"messageTitle":"Add delete function","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3db93ac8e369ff5ec267ff426ef874dce707a5b3","isMergeCommit":false,"messageTitle":"Read file functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":24,"deletions":2}}},{"hash":"44f47829fb1f1c0e7a0eea3c69c6f934c5648d2d","isMergeCommit":false,"messageTitle":"Add an exception for unexpected file format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"dfa44623d9dca43361218c93e558563b7ed1f271","isMergeCommit":false,"messageTitle":"Update Thea to retrieve data as tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":20,"deletions":5}}},{"hash":"fa7d0c58dba6baca0a7b633e02ede75c72003427","isMergeCommit":false,"messageTitle":"Write tasks to hard disk, not fully functional yet","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":3}}},{"hash":"48aa2c9a928105f625a001a6e563c2b20a5bd697","isMergeCommit":false,"messageTitle":"Update Thea and subclasses of Task to support task saving","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":55,"deletions":30}}},{"hash":"3ad456a6cb5d422e9dd6de1e0ab399abd285a62d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"4a106d08fa46722fd26cfcb57da8165a69e9298b","isMergeCommit":false,"messageTitle":"Save deadline duedates and event timings as LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":48,"deletions":13}}},{"hash":"804274a848b68ce5f21568f4b12bf5513caf818c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"d0680275d3c9e53e73d38e37afc7ac1c5332fe9c","isMergeCommit":false,"messageTitle":"Add a new exception to handle wrong date and time format from the user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"fca294fc934f44b33ccf602ea1e1df0e3c753c69","isMergeCommit":false,"messageTitle":"Extract classes from the main Thea class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":0}}},{"hash":"698ef877c307836fa951fa29a089cd0dfcff2be9","isMergeCommit":false,"messageTitle":"Add parser and command class to understand user input and return them as commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":197,"deletions":0}}},{"hash":"aca6cabdcc9061b0443c0af1da0c6852f6c08fe1","isMergeCommit":false,"messageTitle":"Modify Thea class to use the extracted classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":175}}},{"hash":"c8c592023ebc640d743c7b73349ac4b6b031e835","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"09e640b30b0607e8511ec46025c596062cf8dc31","isMergeCommit":false,"messageTitle":"Package everything to the package \"thea\"","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":562,"deletions":524}}},{"hash":"0775ce5a30c17f4d8ce9b7ece9f941dcfadef4ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"6a748d4521cfdcc20af213d88da1e161dbab0b4e","isMergeCommit":false,"messageTitle":"Update gradle to work with Thea","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"37de31a3dc84d1c243e1ea6174300b667c59095d","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"898fac89261e2e9687ef2fd66479581f31d0320b","isMergeCommit":false,"messageTitle":"Add test class with dummy tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"52b39c67d13ec19707797210c4203f19cd7ec28e","isMergeCommit":false,"messageTitle":"Add unit tests for ToDo, Deadline and Event classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":0}}},{"hash":"a53162505a8499205dc8a2e80e3ca08ded3d647e","isMergeCommit":false,"messageTitle":"Remove the dummy TheaTest class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":17}}},{"hash":"107cf7a168c577c16ae4f000e2b03718fa13a235","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"3a04a9c1d703fb01f5e342210b1e0667819f9d66","isMergeCommit":false,"messageTitle":"Add jar filename","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"f3506902160c9cf98dc548e794ae1138e3abc559","isMergeCommit":false,"messageTitle":"Add JavaDoc to all classes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":429,"deletions":4}}},{"hash":"14a115300e75dbcb7449342aaa1fb00e90a1177b","isMergeCommit":false,"messageTitle":"Edit to follow java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":74}}},{"hash":"6154c6970fbb8fd4e576c3360370ab99b2d8012f","isMergeCommit":false,"messageTitle":"Add keyword find functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":111,"deletions":73}}},{"hash":"ea025e069ee661c7eb22c408232dd166d997aba4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a0ff72506f58eb642a75d550c6c47ad9e38d27db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/thea/DeleteCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"c1b1c0e4d6b601dd4994e5f954e0a16d838e9dd6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/thea/Parser.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"7090a972f7d93464979ff3bf514e33cabe7093e1","isMergeCommit":false,"messageTitle":"Add JavaDoc for the new Find functionality","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"4d15435579e966f0c92de8daf99b98921becfa7a","isMergeCommit":false,"messageTitle":"Change method name to adhere to standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}}]},{"date":"2023-09-09","commitResults":[{"hash":"0f4c4ab8ce597fdacb2cb175189ec19d1d2336e1","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":1,"deletions":2},"java":{"insertions":51,"deletions":59}}},{"hash":"04cad9389ff0ab737a0fc6ed784ab952577e4747","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Checkstyle\u0027","messageBody":"","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{}},{"hash":"741c7559bab9a2ca64fbb4d7ab89abc46d33a27e","isMergeCommit":false,"messageTitle":"Add JavaFX (unfinished)","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"java":{"insertions":188,"deletions":2}}},{"hash":"ccdfa62e126cd4a8c9106f40c7caa8031adfe767","isMergeCommit":false,"messageTitle":"Add basic working GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":209,"deletions":189}}},{"hash":"42f5ad1c24e35836ab2064ebe802e792e8cc6b2d","isMergeCommit":false,"messageTitle":"Crop display pictures to circle, add padding to the text","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":11,"deletions":6},"java":{"insertions":7,"deletions":2}}},{"hash":"dad17a2d0259e8cde9b923df91050c938d916544","isMergeCommit":false,"messageTitle":"Change GUI style","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"fxml":{"insertions":17,"deletions":12},"java":{"insertions":3,"deletions":2}}},{"hash":"0f66d1d0bc22c3c9eb367d5c396173b2e0e7da3e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"7eb9e4e798c0bb3443ddb09f9a5f18765c1335ed","isMergeCommit":false,"messageTitle":"Changes to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":11}}}]},{"date":"2023-09-16","commitResults":[{"hash":"6754dfb1cfbe6b2262690cb9ddbf513ca92256cb","isMergeCommit":false,"messageTitle":"Tidy up some code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":26}}},{"hash":"1bad6effda7899c68c917a4e1b9f0f60f5816dbf","isMergeCommit":false,"messageTitle":"Assert that file is created properly","messageBody":"","tags":["A-Assertion"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"c4d85a0f404ac9dbfe7cd795cc0488f65f4b3058","isMergeCommit":false,"messageTitle":"Storage Class: extract methods","messageBody":"The retrieveTask and saveTaskList methods were too long and had multiple levels of abstraction (Not adhering to SLAP).\n\nLet\u0027s,\n* Extract code relating to parsing of retrieved data in the retrieveTasks method a new method called parseTask.\n* Extract code to create new directory and/or path from the saveTaskList method to a new method called createFileIfNotExist.\n\nExtracting the intermediate steps with different levels of abstraction improves readability, shortens the methods and improves the code in adhering to SLAP.\n","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":35}}},{"hash":"8a594b571c14cab6c7416a0aa013ced7a681bd7a","isMergeCommit":false,"messageTitle":"MainWindow Class: extract method getResponse and exitProgramIfRequested","messageBody":"The handleUserInput method had multiple levels of abstraction which does not adhere to SLAP. It also hides the happy path of the code.\n\nLet\u0027s,\n* Extract code relating to parsing of the input to method getResponse.\n* Extract code to exit program after a delay if requested by the user.\n\nExtracting the intermediate steps with different levels of abstraction improves readability, shortens the methods and improves the code in adhering to SLAP.\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":8}}},{"hash":"0ff9ced70740f12bafde6d575ead498e638fa119","isMergeCommit":false,"messageTitle":"Parser class: extract method createDeadline, createEvent and checkDateValidity, tidy up redundancies.","messageBody":"The parse methods were way too long, hard to read and had multiple levels of abstraction (Not adhering to SLAP).\n\nLet\u0027s,\n* Extract code relating to reformatting and creating the Deadline class before it is added as a parameter to the AddCommand.\n* Extract code relating to reformatting and creating the Event class before it is added as a parameter to the AddCommand.\n* Extract code that checks if the date inputted by the user is correctly formatted. The similar codes were adjusted to work with this one method.\n* Combine commandWords with commandWordsArray and used ArrayList directly instead (making use of List.of).\n\nExtracting the intermediate steps with different levels of abstraction improves readability, shortens the methods and improves the code in adhering to SLAP.\nCombining separate date format checks into one minimizes code duplication.\nAs commandWords and commandWordsArray contain the same data, just directly using ArrayList is better as we need the size function.\n","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":68}}},{"hash":"e1415bdf854c223336bd1eff70b79ba8351f4648","isMergeCommit":true,"messageTitle":"Merge pull request #3 from marcellaantania/branch-A-Assertion","messageBody":"Assert that file is created properly","fileTypesAndContributionMap":{}},{"hash":"1b395ed7c6edbd7359c17f9951a8f84cbb5e3fcc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b881be5b4ab7a7b8fdb4191f6498634a756328a0","isMergeCommit":true,"messageTitle":"Merge pull request #2 from marcellaantania/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"marcellaantania":{"java":1428,"md":0,"fxml":45,"sh":0,"bat":5,"gradle":21,"txt":15}},"authorContributionVariance":{"marcellaantania":134914.94},"authorDisplayNameMap":{"marcellaantania":"CS2103-F13-2 MARC.. TAN"}} diff --git a/nathanielcalimag_ip_master/commits.json b/nathanielcalimag_ip_master/commits.json index 4a78b130..faae384e 100644 --- a/nathanielcalimag_ip_master/commits.json +++ b/nathanielcalimag_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"nathanielcalimag":[{"date":"2023-08-23","commitResults":[{"hash":"d768d4131ddcc40937b110f27064cc2d425f4ac6","isMergeCommit":false,"messageTitle":"Add greeting and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"4d466b219713abb17768e15b722d61c653048734","isMergeCommit":false,"messageTitle":"Add application structure and commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":11}}}]},{"date":"2023-08-24","commitResults":[{"hash":"abafb330a1d10ab299ca5e9aa00a68da4d9ff75a","isMergeCommit":false,"messageTitle":"Implement application state, insert command and list command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":17}}},{"hash":"8121bef6f14a1f2a125527759c03f734c5e8269d","isMergeCommit":false,"messageTitle":"Implement tasks and marking functionalities","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":26}}},{"hash":"a0e646a7ac8ab7252b3cac9fb7ae1fc4f3901d8d","isMergeCommit":false,"messageTitle":"Implement deadline, event, and todo tasks","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":132,"deletions":24}}},{"hash":"ace7605fe1381edae4177714c4c31b5c4d90d031","isMergeCommit":false,"messageTitle":"Update automated input and output text files","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"481f7b30d4219b627a884480277325ca094e240b","isMergeCommit":false,"messageTitle":"Implement error handling","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":73,"deletions":19},"sh":{"insertions":1,"deletions":1}}},{"hash":"631a95907affc5bade5f164111d26130ea0030a6","isMergeCommit":false,"messageTitle":"Add deletion command","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":70,"deletions":15}}}]},{"date":"2023-08-29","commitResults":[{"hash":"d4949f423c1263d5392dec1c277216c1db9facfd","isMergeCommit":false,"messageTitle":"Update javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":58}}},{"hash":"2bc04a26d3da34e6038924faf54b3c5d4330c9ae","isMergeCommit":false,"messageTitle":"Organise codebase into packages","messageBody":"All classes are stored in a flat manner under the same folder.\n\nThe lack of grouping of related classes makes the codebase messy.\n\nUtilising packages can create structure and improve the development\nprocess.\n\nLet\u0027s use packages to group similar classes together. Specifically,\ncommands, exceptions and tasks.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":4},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":15,"deletions":8}}}]},{"date":"2023-08-30","commitResults":[{"hash":"0c5fb082d993b6781082edd267bc994b3f9dbafa","isMergeCommit":false,"messageTitle":"Add storage functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":258,"deletions":31},"sh":{"insertions":8,"deletions":1}}},{"hash":"1f29f5784ba0e803e1b5badd1f107ac9d4c0e640","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"c152d8278ce971f3b55d773b0bf39c66dd2b6d98","isMergeCommit":false,"messageTitle":"Update fields of tasks to contain datetime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":27,"deletions":6},"java":{"insertions":120,"deletions":55}}},{"hash":"6ffcdf3469d3a90db8576f4e75180dae31af46c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"49266fea874cc91020fb5c11661205b297d6dc3f","isMergeCommit":false,"messageTitle":"Implement Ui, Storage, Parser and TaskList classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":699,"deletions":540}}},{"hash":"d6bea82e01a801ae6fccc2b00b7142740cf49729","isMergeCommit":false,"messageTitle":"Bump gradle and lib version","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":4}}},{"hash":"ba76a6d38038d6daf54ceb36d0d4eae4e9276e65","isMergeCommit":false,"messageTitle":"Rename main class in gradle build file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"6242e074b1b5813bb59220ee360616f74aaed4da","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"e83ccc9726d723ad02fde7e36a24eb810774bbe1","isMergeCommit":false,"messageTitle":"Rename dukeapp class to duke","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":12},"java":{"insertions":66,"deletions":66},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2},"md":{"insertions":1,"deletions":1}}},{"hash":"69f4c1941b1ec1b1e089b03cd544374243b714f6","isMergeCommit":false,"messageTitle":"Add tests for task list and parser","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":285,"deletions":78}}},{"hash":"6d1b40cba66f78e5f3e4a2e36b7262f14d3e8ec3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"f7e42270735622cfaefe89f090f675221af67c63","isMergeCommit":false,"messageTitle":"Update JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"java":{"insertions":62,"deletions":28}}},{"hash":"02a6ce8c3f1059b35cf747cd69b1612e3371841f","isMergeCommit":false,"messageTitle":"Update code to meet coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":54}}},{"hash":"3ad62950d6db462cc15c224f2ec889cbda4927f0","isMergeCommit":false,"messageTitle":"Implement functionality to find tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":61,"deletions":7}}},{"hash":"744e279698e99a67b5d9eeb6ce130c93472bdfb2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"d3e30d0b448c98e7171b4235c4e520c0577d0206","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"33b9ab2ba7483b927fd1a8c4d42ae312a321e788","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"d1f32a3c1fdef45a714dca010e7d377b17632310","isMergeCommit":false,"messageTitle":"Update Gradle to use Shadow","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-08","commitResults":[{"hash":"d065ed14ed492cd02cca291e82a03c77ee264c56","isMergeCommit":false,"messageTitle":"Setup CheckStyle with Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"5b556e5d6f4ed68ee39f95b34aa604579b96a371","isMergeCommit":false,"messageTitle":"Improve code standards to pass checkstyle format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":90}}},{"hash":"f3a85b321d92fc7645ab12331da5f46f91c1f38e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"45ead466ea906d0120f6e7f7894d9b4ff8fb7ae3","isMergeCommit":false,"messageTitle":"GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":2},"fxml":{"insertions":50,"deletions":0},"java":{"insertions":250,"deletions":160}}},{"hash":"f393948cab85b02a75302a8492cd4a27abe84000","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"nathanielcalimag":{"java":1439,"md":12,"fxml":50,"sh":9,"bat":1,"gradle":28,"txt":41}},"authorContributionVariance":{"nathanielcalimag":178235.42},"authorDisplayNameMap":{"nathanielcalimag":"CS2103T-W17-3 NATH..IMAG"}} +{"authorDailyContributionsMap":{"nathanielcalimag":[{"date":"2023-08-23","commitResults":[{"hash":"d768d4131ddcc40937b110f27064cc2d425f4ac6","isMergeCommit":false,"messageTitle":"Add greeting and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"4d466b219713abb17768e15b722d61c653048734","isMergeCommit":false,"messageTitle":"Add application structure and commands","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":11}}}]},{"date":"2023-08-24","commitResults":[{"hash":"abafb330a1d10ab299ca5e9aa00a68da4d9ff75a","isMergeCommit":false,"messageTitle":"Implement application state, insert command and list command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":95,"deletions":17}}},{"hash":"8121bef6f14a1f2a125527759c03f734c5e8269d","isMergeCommit":false,"messageTitle":"Implement tasks and marking functionalities","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":26}}},{"hash":"a0e646a7ac8ab7252b3cac9fb7ae1fc4f3901d8d","isMergeCommit":false,"messageTitle":"Implement deadline, event, and todo tasks","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":132,"deletions":24}}},{"hash":"ace7605fe1381edae4177714c4c31b5c4d90d031","isMergeCommit":false,"messageTitle":"Update automated input and output text files","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"481f7b30d4219b627a884480277325ca094e240b","isMergeCommit":false,"messageTitle":"Implement error handling","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":73,"deletions":19},"sh":{"insertions":1,"deletions":1}}},{"hash":"631a95907affc5bade5f164111d26130ea0030a6","isMergeCommit":false,"messageTitle":"Add deletion command","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":70,"deletions":15}}}]},{"date":"2023-08-29","commitResults":[{"hash":"d4949f423c1263d5392dec1c277216c1db9facfd","isMergeCommit":false,"messageTitle":"Update javadoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":58}}},{"hash":"2bc04a26d3da34e6038924faf54b3c5d4330c9ae","isMergeCommit":false,"messageTitle":"Organise codebase into packages","messageBody":"All classes are stored in a flat manner under the same folder.\n\nThe lack of grouping of related classes makes the codebase messy.\n\nUtilising packages can create structure and improve the development\nprocess.\n\nLet\u0027s use packages to group similar classes together. Specifically,\ncommands, exceptions and tasks.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":4},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":15,"deletions":8}}}]},{"date":"2023-08-30","commitResults":[{"hash":"0c5fb082d993b6781082edd267bc994b3f9dbafa","isMergeCommit":false,"messageTitle":"Add storage functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":258,"deletions":31},"sh":{"insertions":8,"deletions":1}}},{"hash":"1f29f5784ba0e803e1b5badd1f107ac9d4c0e640","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"c152d8278ce971f3b55d773b0bf39c66dd2b6d98","isMergeCommit":false,"messageTitle":"Update fields of tasks to contain datetime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":27,"deletions":6},"java":{"insertions":120,"deletions":55}}},{"hash":"6ffcdf3469d3a90db8576f4e75180dae31af46c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"49266fea874cc91020fb5c11661205b297d6dc3f","isMergeCommit":false,"messageTitle":"Implement Ui, Storage, Parser and TaskList classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":699,"deletions":540}}},{"hash":"d6bea82e01a801ae6fccc2b00b7142740cf49729","isMergeCommit":false,"messageTitle":"Bump gradle and lib version","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":4}}},{"hash":"ba76a6d38038d6daf54ceb36d0d4eae4e9276e65","isMergeCommit":false,"messageTitle":"Rename main class in gradle build file","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"6242e074b1b5813bb59220ee360616f74aaed4da","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"e83ccc9726d723ad02fde7e36a24eb810774bbe1","isMergeCommit":false,"messageTitle":"Rename dukeapp class to duke","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":0,"deletions":12},"java":{"insertions":66,"deletions":66},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2},"md":{"insertions":1,"deletions":1}}},{"hash":"69f4c1941b1ec1b1e089b03cd544374243b714f6","isMergeCommit":false,"messageTitle":"Add tests for task list and parser","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":285,"deletions":78}}},{"hash":"6d1b40cba66f78e5f3e4a2e36b7262f14d3e8ec3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"f7e42270735622cfaefe89f090f675221af67c63","isMergeCommit":false,"messageTitle":"Update JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"java":{"insertions":62,"deletions":28}}},{"hash":"02a6ce8c3f1059b35cf747cd69b1612e3371841f","isMergeCommit":false,"messageTitle":"Update code to meet coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":54}}},{"hash":"3ad62950d6db462cc15c224f2ec889cbda4927f0","isMergeCommit":false,"messageTitle":"Implement functionality to find tasks","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":61,"deletions":7}}},{"hash":"744e279698e99a67b5d9eeb6ce130c93472bdfb2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"d3e30d0b448c98e7171b4235c4e520c0577d0206","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"33b9ab2ba7483b927fd1a8c4d42ae312a321e788","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"d1f32a3c1fdef45a714dca010e7d377b17632310","isMergeCommit":false,"messageTitle":"Update Gradle to use Shadow","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-08","commitResults":[{"hash":"d065ed14ed492cd02cca291e82a03c77ee264c56","isMergeCommit":false,"messageTitle":"Setup CheckStyle with Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"5b556e5d6f4ed68ee39f95b34aa604579b96a371","isMergeCommit":false,"messageTitle":"Improve code standards to pass checkstyle format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":90}}},{"hash":"f3a85b321d92fc7645ab12331da5f46f91c1f38e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"6398876e2e7ec4e205cd5881662ef8b30212cffc","isMergeCommit":false,"messageTitle":"Add GUI integration","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":2},"fxml":{"insertions":50,"deletions":0},"java":{"insertions":250,"deletions":160}}},{"hash":"457c6d6f47049d4b42f33ed99249a35b903c236b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"nathanielcalimag":{"java":1439,"md":12,"fxml":50,"sh":9,"bat":1,"gradle":28,"txt":41}},"authorContributionVariance":{"nathanielcalimag":147565.6},"authorDisplayNameMap":{"nathanielcalimag":"CS2103T-W17-3 NATH..IMAG"}} diff --git a/neyapraveen_ip_master/commits.json b/neyapraveen_ip_master/commits.json index 7a22d0ab..9b0dbb25 100644 --- a/neyapraveen_ip_master/commits.json +++ b/neyapraveen_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"neyapraveen":[{"date":"2023-08-24","commitResults":[{"hash":"6539f8a2853a56820143863b5c77d623dc1f3bc9","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-25","commitResults":[{"hash":"6ae63d88d058d01a766c2332067df9112d995e8b","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":8}}},{"hash":"2329ed91975ee76c48e59b8988e24792e99f3e09","isMergeCommit":false,"messageTitle":"Adds input to array list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"0a3c0644f026660472f9fd9aeb2c84aa4f8f0da5","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":4}}},{"hash":"99a686bda2d9bac33f07f52e6a8c34dc287c8e54","isMergeCommit":false,"messageTitle":"Created Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":16}}},{"hash":"bad0c0434f19d7f97c8aca055cd28d40ee9b6c09","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"38e05084610229cd44e5760bf089e99569df7784","isMergeCommit":false,"messageTitle":"Create Todo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":8}}},{"hash":"4d17ae482110ebe1f02f70427ac8f8b0a8d9cc6a","isMergeCommit":false,"messageTitle":"Create Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":3}}},{"hash":"940800d1b67420820c733029669fcd6405bf9d2e","isMergeCommit":false,"messageTitle":"Create Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":3}}},{"hash":"cf201999174ae8a23ea721248bbcb3a480e78309","isMergeCommit":false,"messageTitle":"Create ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":20}}},{"hash":"cb158b9556c5e27111ffb9804108bc4afb1ebe8f","isMergeCommit":false,"messageTitle":"Create Test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":0,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"2e5dae22af32bcc8007f683775d8d7551f9e1b90","isMergeCommit":false,"messageTitle":"Create DukeException class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":50}}}]},{"date":"2023-08-27","commitResults":[{"hash":"3a1f20ca8d972da766e788433b5e89bef3e2effc","isMergeCommit":false,"messageTitle":"Handle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"11a15c2b8ea7d8ab35c72b75da6ac5fcd3f60ef3","isMergeCommit":false,"messageTitle":"Handle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":5}}},{"hash":"137d6d9665c511ba34706f982cb0bf57c2bd9277","isMergeCommit":false,"messageTitle":"Handle errors final","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"f011f87414336ed77692cbd55b82220c307a8bdd","isMergeCommit":false,"messageTitle":"Delete Tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"fff5e0f657cdc5c8625800df8a4ae2cf26a6ec20","isMergeCommit":false,"messageTitle":"Create enum for TaskStatus","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":26}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c2d30538ed19d3f281d5323c688a370b1a7298e1","isMergeCommit":false,"messageTitle":"Save event to text file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":40,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"593b7216ca58efe2e86ffd4f48fa6bed2091d198","isMergeCommit":false,"messageTitle":"Save all tasks to text file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":357,"deletions":118}}},{"hash":"f8ee3e60b0c0a635893cdace51eb23c2342fa4ed","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}},{"hash":"bbb067ef6b8f1cd5a0fc23e3ab9fedf7bb7042b5","isMergeCommit":false,"messageTitle":"Handle Date and Time","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":105}}},{"hash":"202ea965caaf50396b608db884bfdf75f8539e6d","isMergeCommit":false,"messageTitle":"Handle errors in date formats","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":70}}},{"hash":"7ebbd1e0aa5a8685558f1fb451fc4d32147d2bc7","isMergeCommit":false,"messageTitle":"Correct event constructor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"459d1019bbec92b186f0ddebc8ab56e8a96c61e7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"95556503cd1909685dce95cb0355ee9f0c896836","isMergeCommit":false,"messageTitle":"Create Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"2ed121cefa06a12983b644a0496c3a3780b3e0dd","isMergeCommit":false,"messageTitle":"Create Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":0}}},{"hash":"a87bd09ffa63de16724091cf6ddd5eb283344a41","isMergeCommit":false,"messageTitle":"Create TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":1}}},{"hash":"ca482b894736bf3a1dd5d19a027cf51e87a4c9a2","isMergeCommit":false,"messageTitle":"Create Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":0}}},{"hash":"d1259e4fd11170f207bbff5968bb071b3086b593","isMergeCommit":false,"messageTitle":"Implement more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":71,"deletions":311}}},{"hash":"7ee8d66cee60aef44c674af82e3d3e8ff0773812","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"* A-MoreOOP:\n Implement more OOP\n Create Parser class\n Create TaskList class\n Create Storage class\n Create Ui class\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"b99040570376dee07fb41f21ff5940e6c480439d","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":5},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"65c6a9ebc5a9abeee5009e7628dae5309f910415","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"* A-Packages:\n Divide classes into packages\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"16224e27f2f394da4c5ba44f3a83c3456f417942","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"* origin/add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"14e7c943e1cb50f85b29f70ef9d0d34850056433","isMergeCommit":false,"messageTitle":"Automate project build using Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"36b7e0a2f2a7553a91f588020ddee0a39cf8aeed","isMergeCommit":false,"messageTitle":"Add JUnit test for Todo class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":28,"deletions":0}}},{"hash":"118f09a11fc0b439d3aef70643eb7a784904b71a","isMergeCommit":false,"messageTitle":"Add JUnit test for Deadline class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":30,"deletions":4}}},{"hash":"27a761e8fa5c9ae4c573e48319d0c7c289a841a2","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/A-JUnit\u0027","messageBody":"* origin/A-JUnit:\n Add JUnit test for Deadline class\n Add JUnit test for Todo class\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"095e10cb0c446b9d48db897d556a955f8b4279a5","isMergeCommit":false,"messageTitle":"Fix coding standard errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":7,"deletions":6}}},{"hash":"5a62e089ad556b14908de25c6e5b3729e81cd903","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":364,"deletions":51}}},{"hash":"c953b0f25475eb81bebf4b94eac69524e67cf13b","isMergeCommit":false,"messageTitle":"Tweak code to comply with java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":66}}},{"hash":"8371ccf03ec3a429d6aebddf5f2a4d8f467aec0f","isMergeCommit":false,"messageTitle":"Implement find function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":71,"deletions":19}}},{"hash":"035c5a9361af1fb28332880c1775a7a6e66434c0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/A-JavaDoc\u0027","messageBody":"* origin/A-JavaDoc:\n Add JavaDoc comments\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"c523c5d5b97e7fa83191b7bd972a9b0d89c11858","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/A-CodingStandard\u0027","messageBody":"* origin/A-CodingStandard:\n Tweak code to comply with java coding standard\n\n# Conflicts:\n#\tsrc/main/java/duke/Event.java\n#\tsrc/main/java/duke/Task.java\n#\tsrc/main/java/duke/Todo.java\n","fileTypesAndContributionMap":{}},{"hash":"7c618d6489688be475b50a8e1a330c7dcc021a5a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/branch-Level-9\u0027","messageBody":"* origin/branch-Level-9:\n Implement find function\n\n# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Parser.java\n#\tsrc/main/java/duke/Storage.java\n#\tsrc/main/java/duke/Task.java\n#\tsrc/main/java/duke/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"f03bf0052a9abf7e01d55c78ed4cfc653d1aa735","isMergeCommit":false,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":145}}},{"hash":"e891ce879716fc113b5228541fdce4df85b330ad","isMergeCommit":false,"messageTitle":"Fix bugs in printing event and todo","messageBody":"","tags":["Level-9","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":17}}}]}]},"authorFileTypeContributionMap":{"neyapraveen":{"java":1163,"md":2,"fxml":0,"sh":1,"bat":1,"gradle":4,"txt":6}},"authorContributionVariance":{"neyapraveen":85212.336},"authorDisplayNameMap":{"neyapraveen":"CS2103T-F12-2 DEWA..VEEN"}} +{"authorDailyContributionsMap":{"neyapraveen":[{"date":"2023-08-24","commitResults":[{"hash":"6539f8a2853a56820143863b5c77d623dc1f3bc9","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-25","commitResults":[{"hash":"6ae63d88d058d01a766c2332067df9112d995e8b","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":8}}},{"hash":"2329ed91975ee76c48e59b8988e24792e99f3e09","isMergeCommit":false,"messageTitle":"Adds input to array list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"0a3c0644f026660472f9fd9aeb2c84aa4f8f0da5","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":4}}},{"hash":"99a686bda2d9bac33f07f52e6a8c34dc287c8e54","isMergeCommit":false,"messageTitle":"Created Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":16}}},{"hash":"bad0c0434f19d7f97c8aca055cd28d40ee9b6c09","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"38e05084610229cd44e5760bf089e99569df7784","isMergeCommit":false,"messageTitle":"Create Todo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":8}}},{"hash":"4d17ae482110ebe1f02f70427ac8f8b0a8d9cc6a","isMergeCommit":false,"messageTitle":"Create Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":3}}},{"hash":"940800d1b67420820c733029669fcd6405bf9d2e","isMergeCommit":false,"messageTitle":"Create Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":3}}},{"hash":"cf201999174ae8a23ea721248bbcb3a480e78309","isMergeCommit":false,"messageTitle":"Create ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":20}}},{"hash":"cb158b9556c5e27111ffb9804108bc4afb1ebe8f","isMergeCommit":false,"messageTitle":"Create Test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":0,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"2e5dae22af32bcc8007f683775d8d7551f9e1b90","isMergeCommit":false,"messageTitle":"Create DukeException class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":50}}}]},{"date":"2023-08-27","commitResults":[{"hash":"3a1f20ca8d972da766e788433b5e89bef3e2effc","isMergeCommit":false,"messageTitle":"Handle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"11a15c2b8ea7d8ab35c72b75da6ac5fcd3f60ef3","isMergeCommit":false,"messageTitle":"Handle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":5}}},{"hash":"137d6d9665c511ba34706f982cb0bf57c2bd9277","isMergeCommit":false,"messageTitle":"Handle errors final","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":4}}},{"hash":"f011f87414336ed77692cbd55b82220c307a8bdd","isMergeCommit":false,"messageTitle":"Delete Tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"fff5e0f657cdc5c8625800df8a4ae2cf26a6ec20","isMergeCommit":false,"messageTitle":"Create enum for TaskStatus","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":26}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c2d30538ed19d3f281d5323c688a370b1a7298e1","isMergeCommit":false,"messageTitle":"Save event to text file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":40,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"593b7216ca58efe2e86ffd4f48fa6bed2091d198","isMergeCommit":false,"messageTitle":"Save all tasks to text file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":357,"deletions":118}}},{"hash":"f8ee3e60b0c0a635893cdace51eb23c2342fa4ed","isMergeCommit":false,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}},{"hash":"bbb067ef6b8f1cd5a0fc23e3ab9fedf7bb7042b5","isMergeCommit":false,"messageTitle":"Handle Date and Time","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":105}}},{"hash":"202ea965caaf50396b608db884bfdf75f8539e6d","isMergeCommit":false,"messageTitle":"Handle errors in date formats","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":70}}},{"hash":"7ebbd1e0aa5a8685558f1fb451fc4d32147d2bc7","isMergeCommit":false,"messageTitle":"Correct event constructor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"459d1019bbec92b186f0ddebc8ab56e8a96c61e7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"95556503cd1909685dce95cb0355ee9f0c896836","isMergeCommit":false,"messageTitle":"Create Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"2ed121cefa06a12983b644a0496c3a3780b3e0dd","isMergeCommit":false,"messageTitle":"Create Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":0}}},{"hash":"a87bd09ffa63de16724091cf6ddd5eb283344a41","isMergeCommit":false,"messageTitle":"Create TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":1}}},{"hash":"ca482b894736bf3a1dd5d19a027cf51e87a4c9a2","isMergeCommit":false,"messageTitle":"Create Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":0}}},{"hash":"d1259e4fd11170f207bbff5968bb071b3086b593","isMergeCommit":false,"messageTitle":"Implement more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":71,"deletions":311}}},{"hash":"7ee8d66cee60aef44c674af82e3d3e8ff0773812","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"* A-MoreOOP:\n Implement more OOP\n Create Parser class\n Create TaskList class\n Create Storage class\n Create Ui class\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"b99040570376dee07fb41f21ff5940e6c480439d","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":5},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"65c6a9ebc5a9abeee5009e7628dae5309f910415","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"* A-Packages:\n Divide classes into packages\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"16224e27f2f394da4c5ba44f3a83c3456f417942","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"* origin/add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"14e7c943e1cb50f85b29f70ef9d0d34850056433","isMergeCommit":false,"messageTitle":"Automate project build using Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"36b7e0a2f2a7553a91f588020ddee0a39cf8aeed","isMergeCommit":false,"messageTitle":"Add JUnit test for Todo class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":28,"deletions":0}}},{"hash":"118f09a11fc0b439d3aef70643eb7a784904b71a","isMergeCommit":false,"messageTitle":"Add JUnit test for Deadline class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":30,"deletions":4}}},{"hash":"27a761e8fa5c9ae4c573e48319d0c7c289a841a2","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/A-JUnit\u0027","messageBody":"* origin/A-JUnit:\n Add JUnit test for Deadline class\n Add JUnit test for Todo class\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"095e10cb0c446b9d48db897d556a955f8b4279a5","isMergeCommit":false,"messageTitle":"Fix coding standard errors","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":7,"deletions":6}}},{"hash":"5a62e089ad556b14908de25c6e5b3729e81cd903","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":364,"deletions":51}}},{"hash":"c953b0f25475eb81bebf4b94eac69524e67cf13b","isMergeCommit":false,"messageTitle":"Tweak code to comply with java coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":66}}},{"hash":"8371ccf03ec3a429d6aebddf5f2a4d8f467aec0f","isMergeCommit":false,"messageTitle":"Implement find function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":71,"deletions":19}}},{"hash":"035c5a9361af1fb28332880c1775a7a6e66434c0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/A-JavaDoc\u0027","messageBody":"* origin/A-JavaDoc:\n Add JavaDoc comments\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"c523c5d5b97e7fa83191b7bd972a9b0d89c11858","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/A-CodingStandard\u0027","messageBody":"* origin/A-CodingStandard:\n Tweak code to comply with java coding standard\n\n# Conflicts:\n#\tsrc/main/java/duke/Event.java\n#\tsrc/main/java/duke/Task.java\n#\tsrc/main/java/duke/Todo.java\n","fileTypesAndContributionMap":{}},{"hash":"7c618d6489688be475b50a8e1a330c7dcc021a5a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/branch-Level-9\u0027","messageBody":"* origin/branch-Level-9:\n Implement find function\n\n# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Parser.java\n#\tsrc/main/java/duke/Storage.java\n#\tsrc/main/java/duke/Task.java\n#\tsrc/main/java/duke/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"f03bf0052a9abf7e01d55c78ed4cfc653d1aa735","isMergeCommit":false,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":145}}},{"hash":"e891ce879716fc113b5228541fdce4df85b330ad","isMergeCommit":false,"messageTitle":"Fix bugs in printing event and todo","messageBody":"","tags":["branch-Level-9","Level-9","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":17}}}]}]},"authorFileTypeContributionMap":{"neyapraveen":{"java":1163,"md":2,"fxml":0,"sh":1,"bat":1,"gradle":4,"txt":6}},"authorContributionVariance":{"neyapraveen":85212.336},"authorDisplayNameMap":{"neyapraveen":"CS2103T-F12-2 DEWA..VEEN"}} diff --git a/nicleongyj_ip_master/authorship.json b/nicleongyj_ip_master/authorship.json index 13ea7f8b..5e3e1eb3 100644 --- a/nicleongyj_ip_master/authorship.json +++ b/nicleongyj_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"Data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"[D][ ] fair (by: Dec 12 2222)","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"[E][ ] fair (from: Dec 12 2222 to Dec 13 2222)","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"nicleongyj":2}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.14\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"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":"nicleongyj"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" modules \u003d [ \u0027javafx.controls\u0027,\u0027javafx.base\u0027,\u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" mainClass.set(\"taskmaster.Taskmaster\")","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" archiveFileName \u003d \u0027taskmaster.jar\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nicleongyj":9,"-":38}},{"path":"src/main/java/taskmaster/Taskmaster.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.ui.Main;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":"public class Taskmaster {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" private static final String FILE_PATH \u003d \"./Data.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" public static boolean activated \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" public Taskmaster() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" this.storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" this.storage.loadTasksFromFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" this.ui.printHello();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" public static void main(String[] args) throws DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":"// new Taskmaster().run();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" Application.launch(Main.class);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" String response \u003d parser.parse(input, this.storage, this.taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":45,"-":2}},{"path":"src/main/java/taskmaster/duplicatecheckers/DuplicateDeadlineChecker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.duplicatecheckers;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Deadline;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"public class DuplicateDeadlineChecker {","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" public boolean isDuplicateDeadline(String details, String time) {","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" for (Task task : TaskList.list) {","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" String byTime \u003d deadline.getStringDate();","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" LocalDate byDate \u003d deadline.getLocalDate();","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" String description \u003d deadline.getDescription();","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" if (byTime !\u003d null \u0026\u0026 byTime.equals(time)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" return description.equalsIgnoreCase(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" if (byDate !\u003d null \u0026\u0026 byDate.isEqual(LocalDate.parse(time, formatter))) {","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" return description.equalsIgnoreCase(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"nicleongyj":30}},{"path":"src/main/java/taskmaster/duplicatecheckers/DuplicateEventChecker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.duplicatecheckers;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Deadline;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Event;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"public class DuplicateEventChecker {","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" public boolean isDuplicateEvent(String details, String startingTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" for (Task task : TaskList.list) {","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" String startTime \u003d event.getStartString();","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" LocalDate startDate \u003d event.getStartDate();","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" String description \u003d event.getDescription();","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" if (startTime !\u003d null \u0026\u0026 startTime.equals(startingTime)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" return description.equalsIgnoreCase(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" if (startDate !\u003d null \u0026\u0026 startDate.isEqual(LocalDate.parse(startingTime, formatter))) {","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" return description.equalsIgnoreCase(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"nicleongyj":31}},{"path":"src/main/java/taskmaster/duplicatecheckers/DuplicateTodoChecker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.duplicatecheckers;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Todo;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"public class DuplicateTodoChecker {","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" public boolean isDuplicateTodo(String description) {","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" for (Task task : TaskList.list) {","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" Todo todo \u003d (Todo) task;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" if (todo.getDescription().equalsIgnoreCase(description)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" return true;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"nicleongyj":19}},{"path":"src/main/java/taskmaster/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":7}},{"path":"src/main/java/taskmaster/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" * Reads user input and calls the relevant method.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" * @param userInput Input from user.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * @param storage Storage of the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" * @param taskList Task list of the program","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If the input is not valid command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" public String parse(String userInput, Storage storage, TaskList taskList) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" storage.saveTasksToFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" return Ui.GOODBYE_MESSAGE;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" return TaskList.printList();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskList.addTask(TaskList.TaskType.TODO, description, \"unmarked\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" String description \u003d userInput.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskList.addTask(TaskList.TaskType.EVENT, description, \"unmarked\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" String description \u003d userInput.substring(8);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskList.addTask(TaskList.TaskType.DEADLINE, description, \"unmarked\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskList.toggleMark(TaskList.MarkStatus.MARK, taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Invalid command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskList.toggleMark(TaskList.MarkStatus.UNMARK, taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Invalid command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" return taskList.deleteTask(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"due\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":" String date \u003d userInput.substring(4).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" return taskList.printTasksByDate(date);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nicleongyj"},"content":" String keyword \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nicleongyj"},"content":" return taskList.findTask(keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Please enter a valid command!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nicleongyj"},"content":" return \"Input valid command\";","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":69}},{"path":"src/main/java/taskmaster/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" * File path that stores saved tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" private static String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" * Constructor for the Storage class.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" * @param filePath Relative path of the file that stores the data.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" * Loads the stored data into the current task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" public void loadTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" //Assert file exists","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" assert file.exists() : \"File does not exist\";","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"File created\");","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" char type \u003d line.charAt(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" char mark \u003d line.charAt(4);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" if (type \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" loadTodo(line, mark);","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" } else if (type \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" loadDeadline(line, mark);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" } else if (type \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" loadEvent(line, mark);","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" scanner.close();","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"Data file not found: \" + e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"Error finding file\");","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":" * Loads todo task into task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"nicleongyj"},"content":" * @param line String found in storage file that represents a todo.","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"nicleongyj"},"content":" * @param mark Whether the todo should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"nicleongyj"},"content":" private static void loadTodo(String line, char mark) {","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"nicleongyj"},"content":" String description \u003d line.substring(6).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nicleongyj"},"content":" if (mark \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Todo(description, \"marked\" ));","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Todo(description, \"unmarked\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"nicleongyj"},"content":" * Loads deadline task into task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"nicleongyj"},"content":" * @param line String found in storage file that represents a deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"nicleongyj"},"content":" * @param mark Whether the deadline should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"nicleongyj"},"content":" private static void loadDeadline(String line, char mark) {","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"nicleongyj"},"content":" int byIndex \u003d line.indexOf(\"(by: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nicleongyj"},"content":" String description \u003d line.substring(7, byIndex).trim(); // 7 is the length of \"[D][ ] \"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nicleongyj"},"content":" String dueDate \u003d line.substring(byIndex + 5, line.length() - 1).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nicleongyj"},"content":" if (mark \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Deadline(description, dueDate, \"marked\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Deadline(description, dueDate, \"unmarked\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"nicleongyj"},"content":" * Loads event task into task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"nicleongyj"},"content":" * @param line String found in storage file that represents a event.","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"nicleongyj"},"content":" * @param mark Whether the deadline should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"nicleongyj"},"content":" private static void loadEvent(String line, char mark) {","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d line.split(\"\\\\(from: | to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nicleongyj"},"content":" String description \u003d parts[0].trim().substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicleongyj"},"content":" String startTime \u003d parts[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nicleongyj"},"content":" String endTime \u003d parts[2].replace(\")\", \"\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nicleongyj"},"content":" if (mark \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Event(description, startTime, endTime, \"marked\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Event(description, startTime, endTime, \"unmarked\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nicleongyj"},"content":" * Saves the task list to the file","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nicleongyj"},"content":" public void saveTasksToFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"nicleongyj"},"content":" FileWriter writer \u003d new FileWriter(filePath, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nicleongyj"},"content":" for (Task task : TaskList.list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nicleongyj"},"content":" writer.write(task.toString() + System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nicleongyj"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nicleongyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":129}},{"path":"src/main/java/taskmaster/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" * Date that the deadline must be done by","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" LocalDate date \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * String representation that the deadline must be done by","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" String deadline \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" * Constructor for the Deadline class.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the Deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" * @param deadline Time that the deadline must be completed by.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" * @param marked Boolean whether the deadline is marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" public Deadline(String description, String deadline, String marked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" super(description, marked);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" LocalDate parsedDate \u003d LocalDate.parse(deadline, formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" this.date \u003d parsedDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the start time.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the time of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" public String getStringDate() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" return this.deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" * Returns a LocalDate representation of the start date.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" * @return A LocalDate representing the starting date of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" public LocalDate getLocalDate() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" return this.date;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":" return \"[D]\" + super.toString() + \" (by: \" + (deadline \u003d\u003d null ? date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) : deadline) + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":61}},{"path":"src/main/java/taskmaster/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" * Starting time of event in string type.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" String startTime \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * End time of event in string type.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" String endTime \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" * Start date of event.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" LocalDate startDate \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" * End date of event.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" LocalDate endDate \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" * Constructor for the Event class.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the Deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" * @param start Time that the event starts.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" * @param marked Boolean whether the event is marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" public Event(String description, String start, String end, String marked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" super(description, marked);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" LocalDate parsedStartDate \u003d LocalDate.parse(start, formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" LocalDate parsedEndDate \u003d LocalDate.parse(end, formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" this.startDate \u003d parsedStartDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" this.endDate \u003d parsedEndDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" this.startTime \u003d start;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" this.endTime \u003d end;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the start time.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" public String getStartString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" return this.startTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" * Returns a LocalDate representation of the start date.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" * @return A LocalDate representing the starting date of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":" public LocalDate getStartDate() {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" return this.startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nicleongyj"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"nicleongyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"nicleongyj"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"nicleongyj"},"content":" + (startTime \u003d\u003d null ? this.startDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) : startTime)","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nicleongyj"},"content":" + \" to \"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"nicleongyj"},"content":" + (endTime \u003d\u003d null ? this.endDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) : endTime)","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nicleongyj"},"content":" + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":76}},{"path":"src/main/java/taskmaster/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":" * Description of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" * Boolean on whether the task is done.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" * Constructor for the task class.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" * Tasks can be set to either done or not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" * @param description Name of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" * @param marked String to indicate whether the task is done","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" public Task(String description, String marked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" if (marked \u003d\u003d \"marked\") {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" * Returns description of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" * @return String of description of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":55}},{"path":"src/main/java/taskmaster/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.duplicatecheckers.DuplicateDeadlineChecker;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.duplicatecheckers.DuplicateEventChecker;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.duplicatecheckers.DuplicateTodoChecker;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" * List that contains all the current tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" public static ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" * Enum that indicates whether a task is marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" public enum MarkStatus {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" * Task is marked","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" MARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" * Task is unmarked","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" UNMARK","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" * Enum that indicates the task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" * Todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" * Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" * Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" DEADLINE","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" * Constructor for the TaskList class.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" TaskList.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" * Prints all tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" public static String printList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Here are the tasks in your list:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"You do not have any task at the moment :)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"nicleongyj"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Task \").append(i + 1).append(\": \").append(list.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicleongyj"},"content":" * Marks or un-marks a task to in the list as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicleongyj"},"content":" * @param mark Indication of whether a task should be marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicleongyj"},"content":" * @param taskIndex of the task to toggle the mark.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If the provided index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicleongyj"},"content":" public String toggleMark(MarkStatus mark, int taskIndex) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"nicleongyj"},"content":" //Assert valid task index and mark status","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"nicleongyj"},"content":" assert taskIndex \u003e\u003d 0 || taskIndex \u003c list.size() : \"Invalid task index\";","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"nicleongyj"},"content":" assert mark \u003d\u003d MarkStatus.MARK || mark \u003d\u003d MarkStatus.UNMARK : \"Invalid mark status\";","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"nicleongyj"},"content":" if (!validIndex(taskIndex)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Invalid task number\");","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"nicleongyj"},"content":" if (mark \u003d\u003d MarkStatus.UNMARK) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nicleongyj"},"content":" list.get(taskIndex).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"OK, I have marked this as undone:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(list.get(taskIndex)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"nicleongyj"},"content":" } else if (mark \u003d\u003d MarkStatus.MARK) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nicleongyj"},"content":" list.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Good job! I have marked this task as completed:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(list.get(taskIndex)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nicleongyj"},"content":" * Removes a task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nicleongyj"},"content":" * @param taskIndex Index of the task to remove.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If the provided index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nicleongyj"},"content":" public String deleteTask(int taskIndex) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"nicleongyj"},"content":" //Assert valid task index and mark status","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"nicleongyj"},"content":" assert taskIndex \u003e\u003d 0 || taskIndex \u003c list.size() : \"Invalid task index\";","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"nicleongyj"},"content":" if (!validIndex(taskIndex)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Specified task does not exist\");","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"nicleongyj"},"content":" Task removedTask \u003d list.remove(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Noted. I\u0027ve removed this task:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(removedTask).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Now you have \").append(list.size()).append(\" tasks in the list.\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nicleongyj"},"content":" * Returns a string that will be printed out in the dialogue box.","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nicleongyj"},"content":" * @param taskType Type of task that is added.","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nicleongyj"},"content":" * @param marked Whether the task should be added as marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nicleongyj"},"content":" * @return A string which will be formed as a dialogue bubble","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If command given is not a valid command.","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nicleongyj"},"content":" public String addTask(TaskType taskType, String description, String marked) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"nicleongyj"},"content":" //Assert valid task type","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"nicleongyj"},"content":" assert taskType \u003d\u003d TaskType.TODO || taskType \u003d\u003d TaskType.EVENT || taskType \u003d\u003d TaskType.DEADLINE: \"Invalid task type\";","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"nicleongyj"},"content":" assert description !\u003d null: \"Invalid description\";","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"nicleongyj"},"content":" if (taskType \u003d\u003d TaskType.TODO) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"nicleongyj"},"content":" return addTodoTask(description, marked);","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"nicleongyj"},"content":" } else if (taskType \u003d\u003d TaskType.EVENT) {","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"nicleongyj"},"content":" return addEventTask(description, marked);","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"nicleongyj"},"content":" } else if (taskType \u003d\u003d TaskType.DEADLINE) {","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"nicleongyj"},"content":" return addDeadlineTask(description, marked);","lastModifiedDate":"2023-09-15"},{"lineNumber":139,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":140,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":142,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":143,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":144,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of Taskmaster\u0027s reply when a todo is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":145,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":146,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the todo.","lastModifiedDate":"2023-09-15"},{"lineNumber":147,"author":{"gitId":"nicleongyj"},"content":" * @param marked Whether the task should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":148,"author":{"gitId":"nicleongyj"},"content":" * @return A string of Taskmaster\u0027s reply when a todo is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":149,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If description is empty","lastModifiedDate":"2023-09-15"},{"lineNumber":150,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":151,"author":{"gitId":"nicleongyj"},"content":" public String addTodoTask(String description, String marked) throws DukeException{","lastModifiedDate":"2023-09-15"},{"lineNumber":152,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-15"},{"lineNumber":153,"author":{"gitId":"nicleongyj"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"nicleongyj"},"content":" //Duplicate checking","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"nicleongyj"},"content":" DuplicateTodoChecker todoChecker \u003d new DuplicateTodoChecker();","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"nicleongyj"},"content":" if (todoChecker.isDuplicateTodo(description)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Duplicate todo task detected!\").append(\"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":162,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"nicleongyj"},"content":" //No duplicate, add todo to list","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"nicleongyj"},"content":" Todo todo \u003d new Todo(description, marked);","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"nicleongyj"},"content":" list.add(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Got it. I\u0027ve added this to-do task:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(todo).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Now you have \").append(list.size()).append(\" tasks in the list.\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":170,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":171,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":173,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of Taskmaster\u0027s reply when a deadline is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":174,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":175,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":176,"author":{"gitId":"nicleongyj"},"content":" * @param marked Whether the task should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":177,"author":{"gitId":"nicleongyj"},"content":" * @return A string of Taskmaster\u0027s reply when a deadline is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":178,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If description is empty or command is invalid","lastModifiedDate":"2023-09-15"},{"lineNumber":179,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":180,"author":{"gitId":"nicleongyj"},"content":" public String addDeadlineTask(String description, String marked) throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":181,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-15"},{"lineNumber":182,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d description.split(\"/by\");","lastModifiedDate":"2023-09-15"},{"lineNumber":183,"author":{"gitId":"nicleongyj"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-09-13"},{"lineNumber":184,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Please input a valid task\");","lastModifiedDate":"2023-09-13"},{"lineNumber":185,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":186,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":187,"author":{"gitId":"nicleongyj"},"content":" //Valid description and time checking","lastModifiedDate":"2023-09-13"},{"lineNumber":188,"author":{"gitId":"nicleongyj"},"content":" String details \u003d parts[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"nicleongyj"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":190,"author":{"gitId":"nicleongyj"},"content":" if (details.isEmpty() || by.isEmpty()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":191,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Please input a valid task\");","lastModifiedDate":"2023-09-13"},{"lineNumber":192,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":194,"author":{"gitId":"nicleongyj"},"content":" //Duplicate checking","lastModifiedDate":"2023-09-13"},{"lineNumber":195,"author":{"gitId":"nicleongyj"},"content":" DuplicateDeadlineChecker deadlineChecker \u003d new DuplicateDeadlineChecker();","lastModifiedDate":"2023-09-15"},{"lineNumber":196,"author":{"gitId":"nicleongyj"},"content":" if (deadlineChecker.isDuplicateDeadline(details, by)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":197,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Duplicate deadline task detected\").append(\"\\n\");","lastModifiedDate":"2023-09-15"},{"lineNumber":198,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":199,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":201,"author":{"gitId":"nicleongyj"},"content":" //No duplicates, add deadline to list","lastModifiedDate":"2023-09-15"},{"lineNumber":202,"author":{"gitId":"nicleongyj"},"content":" list.add(new Deadline(details, by, marked));","lastModifiedDate":"2023-09-15"},{"lineNumber":203,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Got it. I\u0027ve added this to-do task:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(list.get(list.size() - 1)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Now you have \").append(list.size()).append(\" tasks in the list.\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":207,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":208,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":209,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":210,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of Taskmaster\u0027s reply when a event is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":211,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":212,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-15"},{"lineNumber":213,"author":{"gitId":"nicleongyj"},"content":" * @param marked Whether the task should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":214,"author":{"gitId":"nicleongyj"},"content":" * @return A string of Taskmaster\u0027s reply when an event is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":215,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If description is empty or command is invalid.","lastModifiedDate":"2023-09-15"},{"lineNumber":216,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":217,"author":{"gitId":"nicleongyj"},"content":" public String addEventTask(String description, String marked) throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":218,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-15"},{"lineNumber":219,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d description.split(\"/from\");","lastModifiedDate":"2023-09-15"},{"lineNumber":220,"author":{"gitId":"nicleongyj"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-09-13"},{"lineNumber":221,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Please input a valid task\");","lastModifiedDate":"2023-09-13"},{"lineNumber":222,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":223,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":224,"author":{"gitId":"nicleongyj"},"content":" //Valid description and time checking","lastModifiedDate":"2023-09-13"},{"lineNumber":225,"author":{"gitId":"nicleongyj"},"content":" String details \u003d parts[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"nicleongyj"},"content":" String[] timeParts \u003d parts[1].split(\"/to\");","lastModifiedDate":"2023-09-15"},{"lineNumber":227,"author":{"gitId":"nicleongyj"},"content":" String start \u003d timeParts[0].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":228,"author":{"gitId":"nicleongyj"},"content":" String end \u003d timeParts[1].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":229,"author":{"gitId":"nicleongyj"},"content":" if (timeParts.length !\u003d 2 || details.isEmpty() || start.isEmpty() || end.isEmpty()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":230,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Please input a valid task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":232,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":233,"author":{"gitId":"nicleongyj"},"content":" //Duplicate checking","lastModifiedDate":"2023-09-13"},{"lineNumber":234,"author":{"gitId":"nicleongyj"},"content":" DuplicateEventChecker eventChecker \u003d new DuplicateEventChecker();","lastModifiedDate":"2023-09-15"},{"lineNumber":235,"author":{"gitId":"nicleongyj"},"content":" if (eventChecker.isDuplicateEvent(details, start)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":236,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Duplicate event task detected!\").append(\"\\n\");","lastModifiedDate":"2023-09-15"},{"lineNumber":237,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":238,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":239,"author":{"gitId":"nicleongyj"},"content":" //No duplicate, add event to list","lastModifiedDate":"2023-09-15"},{"lineNumber":240,"author":{"gitId":"nicleongyj"},"content":" list.add(new Event(details, start, end, marked));","lastModifiedDate":"2023-09-15"},{"lineNumber":241,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Got it. I\u0027ve added this to-do task:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":242,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(list.get(list.size() - 1)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":243,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Now you have \").append(list.size()).append(\" tasks in the list.\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":244,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":245,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"nicleongyj"},"content":" * Prints all tasks that is happening on the specified date.","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"nicleongyj"},"content":" * @param date Date that task is happening on.","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"nicleongyj"},"content":" public String printTasksByDate(String date) {","lastModifiedDate":"2023-09-05"},{"lineNumber":252,"author":{"gitId":"nicleongyj"},"content":" LocalDate dueDate \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":254,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"nicleongyj"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"nicleongyj"},"content":" dueDate \u003d LocalDate.parse(date, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"nicleongyj"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Please input a valid date format: yyyy-MM-dd!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":259,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":260,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Tasks occurring on \").append(dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))).append(\":\").append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":263,"author":{"gitId":"nicleongyj"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"nicleongyj"},"content":" for (Task task : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"nicleongyj"},"content":" String dueDateString \u003d dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"nicleongyj"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"nicleongyj"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"nicleongyj"},"content":" String deadlineString \u003d deadline.getStringDate();","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"nicleongyj"},"content":" LocalDate deadlineDate \u003d deadline.getLocalDate();","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"nicleongyj"},"content":" appendTaskIfMatch(stringBuilder, deadlineString,deadlineDate, dueDateString, dueDate, count, task);","lastModifiedDate":"2023-09-12"},{"lineNumber":272,"author":{"gitId":"nicleongyj"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"nicleongyj"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"nicleongyj"},"content":" String startString \u003d event.getStartString();","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"nicleongyj"},"content":" LocalDate startDate \u003d event.getStartDate();","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"nicleongyj"},"content":" appendTaskIfMatch(stringBuilder, startString, startDate, dueDateString, dueDate, count, task);","lastModifiedDate":"2023-09-12"},{"lineNumber":277,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"nicleongyj"},"content":" count++;","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":281,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":284,"author":{"gitId":"nicleongyj"},"content":" * Appends a string representation to the Stringbuilder if the specific task is matched with date given.","lastModifiedDate":"2023-09-15"},{"lineNumber":285,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":286,"author":{"gitId":"nicleongyj"},"content":" * @param sb Stringbuilder object","lastModifiedDate":"2023-09-15"},{"lineNumber":287,"author":{"gitId":"nicleongyj"},"content":" * @param taskStringDate String representation of the date of the task.","lastModifiedDate":"2023-09-15"},{"lineNumber":288,"author":{"gitId":"nicleongyj"},"content":" * @param taskDate LocalDate representation of the date of the task.","lastModifiedDate":"2023-09-15"},{"lineNumber":289,"author":{"gitId":"nicleongyj"},"content":" * @param dueStringDate String representation of the due date provided.","lastModifiedDate":"2023-09-15"},{"lineNumber":290,"author":{"gitId":"nicleongyj"},"content":" * @param dueDate LocalDate representation of the due date provided.","lastModifiedDate":"2023-09-15"},{"lineNumber":291,"author":{"gitId":"nicleongyj"},"content":" * @param count Count of number of matched tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":292,"author":{"gitId":"nicleongyj"},"content":" * @param task Task that is found in task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":293,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":294,"author":{"gitId":"nicleongyj"},"content":" private static void appendTaskIfMatch(StringBuilder sb, String taskStringDate, LocalDate taskDate, String dueStringDate, LocalDate dueDate, int count, Task task) {","lastModifiedDate":"2023-09-12"},{"lineNumber":295,"author":{"gitId":"nicleongyj"},"content":" if ((taskDate !\u003d null \u0026\u0026 taskDate.equals(dueDate)) || (taskStringDate !\u003d null \u0026\u0026 taskStringDate.equals(dueStringDate))) {","lastModifiedDate":"2023-09-12"},{"lineNumber":296,"author":{"gitId":"nicleongyj"},"content":" sb.append(count).append(\": \").append(task).append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":297,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":298,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":299,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":300,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":301,"author":{"gitId":"nicleongyj"},"content":" * String representation of task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":302,"author":{"gitId":"nicleongyj"},"content":" * @return String representation of task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":303,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":304,"author":{"gitId":"nicleongyj"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":305,"author":{"gitId":"nicleongyj"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":306,"author":{"gitId":"nicleongyj"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"nicleongyj"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"nicleongyj"},"content":" result.append(String.format(\"%d. %s\\n\", i + 1, list.get(i)));","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"nicleongyj"},"content":" return (result + String.format(\"You have %d %s in the list.\",","lastModifiedDate":"2023-08-30"},{"lineNumber":311,"author":{"gitId":"nicleongyj"},"content":" list.size(),","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"nicleongyj"},"content":" list.size() \u003d\u003d 1 ? \"task\" : \"tasks\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":314,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":315,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":316,"author":{"gitId":"nicleongyj"},"content":" * Returns tasks that is matching keyword provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":317,"author":{"gitId":"nicleongyj"},"content":" * @param keyword Keyword to match task with.","lastModifiedDate":"2023-08-31"},{"lineNumber":318,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":319,"author":{"gitId":"nicleongyj"},"content":" public String findTask(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":320,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":321,"author":{"gitId":"nicleongyj"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":322,"author":{"gitId":"nicleongyj"},"content":" for (Task task: list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":323,"author":{"gitId":"nicleongyj"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":324,"author":{"gitId":"nicleongyj"},"content":" if (description.contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":325,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(count).append(\": \").append(task).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":326,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":327,"author":{"gitId":"nicleongyj"},"content":" count++;","lastModifiedDate":"2023-08-31"},{"lineNumber":328,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":329,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":330,"author":{"gitId":"nicleongyj"},"content":" if (count \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":331,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"No task found matching keyword.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":332,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":333,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":334,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":335,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":336,"author":{"gitId":"nicleongyj"},"content":" private static boolean validIndex(int index) {","lastModifiedDate":"2023-09-12"},{"lineNumber":337,"author":{"gitId":"nicleongyj"},"content":" return index \u003e\u003d 0 \u0026\u0026 index \u003c TaskList.list.size();","lastModifiedDate":"2023-09-12"},{"lineNumber":338,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":339,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":339}},{"path":"src/main/java/taskmaster/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" * @param marked Whether the todo is marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" public Todo(String description, String marked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" super(description, marked);","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the todo.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the todo.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":23}},{"path":"src/main/java/taskmaster/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"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":"nicleongyj"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" this.dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" * Returns a dialog box consisting of user text and image.","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" * @param text Text to be printed out","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" * @param img Image to be shown in the dialog box","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" * @return a dialog box with the given user text and image","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"nicleongyj"},"content":" * * Returns a dialog box consisting of bot text and image.","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"nicleongyj"},"content":" * @param text Text to be printed out","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"nicleongyj"},"content":" * @param img Image to be shown in the dialog box","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"nicleongyj"},"content":" * @return a dialog box with the given text and image for bot","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"nicleongyj"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"nicleongyj"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"nicleongyj"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"nicleongyj"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nicleongyj":74}},{"path":"src/main/java/taskmaster/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.Taskmaster;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":"public class Main extends Application{","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" private Taskmaster taskmaster \u003d new Taskmaster();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setTaskmaster(taskmaster);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nicleongyj":31}},{"path":"src/main/java/taskmaster/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.Taskmaster;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" private static final Image USER_PROFILE \u003d new Image(Main.class.getResourceAsStream(\"/images/profile.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" private static final Image TASKMASTER_PROFILE \u003d new Image(Main.class.getResourceAsStream(\"/images/robot.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" //XML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" private Taskmaster taskmaster;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" this.scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" DialogBox.getDukeDialog(\"Hello! I am to taskmaster, what can i do for you today?\", TASKMASTER_PROFILE)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" );","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" public void setTaskmaster(Taskmaster tm) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" taskmaster \u003d tm;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"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":42,"author":{"gitId":"nicleongyj"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskmaster.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" if (response \u003d\u003d Ui.GOODBYE_MESSAGE) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" System.exit(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" DialogBox.getUserDialog(input, USER_PROFILE),","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" DialogBox.getDukeDialog(response, TASKMASTER_PROFILE)","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nicleongyj":57}},{"path":"src/main/java/taskmaster/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":" * Line to separate blocks","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":" public static final String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" public static final String WELCOME_MESSAGE \u003d \"Hello! I am TaskMaster!\\n\" + \"What can I do for you today?\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" public static final String GOODBYE_MESSAGE \u003d \"Bye! Hope to see you again\";","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * Prints a welcome message.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" public void printHello() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"Hello! I am TaskMaster!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"What can I do for you today?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":21}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"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":10,"author":{"gitId":"nicleongyj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"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":"nicleongyj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"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":"nicleongyj"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nicleongyj":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"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\"taskmaster.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Type in a command...\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"76.0\" style\u003d\"-fx-background-color: #b0e0e6; -fx-background-radius: 10; -fx-border-width: 0.5;\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" maxHeight\u003d\"1.7976931348623157E308\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" maxHeight\u003d\"1.7976931348623157E308\" prefWidth\u003d\"390.0\" style\u003d\"-fx-background-color: #a9d39e;\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" \u003cjavafx.scene.layout.HBox maxHeight\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" \u003cLabel fx:id\u003d\"textBox\" maxWidth\u003d\"1000.0\" style\u003d\"-fx-background-radius: 10; -fx-padding: 15; -fx-background-color: #FFFFFF;\" text\u003d\"Welcome to Taskmaster!\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" \u003c/javafx.scene.layout.HBox\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" \u003c/children\u003e\u003c/VBox\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nicleongyj":35}},{"path":"src/test/java/taskmaster/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" public void create_unmarked_deadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" Deadline deadline \u003d new Deadline (\"Project\", \"2pm\",\"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" String result \u003d deadline.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" assertEquals(result, \"[D][ ] Project (by: 2pm)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" public void create_marked_deadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" Deadline deadline \u003d new Deadline (\"Project\", \"2pm\",\"marked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" String result \u003d deadline.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" assertEquals(result, \"[D][X] Project (by: 2pm)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" public void check_date() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" Deadline deadline \u003d new Deadline (\"Project\", \"2019-10-15\",\"marked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" String result \u003d deadline.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" assertEquals(result, \"[D][X] Project (by: Oct 15 2019)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" LocalDate startDate \u003d deadline.getLocalDate();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" assertTrue(startDate.isAfter(LocalDate.of(2019, 9, 1)));","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" assertTrue(startDate.isBefore(LocalDate.of(2019, 11, 3)));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" assertTrue(startDate.isEqual(LocalDate.of(2019, 10, 15)));","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":33}},{"path":"src/test/java/taskmaster/tasks/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" public void toggleMark_invalidInput_throwsException() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" taskList.addTask(TaskList.TaskType.TODO, \"read book\", \"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" assertThrows(DukeException.class, () -\u003e taskList.toggleMark(TaskList.MarkStatus.MARK, 3));","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" assertDoesNotThrow(() -\u003e taskList.toggleMark(TaskList.MarkStatus.MARK, 0));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" public void toggleMark_validInput_correctString() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" taskList.addTask(TaskList.TaskType.TODO, \"read book\", \"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" assertDoesNotThrow(() -\u003e taskList.toggleMark(TaskList.MarkStatus.MARK, 0));","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" String expected \u003d \"[T][X] read book\";","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" String task \u003d TaskList.list.get(0).toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" assertEquals(expected ,task);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" public void deleteTask_invalidInput_throwsException() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" taskList.addTask(TaskList.TaskType.TODO, \"read book\", \"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" assertThrows(DukeException.class, () -\u003e taskList.deleteTask(3));","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" assertDoesNotThrow(() -\u003e taskList.deleteTask(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" public void deleteTask_validInput_throwsNullPointerException() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" taskList.addTask(TaskList.TaskType.TODO, \"read book\", \"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" assertDoesNotThrow(() -\u003e taskList.deleteTask(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e TaskList.list.get(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":48}},{"path":"src/test/java/taskmaster/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" public void create_unmarked_todo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" Todo todo \u003d new Todo (\"Read book\", \"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" String result \u003d todo.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" System.out.println(result);","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" assertEquals(result, \"[T][ ] Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" public void create_marked_todo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" Todo todo \u003d new Todo (\"Read book\", \"marked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" String result \u003d todo.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" System.out.println(result);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" assertEquals(result, \"[T][X] Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":"deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":"event","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":"deadline return book","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":"event return book","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":21}}] +[{"path":"Data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"[T][ ] list","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"nicleongyj":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":"nicleongyj"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.14\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"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":"nicleongyj"},"content":"javafx {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" modules \u003d [ \u0027javafx.controls\u0027,\u0027javafx.base\u0027,\u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" mainClass.set(\"taskmaster.Taskmaster\")","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" archiveFileName \u003d \u0027taskmaster.jar\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"nicleongyj":9,"-":38}},{"path":"src/main/java/taskmaster/Taskmaster.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.parser.Parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.ui.Main;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":"public class Taskmaster {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" private static final String FILE_PATH \u003d \"/Data.txt\";","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" public Taskmaster() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" String workingDirectory \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" this.storage \u003d new Storage(workingDirectory + FILE_PATH);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" this.storage.loadTasksFromFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" this.ui.printHello();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" Application.launch(Main.class);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" String response \u003d parser.parse(input, this.storage, this.taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":42,"-":2}},{"path":"src/main/java/taskmaster/duplicatecheckers/DuplicateDeadlineChecker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.duplicatecheckers;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Deadline;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"public class DuplicateDeadlineChecker {","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" public boolean isDuplicateDeadline(String details, String time) {","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" for (Task task : TaskList.list) {","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" String byTime \u003d deadline.getStringDate();","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" LocalDate byDate \u003d deadline.getLocalDate();","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" String description \u003d deadline.getDescription();","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" if (byTime !\u003d null \u0026\u0026 byTime.equals(time)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" return description.equalsIgnoreCase(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" if (byDate !\u003d null \u0026\u0026 byDate.isEqual(LocalDate.parse(time, formatter))) {","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" return description.equalsIgnoreCase(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"nicleongyj":30}},{"path":"src/main/java/taskmaster/duplicatecheckers/DuplicateEventChecker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.duplicatecheckers;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Deadline;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Event;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"public class DuplicateEventChecker {","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" public boolean isDuplicateEvent(String details, String startingTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" for (Task task : TaskList.list) {","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" if (task instanceof Event) {","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" String startTime \u003d event.getStartString();","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" LocalDate startDate \u003d event.getStartDate();","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" String description \u003d event.getDescription();","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" if (startTime !\u003d null \u0026\u0026 startTime.equals(startingTime)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" return description.equalsIgnoreCase(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" if (startDate !\u003d null \u0026\u0026 startDate.isEqual(LocalDate.parse(startingTime, formatter))) {","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" return description.equalsIgnoreCase(details);","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"nicleongyj":31}},{"path":"src/main/java/taskmaster/duplicatecheckers/DuplicateTodoChecker.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.duplicatecheckers;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.Todo;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"public class DuplicateTodoChecker {","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" public boolean isDuplicateTodo(String description) {","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" for (Task task : TaskList.list) {","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" Todo todo \u003d (Todo) task;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" if (todo.getDescription().equalsIgnoreCase(description)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" return true;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" return false;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"nicleongyj":19}},{"path":"src/main/java/taskmaster/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":7}},{"path":"src/main/java/taskmaster/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.ui.Ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" * Reads user input and calls the relevant method.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" * @param userInput Input from user.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * @param storage Storage of the program.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" * @param taskList Task list of the program","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If the input is not valid command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" public String parse(String userInput, Storage storage, TaskList taskList) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" storage.saveTasksToFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" return Ui.GOODBYE_MESSAGE;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" return TaskList.printList();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskList.addTask(TaskList.TaskType.TODO, description, \"unmarked\");","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" String description \u003d userInput.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskList.addTask(TaskList.TaskType.EVENT, description, \"unmarked\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" String description \u003d userInput.substring(8);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskList.addTask(TaskList.TaskType.DEADLINE, description, \"unmarked\");","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskList.toggleMark(TaskList.MarkStatus.MARK, taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Invalid command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskList.toggleMark(TaskList.MarkStatus.UNMARK, taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" return response;","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Invalid command\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d userInput.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" int taskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" return taskList.deleteTask(taskIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"due\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":" String date \u003d userInput.substring(4).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" return taskList.printTasksByDate(date);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nicleongyj"},"content":" String keyword \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"nicleongyj"},"content":" return taskList.findTask(keyword);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Please enter a valid command!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nicleongyj"},"content":" return \"Input valid command\";","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":69}},{"path":"src/main/java/taskmaster/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.tasks.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" * File path that stores saved tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" private static String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" * Constructor for the Storage class.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" * @param filePath Relative path of the file that stores the data.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" * Loads the stored data into the current task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" public void loadTasksFromFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" assert file.exists() : \"File does not exist\";","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" char type \u003d line.charAt(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" char mark \u003d line.charAt(4);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" if (type \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" loadTodo(line, mark);","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" } else if (type \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" loadDeadline(line, mark);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" } else if (type \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" loadEvent(line, mark);","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" scanner.close();","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"Data file not found: \" + e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"Error creating file\" + e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":" * Loads todo task into task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"nicleongyj"},"content":" * @param line String found in storage file that represents a todo.","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"nicleongyj"},"content":" * @param mark Whether the todo should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"nicleongyj"},"content":" private static void loadTodo(String line, char mark) {","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"nicleongyj"},"content":" String description \u003d line.substring(6).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"nicleongyj"},"content":" if (mark \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Todo(description, \"marked\" ));","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Todo(description, \"unmarked\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"nicleongyj"},"content":" * Loads deadline task into task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"nicleongyj"},"content":" * @param line String found in storage file that represents a deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"nicleongyj"},"content":" * @param mark Whether the deadline should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"nicleongyj"},"content":" private static void loadDeadline(String line, char mark) {","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"nicleongyj"},"content":" int byIndex \u003d line.indexOf(\"(by: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"nicleongyj"},"content":" String description \u003d line.substring(7, byIndex).trim(); // 7 is the length of \"[D][ ] \"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"nicleongyj"},"content":" String dueDate \u003d line.substring(byIndex + 5, line.length() - 1).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"nicleongyj"},"content":" if (mark \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Deadline(description, dueDate, \"marked\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Deadline(description, dueDate, \"unmarked\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"nicleongyj"},"content":" * Loads event task into task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"nicleongyj"},"content":" * @param line String found in storage file that represents a event.","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"nicleongyj"},"content":" * @param mark Whether the deadline should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"nicleongyj"},"content":" private static void loadEvent(String line, char mark) {","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d line.split(\"\\\\(from: | to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"nicleongyj"},"content":" String description \u003d parts[0].trim().substring(7);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicleongyj"},"content":" String startTime \u003d parts[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"nicleongyj"},"content":" String endTime \u003d parts[2].replace(\")\", \"\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"nicleongyj"},"content":" if (mark \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Event(description, startTime, endTime, \"marked\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"nicleongyj"},"content":" TaskList.list.add(new Event(description, startTime, endTime, \"unmarked\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nicleongyj"},"content":" * Saves the task list to the file","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nicleongyj"},"content":" public void saveTasksToFile() {","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"nicleongyj"},"content":" FileWriter writer \u003d new FileWriter(filePath, false);","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"nicleongyj"},"content":" for (Task task : TaskList.list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"nicleongyj"},"content":" writer.write(task.toString() + System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"nicleongyj"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"nicleongyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":129}},{"path":"src/main/java/taskmaster/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" * Date that the deadline must be done by","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" LocalDate date \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * String representation that the deadline must be done by","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" String deadline \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" * Constructor for the Deadline class.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the Deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" * @param deadline Time that the deadline must be completed by.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" * @param marked Boolean whether the deadline is marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" public Deadline(String description, String deadline, String marked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" super(description, marked);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" LocalDate parsedDate \u003d LocalDate.parse(deadline, formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" this.date \u003d parsedDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the start time.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the time of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" public String getStringDate() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" return this.deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" * Returns a LocalDate representation of the start date.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" * @return A LocalDate representing the starting date of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" public LocalDate getLocalDate() {","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" return this.date;","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":" return \"[D]\" + super.toString() + \" (by: \" + (deadline \u003d\u003d null ? date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) : deadline) + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":61}},{"path":"src/main/java/taskmaster/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" * Starting time of event in string type.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" String startTime \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * End time of event in string type.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" String endTime \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" * Start date of event.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" LocalDate startDate \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" * End date of event.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" LocalDate endDate \u003d null;","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" * Constructor for the Event class.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the Deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" * @param start Time that the event starts.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" * @param marked Boolean whether the event is marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" public Event(String description, String start, String end, String marked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" super(description, marked);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" LocalDate parsedStartDate \u003d LocalDate.parse(start, formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" LocalDate parsedEndDate \u003d LocalDate.parse(end, formatter);","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" this.startDate \u003d parsedStartDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" this.endDate \u003d parsedEndDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" this.startTime \u003d start;","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" this.endTime \u003d end;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the start time.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" public String getStartString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" return this.startTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" * Returns a LocalDate representation of the start date.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" * @return A LocalDate representing the starting date of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":" public LocalDate getStartDate() {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" return this.startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nicleongyj"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"nicleongyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"nicleongyj"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"nicleongyj"},"content":" + (startTime \u003d\u003d null ? this.startDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) : startTime)","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"nicleongyj"},"content":" + \" to \"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"nicleongyj"},"content":" + (endTime \u003d\u003d null ? this.endDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) : endTime)","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"nicleongyj"},"content":" + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":76}},{"path":"src/main/java/taskmaster/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":" * Description of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" * Boolean on whether the task is done.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" * Constructor for the task class.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" * Tasks can be set to either done or not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" * @param description Name of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" * @param marked String to indicate whether the task is done","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" public Task(String description, String marked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" if (marked \u003d\u003d \"marked\") {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" * Returns description of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" * @return String of description of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":55}},{"path":"src/main/java/taskmaster/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.duplicatecheckers.DuplicateDeadlineChecker;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.duplicatecheckers.DuplicateEventChecker;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.duplicatecheckers.DuplicateTodoChecker;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" * List that contains all the current tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" public static ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" * Enum that indicates whether a task is marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" public enum MarkStatus {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" * Task is marked","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" MARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" * Task is unmarked","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" UNMARK","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" * Enum that indicates the task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" * Todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" * Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" * Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" DEADLINE","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" * Constructor for the TaskList class.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" TaskList.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" * Prints all tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" public static String printList() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Here are the tasks in your list:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"You do not have any task at the moment :)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"nicleongyj"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Task \").append(i + 1).append(\": \").append(list.get(i)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicleongyj"},"content":" * Marks or un-marks a task to in the list as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicleongyj"},"content":" * @param mark Indication of whether a task should be marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicleongyj"},"content":" * @param taskIndex of the task to toggle the mark.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If the provided index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicleongyj"},"content":" public String toggleMark(MarkStatus mark, int taskIndex) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"nicleongyj"},"content":" //Assert valid task index and mark status","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"nicleongyj"},"content":" assert taskIndex \u003e\u003d 0 || taskIndex \u003c list.size() : \"Invalid task index\";","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"nicleongyj"},"content":" assert mark \u003d\u003d MarkStatus.MARK || mark \u003d\u003d MarkStatus.UNMARK : \"Invalid mark status\";","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"nicleongyj"},"content":" if (!validIndex(taskIndex)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Invalid task number\");","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"nicleongyj"},"content":" if (mark \u003d\u003d MarkStatus.UNMARK) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"nicleongyj"},"content":" list.get(taskIndex).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"OK, I have marked this as undone:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(list.get(taskIndex)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"nicleongyj"},"content":" } else if (mark \u003d\u003d MarkStatus.MARK) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"nicleongyj"},"content":" list.get(taskIndex).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Good job! I have marked this task as completed:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(list.get(taskIndex)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"nicleongyj"},"content":" * Removes a task to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nicleongyj"},"content":" * @param taskIndex Index of the task to remove.","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If the provided index is out of range.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"nicleongyj"},"content":" public String deleteTask(int taskIndex) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"nicleongyj"},"content":" //Assert valid task index and mark status","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"nicleongyj"},"content":" assert taskIndex \u003e\u003d 0 || taskIndex \u003c list.size() : \"Invalid task index\";","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"nicleongyj"},"content":" if (!validIndex(taskIndex)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Specified task does not exist\");","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"nicleongyj"},"content":" Task removedTask \u003d list.remove(taskIndex);","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Noted. I\u0027ve removed this task:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(removedTask).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Now you have \").append(list.size()).append(\" tasks in the list.\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"nicleongyj"},"content":" * Returns a string that will be printed out in the dialogue box.","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"nicleongyj"},"content":" * @param taskType Type of task that is added.","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"nicleongyj"},"content":" * @param marked Whether the task should be added as marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"nicleongyj"},"content":" * @return A string which will be formed as a dialogue bubble","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If command given is not a valid command.","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"nicleongyj"},"content":" public String addTask(TaskType taskType, String description, String marked) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"nicleongyj"},"content":" //Assert valid task type","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"nicleongyj"},"content":" assert taskType \u003d\u003d TaskType.TODO || taskType \u003d\u003d TaskType.EVENT || taskType \u003d\u003d TaskType.DEADLINE: \"Invalid task type\";","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"nicleongyj"},"content":" assert description !\u003d null: \"Invalid description\";","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":132,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"nicleongyj"},"content":" if (taskType \u003d\u003d TaskType.TODO) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"nicleongyj"},"content":" return addTodoTask(description, marked);","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"nicleongyj"},"content":" } else if (taskType \u003d\u003d TaskType.EVENT) {","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"nicleongyj"},"content":" return addEventTask(description, marked);","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"nicleongyj"},"content":" } else if (taskType \u003d\u003d TaskType.DEADLINE) {","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"nicleongyj"},"content":" return addDeadlineTask(description, marked);","lastModifiedDate":"2023-09-15"},{"lineNumber":139,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":140,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":142,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":143,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":144,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of Taskmaster\u0027s reply when a todo is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":145,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":146,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the todo.","lastModifiedDate":"2023-09-15"},{"lineNumber":147,"author":{"gitId":"nicleongyj"},"content":" * @param marked Whether the task should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":148,"author":{"gitId":"nicleongyj"},"content":" * @return A string of Taskmaster\u0027s reply when a todo is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":149,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If description is empty","lastModifiedDate":"2023-09-15"},{"lineNumber":150,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":151,"author":{"gitId":"nicleongyj"},"content":" public String addTodoTask(String description, String marked) throws DukeException{","lastModifiedDate":"2023-09-15"},{"lineNumber":152,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-15"},{"lineNumber":153,"author":{"gitId":"nicleongyj"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"nicleongyj"},"content":" //Duplicate checking","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"nicleongyj"},"content":" DuplicateTodoChecker todoChecker \u003d new DuplicateTodoChecker();","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"nicleongyj"},"content":" if (todoChecker.isDuplicateTodo(description)) {","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Duplicate todo task detected!\").append(\"\\n\");","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":162,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"nicleongyj"},"content":" //No duplicate, add todo to list","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"nicleongyj"},"content":" Todo todo \u003d new Todo(description, marked);","lastModifiedDate":"2023-09-05"},{"lineNumber":165,"author":{"gitId":"nicleongyj"},"content":" list.add(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":166,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Got it. I\u0027ve added this to-do task:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":167,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(todo).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":168,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Now you have \").append(list.size()).append(\" tasks in the list.\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":169,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":170,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":171,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":173,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of Taskmaster\u0027s reply when a deadline is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":174,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":175,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-09-15"},{"lineNumber":176,"author":{"gitId":"nicleongyj"},"content":" * @param marked Whether the task should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":177,"author":{"gitId":"nicleongyj"},"content":" * @return A string of Taskmaster\u0027s reply when a deadline is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":178,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If description is empty or command is invalid","lastModifiedDate":"2023-09-15"},{"lineNumber":179,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":180,"author":{"gitId":"nicleongyj"},"content":" public String addDeadlineTask(String description, String marked) throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":181,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-15"},{"lineNumber":182,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d description.split(\"/by\");","lastModifiedDate":"2023-09-15"},{"lineNumber":183,"author":{"gitId":"nicleongyj"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-09-13"},{"lineNumber":184,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Please input a valid task\");","lastModifiedDate":"2023-09-13"},{"lineNumber":185,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":186,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":187,"author":{"gitId":"nicleongyj"},"content":" //Valid description and time checking","lastModifiedDate":"2023-09-13"},{"lineNumber":188,"author":{"gitId":"nicleongyj"},"content":" String details \u003d parts[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"nicleongyj"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":190,"author":{"gitId":"nicleongyj"},"content":" if (details.isEmpty() || by.isEmpty()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":191,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Please input a valid task\");","lastModifiedDate":"2023-09-13"},{"lineNumber":192,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":194,"author":{"gitId":"nicleongyj"},"content":" //Duplicate checking","lastModifiedDate":"2023-09-13"},{"lineNumber":195,"author":{"gitId":"nicleongyj"},"content":" DuplicateDeadlineChecker deadlineChecker \u003d new DuplicateDeadlineChecker();","lastModifiedDate":"2023-09-15"},{"lineNumber":196,"author":{"gitId":"nicleongyj"},"content":" if (deadlineChecker.isDuplicateDeadline(details, by)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":197,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Duplicate deadline task detected\").append(\"\\n\");","lastModifiedDate":"2023-09-15"},{"lineNumber":198,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":199,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":201,"author":{"gitId":"nicleongyj"},"content":" //No duplicates, add deadline to list","lastModifiedDate":"2023-09-15"},{"lineNumber":202,"author":{"gitId":"nicleongyj"},"content":" list.add(new Deadline(details, by, marked));","lastModifiedDate":"2023-09-15"},{"lineNumber":203,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Got it. I\u0027ve added this to-do task:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":204,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(list.get(list.size() - 1)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":205,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Now you have \").append(list.size()).append(\" tasks in the list.\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":206,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-15"},{"lineNumber":207,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":208,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":209,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":210,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of Taskmaster\u0027s reply when a event is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":211,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":212,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-15"},{"lineNumber":213,"author":{"gitId":"nicleongyj"},"content":" * @param marked Whether the task should be added as a marked task.","lastModifiedDate":"2023-09-15"},{"lineNumber":214,"author":{"gitId":"nicleongyj"},"content":" * @return A string of Taskmaster\u0027s reply when an event is added.","lastModifiedDate":"2023-09-15"},{"lineNumber":215,"author":{"gitId":"nicleongyj"},"content":" * @throws DukeException If description is empty or command is invalid.","lastModifiedDate":"2023-09-15"},{"lineNumber":216,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":217,"author":{"gitId":"nicleongyj"},"content":" public String addEventTask(String description, String marked) throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":218,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-15"},{"lineNumber":219,"author":{"gitId":"nicleongyj"},"content":" String[] parts \u003d description.split(\"/from\");","lastModifiedDate":"2023-09-15"},{"lineNumber":220,"author":{"gitId":"nicleongyj"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-09-13"},{"lineNumber":221,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Please input a valid task\");","lastModifiedDate":"2023-09-13"},{"lineNumber":222,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":223,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":224,"author":{"gitId":"nicleongyj"},"content":" //Valid description and time checking","lastModifiedDate":"2023-09-13"},{"lineNumber":225,"author":{"gitId":"nicleongyj"},"content":" String details \u003d parts[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"nicleongyj"},"content":" String[] timeParts \u003d parts[1].split(\"/to\");","lastModifiedDate":"2023-09-15"},{"lineNumber":227,"author":{"gitId":"nicleongyj"},"content":" String start \u003d timeParts[0].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":228,"author":{"gitId":"nicleongyj"},"content":" String end \u003d timeParts[1].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":229,"author":{"gitId":"nicleongyj"},"content":" if (timeParts.length !\u003d 2 || details.isEmpty() || start.isEmpty() || end.isEmpty()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":230,"author":{"gitId":"nicleongyj"},"content":" throw new DukeException(\"Please input a valid task\");","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":232,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":233,"author":{"gitId":"nicleongyj"},"content":" //Duplicate checking","lastModifiedDate":"2023-09-13"},{"lineNumber":234,"author":{"gitId":"nicleongyj"},"content":" DuplicateEventChecker eventChecker \u003d new DuplicateEventChecker();","lastModifiedDate":"2023-09-15"},{"lineNumber":235,"author":{"gitId":"nicleongyj"},"content":" if (eventChecker.isDuplicateEvent(details, start)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":236,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Duplicate event task detected!\").append(\"\\n\");","lastModifiedDate":"2023-09-15"},{"lineNumber":237,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":238,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":239,"author":{"gitId":"nicleongyj"},"content":" //No duplicate, add event to list","lastModifiedDate":"2023-09-15"},{"lineNumber":240,"author":{"gitId":"nicleongyj"},"content":" list.add(new Event(details, start, end, marked));","lastModifiedDate":"2023-09-15"},{"lineNumber":241,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Got it. I\u0027ve added this to-do task:\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":242,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\" \").append(list.get(list.size() - 1)).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":243,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Now you have \").append(list.size()).append(\" tasks in the list.\").append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":244,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":245,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"nicleongyj"},"content":" * Prints all tasks that is happening on the specified date.","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"nicleongyj"},"content":" * @param date Date that task is happening on.","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"nicleongyj"},"content":" public String printTasksByDate(String date) {","lastModifiedDate":"2023-09-05"},{"lineNumber":252,"author":{"gitId":"nicleongyj"},"content":" LocalDate dueDate \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":254,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"nicleongyj"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"nicleongyj"},"content":" dueDate \u003d LocalDate.parse(date, formatter);","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"nicleongyj"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Please input a valid date format: yyyy-MM-dd!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":259,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":260,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"Tasks occurring on \").append(dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))).append(\":\").append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":263,"author":{"gitId":"nicleongyj"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"nicleongyj"},"content":" for (Task task : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"nicleongyj"},"content":" String dueDateString \u003d dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"nicleongyj"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"nicleongyj"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"nicleongyj"},"content":" String deadlineString \u003d deadline.getStringDate();","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"nicleongyj"},"content":" LocalDate deadlineDate \u003d deadline.getLocalDate();","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"nicleongyj"},"content":" appendTaskIfMatch(stringBuilder, deadlineString,deadlineDate, dueDateString, dueDate, count, task);","lastModifiedDate":"2023-09-12"},{"lineNumber":272,"author":{"gitId":"nicleongyj"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"nicleongyj"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"nicleongyj"},"content":" String startString \u003d event.getStartString();","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"nicleongyj"},"content":" LocalDate startDate \u003d event.getStartDate();","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"nicleongyj"},"content":" appendTaskIfMatch(stringBuilder, startString, startDate, dueDateString, dueDate, count, task);","lastModifiedDate":"2023-09-12"},{"lineNumber":277,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"nicleongyj"},"content":" count++;","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":281,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":284,"author":{"gitId":"nicleongyj"},"content":" * Appends a string representation to the Stringbuilder if the specific task is matched with date given.","lastModifiedDate":"2023-09-15"},{"lineNumber":285,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":286,"author":{"gitId":"nicleongyj"},"content":" * @param sb Stringbuilder object","lastModifiedDate":"2023-09-15"},{"lineNumber":287,"author":{"gitId":"nicleongyj"},"content":" * @param taskStringDate String representation of the date of the task.","lastModifiedDate":"2023-09-15"},{"lineNumber":288,"author":{"gitId":"nicleongyj"},"content":" * @param taskDate LocalDate representation of the date of the task.","lastModifiedDate":"2023-09-15"},{"lineNumber":289,"author":{"gitId":"nicleongyj"},"content":" * @param dueStringDate String representation of the due date provided.","lastModifiedDate":"2023-09-15"},{"lineNumber":290,"author":{"gitId":"nicleongyj"},"content":" * @param dueDate LocalDate representation of the due date provided.","lastModifiedDate":"2023-09-15"},{"lineNumber":291,"author":{"gitId":"nicleongyj"},"content":" * @param count Count of number of matched tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":292,"author":{"gitId":"nicleongyj"},"content":" * @param task Task that is found in task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":293,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":294,"author":{"gitId":"nicleongyj"},"content":" private static void appendTaskIfMatch(StringBuilder sb, String taskStringDate, LocalDate taskDate, String dueStringDate, LocalDate dueDate, int count, Task task) {","lastModifiedDate":"2023-09-12"},{"lineNumber":295,"author":{"gitId":"nicleongyj"},"content":" if ((taskDate !\u003d null \u0026\u0026 taskDate.equals(dueDate)) || (taskStringDate !\u003d null \u0026\u0026 taskStringDate.equals(dueStringDate))) {","lastModifiedDate":"2023-09-12"},{"lineNumber":296,"author":{"gitId":"nicleongyj"},"content":" sb.append(count).append(\": \").append(task).append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":297,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":298,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":299,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":300,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":301,"author":{"gitId":"nicleongyj"},"content":" * String representation of task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":302,"author":{"gitId":"nicleongyj"},"content":" * @return String representation of task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":303,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":304,"author":{"gitId":"nicleongyj"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":305,"author":{"gitId":"nicleongyj"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":306,"author":{"gitId":"nicleongyj"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"nicleongyj"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"nicleongyj"},"content":" result.append(String.format(\"%d. %s\\n\", i + 1, list.get(i)));","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"nicleongyj"},"content":" return (result + String.format(\"You have %d %s in the list.\",","lastModifiedDate":"2023-08-30"},{"lineNumber":311,"author":{"gitId":"nicleongyj"},"content":" list.size(),","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"nicleongyj"},"content":" list.size() \u003d\u003d 1 ? \"task\" : \"tasks\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":314,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":315,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":316,"author":{"gitId":"nicleongyj"},"content":" * Returns tasks that is matching keyword provided.","lastModifiedDate":"2023-08-31"},{"lineNumber":317,"author":{"gitId":"nicleongyj"},"content":" * @param keyword Keyword to match task with.","lastModifiedDate":"2023-08-31"},{"lineNumber":318,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":319,"author":{"gitId":"nicleongyj"},"content":" public String findTask(String keyword) {","lastModifiedDate":"2023-09-05"},{"lineNumber":320,"author":{"gitId":"nicleongyj"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-05"},{"lineNumber":321,"author":{"gitId":"nicleongyj"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":322,"author":{"gitId":"nicleongyj"},"content":" for (Task task: list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":323,"author":{"gitId":"nicleongyj"},"content":" String description \u003d task.getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":324,"author":{"gitId":"nicleongyj"},"content":" if (description.contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":325,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(count).append(\": \").append(task).append(\"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":326,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":327,"author":{"gitId":"nicleongyj"},"content":" count++;","lastModifiedDate":"2023-08-31"},{"lineNumber":328,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":329,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":330,"author":{"gitId":"nicleongyj"},"content":" if (count \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":331,"author":{"gitId":"nicleongyj"},"content":" stringBuilder.append(\"No task found matching keyword.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":332,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":333,"author":{"gitId":"nicleongyj"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-05"},{"lineNumber":334,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":335,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":336,"author":{"gitId":"nicleongyj"},"content":" private static boolean validIndex(int index) {","lastModifiedDate":"2023-09-12"},{"lineNumber":337,"author":{"gitId":"nicleongyj"},"content":" return index \u003e\u003d 0 \u0026\u0026 index \u003c TaskList.list.size();","lastModifiedDate":"2023-09-12"},{"lineNumber":338,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":339,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":339}},{"path":"src/main/java/taskmaster/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":" * @param description Description of todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" * @param marked Whether the todo is marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" public Todo(String description, String marked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" super(description, marked);","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" * Returns a string representation of the todo.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" * @return A string representing the todo.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":23}},{"path":"src/main/java/taskmaster/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"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":"nicleongyj"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" this.dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" * Returns a dialog box consisting of user text and image.","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" * @param text Text to be printed out","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" * @param img Image to be shown in the dialog box","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":" * @return a dialog box with the given user text and image","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"nicleongyj"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"nicleongyj"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"nicleongyj"},"content":" * * Returns a dialog box consisting of bot text and image.","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"nicleongyj"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"nicleongyj"},"content":" * @param text Text to be printed out","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"nicleongyj"},"content":" * @param img Image to be shown in the dialog box","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"nicleongyj"},"content":" * @return a dialog box with the given text and image for bot","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"nicleongyj"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"nicleongyj"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"nicleongyj"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"nicleongyj"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nicleongyj":74}},{"path":"src/main/java/taskmaster/ui/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.Taskmaster;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":"public class Main extends Application{","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" private Taskmaster taskmaster \u003d new Taskmaster();","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setTaskmaster(taskmaster);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nicleongyj":31}},{"path":"src/main/java/taskmaster/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.Taskmaster;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" private static final Image USER_PROFILE \u003d new Image(Main.class.getResourceAsStream(\"/images/profile.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" private static final Image TASKMASTER_PROFILE \u003d new Image(Main.class.getResourceAsStream(\"/images/robot.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" //XML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" private Taskmaster taskmaster;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" this.scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" DialogBox.getDukeDialog(\"Hello! I am to taskmaster, what can i do for you today?\", TASKMASTER_PROFILE)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" );","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" public void setTaskmaster(Taskmaster tm) {","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" taskmaster \u003d tm;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"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":41,"author":{"gitId":"nicleongyj"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" String response \u003d taskmaster.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" if (response \u003d\u003d Ui.GOODBYE_MESSAGE) {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":" System.exit(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"nicleongyj"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"nicleongyj"},"content":" DialogBox.getUserDialog(input, USER_PROFILE),","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"nicleongyj"},"content":" DialogBox.getDukeDialog(response, TASKMASTER_PROFILE)","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"nicleongyj"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"nicleongyj"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nicleongyj":56}},{"path":"src/main/java/taskmaster/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":" * Line to separate blocks","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":" public static final String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" public static final String WELCOME_MESSAGE \u003d \"Hello! I am TaskMaster!\\n\" + \"What can I do for you today?\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" public static final String GOODBYE_MESSAGE \u003d \"Bye! Hope to see you again\";","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" * Prints a welcome message.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" public void printHello() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"Hello! I am TaskMaster!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" System.out.println(\"What can I do for you today?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":21}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"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":10,"author":{"gitId":"nicleongyj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"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":"nicleongyj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"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":"nicleongyj"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nicleongyj":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"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\"taskmaster.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Type in a command...\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"40.0\" prefWidth\u003d\"76.0\" style\u003d\"-fx-background-color: #b0e0e6; -fx-background-radius: 10; -fx-border-width: 0.5;\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" maxHeight\u003d\"1.7976931348623157E308\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" maxHeight\u003d\"1.7976931348623157E308\" prefWidth\u003d\"390.0\" style\u003d\"-fx-background-color: #a9d39e;\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" \u003cjavafx.scene.layout.HBox maxHeight\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" \u003cLabel fx:id\u003d\"textBox\" maxWidth\u003d\"1000.0\" style\u003d\"-fx-background-radius: 10; -fx-padding: 15; -fx-background-color: #FFFFFF;\" text\u003d\"Welcome to Taskmaster!\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" \u003c/javafx.scene.layout.HBox\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" \u003c/children\u003e\u003c/VBox\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"nicleongyj":35}},{"path":"src/test/java/taskmaster/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" public void create_unmarked_deadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" Deadline deadline \u003d new Deadline (\"Project\", \"2pm\",\"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" String result \u003d deadline.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" assertEquals(result, \"[D][ ] Project (by: 2pm)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" public void create_marked_deadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" Deadline deadline \u003d new Deadline (\"Project\", \"2pm\",\"marked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" String result \u003d deadline.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" assertEquals(result, \"[D][X] Project (by: 2pm)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" public void check_date() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" Deadline deadline \u003d new Deadline (\"Project\", \"2019-10-15\",\"marked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" String result \u003d deadline.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" assertEquals(result, \"[D][X] Project (by: Oct 15 2019)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" LocalDate startDate \u003d deadline.getLocalDate();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" assertTrue(startDate.isAfter(LocalDate.of(2019, 9, 1)));","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":" assertTrue(startDate.isBefore(LocalDate.of(2019, 11, 3)));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" assertTrue(startDate.isEqual(LocalDate.of(2019, 10, 15)));","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":33}},{"path":"src/test/java/taskmaster/tasks/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import taskmaster.exceptions.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" public void toggleMark_invalidInput_throwsException() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" taskList.addTask(TaskList.TaskType.TODO, \"read book\", \"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" assertThrows(DukeException.class, () -\u003e taskList.toggleMark(TaskList.MarkStatus.MARK, 3));","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" assertDoesNotThrow(() -\u003e taskList.toggleMark(TaskList.MarkStatus.MARK, 0));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" public void toggleMark_validInput_correctString() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"nicleongyj"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"nicleongyj"},"content":" taskList.addTask(TaskList.TaskType.TODO, \"read book\", \"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"nicleongyj"},"content":" assertDoesNotThrow(() -\u003e taskList.toggleMark(TaskList.MarkStatus.MARK, 0));","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"nicleongyj"},"content":" String expected \u003d \"[T][X] read book\";","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"nicleongyj"},"content":" String task \u003d TaskList.list.get(0).toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"nicleongyj"},"content":" assertEquals(expected ,task);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"nicleongyj"},"content":" public void deleteTask_invalidInput_throwsException() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"nicleongyj"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"nicleongyj"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"nicleongyj"},"content":" taskList.addTask(TaskList.TaskType.TODO, \"read book\", \"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"nicleongyj"},"content":" assertThrows(DukeException.class, () -\u003e taskList.deleteTask(3));","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"nicleongyj"},"content":" assertDoesNotThrow(() -\u003e taskList.deleteTask(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"nicleongyj"},"content":" public void deleteTask_validInput_throwsNullPointerException() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"nicleongyj"},"content":" ArrayList\u003cTask\u003e testList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"nicleongyj"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"nicleongyj"},"content":" taskList.addTask(TaskList.TaskType.TODO, \"read book\", \"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"nicleongyj"},"content":" assertDoesNotThrow(() -\u003e taskList.deleteTask(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"nicleongyj"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e TaskList.list.get(0));","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":48}},{"path":"src/test/java/taskmaster/tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"package taskmaster.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":" public void create_unmarked_todo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":" Todo todo \u003d new Todo (\"Read book\", \"unmarked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":" String result \u003d todo.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":" System.out.println(result);","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":" assertEquals(result, \"[T][ ] Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":" public void create_marked_todo() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":" Todo todo \u003d new Todo (\"Read book\", \"marked\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":" String result \u003d todo.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":" System.out.println(result);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":" assertEquals(result, \"[T][X] Read book\");","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"nicleongyj"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"nicleongyj":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nicleongyj"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"nicleongyj"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"nicleongyj"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"nicleongyj"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"nicleongyj"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"nicleongyj"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"nicleongyj"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"nicleongyj"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"nicleongyj"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"nicleongyj"},"content":"deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"nicleongyj"},"content":"event","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"nicleongyj"},"content":"deadline return book","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"nicleongyj"},"content":"event return book","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"nicleongyj"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"nicleongyj"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"nicleongyj"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"nicleongyj":21}}] diff --git a/nicleongyj_ip_master/commits.json b/nicleongyj_ip_master/commits.json index a44dadf1..caf73439 100644 --- a/nicleongyj_ip_master/commits.json +++ b/nicleongyj_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"nicleongyj":[{"date":"2023-08-23","commitResults":[{"hash":"f2cc37a724ce8380f0dd87c965d1bee610d079c4","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"136582f6481ba9c7d396676bfc3447744b79529d","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"a4c09eb759ffae32423d5fd9e925f3dfd17d238a","isMergeCommit":false,"messageTitle":"level 2","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"aa7d9adec6326bc77430f0bd3f62473018c78c12","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":3}}},{"hash":"cb1d820e544f130495ecc42168e692dfbb136592","isMergeCommit":false,"messageTitle":"level 4","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":11}}},{"hash":"e94bd965089f92b3114ffd04858859e43d67b3a6","isMergeCommit":false,"messageTitle":"level 5","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0}}},{"hash":"96a0e01ee23bd3d82fc403121925497589008e19","isMergeCommit":false,"messageTitle":"level 5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"da66b3e26bc48e45e50fb5ba6f8fa9fa32684e74","isMergeCommit":false,"messageTitle":"level 6 - delete","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":109}}},{"hash":"9ce011d64345cfb7354262d42f831240f19d75b1","isMergeCommit":false,"messageTitle":"enum","messageBody":"","tags":["enum"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":13}}}]},{"date":"2023-08-24","commitResults":[{"hash":"feef26f451b129bf2aec6612bfc625814885e925","isMergeCommit":false,"messageTitle":"UI/UX testing","messageBody":"","tags":["UI-testing"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-26","commitResults":[{"hash":"57d887eb74b2536e82e3cd49bb5a3acf6984a597","isMergeCommit":false,"messageTitle":"UI/UX testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"0e3aa4cafe1ccb1e3d9628249f11f23235c5951e","isMergeCommit":false,"messageTitle":"A-enum","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":5}}}]},{"date":"2023-08-28","commitResults":[{"hash":"85def3f94c61931247fdb281ce42ce9d072ca595","isMergeCommit":false,"messageTitle":"added save feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":100,"deletions":15}}},{"hash":"ea8d0fb025eac11f40d5f5e04c304b47ff45e2a7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9cda76379b0057681aaa30dbfe189c8ea921ae45","isMergeCommit":false,"messageTitle":"added time/dates for deadlines \u0026 events","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":35,"deletions":5}}},{"hash":"9b21cc8ec8a4b5029a3c6418c403f4f8ab1b29be","isMergeCommit":false,"messageTitle":"added retrieve tasks on date","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":57,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"85f3d0153c7c12d439a799369b120c2e7ba9389a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"364845562b3475724cd27efe9d53c1508748a37e","isMergeCommit":false,"messageTitle":"added more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":8,"deletions":0}}},{"hash":"ad74cc001d1a8055958cfb526d1fe4a09c0a9c8e","isMergeCommit":false,"messageTitle":"added more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":320,"deletions":292}}},{"hash":"61b21706c77af7a9d0f87d38fada1a935d17ef47","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d1a0a2601670b9a9c892ae56ee35c2d8ab2ec131","isMergeCommit":false,"messageTitle":"added packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":45,"deletions":16}}},{"hash":"8c65dbc9a9762f2dc4025e7beb959ae147ec35d7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"c0e5e0516841852b1cc3aaf72b6a7d0cf4031924","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2e9efa2a26fc07760d90b5b05bb1bb2017036719","isMergeCommit":false,"messageTitle":"added gradle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":7}}},{"hash":"79b22750fcfe5cc577ea42e14c79e3ed6b1c818f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"699833107b348a35d10fdc3f669f08474cfe716d","isMergeCommit":false,"messageTitle":"added JUnit tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":109,"deletions":39}}},{"hash":"a02b2bf668449c729cc2e5b91caaa47e51f80d46","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Junit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"26501841c236f397f7d192d7af543171772c2972","isMergeCommit":false,"messageTitle":"added JAR plugins","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4}}},{"hash":"7a46d9586be9dcd012d35242904bf6b04db5cd55","isMergeCommit":false,"messageTitle":"fixed some code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":18}}},{"hash":"89f46663bdf99e430a3f28bdfdbead2fa6281778","isMergeCommit":false,"messageTitle":"add Java Docs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":245,"deletions":71}}},{"hash":"7e409caaf86dd06993ff77360e98994fe9036d14","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"606e4bfe1bc240ee56367518b9a1e0354d05813c","isMergeCommit":false,"messageTitle":"modify code to follow coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"c6799da59d2eb1341d6caf659b7b96bad244bd5a","isMergeCommit":true,"messageTitle":"fix merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"760979d7476dda6358f16343090a689da39daad2","isMergeCommit":false,"messageTitle":"fix merge conflict","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":23}}},{"hash":"a1f59e2e6fe3ba8bb6788d70e5770d5843475772","isMergeCommit":false,"messageTitle":"add level 9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"dd5916beae3429ff95dab3cb6e67d837601d16c4","isMergeCommit":true,"messageTitle":"fix merge conflict with level-9 branch","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"866b376047061e05194ae79daa0f636efe1a4518","isMergeCommit":false,"messageTitle":"add JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":238,"deletions":1}}},{"hash":"6f9861b263cce942c9ef63c98303d61128f46289","isMergeCommit":false,"messageTitle":"Add FXML skeleton code","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":113,"deletions":190}}},{"hash":"0f29cad731594f7d1a07bf57eadde3f7bae2691a","isMergeCommit":false,"messageTitle":"Integrate FXML with Taskmaster logic","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":94,"deletions":87}}},{"hash":"f7038671bf1a1886acc962aca9f87604a1151618","isMergeCommit":false,"messageTitle":"Add CSS styling","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":24,"deletions":7},"java":{"insertions":1,"deletions":14}}},{"hash":"19a7265095f3507293dd3a62cc83a0c58a9ddea2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"7cf6a2d86f69400a9005d5fdb5214b16c2b96b03","isMergeCommit":false,"messageTitle":"update UI source code files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":17,"deletions":0}}},{"hash":"dd161b92c8a21a180705e30f6cea7033d7895938","isMergeCommit":false,"messageTitle":"Add assertions to verify task operations","messageBody":"This commit adds assertions to improve input validation. It ensures user inputs gives a valid commands and verified, and that task indexes is valid and within range, and descriptions is not null\n\nThese assertions allows testing of correctness of any assumption that have been made\n","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":2},"java":{"insertions":20,"deletions":1}}},{"hash":"847d79e6bd2748e49e011f4cd04a51d17161703c","isMergeCommit":false,"messageTitle":"Improve code quality for Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":33}}},{"hash":"5876bc2b555ecbd44b38bc081eae9788cf4a7cb9","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"In this commit, code quality for storage and taskList class is improved. Removed deep nesting, shortened long methods, and restructure some methods to make the happy path prominient\n\nThis improvements will contribute to better maintanbility and more readable code\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":32,"deletions":25}}},{"hash":"cdee6b65f2a7b988e8e6cd1ed4028a8cf38c6a1b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nicleongyj/branch-A-Assertions","messageBody":"Add assertions to verify task operations","fileTypesAndContributionMap":{}},{"hash":"9691b51a95c022eccea6794578fe96f7a76dc09d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"0933e539b44bd2ba9e4564ab1565e84e2bc7e0af","isMergeCommit":false,"messageTitle":"Refactor addTask method","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":127,"deletions":30}}},{"hash":"575e1850dddc4f470240219ae66365cd11011361","isMergeCommit":false,"messageTitle":"Add duplicate checker to detect and prevent duplicate tasks","messageBody":"-Implemented a feature to detect duplicate descriptions for todo tasks\n\n-Implemented checking feature to check duplicate description and timings for deadlines and events\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":37,"deletions":32}}},{"hash":"9dcd95d0ed522d274d659ba9d2ca2268dee0e33a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9197bf508d1a83d9c65b9ca5f5efeab578609d8f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5eefe31d6065929d5c03a7ec052d67eb201b62b3","isMergeCommit":true,"messageTitle":"Merge pull request #3 from nicleongyj/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"5cb9c1925e04da794c3d412b5e3ea4bd4e876145","isMergeCommit":false,"messageTitle":"Add javadocs to methods and refactored AddTask method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":134,"deletions":62}}}]}]},"authorFileTypeContributionMap":{"nicleongyj":{"java":1170,"md":0,"fxml":52,"sh":0,"bat":0,"gradle":9,"txt":23}},"authorContributionVariance":{"nicleongyj":59620.984},"authorDisplayNameMap":{"nicleongyj":"CS2103T-T12-2 LEON..OLAS"}} +{"authorDailyContributionsMap":{"nicleongyj":[{"date":"2023-08-23","commitResults":[{"hash":"f2cc37a724ce8380f0dd87c965d1bee610d079c4","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"136582f6481ba9c7d396676bfc3447744b79529d","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}},{"hash":"a4c09eb759ffae32423d5fd9e925f3dfd17d238a","isMergeCommit":false,"messageTitle":"level 2","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"aa7d9adec6326bc77430f0bd3f62473018c78c12","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":3}}},{"hash":"cb1d820e544f130495ecc42168e692dfbb136592","isMergeCommit":false,"messageTitle":"level 4","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":11}}},{"hash":"e94bd965089f92b3114ffd04858859e43d67b3a6","isMergeCommit":false,"messageTitle":"level 5","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0}}},{"hash":"96a0e01ee23bd3d82fc403121925497589008e19","isMergeCommit":false,"messageTitle":"level 5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"da66b3e26bc48e45e50fb5ba6f8fa9fa32684e74","isMergeCommit":false,"messageTitle":"level 6 - delete","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":109}}},{"hash":"9ce011d64345cfb7354262d42f831240f19d75b1","isMergeCommit":false,"messageTitle":"enum","messageBody":"","tags":["enum"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":13}}}]},{"date":"2023-08-24","commitResults":[{"hash":"feef26f451b129bf2aec6612bfc625814885e925","isMergeCommit":false,"messageTitle":"UI/UX testing","messageBody":"","tags":["UI-testing"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-26","commitResults":[{"hash":"57d887eb74b2536e82e3cd49bb5a3acf6984a597","isMergeCommit":false,"messageTitle":"UI/UX testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"0e3aa4cafe1ccb1e3d9628249f11f23235c5951e","isMergeCommit":false,"messageTitle":"A-enum","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":5}}}]},{"date":"2023-08-28","commitResults":[{"hash":"85def3f94c61931247fdb281ce42ce9d072ca595","isMergeCommit":false,"messageTitle":"added save feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":100,"deletions":15}}},{"hash":"ea8d0fb025eac11f40d5f5e04c304b47ff45e2a7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9cda76379b0057681aaa30dbfe189c8ea921ae45","isMergeCommit":false,"messageTitle":"added time/dates for deadlines \u0026 events","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":35,"deletions":5}}},{"hash":"9b21cc8ec8a4b5029a3c6418c403f4f8ab1b29be","isMergeCommit":false,"messageTitle":"added retrieve tasks on date","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":57,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"85f3d0153c7c12d439a799369b120c2e7ba9389a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"364845562b3475724cd27efe9d53c1508748a37e","isMergeCommit":false,"messageTitle":"added more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":8,"deletions":0}}},{"hash":"ad74cc001d1a8055958cfb526d1fe4a09c0a9c8e","isMergeCommit":false,"messageTitle":"added more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":320,"deletions":292}}},{"hash":"61b21706c77af7a9d0f87d38fada1a935d17ef47","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"d1a0a2601670b9a9c892ae56ee35c2d8ab2ec131","isMergeCommit":false,"messageTitle":"added packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":45,"deletions":16}}},{"hash":"8c65dbc9a9762f2dc4025e7beb959ae147ec35d7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"c0e5e0516841852b1cc3aaf72b6a7d0cf4031924","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2e9efa2a26fc07760d90b5b05bb1bb2017036719","isMergeCommit":false,"messageTitle":"added gradle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":7}}},{"hash":"79b22750fcfe5cc577ea42e14c79e3ed6b1c818f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"699833107b348a35d10fdc3f669f08474cfe716d","isMergeCommit":false,"messageTitle":"added JUnit tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":109,"deletions":39}}},{"hash":"a02b2bf668449c729cc2e5b91caaa47e51f80d46","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Junit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"26501841c236f397f7d192d7af543171772c2972","isMergeCommit":false,"messageTitle":"added JAR plugins","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4}}},{"hash":"7a46d9586be9dcd012d35242904bf6b04db5cd55","isMergeCommit":false,"messageTitle":"fixed some code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":18}}},{"hash":"89f46663bdf99e430a3f28bdfdbead2fa6281778","isMergeCommit":false,"messageTitle":"add Java Docs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":245,"deletions":71}}},{"hash":"7e409caaf86dd06993ff77360e98994fe9036d14","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"606e4bfe1bc240ee56367518b9a1e0354d05813c","isMergeCommit":false,"messageTitle":"modify code to follow coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"c6799da59d2eb1341d6caf659b7b96bad244bd5a","isMergeCommit":true,"messageTitle":"fix merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"760979d7476dda6358f16343090a689da39daad2","isMergeCommit":false,"messageTitle":"fix merge conflict","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":23}}},{"hash":"a1f59e2e6fe3ba8bb6788d70e5770d5843475772","isMergeCommit":false,"messageTitle":"add level 9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"dd5916beae3429ff95dab3cb6e67d837601d16c4","isMergeCommit":true,"messageTitle":"fix merge conflict with level-9 branch","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"866b376047061e05194ae79daa0f636efe1a4518","isMergeCommit":false,"messageTitle":"add JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":238,"deletions":1}}},{"hash":"6f9861b263cce942c9ef63c98303d61128f46289","isMergeCommit":false,"messageTitle":"Add FXML skeleton code","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":113,"deletions":190}}},{"hash":"0f29cad731594f7d1a07bf57eadde3f7bae2691a","isMergeCommit":false,"messageTitle":"Integrate FXML with Taskmaster logic","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":94,"deletions":87}}},{"hash":"f7038671bf1a1886acc962aca9f87604a1151618","isMergeCommit":false,"messageTitle":"Add CSS styling","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":24,"deletions":7},"java":{"insertions":1,"deletions":14}}},{"hash":"19a7265095f3507293dd3a62cc83a0c58a9ddea2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"7cf6a2d86f69400a9005d5fdb5214b16c2b96b03","isMergeCommit":false,"messageTitle":"update UI source code files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":17,"deletions":0}}},{"hash":"dd161b92c8a21a180705e30f6cea7033d7895938","isMergeCommit":false,"messageTitle":"Add assertions to verify task operations","messageBody":"This commit adds assertions to improve input validation. It ensures user inputs gives a valid commands and verified, and that task indexes is valid and within range, and descriptions is not null\n\nThese assertions allows testing of correctness of any assumption that have been made\n","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":2},"java":{"insertions":20,"deletions":1}}},{"hash":"847d79e6bd2748e49e011f4cd04a51d17161703c","isMergeCommit":false,"messageTitle":"Improve code quality for Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":33}}},{"hash":"5876bc2b555ecbd44b38bc081eae9788cf4a7cb9","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"In this commit, code quality for storage and taskList class is improved. Removed deep nesting, shortened long methods, and restructure some methods to make the happy path prominient\n\nThis improvements will contribute to better maintanbility and more readable code\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":32,"deletions":25}}},{"hash":"cdee6b65f2a7b988e8e6cd1ed4028a8cf38c6a1b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nicleongyj/branch-A-Assertions","messageBody":"Add assertions to verify task operations","fileTypesAndContributionMap":{}},{"hash":"9691b51a95c022eccea6794578fe96f7a76dc09d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"0933e539b44bd2ba9e4564ab1565e84e2bc7e0af","isMergeCommit":false,"messageTitle":"Refactor addTask method","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":127,"deletions":30}}},{"hash":"575e1850dddc4f470240219ae66365cd11011361","isMergeCommit":false,"messageTitle":"Add duplicate checker to detect and prevent duplicate tasks","messageBody":"-Implemented a feature to detect duplicate descriptions for todo tasks\n\n-Implemented checking feature to check duplicate description and timings for deadlines and events\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":3},"java":{"insertions":37,"deletions":32}}},{"hash":"9dcd95d0ed522d274d659ba9d2ca2268dee0e33a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9197bf508d1a83d9c65b9ca5f5efeab578609d8f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5eefe31d6065929d5c03a7ec052d67eb201b62b3","isMergeCommit":true,"messageTitle":"Merge pull request #3 from nicleongyj/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"5cb9c1925e04da794c3d412b5e3ea4bd4e876145","isMergeCommit":false,"messageTitle":"Add javadocs to methods and refactored AddTask method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":134,"deletions":62}}}]},{"date":"2023-09-16","commitResults":[{"hash":"2a92ff200636b0134dae7923bb1e88590868bf30","isMergeCommit":false,"messageTitle":"Fix storage functionality for JAR files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":10,"deletions":9}}},{"hash":"09a154e8c2a828f45411acfdfe27758f8c98e378","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-FixStorage\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6b7254d5f00e0358cce304fd881785464a865156","isMergeCommit":false,"messageTitle":"Finalise code and improve code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"nicleongyj":{"java":1166,"md":0,"fxml":52,"sh":0,"bat":0,"gradle":9,"txt":22}},"authorContributionVariance":{"nicleongyj":57892.07},"authorDisplayNameMap":{"nicleongyj":"CS2103T-T12-2 LEON..OLAS"}} diff --git a/nicrandomlee_ip_master/authorship.json b/nicrandomlee_ip_master/authorship.json index c82680a1..507fecd4 100644 --- a/nicrandomlee_ip_master/authorship.json +++ b/nicrandomlee_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":"nicrandomlee"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-08"},{"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":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"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":"nicrandomlee"},"content":" mainClass.set(\"Cupid\")","lastModifiedDate":"2023-09-08"},{"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":"nicrandomlee"},"content":" archiveBaseName \u003d \"Cupid.jar\"","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":"-"},"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":{"nicrandomlee":18,"-":40}},{"path":"cupid.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"[D][X] cs2103 (by: Jan 30 2021 10:00)","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"[T][ ] charlton sandwich","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"[E][ ] charlton birthday (from: Feb 19 2021 19:00 to: Feb 20 2021 02:00)","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"[T][X] eat macs","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"nicrandomlee":4}},{"path":"src/main/java/Runner/Cupid.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package Runner;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import functions.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import functions.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"public class Cupid {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private String saveFilePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" private Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" private Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" public Cupid(String saveFilePath) {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" this.saveFilePath \u003d saveFilePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" this.storage \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" this.storage \u003d new Storage(this.saveFilePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d this.storage.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" this.storage.save(this.taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" Parser parser \u003d new Parser(input, this.taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" String result \u003d parser.parse();","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" this.storage.save(this.taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nicrandomlee":42}},{"path":"src/main/java/Runner/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package Runner;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"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":"nicrandomlee"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"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":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":61}},{"path":"src/main/java/Runner/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package Runner;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":12}},{"path":"src/main/java/Runner/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package Runner;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" * A GUI for Cupid using FXML.","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" private Cupid cupid \u003d new Cupid(\"cupid.txt\");","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(cupid);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":32}},{"path":"src/main/java/Runner/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package Runner;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.Ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" private Cupid cupid;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/DaUser.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/DaDuke.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" public void setDuke(Cupid cupid) {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" this.cupid \u003d cupid;","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" if (input.toLowerCase().equals(\"bye\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" String exitMsg \u003d new Ui().goodbye();","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" DialogBox.getDukeDialog(exitMsg, dukeImage)","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" );","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" // Create a PauseTransition to delay the application exit","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(2));","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" delay.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" Platform.exit(); // Exit the application after the delay","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" });","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" delay.play();","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" userInput.clear();","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" } else {","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" String response \u003d cupid.getResponse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"nicrandomlee":72}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" * The base abstract class for different types of commands.","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" * Executes the command given.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" return null;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * Parses a String format of datetime into a LocalDateTime object.","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" * @param dateTimeString a String format of datetime","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" * @return a LocalDateTime object","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public LocalDateTime parseDateTime(String dateTimeString) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" String[] possibleFormats \u003d {\"yyyy-MM-dd HHmm\", \"yyyy/MM/dd HHmm\",\"dd-MM-yyyy HHmm\",\"dd/MM/yyyy HHmm\",","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" \"yyyy-MM-dd HH:mm\", \"yyyy/MM/dd HH:mm\",\"dd-MM-yyyy HH:mm\",\"dd/MM/yyyy HH:mm\", \"MMM dd yyyy HH:mm\"};","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime dateTime \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" for (String format : possibleFormats) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" dateTime \u003d LocalDateTime.parse(dateTimeString, DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return dateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" // do nothing, try the next format.","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" System.out.println(\"DateTime in an invalid format. Please enter datetime in the following format: \\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" \"YYYY/MM/DD HH:MM\");","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" return null;","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":43}},{"path":"src/main/java/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing an addition command of a deadline task","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"public class DeadlineCommand extends Command{","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" private String functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" public DeadlineCommand(TaskList taskList, String functionDescription) {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" this.functionDescription \u003d functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" String[] deadlineInputArray \u003d this.functionDescription.split(\"/\");","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" String deadlineDescription \u003d deadlineInputArray[0].substring(0,deadlineInputArray[0].length()-1);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" String deadlineDateString \u003d deadlineInputArray[1].substring(3);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime deadlineDate \u003d parseDateTime(deadlineDateString);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" return \"Error in parsing date.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" Deadline newDeadline \u003d new Deadline(deadlineDescription, deadlineDate);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" this.taskList.add(newDeadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"Added: \" + newDeadline.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e ) {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" return \"Sorry, I did not understand that. Please enter in the following format: \\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" \"deadline {description} /by {deadline}.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":41}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing a delete command on a task from a TaskList","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private String[] inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" public DeleteCommand(TaskList taskList, String[] inputArray) {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" this.inputArray \u003d inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" int targetTaskIdx \u003d Integer.parseInt(inputArray[1]) -1;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" Task task \u003d taskList.get(targetTaskIdx);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" taskList.remove(targetTaskIdx);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"Noted: I\u0027ve removed this task: \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d task.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid number provided. Please provide in the form of \u0027delete {task number}\u0027. Eg: \u0027delete 1\u0027 to delete task 1.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid task number provided. Please provide in the form of \u0027delete {task number}\u0027. Eg: \u0027delete 1\u0027 to delete task 1.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return \"Error in deleting task. Please write the command in the format \u0027delete {task number}\u0027 to delete task\";","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":37}},{"path":"src/main/java/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing an addition command of an event task","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" private String functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public EventCommand(TaskList taskList, String functionDescription) {","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" this.functionDescription \u003d functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" int fromDateStartIdx \u003d functionDescription.indexOf(\"/from\") + 6;","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" int toDateStartIdx \u003d functionDescription.indexOf(\"/to\") + 4;","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" int fromDateEndIdx \u003d functionDescription.indexOf(\"/to\") - 1;","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" int descriptionStartIdx \u003d 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" int descriptionEndIdx \u003d functionDescription.indexOf(\"/from\") - 1;","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" String eventDescription \u003d functionDescription.substring(descriptionStartIdx, descriptionEndIdx);","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" String fromDateString \u003d functionDescription.substring(fromDateStartIdx, fromDateEndIdx);","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" String toDateString \u003d functionDescription.substring(toDateStartIdx);","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime fromDate \u003d parseDateTime(fromDateString);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime toDate \u003d parseDateTime(toDateString);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" boolean fromDateIsNull \u003d fromDate \u003d\u003d null;","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" boolean toDateIsNull \u003d toDate \u003d\u003d null;","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" if (fromDateIsNull || toDateIsNull) {","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" return \"Please input a date in the correct format.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" boolean isClash \u003d checkClash(fromDate, toDate);","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" if (isClash) {","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" return \"Unable to add event due to clash of timings for added event.\";","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" Event newEvent \u003d new Event(eventDescription, fromDate, toDate);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" taskList.add(newEvent);","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"Added: \" + newEvent.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" return \"Sorry, I did not understand that. Please enter in the following format: \\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" \"event {description} /from {start datetime} /to {end datetime}.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" public boolean checkClash(LocalDateTime fromDate, LocalDateTime toDate) {","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" TaskList clashingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" for (Task task: this.taskList.getTaskList()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" if (!(task instanceof Event)) {","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":" continue;","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"nicrandomlee"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime startDate \u003d parseDateTime(event.getStartDate());","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime endDate \u003d parseDateTime(event.getEndDate());","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"nicrandomlee"},"content":" boolean isBeforeEventEnd \u003d fromDate.isBefore(endDate);","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"nicrandomlee"},"content":" boolean isAfterEventStart \u003d toDate.isAfter(startDate);","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"nicrandomlee"},"content":" if (isBeforeEventEnd \u0026\u0026 isAfterEventStart) {","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"nicrandomlee"},"content":" clashingTasks.add(event);","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"nicrandomlee"},"content":" if (clashingTasks.size() \u003e 0) {","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"nicrandomlee"},"content":" return true;","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"nicrandomlee"},"content":" return false;","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":91}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing a find command from a TaskList","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private String functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" public FindCommand(TaskList taskList, String functionDescription) {","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" this.functionDescription \u003d functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" for (Task task: this.taskList.getTaskList()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" if (task.getDescription().contains(this.functionDescription)) {","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" ListCommand command \u003d new ListCommand(matchingTasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" String listCommandResult \u003d command.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" message \u003d message + listCommandResult + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":39}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing a help command to render assistance to user","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"Hello! Please find the following commands available below: \\n\" +","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" \"1. Deadline. Syntax: deadline {description} /by {date time} \\n\" +","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" \"2. Delete. Syntax: delete {Task Number} \\n\" +","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" \"3. Event. Syntax: event {description} /from {date time} /to {date time} \\n\" +","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" \"4. Find. Syntax: find {keyword} \\n\" +","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" \"5. Help. Syntax: help \\n\" +","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" \"6. List. Syntax: list \\n\" +","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" \"7. Mark. Syntax: mark {Task Number} \\n\" +","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" \"8. ToDo. Syntax: todo {description} \\n\" +","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" \"9. Unmark. Syntax: unmark {Task Number} \\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"nicrandomlee":23}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing a list command to list out all tasks in the task list","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class ListCommand extends Command{","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" public ListCommand(TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" boolean taskListIsEmpty \u003d taskList.size() \u003d\u003d 0;","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" if (taskListIsEmpty) {","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" return \"There are no tasks stored currently!\";","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" for (int i\u003d0; i\u003ctaskList.size(); i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d String.format(\"%d. %s\", i+1, taskList.get(i).getTaskAsString());","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":31}},{"path":"src/main/java/commands/LoadDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" * Represents a command to load a deadline task into a task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"public class LoadDeadlineCommand extends Command {","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" private String currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new LoadDeadlineCommand object with the given parameters.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * @param currentTaskAsString a string representation of the deadline task to be loaded","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList the task list to which the deadline task should be added","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" public LoadDeadlineCommand(String currentTaskAsString, TaskList taskList) {","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" this.currentTaskAsString \u003d currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" boolean isDone \u003d currentTaskAsString.substring(4, 5).toUpperCase().equals(\"X\");","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" int descriptionBeginIndex \u003d 7;","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" int descriptionEndIndex \u003d currentTaskAsString.indexOf(\"(by:\") - 1;","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" int deadlineStartIndex \u003d currentTaskAsString.indexOf(\"(by:\") + 5;","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" String description \u003d currentTaskAsString.substring(descriptionBeginIndex, descriptionEndIndex);","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" String deadlineTimeString \u003d currentTaskAsString.substring(deadlineStartIndex, currentTaskAsString.length() - 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime deadlineTime \u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" deadlineTime \u003d LocalDateTime.parse(deadlineTimeString, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" return \"tasks.Deadline \" + description + \" cannot be loaded.\";","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" Deadline deadline \u003d new Deadline(description, deadlineTime, isDone);","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" return \"Ok\";","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"nicrandomlee":50}},{"path":"src/main/java/commands/LoadEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" * Represents a command to load a event task into a task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"public class LoadEventCommand extends Command{","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" private String currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new LoadEventCommand object with the given parameters.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * @param currentTaskAsString a string representation of the event task to be loaded","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList the task list to which the event task should be added","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" public LoadEventCommand(String currentTaskAsString, TaskList taskList) {","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" this.currentTaskAsString \u003d currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" boolean isDone \u003d currentTaskAsString.substring(4, 5).toUpperCase().equals(\"X\");","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" int descriptionBeginIndex \u003d 7;","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" int descriptionEndIndex \u003d currentTaskAsString.indexOf(\"(from:\")-1;","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" int fromTimingStartIndex \u003d currentTaskAsString.indexOf(\"(from:\") + 7;","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" int fromTimingEndIndex \u003d currentTaskAsString.indexOf(\"to:\")-1;","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" int toTimingStartIndex \u003d fromTimingEndIndex + 5;","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" int toTimingEndIndex \u003d currentTaskAsString.length() - 1;","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" String description \u003d currentTaskAsString.substring(descriptionBeginIndex, descriptionEndIndex);","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" String fromString \u003d currentTaskAsString.substring(fromTimingStartIndex, fromTimingEndIndex);","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" String toString \u003d currentTaskAsString.substring(toTimingStartIndex, toTimingEndIndex);","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime fromDateTime \u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime toDateTime \u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" fromDateTime \u003d LocalDateTime.parse(fromString, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" toDateTime \u003d LocalDateTime.parse(toString, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" return \"tasks.Event \" + description + \" cannot be loaded.\";","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" Event event \u003d new Event(description, fromDateTime, toDateTime, isDone);","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" taskList.add(event);","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" return \"Ok\";","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"nicrandomlee":59}},{"path":"src/main/java/commands/LoadToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * Represents a command to load a todo task into a task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class LoadToDoCommand extends Command {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private String currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new LoadEventCommand object with the given parameters.","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" * @param currentTaskAsString a string representation of the todo task to be loaded","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList the task list to which the todo task should be added","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public LoadToDoCommand(String currentTaskAsString, TaskList taskList) {","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" this.currentTaskAsString \u003d currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" boolean isDone \u003d currentTaskAsString.substring(4, 5).toUpperCase().equals(\"X\");","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" int descriptionBeginIndex \u003d 7;","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" String description \u003d currentTaskAsString.substring(descriptionBeginIndex);","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" ToDo todo \u003d new ToDo(description, isDone);","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" taskList.add(todo);","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return \"Ok\";","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"nicrandomlee":35}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for a command to mark a task from a TaskList","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private String[] inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" public MarkCommand(TaskList taskList, String[] inputArray) {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" this.inputArray \u003d inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" int targetTaskIdx \u003d Integer.parseInt(this.inputArray[1]) -1;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" Task task \u003d this.taskList.get(targetTaskIdx);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d task.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid number provided. Please provide in the form of \u0027mark {task number}\u0027. Eg: \u0027mark 1\u0027 to mark task 1.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid task number provided. Please provide in the form of \u0027mark {task number}\u0027. Eg: \u0027mark 1\u0027 to mark task 1.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":34}},{"path":"src/main/java/commands/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing an addition command of a todo task","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class ToDoCommand extends Command{","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private String description;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new ToDoCommand object with the given parameters.","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList the task list to which the new ToDo task should be added","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param description the description of the new ToDo task","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public ToDoCommand(TaskList taskList, String description) {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" if (this.description.strip().isEmpty() || this.description.matches(\"todo\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" return \"OOPS! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" ToDo newTodo \u003d new ToDo(this.description);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" this.taskList.add(newTodo);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" return \"I have added the following: \\n\" + newTodo.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":36}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for a command to unmark a task from a TaskList","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class UnmarkCommand extends Command{","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private String[] inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" public UnmarkCommand(TaskList taskList, String[] inputArray) {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" this.inputArray \u003d inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" int targetTaskIdx \u003d Integer.parseInt(this.inputArray[1]) -1;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" Task task \u003d this.taskList.get(targetTaskIdx);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" task.markAsUndone();","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"Ok! I\u0027ve marked this task as not done yet: \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d task.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid number provided. Please provide in the form of \u0027unmark {task number}\u0027. Eg: \u0027unmark 1\u0027 to unmark task 1.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid task number provided. Please provide in the form of \u0027unmark {task number}\u0027. Eg: \u0027unmark 1\u0027 to unmark task 1.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":34}},{"path":"src/main/java/functions/Load.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import commands.Command;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import commands.LoadDeadlineCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import commands.LoadEventCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import commands.LoadToDoCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * A utility class for loading a file.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":"public class Load {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" TaskList taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" private String loadFilePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a new Load instance","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" * @param loadFilePath file path to load","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" public Load(String loadFilePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" this.loadFilePath \u003d loadFilePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" * Loads the tasks in a file and returns the previously saved version of a Task List.","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" * @return A loaded TaskList","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" public TaskList load() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" FileReader f \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" // Checks if file exists.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" f \u003d new FileReader(loadFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" // Creates new taskList","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" return this.taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" Scanner s \u003d new Scanner(f); // create a Scanner using the File as the source","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" String currentTaskAsString \u003d s.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" String taskType \u003d currentTaskAsString.substring(1, 2).toUpperCase();","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" String commandResult;","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new LoadToDoCommand(currentTaskAsString, this.taskList);","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" commandResult \u003d command.execute();","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new LoadDeadlineCommand(currentTaskAsString, this.taskList);","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" commandResult \u003d command.execute();","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new LoadEventCommand(currentTaskAsString, this.taskList);","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"nicrandomlee"},"content":" commandResult \u003d command.execute();","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"nicrandomlee"},"content":" default:","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"nicrandomlee"},"content":" commandResult \u003d \"Error\";","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"nicrandomlee"},"content":" assert commandResult \u003d\u003d \"Ok\";","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"nicrandomlee"},"content":" f.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"nicrandomlee"},"content":" return this.taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"nicrandomlee":86}},{"path":"src/main/java/functions/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import commands.*;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":" * A utility class for parsing user input and generating appropriate commands.","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" private enum ChatFunction {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" LIST,","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" MARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" UNMARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" DEADLINE,","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" DELETE,","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" FIND,","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" HELP","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a new Parser instance","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" * @param input file path to load","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList a task list containing all the tasks stored","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" public Parser(String input, TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" * Parses the input specified by the Parser object and executes specified command.","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" * @return A String message generated by the execution of specified command.","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" public String parse() {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" String[] inputArray \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" ChatFunction function \u003d ChatFunction.valueOf(inputArray[0].toUpperCase());","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" int firstSpaceIndex \u003d input.indexOf(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" String functionDescription \u003d input.substring(firstSpaceIndex+1);","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" Command command\u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" switch (function) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" case LIST:","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new ListCommand(this.taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" case MARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new MarkCommand(this.taskList, inputArray);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" case UNMARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new UnmarkCommand(this.taskList, inputArray);","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" case DELETE:","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new DeleteCommand(this.taskList, inputArray);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new ToDoCommand(this.taskList, functionDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicrandomlee"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new DeadlineCommand(this.taskList, functionDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nicrandomlee"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new EventCommand(this.taskList, functionDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nicrandomlee"},"content":" case FIND:","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new FindCommand(this.taskList, functionDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"nicrandomlee"},"content":" case HELP:","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new HelpCommand();","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"nicrandomlee"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"nicrandomlee"},"content":" assert command !\u003d null: \"Command should not be null or empty\";","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"nicrandomlee"},"content":" String result \u003d command.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"nicrandomlee"},"content":" assert result !\u003d null: \"Result should not be null or empty String\";","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"nicrandomlee"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"nicrandomlee"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nicrandomlee"},"content":" // If task inserted not an ENUM","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicrandomlee"},"content":" String illegalArgumentResult \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"nicrandomlee"},"content":" illegalArgumentResult +\u003d \"Oops!!! I\u0027m sorry but I don\u0027t know what that means :-( \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"nicrandomlee"},"content":" illegalArgumentResult +\u003d \"Run help to get a list of available commands.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"nicrandomlee"},"content":" return illegalArgumentResult;","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"nicrandomlee"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"nicrandomlee"},"content":" String nullPointerResult \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"nicrandomlee"},"content":" nullPointerResult +\u003d \"Oh no, you have entered an invalid statement. \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"nicrandomlee"},"content":" nullPointerResult +\u003d \"Run help to get a list of available commands.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":109,"author":{"gitId":"nicrandomlee"},"content":" return nullPointerResult;","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"nicrandomlee"},"content":" return \"I did not understand that! Run help to get a list of available commands.\";","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nicrandomlee":115}},{"path":"src/main/java/functions/Save.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import java.nio.file.StandardCopyOption;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" * A utility class for saving a file.","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"public class Save {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" TaskList taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" private String saveFilePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" private static final String tempFilePath \u003d \"temp.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize functions.Save","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList a task list to store tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" * @param saveFilePath file path of saved file","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" public Save(TaskList taskList, String saveFilePath) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" this.saveFilePath \u003d saveFilePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" saveFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" public void saveFile() {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" File f \u003d new File(saveFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" FileWriter fw \u003d new FileWriter(saveFilePath, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" fw.write(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" FileWriter fw \u003d new FileWriter(tempFilePath, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" fw.write(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d String.format(\"%s\", taskList.get(i).getTaskAsString());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" addFileContents(tempFilePath, message);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" Files.copy(Paths.get(tempFilePath), Paths.get(saveFilePath), StandardCopyOption.REPLACE_EXISTING);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" Files.delete(Paths.get(tempFilePath));","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" System.out.println(\"Error in saving\");","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" public static void addFileContents(String filePath, String contents) {","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" fw.write(contents + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" System.out.println(\"Unable to create file. Please try again later.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"nicrandomlee":69}},{"path":"src/main/java/functions/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a new storage instance","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" * @param filePath file path to load","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" public TaskList load() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" Load load \u003d new Load(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" return load.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" public void save(TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" Save save \u003d new Save(taskList, this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"nicrandomlee":25}},{"path":"src/main/java/functions/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a new TaskList instance","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" return this.taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" public Task get(int idx) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" return this.taskList.get(idx);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" public void add(Task task){","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" public int size() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" public void remove(int idx) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" this.taskList.remove(idx);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"nicrandomlee":39}},{"path":"src/main/java/functions/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a new Ui instance","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" System.out.println(\"Initializing...\");","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" public String fileNotFound() {","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" return \"File not found. Creating new .txt save file\";","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" public String goodbye() {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"_______________________________________\\n\";","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"Bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"_______________________________________\";","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"nicrandomlee":24}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * Represents a deadline task, with a description and the due date.","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private String TaskIcon \u003d \"[D]\";","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Deadline task","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param deadline a datetime instance of the deadline of task","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public Deadline(String description, LocalDateTime deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Deadline task","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" * @param deadline a datetime instance of the deadline of task","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" * @param isDone task completion status","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" public Deadline(String description, LocalDateTime deadline, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" public String getTaskAsString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d String.format(\"%s[%s] %s (by: %s)\", this.TaskIcon,this.getStatusIcon(), this.getDescription(), this.getDeadlineDate());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" * Parses the LocalDateTime of the deadline datetime to a String representation","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" * @return A String representation of LocalDateTime of deadline","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" public String getDeadlineDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" String formattedDateTime \u003d this.deadline.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" return formattedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"nicrandomlee":53}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * Represents a event task, with a description, the start and the end date.","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private String TaskIcon \u003d \"[E]\";","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private LocalDateTime startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" private LocalDateTime endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Deadline task","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" * @param startDate a datetime instance of the expected start of task","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * @param endDate a datetime instance of the expected end of task","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" public Event(String description, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Deadline task","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" * @param startDate a datetime instance of the expected start of task","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" * @param endDate a datetime instance of the expected end of task","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" * @param isDone task completion status","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" public Event(String description, LocalDateTime startDate, LocalDateTime endDate, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" // For functions.Load","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" public String getTaskAsString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d String.format(\"%s[%s] %s (from: %s to: %s)\", this.TaskIcon,this.getStatusIcon(),","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" this.getDescription(), this.getStartDate(), this.getEndDate());","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" * Parses the LocalDateTime of the start datetime to a String representation","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" * @return A String representation of start LocalDateTime","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" public String getStartDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" String formattedDateTime \u003d this.startDate.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" return formattedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" * Parses the LocalDateTime of the end datetime to a String representation","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" * @return A String representation of end LocalDateTime","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" public String getEndDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" String formattedDateTime \u003d this.endDate.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" return formattedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"nicrandomlee":70}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":" * The base class for different types of tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a task","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a task","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" * @param isDone task completion status","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" * Gets the completion status of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" * @return A String object representing the completion status of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" * Gets the String representation of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" * @return A String representation of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" public String getTaskAsString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d String.format(\"[%s] %s\", this.getStatusIcon(), this.getDescription());","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" * Marks tasks as done","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" * Marks tasks as undone","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" * Gets the String description of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" * @return A String description of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nicrandomlee":72}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":" * Represents a todo task with a description.","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" private String TaskIcon \u003d \"[T]\";","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Todo task","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Todo task","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" * @param isDone task completion status","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" // Constructor for functions.Load","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" public String getTaskAsString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d String.format(\"%s[%s] %s\", this.TaskIcon,this.getStatusIcon(), this.getDescription());","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"nicrandomlee":35}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"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":"nicrandomlee"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"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":"nicrandomlee"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"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":"nicrandomlee"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"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\"Runner.MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"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":"nicrandomlee"},"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":"nicrandomlee"},"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":"nicrandomlee"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":19}},{"path":"src/test/java/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" public void deadlineTest1() {","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime deadlineTime \u003d LocalDateTime.parse(\"2023-09-12 14:00\",","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" Deadline deadlineTask \u003d new Deadline(\"cs2103 assignment\", deadlineTime);","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" assertEquals(deadlineTask.getTaskAsString(), \"[D][ ] cs2103 assignment (by: Sep 12 2023 14:00)\");","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" fail();","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"nicrandomlee":24}},{"path":"src/test/java/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" public void toDoTest1() {","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" String todo \u003d \"todo water plants\";","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" String deadline \u003d \"deadline cs2103 assignment /by 2023-09-12 14:00\";","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" String event \u003d \"event Jackie\u0027s birthday /from 2023-09-10 20:00 /to 2023-09-11 02:00\";","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime deadlineTime \u003d LocalDateTime.parse(\"2023-09-12 14:00\",","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime eventStartTime \u003d LocalDateTime.parse(\"2023-09-10 20:00\",","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime eventEndTime \u003d LocalDateTime.parse(\"2023-09-11 02:00\",","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" ToDo todoTask \u003d new ToDo(\"water plants\");","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" Deadline deadlineTask \u003d new Deadline(\"cs2103 assignment\", deadlineTime);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" Event eventTask \u003d new Event(\"Jackie\u0027s birthday\", eventStartTime, eventEndTime);","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" assertEquals(todoTask.getTaskAsString(),\"[T][ ] water plants\");","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" assertEquals(deadlineTask.getTaskAsString(), \"[D][ ] cs2103 assignment (by: Sep 12 2023 14:00)\");","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" assertEquals(eventTask.getTaskAsString(), \"[E][ ] Jackie\u0027s birthday (from: Sep 10 2023 20:00 to: Sep 11 2023 02:00)\");","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" fail();","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"nicrandomlee":35}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"todo water flowers","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"mark 4","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"mark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"unmark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"delete 1","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"nicrandomlee":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":"nicrandomlee"},"content":"java -classpath ..\\bin Cupid \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":{"nicrandomlee":1,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-08"},{"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":"nicrandomlee"},"content":"checkstyle {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"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":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"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":"nicrandomlee"},"content":" mainClass.set(\"Cupid\")","lastModifiedDate":"2023-09-08"},{"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":"nicrandomlee"},"content":" archiveBaseName \u003d \"Cupid.jar\"","lastModifiedDate":"2023-09-08"},{"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":{"nicrandomlee":22,"-":40}},{"path":"cupid.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"[D][X] cs2103 (by: Jan 30 2021 10:00)","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"[T][ ] charlton sandwich","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"[E][ ] charlton birthday (from: Feb 19 2021 19:00 to: Feb 20 2021 02:00)","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"[T][X] eat macs","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"nicrandomlee":4}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" * The base abstract class for different types of commands.","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" * Executes the command given.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" return null;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * Parses a date and time string into a LocalDateTime object.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" * @param dateTimeString the date and time string to parse.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" * @return the parsed LocalDateTime object, or null if the string is in an invalid format.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public LocalDateTime parseDateTime(String dateTimeString) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" String[] possibleFormats \u003d {\"yyyy-MM-dd HHmm\", \"yyyy/MM/dd HHmm\", \"dd-MM-yyyy HHmm\", \"dd/MM/yyyy HHmm\",","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" \"yyyy-MM-dd HH:mm\", \"yyyy/MM/dd HH:mm\", \"dd-MM-yyyy HH:mm\", \"dd/MM/yyyy HH:mm\", \"MMM dd yyyy HH:mm\"};","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime dateTime \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" for (String format : possibleFormats) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" dateTime \u003d LocalDateTime.parse(dateTimeString, DateTimeFormatter.ofPattern(format));","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return dateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" // do nothing, try the next format.","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" System.out.println(\"DateTime in an invalid format. Please enter datetime in the following format: \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" + \"YYYY/MM/DD HH:MM\");","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" return null;","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":43}},{"path":"src/main/java/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing an addition command of a deadline task","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" private String functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new DeadlineCommand object with the specified task list and function description.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList The task list to add the deadline task to.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * @param functionDescription The description of the deadline task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" public DeadlineCommand(TaskList taskList, String functionDescription) {","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.functionDescription \u003d functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" String[] deadlineInputArray \u003d this.functionDescription.split(\"/\");","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" String deadlineDescription \u003d deadlineInputArray[0].substring(0, deadlineInputArray[0].length() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" String deadlineDateString \u003d deadlineInputArray[1].substring(3);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime deadlineDate \u003d parseDateTime(deadlineDateString);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" return \"Error in parsing date.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" Deadline newDeadline \u003d new Deadline(deadlineDescription, deadlineDate);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" this.taskList.add(newDeadline);","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"Added: \" + newDeadline.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" return \"Sorry, I did not understand that. Please enter in the following format: \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" + \"deadline {description} /by {deadline}.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":49}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing a delete command on a task from a TaskList","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private String[] inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new DeleteCommand object with the specified task list and input array.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList The task list to delete the task from.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param inputArray The input array containing the task number to be deleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public DeleteCommand(TaskList taskList, String[] inputArray) {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" this.inputArray \u003d inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" int targetTaskIdx \u003d Integer.parseInt(inputArray[1]) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" Task task \u003d taskList.get(targetTaskIdx);","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" taskList.remove(targetTaskIdx);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"Noted: I\u0027ve removed this task: \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d task.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid number provided. Please provide in the form of \u0027delete {task number}\u0027. \"","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" + \"Eg: \u0027delete 1\u0027 to delete task 1.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid task number provided. Please provide in the form of \u0027delete {task number}\u0027. \"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" + \"Eg: \u0027delete 1\u0027 to delete task 1.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" return \"Error in deleting task. Please write the command in the format \u0027delete {task number}\u0027 \"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" + \"to delete task\";","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":46}},{"path":"src/main/java/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing an addition command of an event task","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" private String functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new EventCommand object with the specified task list and function description.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList The task list to add the event task to.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * @param functionDescription The description of the event task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" public EventCommand(TaskList taskList, String functionDescription) {","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.functionDescription \u003d functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" int fromDateStartIdx \u003d functionDescription.indexOf(\"/from\") + 6;","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" int toDateStartIdx \u003d functionDescription.indexOf(\"/to\") + 4;","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" int fromDateEndIdx \u003d functionDescription.indexOf(\"/to\") - 1;","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" int descriptionStartIdx \u003d 0;","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" int descriptionEndIdx \u003d functionDescription.indexOf(\"/from\") - 1;","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" String eventDescription \u003d functionDescription.substring(descriptionStartIdx, descriptionEndIdx);","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" String fromDateString \u003d functionDescription.substring(fromDateStartIdx, fromDateEndIdx);","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" String toDateString \u003d functionDescription.substring(toDateStartIdx);","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime fromDate \u003d parseDateTime(fromDateString);","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime toDate \u003d parseDateTime(toDateString);","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" boolean fromDateIsNull \u003d fromDate \u003d\u003d null;","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" boolean toDateIsNull \u003d toDate \u003d\u003d null;","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" if (fromDateIsNull || toDateIsNull) {","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" return \"Please input a date in the correct format.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" Event newEvent \u003d new Event(eventDescription, fromDate, toDate);","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" taskList.add(newEvent);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" TaskList clashingTasks \u003d checkClash(newEvent, fromDate, toDate);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" if (clashingTasks.size() \u003e 0) {","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"Please take note that you have the following tasks in conflict: \\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d new ListCommand(clashingTasks).execute();","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"Added: \" + newEvent.getTaskAsString();","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" return \"Sorry, I did not understand that. Please enter in the following format: \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" + \"event {description} /from {start datetime} /to {end datetime}.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"nicrandomlee"},"content":" * Parses a String format of datetime into a LocalDateTime object.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"nicrandomlee"},"content":" * @param newEvent an Event for comparison","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"nicrandomlee"},"content":" * @param fromDate start date of event","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"nicrandomlee"},"content":" * @param toDate end date of event","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"nicrandomlee"},"content":" * @return a TaskList consisting of all the events that clashes with the one given in input","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"nicrandomlee"},"content":" public TaskList checkClash(Event newEvent, LocalDateTime fromDate, LocalDateTime toDate) {","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"nicrandomlee"},"content":" TaskList clashingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"nicrandomlee"},"content":" for (Task task: this.taskList.getTaskList()) {","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"nicrandomlee"},"content":" if (!(task instanceof Event) || task.equals(newEvent)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"nicrandomlee"},"content":" continue;","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"nicrandomlee"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime startDate \u003d parseDateTime(event.getStartDate());","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime endDate \u003d parseDateTime(event.getEndDate());","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"nicrandomlee"},"content":" boolean isBeforeEventEnd \u003d fromDate.isBefore(endDate);","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"nicrandomlee"},"content":" boolean isAfterEventStart \u003d toDate.isAfter(startDate);","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"nicrandomlee"},"content":" if (isBeforeEventEnd \u0026\u0026 isAfterEventStart) {","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"nicrandomlee"},"content":" clashingTasks.add(event);","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"nicrandomlee"},"content":" return clashingTasks;","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":105}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing a find command from a TaskList","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private String functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new FindCommand object with the specified task list and keyword to search for.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList The task list to search for matching tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param functionDescription The keyword to search for in the task descriptions.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public FindCommand(TaskList taskList, String functionDescription) {","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" this.functionDescription \u003d functionDescription;","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" for (Task task: this.taskList.getTaskList()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" if (task.getDescription().contains(this.functionDescription)) {","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" ListCommand command \u003d new ListCommand(matchingTasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" String listCommandResult \u003d command.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" message \u003d message + listCommandResult + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":45}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing a help command to render assistance to user","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"Hello! Please find the following commands available below: \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" + \"1. Deadline. Syntax: deadline {description} /by {date time} \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" + \"2. Delete. Syntax: delete {Task Number} \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" + \"3. Event. Syntax: event {description} /from {date time} /to {date time} \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" + \"4. Find. Syntax: find {keyword} \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" + \"5. Help. Syntax: help \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" + \"6. List. Syntax: list \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" + \"7. Mark. Syntax: mark {Task Number} \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" + \"8. ToDo. Syntax: todo {description} \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" + \"9. Unmark. Syntax: unmark {Task Number} \\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"nicrandomlee":23}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing a list command to list out all tasks in the task list","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new ListCommand object with the specified task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList The task list to list all tasks from.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" public ListCommand(TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" boolean taskListIsEmpty \u003d taskList.size() \u003d\u003d 0;","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" if (taskListIsEmpty) {","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" return \"There are no tasks stored currently!\";","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d String.format(\"%d. %s\", i + 1, taskList.get(i).getTaskAsString());","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":35}},{"path":"src/main/java/commands/LoadDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" * Represents a command to load a deadline task into a task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"public class LoadDeadlineCommand extends Command {","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" private String currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new LoadDeadlineCommand object with the given parameters.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * @param currentTaskAsString a string representation of the deadline task to be loaded","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList the task list to which the deadline task should be added","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" public LoadDeadlineCommand(String currentTaskAsString, TaskList taskList) {","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" this.currentTaskAsString \u003d currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" boolean isDone \u003d currentTaskAsString.substring(4, 5).toUpperCase().equals(\"X\");","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" int descriptionBeginIndex \u003d 7;","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" int descriptionEndIndex \u003d currentTaskAsString.indexOf(\"(by:\") - 1;","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" int deadlineStartIndex \u003d currentTaskAsString.indexOf(\"(by:\") + 5;","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" String description \u003d currentTaskAsString.substring(descriptionBeginIndex, descriptionEndIndex);","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" String deadlineTimeString \u003d currentTaskAsString.substring(deadlineStartIndex, currentTaskAsString.length() - 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime deadlineTime \u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" deadlineTime \u003d LocalDateTime.parse(deadlineTimeString, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" return \"tasks.Deadline \" + description + \" cannot be loaded.\";","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" Deadline deadline \u003d new Deadline(description, deadlineTime, isDone);","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" return \"Ok\";","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"nicrandomlee":50}},{"path":"src/main/java/commands/LoadEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" * Represents a command to load a event task into a task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"public class LoadEventCommand extends Command {","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" private String currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new LoadEventCommand object with the given parameters.","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * @param currentTaskAsString a string representation of the event task to be loaded","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList the task list to which the event task should be added","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" public LoadEventCommand(String currentTaskAsString, TaskList taskList) {","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" this.currentTaskAsString \u003d currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" boolean isDone \u003d currentTaskAsString.substring(4, 5).toUpperCase().equals(\"X\");","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" int descriptionBeginIndex \u003d 7;","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" int descriptionEndIndex \u003d currentTaskAsString.indexOf(\"(from:\") - 1;","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" int fromTimingStartIndex \u003d currentTaskAsString.indexOf(\"(from:\") + 7;","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" int fromTimingEndIndex \u003d currentTaskAsString.indexOf(\"to:\") - 1;","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" int toTimingStartIndex \u003d fromTimingEndIndex + 5;","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" int toTimingEndIndex \u003d currentTaskAsString.length() - 1;","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" String description \u003d currentTaskAsString.substring(descriptionBeginIndex, descriptionEndIndex);","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" String fromString \u003d currentTaskAsString.substring(fromTimingStartIndex, fromTimingEndIndex);","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" String toString \u003d currentTaskAsString.substring(toTimingStartIndex, toTimingEndIndex);","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime fromDateTime \u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime toDateTime \u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" fromDateTime \u003d LocalDateTime.parse(fromString, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" toDateTime \u003d LocalDateTime.parse(toString, formatter);","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" return \"tasks.Event \" + description + \" cannot be loaded.\";","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" Event event \u003d new Event(description, fromDateTime, toDateTime, isDone);","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" taskList.add(event);","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" return \"Ok\";","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"nicrandomlee":59}},{"path":"src/main/java/commands/LoadToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * Represents a command to load a todo task into a task list.","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class LoadToDoCommand extends Command {","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private String currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new LoadEventCommand object with the given parameters.","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" * @param currentTaskAsString a string representation of the todo task to be loaded","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList the task list to which the todo task should be added","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public LoadToDoCommand(String currentTaskAsString, TaskList taskList) {","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" this.currentTaskAsString \u003d currentTaskAsString;","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" boolean isDone \u003d currentTaskAsString.substring(4, 5).toUpperCase().equals(\"X\");","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" int descriptionBeginIndex \u003d 7;","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" String description \u003d currentTaskAsString.substring(descriptionBeginIndex);","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" ToDo todo \u003d new ToDo(description, isDone);","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" taskList.add(todo);","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return \"Ok\";","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"nicrandomlee":35}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for a command to mark a task from a TaskList","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private String[] inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new MarkCommand object with the specified task list and input array.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList The task list to mark the task as done in.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" * @param inputArray The input array containing the task number to be marked as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" public MarkCommand(TaskList taskList, String[] inputArray) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" this.inputArray \u003d inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" int targetTaskIdx \u003d Integer.parseInt(this.inputArray[1]) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" Task task \u003d this.taskList.get(targetTaskIdx);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d task.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid number provided. Please provide in the form of \u0027mark {task number}\u0027.\"","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" + \" Eg: \u0027mark 1\u0027 to mark task 1.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid task number provided. Please provide in the form of \u0027mark {task number}\u0027.\"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" + \" Eg: \u0027mark 1\u0027 to mark task 1.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":42}},{"path":"src/main/java/commands/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for executing an addition command of a todo task","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private String description;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new ToDoCommand object with the given parameters.","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList the task list to which the new ToDo task should be added","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param description the description of the new ToDo task","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public ToDoCommand(TaskList taskList, String description) {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" if (this.description.strip().isEmpty() || this.description.matches(\"todo\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" return \"OOPS! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" ToDo newTodo \u003d new ToDo(this.description);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" this.taskList.add(newTodo);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" return \"I have added the following: \\n\" + newTodo.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":36}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * The class for a command to unmark a task from a TaskList","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private String[] inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" * Constructs a new UnmarkCommand object with the specified task list and input array.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList The task list to unmark the task as done in.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param inputArray The input array containing the task number to be unmarked as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public UnmarkCommand(TaskList taskList, String[] inputArray) {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" this.inputArray \u003d inputArray;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public String execute() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" int targetTaskIdx \u003d Integer.parseInt(this.inputArray[1]) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" Task task \u003d this.taskList.get(targetTaskIdx);","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" task.markAsUndone();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"Ok! I\u0027ve marked this task as not done yet: \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d task.getTaskAsString();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid number provided. Please provide in the form of \u0027unmark {task number}\u0027.\"","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" + \" Eg: \u0027unmark 1\u0027 to unmark task 1.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" return \"Invalid task number provided. Please provide in the form of \u0027unmark {task number}\u0027. \"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" + \"Eg: \u0027unmark 1\u0027 to unmark task 1.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":42}},{"path":"src/main/java/functions/Load.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import commands.Command;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import commands.LoadDeadlineCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"import commands.LoadEventCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"import commands.LoadToDoCommand;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" * A utility class for loading a file.","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"public class Load {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" private String loadFilePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a new Load instance","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" * @param loadFilePath file path to load","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" public Load(String loadFilePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.loadFilePath \u003d loadFilePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" * Loads the tasks in a file and returns the previously saved version of a Task List.","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" * @return A loaded TaskList","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" public TaskList load() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" FileReader f \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" // Checks if file exists.","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" f \u003d new FileReader(loadFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" // Creates new taskList","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" return this.taskList;","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" Scanner s \u003d new Scanner(f); // create a Scanner using the File as the source","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" String currentTaskAsString \u003d s.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" String taskType \u003d currentTaskAsString.substring(1, 2).toUpperCase();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" String commandResult;","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new LoadToDoCommand(currentTaskAsString, this.taskList);","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" commandResult \u003d command.execute();","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new LoadDeadlineCommand(currentTaskAsString, this.taskList);","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" commandResult \u003d command.execute();","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new LoadEventCommand(currentTaskAsString, this.taskList);","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" commandResult \u003d command.execute();","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":" default:","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":" commandResult \u003d \"Error\";","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"nicrandomlee"},"content":" assert commandResult \u003d\u003d \"Ok\" : \"Error in loading task\";","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"nicrandomlee"},"content":" f.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"nicrandomlee"},"content":" return this.taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"nicrandomlee":80}},{"path":"src/main/java/functions/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import commands.*;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":" * A utility class for parsing user input and generating appropriate commands.","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" private String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" private enum ChatFunction {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" LIST,","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" MARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" UNMARK,","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" TODO,","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" DEADLINE,","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" EVENT,","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" DELETE,","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" FIND,","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" HELP","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a new Parser instance","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" * @param input file path to load","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList a task list containing all the tasks stored","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" public Parser(String input, TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" this.input \u003d input;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" * Parses the input specified by the Parser object and executes specified command.","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" * @return A String message generated by the execution of specified command.","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" public String parse() {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" String[] inputArray \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" ChatFunction function \u003d ChatFunction.valueOf(inputArray[0].toUpperCase());","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" int firstSpaceIndex \u003d input.indexOf(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" String functionDescription \u003d input.substring(firstSpaceIndex + 1);","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" switch (function) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" case LIST:","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new ListCommand(this.taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" case MARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new MarkCommand(this.taskList, inputArray);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" case UNMARK:","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new UnmarkCommand(this.taskList, inputArray);","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" case DELETE:","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new DeleteCommand(this.taskList, inputArray);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" case TODO:","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new ToDoCommand(this.taskList, functionDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"nicrandomlee"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new DeadlineCommand(this.taskList, functionDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"nicrandomlee"},"content":" case EVENT:","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new EventCommand(this.taskList, functionDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"nicrandomlee"},"content":" case FIND:","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new FindCommand(this.taskList, functionDescription);","lastModifiedDate":"2023-09-14"},{"lineNumber":83,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":85,"author":{"gitId":"nicrandomlee"},"content":" case HELP:","lastModifiedDate":"2023-09-14"},{"lineNumber":86,"author":{"gitId":"nicrandomlee"},"content":" command \u003d new HelpCommand();","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"nicrandomlee"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"nicrandomlee"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"nicrandomlee"},"content":" assert command !\u003d null : \"Command should not be null or empty\";","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"nicrandomlee"},"content":" String result \u003d command.execute();","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"nicrandomlee"},"content":" assert result !\u003d null : \"Result should not be null or empty String\";","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"nicrandomlee"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"nicrandomlee"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"nicrandomlee"},"content":" // If task inserted not an ENUM","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"nicrandomlee"},"content":" String illegalArgumentResult \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"nicrandomlee"},"content":" illegalArgumentResult +\u003d \"Oops!!! I\u0027m sorry but I don\u0027t know what that means :-( \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"nicrandomlee"},"content":" illegalArgumentResult +\u003d \"Run help to get a list of available commands.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"nicrandomlee"},"content":" return illegalArgumentResult;","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"nicrandomlee"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"nicrandomlee"},"content":" String nullPointerResult \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"nicrandomlee"},"content":" nullPointerResult +\u003d \"Oh no, you have entered an invalid statement. \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"nicrandomlee"},"content":" nullPointerResult +\u003d \"Run help to get a list of available commands.\";","lastModifiedDate":"2023-09-14"},{"lineNumber":109,"author":{"gitId":"nicrandomlee"},"content":" return nullPointerResult;","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"nicrandomlee"},"content":" return \"I did not understand that! Run help to get a list of available commands.\";","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"nicrandomlee":115}},{"path":"src/main/java/functions/Save.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import java.nio.file.StandardCopyOption;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" * A utility class for saving a file.","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"public class Save {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" private String saveFilePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" private final String tempFilePath \u003d \"temp.txt\";","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize Save","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList a task list to store tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" * @param saveFilePath file path of saved file","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" public Save(TaskList taskList, String saveFilePath) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" this.saveFilePath \u003d saveFilePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" saveFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" * A function to write task list into a .txt file specified by user","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" public void saveFile() {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" File f \u003d new File(saveFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" FileWriter fw \u003d new FileWriter(saveFilePath, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" fw.write(\"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" FileWriter fw \u003d new FileWriter(tempFilePath, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" fw.write(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d String.format(\"%s\", taskList.get(i).getTaskAsString());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" addFileContents(tempFilePath, message);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" };","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" Files.copy(Paths.get(tempFilePath), Paths.get(saveFilePath), StandardCopyOption.REPLACE_EXISTING);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" Files.delete(Paths.get(tempFilePath));","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" System.out.println(\"Error in saving\");","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" * A helper function to add contents into save file","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" public static void addFileContents(String filePath, String contents) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" fw.write(contents + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":" System.out.println(\"Unable to create file. Please try again later.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"nicrandomlee":75}},{"path":"src/main/java/functions/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":" * A utility class for storing tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a new storage instance","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" * @param filePath file path to load","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * Loads the task list from the file specified by the file path.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" * @return the loaded task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" * @throws IOException if there is an error reading the file.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public TaskList load() throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" Load load \u003d new Load(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" return load.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" * A function to save the current taskList into a .txt file specified by user","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" * @param taskList a task list to store tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" public void save(TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" Save save \u003d new Save(taskList, this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"nicrandomlee":39}},{"path":"src/main/java/functions/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" * A class for storing a list of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a new TaskList instance","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" * @return the list of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" return this.taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" * @param idx the index of the task to return","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" * @return the task at the specified index","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" public Task get(int idx) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" return this.taskList.get(idx);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" * @param task the task to add","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" * @return the number of tasks in the list","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" public int size() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" * Removes the task at the specified index from the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" * @param idx the index of the task to remove","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" public void remove(int idx) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" this.taskList.remove(idx);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"nicrandomlee":68}},{"path":"src/main/java/functions/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package functions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":" * A class for handling user interface messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" * Returns a welcome message to greet the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" * @return a welcome message","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" public String welcome() {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" return \"Hello! Welcome to cupid task tracking bot. How can I help you?\";","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * Returns a message indicating that a file was not found and a new one is being created.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * @return a message indicating that a file was not found and a new one is being created","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" public String fileNotFound() {","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" return \"File not found. Creating new .txt save file\";","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" * Returns a goodbye message to bid farewell to the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" * @return a goodbye message","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" public String goodbye() {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"_______________________________________\\n\";","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"Bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" message +\u003d \"_______________________________________\";","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"nicrandomlee":38}},{"path":"src/main/java/runner/Cupid.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package runner;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import functions.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import functions.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import functions.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import functions.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" * Cupid is a task tracking bot that manages a list of tasks and provides responses based on user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"public class Cupid {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" private String saveFilePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" private Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" private Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * Creates a new instance of the Cupid bot with the specified save file path.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" * If the save file exists, the task list is loaded from the file. Otherwise, a new empty task list is created.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" * @param saveFilePath The path to the save file for the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public Cupid(String saveFilePath) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" this.saveFilePath \u003d saveFilePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" this.storage \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" this.storage \u003d new Storage(this.saveFilePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d this.storage.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" this.storage.save(this.taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" * Processes the user input and returns a response from the Cupid bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" * The user input is parsed using a Parser object, and the resulting response is returned as a String.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" * After processing the user input, the task list is saved to the storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" * @param input The user input to be processed.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" * @return The response from the Cupid bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" Parser parser \u003d new Parser(input, this.taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" String result \u003d parser.parse();","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" this.storage.save(this.taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"nicrandomlee":59}},{"path":"src/main/java/runner/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package runner;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"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":21,"author":{"gitId":"nicrandomlee"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":62}},{"path":"src/main/java/runner/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package runner;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":12}},{"path":"src/main/java/runner/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package runner;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" * A GUI for Cupid using FXML.","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" private Cupid cupid \u003d new Cupid(\"cupid.txt\");","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(cupid);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":32}},{"path":"src/main/java/runner/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package runner;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import functions.Ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" private Cupid cupid;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/DaUser.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/DaDuke.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" String welcomeMsg \u003d new Ui().welcome();","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" DialogBox.getDukeDialog(welcomeMsg, dukeImage)","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" );","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" public void setDuke(Cupid cupid) {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" this.cupid \u003d cupid;","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"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":49,"author":{"gitId":"nicrandomlee"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" if (input.toLowerCase().equals(\"bye\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" String exitMsg \u003d new Ui().goodbye();","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" DialogBox.getDukeDialog(exitMsg, dukeImage)","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" );","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" // Create a PauseTransition to delay the application exit","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(2));","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" delay.setOnFinished(event -\u003e {","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" Platform.exit(); // Exit the application after the delay","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" });","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" delay.play();","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" userInput.clear();","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" } else {","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" String response \u003d cupid.getResponse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"nicrandomlee"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"nicrandomlee"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"nicrandomlee":77}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * Represents a deadline task, with a description and the due date.","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private String taskIcon \u003d \"[D]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Deadline task","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param deadline a datetime instance of the deadline of task","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" public Deadline(String description, LocalDateTime deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Deadline task","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" * @param deadline a datetime instance of the deadline of task","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" * @param isDone task completion status","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" public Deadline(String description, LocalDateTime deadline, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" public String getTaskAsString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d String.format(\"%s[%s] %s (by: %s)\", this.taskIcon, this.getStatusIcon(),","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" this.getDescription(), this.getDeadlineDate());","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" * Parses the LocalDateTime of the deadline datetime to a String representation","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" * @return A String representation of LocalDateTime of deadline","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" public String getDeadlineDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" String formattedDateTime \u003d this.deadline.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" return formattedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"nicrandomlee":54}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" * Represents a event task, with a description, the start and the end date.","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" private String taskIcon \u003d \"[E]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" private LocalDateTime startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" private LocalDateTime endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Deadline task","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" * @param startDate a datetime instance of the expected start of task","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * @param endDate a datetime instance of the expected end of task","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" public Event(String description, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Deadline task","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" * @param startDate a datetime instance of the expected start of task","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" * @param endDate a datetime instance of the expected end of task","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" * @param isDone task completion status","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" public Event(String description, LocalDateTime startDate, LocalDateTime endDate, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" // For functions.Load","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" public String getTaskAsString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d String.format(\"%s[%s] %s (from: %s to: %s)\", this.taskIcon, this.getStatusIcon(),","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" this.getDescription(), this.getStartDate(), this.getEndDate());","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" * Parses the LocalDateTime of the start datetime to a String representation","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" * @return A String representation of start LocalDateTime","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" public String getStartDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":" String formattedDateTime \u003d this.startDate.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" return formattedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" * Parses the LocalDateTime of the end datetime to a String representation","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":" * @return A String representation of end LocalDateTime","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" public String getEndDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" String formattedDateTime \u003d this.endDate.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" return formattedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"nicrandomlee":70}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":" * The base class for different types of tasks.","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a task","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a task","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" * @param isDone task completion status","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" * Gets the completion status of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" * @return A String object representing the completion status of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"nicrandomlee"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"nicrandomlee"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"nicrandomlee"},"content":" * Gets the String representation of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"nicrandomlee"},"content":" * @return A String representation of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"nicrandomlee"},"content":" public String getTaskAsString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d String.format(\"[%s] %s\", this.getStatusIcon(), this.getDescription());","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"nicrandomlee"},"content":" * Marks tasks as done","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"nicrandomlee"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"nicrandomlee"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"nicrandomlee"},"content":" * Marks tasks as undone","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"nicrandomlee"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"nicrandomlee"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"nicrandomlee"},"content":" * Gets the String description of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"nicrandomlee"},"content":" * @return A String description of task.","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"nicrandomlee"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"nicrandomlee"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"nicrandomlee":72}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"/**","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":" * Represents a todo task with a description.","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":" private String taskIcon \u003d \"[T]\";","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Todo task","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" * A public constructor to initialize a Todo task","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" * @param description a description of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" * @param isDone task completion status","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":" // Constructor for functions.Load","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"nicrandomlee"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"nicrandomlee"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"nicrandomlee"},"content":" public String getTaskAsString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"nicrandomlee"},"content":" String message \u003d String.format(\"%s[%s] %s\", this.taskIcon, this.getStatusIcon(), this.getDescription());","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"nicrandomlee"},"content":" return message;","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"nicrandomlee":35}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"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":"nicrandomlee"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"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":"nicrandomlee"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"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":"nicrandomlee"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"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\"runner.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"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":"nicrandomlee"},"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":"nicrandomlee"},"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":"nicrandomlee"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"nicrandomlee":19}},{"path":"src/test/java/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-15"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-15"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-15"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" public void deadlineTest1() {","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime deadlineTime \u003d LocalDateTime.parse(\"2023-09-12 14:00\",","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" Deadline deadlineTask \u003d new Deadline(\"cs2103 assignment\", deadlineTime);","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" assertEquals(deadlineTask.getTaskAsString(), \"[D][ ] cs2103 assignment (by: Sep 12 2023 14:00)\");","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" fail();","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-15"}],"authorContributionMap":{"nicrandomlee":24}},{"path":"src/test/java/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"public class EventTest {","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" public void EventTest1() {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime startTime \u003d LocalDateTime.parse(\"2023-09-12 14:00\",","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" LocalDateTime endTime \u003d LocalDateTime.parse(\"2023-09-12 16:00\",","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":" Event event1 \u003d new Event(\"cs2103 assignment\", startTime, endTime);","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"nicrandomlee"},"content":" assertEquals(event1.getTaskAsString(), \"[E][ ] cs2103 assignment (from: Sep 12 2023 14:00 \" +","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"nicrandomlee"},"content":" \"to: Sep 12 2023 16:00)\");","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"nicrandomlee"},"content":" fail();","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"nicrandomlee":26}},{"path":"src/test/java/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":" public void toDoTest1() {","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"nicrandomlee"},"content":" ToDo todoTask \u003d new ToDo(\"water plants\");","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"nicrandomlee"},"content":" assertEquals(todoTask.getTaskAsString(),\"[T][ ] water plants\");","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"nicrandomlee"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"nicrandomlee"},"content":" fail();","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"nicrandomlee"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"nicrandomlee"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"nicrandomlee"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"nicrandomlee":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"nicrandomlee"},"content":"todo water flowers","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"nicrandomlee"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"nicrandomlee"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"nicrandomlee"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"nicrandomlee"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"nicrandomlee"},"content":"mark 4","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"nicrandomlee"},"content":"mark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"nicrandomlee"},"content":"unmark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"nicrandomlee"},"content":"delete 1","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"nicrandomlee"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"nicrandomlee"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"nicrandomlee":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":"nicrandomlee"},"content":"java -classpath ..\\bin Cupid \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":{"nicrandomlee":1,"-":20}}] diff --git a/nicrandomlee_ip_master/commits.json b/nicrandomlee_ip_master/commits.json index 6776061e..f385d462 100644 --- a/nicrandomlee_ip_master/commits.json +++ b/nicrandomlee_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"nicrandomlee":[{"date":"2023-08-22","commitResults":[{"hash":"48d7ef89cf6a3e01cc26579ba90230e8ad87475d","isMergeCommit":false,"messageTitle":"(a) Give your chatbot a new name, to differentiate it from the placeholder name Duke.","messageBody":"(b) Implement an initial skeletal version of the it that simply greets the user and exits.\nExample:\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"2f434dfa43f812394c55b5ec0c66ab05de6bd3d7","isMergeCommit":false,"messageTitle":"Improve the skeletal version of Duke so that it echos commands entered by the user, and exits when the user types the command bye.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"5da5e0b087481334aa1d4cb383929564d5f9e53a","isMergeCommit":false,"messageTitle":"Level 2. Add, List Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"151d80147ff4786acbe6237cea0b195b2304e0f6","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done Add the ability to mark tasks as done. Added the ability to change the status back to not done.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":22}}}]},{"date":"2023-08-25","commitResults":[{"hash":"af6c7f4bc38174c8ae59e1d4224b8a91f1a24109","isMergeCommit":false,"messageTitle":"ToDos: tasks without any date/time attached to it e.g., visit new theme park Deadlines: tasks that need to be done before a specific date/time e.g., submit report by 11/10/2019 5pm Events: tasks that start at a specific date/time and ends at a specific date/time e.g., (a) team project meeting 2/10/2019 2-4pm (b) orientation week 4/10/2019 to 11/10/2019","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":11}}},{"hash":"69120ddafbf434c00fc05033db168c2f3cbc4ad1","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors Teach the chatbot to deal with errors such as incorrect inputs entered by the user.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"0026b8a2bf2fe8ac995f0799e3ee189b04c0dc16","isMergeCommit":false,"messageTitle":"Level 6. Delete Add support for deleting tasks from the list.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}},{"hash":"56fef855db2cd9a8f1400bee19f8144548f8c819","isMergeCommit":false,"messageTitle":"Patched main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"f61da24c076227b33ad358c61d88e31b7cb1ac74","isMergeCommit":false,"messageTitle":"Added more errors handled","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":64},"bat":{"insertions":1,"deletions":1}}},{"hash":"6b1b6672b02bd91c483390420142929db5bc49f1","isMergeCommit":false,"messageTitle":"Modified delete function, added more comprehensive automated test case","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":24,"deletions":7}}}]},{"date":"2023-08-29","commitResults":[{"hash":"326f8938e41c4436c58598291e1e91438daa8d33","isMergeCommit":false,"messageTitle":"-","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"0cf27eb22958af3b5a19492eac74f296362ead69","isMergeCommit":false,"messageTitle":"Added save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":0}}},{"hash":"9ae9856f4908494f08b19641bda7756da94ff864","isMergeCommit":false,"messageTitle":"Implemented Load/Save feature upon booting/shutdown","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":6}}}]},{"date":"2023-08-31","commitResults":[{"hash":"97cc44d6899725f13264c81148342a220d16dbd6","isMergeCommit":false,"messageTitle":"add dates and times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":153,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"34e148a43ede32075d0a61477b656de05031387d","isMergeCommit":false,"messageTitle":"Add Storage and TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":136}}},{"hash":"49acba3d35a573bceb363ffe279eac0f16e9299f","isMergeCommit":false,"messageTitle":"Edit Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":33}}},{"hash":"4915817ef17415b1373bf0534cf17e58a8a13a76","isMergeCommit":false,"messageTitle":"Add UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":12}}}]},{"date":"2023-09-02","commitResults":[{"hash":"7af830fab471a95d00d3d0ca8f0470fd144e4fda","isMergeCommit":false,"messageTitle":"update parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":24}}},{"hash":"9920663f4bec64c76f00a759fadc264df47d90ec","isMergeCommit":false,"messageTitle":"Add LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":20}}},{"hash":"c5c06cac75541e90f4d0a8b34e85c0ea8563375d","isMergeCommit":false,"messageTitle":"Add Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"5f03a0c212770e89e31cf5df1b85e551d218eba6","isMergeCommit":false,"messageTitle":"edit save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"5af46ed6a9a73dcbb35389e5b7121dbf81e0bda7","isMergeCommit":false,"messageTitle":"javadoc for save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"40c51b9a278885c6f5b1918990c9a2b31f77dd8e","isMergeCommit":false,"messageTitle":"added save javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"89add4266db5a1d2972dd0e59cf6ea995c27629d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Save.java\n","fileTypesAndContributionMap":{}},{"hash":"05af8d22fbbe669faeb271b383ea814b88f290a9","isMergeCommit":false,"messageTitle":"packaged files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":15}}},{"hash":"f32cb032881dbca9eab7638a539e43f2c3b78b48","isMergeCommit":false,"messageTitle":"reordered cupid.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":18}}}]},{"date":"2023-09-04","commitResults":[{"hash":"0eeacd3d1b8b47a0527fe488c9e0d0a169f0d628","isMergeCommit":false,"messageTitle":"Added Javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":10}}}]},{"date":"2023-09-08","commitResults":[{"hash":"f3ee1725af047d4b90e65ddd19189f101afb0782","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"58083adb87e01d210e2d708c8f7a29dc0b849b24","isMergeCommit":false,"messageTitle":"add JUnit","messageBody":"","tags":["A-Packages","A-MoreOOP","A-Jar","A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"txt":{"insertions":4,"deletions":0},"java":{"insertions":35,"deletions":0}}},{"hash":"78b7fda5deb234ff23b2e809e52f4de94818ccd6","isMergeCommit":false,"messageTitle":"update gradle dependencies","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1}}}]},{"date":"2023-09-10","commitResults":[{"hash":"60cc8664365f30e6db8a4c3949edec1c298c6c1a","isMergeCommit":false,"messageTitle":"Update Commands OOP","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":317,"deletions":166}}},{"hash":"9970058ba50fe0b3826573618d8072accfb2b792","isMergeCommit":false,"messageTitle":"update commands as string implementation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":47}}},{"hash":"fd6a3ba844e3f10f8bed4d81a61142fe3e20c8ae","isMergeCommit":false,"messageTitle":"Implement GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":28,"deletions":0},"java":{"insertions":57,"deletions":0}}},{"hash":"caf9f0e5374f3a90854a3434dca76a5de12c9713","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":28,"deletions":21},"java":{"insertions":162,"deletions":48}}},{"hash":"f6db952e4b74207b24d588b9d36aab0c40bdf623","isMergeCommit":false,"messageTitle":"update minor bug","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}},{"hash":"6b7ca679031ac1ddf4a1305438a3b5f8272da8b1","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"238013b3695b8121e6c23c7249b031c0f351b900","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"ba4a512d8c967294000b78e1edb3be51375f233b","isMergeCommit":false,"messageTitle":"Add help extension","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":35}}},{"hash":"55c802e5e0df16f27046f7cad55c55a5acde4aef","isMergeCommit":false,"messageTitle":"edit parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"e235a0b723554a333aa6b70912d83a7afe12816c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"3c640d96329177603adfa4b267510bf8bb923fe4","isMergeCommit":false,"messageTitle":"Update javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":1}}},{"hash":"c9d140f3822469ab0324b7fb8b16006f170e473b","isMergeCommit":false,"messageTitle":"update javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":51}}},{"hash":"0fdb437d2f07696ae94507d5a3d3aad23c7ae6ec","isMergeCommit":false,"messageTitle":"abstract load command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":47}}},{"hash":"8bf0cd915afdaf5f73c385a64b4d09a614635801","isMergeCommit":false,"messageTitle":"add assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"15295ca52cfab5527c381b74a5cee2a68fdee304","isMergeCommit":false,"messageTitle":"improve code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":5}}},{"hash":"61d2d3c050ac3ec2b174109b24f92151d96dc4d2","isMergeCommit":false,"messageTitle":"add help","messageBody":"","tags":["C-Help","BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":1}}},{"hash":"55f09ae472670417eb414a6f80962da4b82b4fc4","isMergeCommit":false,"messageTitle":"Fix bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":49}}}]}]},"authorFileTypeContributionMap":{"nicrandomlee":{"java":1419,"md":0,"fxml":35,"sh":0,"bat":1,"gradle":18,"txt":15}},"authorContributionVariance":{"nicrandomlee":42554.49},"authorDisplayNameMap":{"nicrandomlee":"CS2103-F13-4 LEE ..OLAS"}} +{"authorDailyContributionsMap":{"nicrandomlee":[{"date":"2023-08-22","commitResults":[{"hash":"48d7ef89cf6a3e01cc26579ba90230e8ad87475d","isMergeCommit":false,"messageTitle":"(a) Give your chatbot a new name, to differentiate it from the placeholder name Duke.","messageBody":"(b) Implement an initial skeletal version of the it that simply greets the user and exits.\nExample:\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"2f434dfa43f812394c55b5ec0c66ab05de6bd3d7","isMergeCommit":false,"messageTitle":"Improve the skeletal version of Duke so that it echos commands entered by the user, and exits when the user types the command bye.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"5da5e0b087481334aa1d4cb383929564d5f9e53a","isMergeCommit":false,"messageTitle":"Level 2. Add, List Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"151d80147ff4786acbe6237cea0b195b2304e0f6","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done Add the ability to mark tasks as done. Added the ability to change the status back to not done.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":22}}}]},{"date":"2023-08-25","commitResults":[{"hash":"af6c7f4bc38174c8ae59e1d4224b8a91f1a24109","isMergeCommit":false,"messageTitle":"ToDos: tasks without any date/time attached to it e.g., visit new theme park Deadlines: tasks that need to be done before a specific date/time e.g., submit report by 11/10/2019 5pm Events: tasks that start at a specific date/time and ends at a specific date/time e.g., (a) team project meeting 2/10/2019 2-4pm (b) orientation week 4/10/2019 to 11/10/2019","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":11}}},{"hash":"69120ddafbf434c00fc05033db168c2f3cbc4ad1","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors Teach the chatbot to deal with errors such as incorrect inputs entered by the user.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"0026b8a2bf2fe8ac995f0799e3ee189b04c0dc16","isMergeCommit":false,"messageTitle":"Level 6. Delete Add support for deleting tasks from the list.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}},{"hash":"56fef855db2cd9a8f1400bee19f8144548f8c819","isMergeCommit":false,"messageTitle":"Patched main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"f61da24c076227b33ad358c61d88e31b7cb1ac74","isMergeCommit":false,"messageTitle":"Added more errors handled","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":64},"bat":{"insertions":1,"deletions":1}}},{"hash":"6b1b6672b02bd91c483390420142929db5bc49f1","isMergeCommit":false,"messageTitle":"Modified delete function, added more comprehensive automated test case","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":24,"deletions":7}}}]},{"date":"2023-08-29","commitResults":[{"hash":"326f8938e41c4436c58598291e1e91438daa8d33","isMergeCommit":false,"messageTitle":"-","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"0cf27eb22958af3b5a19492eac74f296362ead69","isMergeCommit":false,"messageTitle":"Added save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":0}}},{"hash":"9ae9856f4908494f08b19641bda7756da94ff864","isMergeCommit":false,"messageTitle":"Implemented Load/Save feature upon booting/shutdown","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":6}}}]},{"date":"2023-08-31","commitResults":[{"hash":"97cc44d6899725f13264c81148342a220d16dbd6","isMergeCommit":false,"messageTitle":"add dates and times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":153,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"34e148a43ede32075d0a61477b656de05031387d","isMergeCommit":false,"messageTitle":"Add Storage and TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":136}}},{"hash":"49acba3d35a573bceb363ffe279eac0f16e9299f","isMergeCommit":false,"messageTitle":"Edit Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":33}}},{"hash":"4915817ef17415b1373bf0534cf17e58a8a13a76","isMergeCommit":false,"messageTitle":"Add UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":12}}}]},{"date":"2023-09-02","commitResults":[{"hash":"7af830fab471a95d00d3d0ca8f0470fd144e4fda","isMergeCommit":false,"messageTitle":"update parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":24}}},{"hash":"9920663f4bec64c76f00a759fadc264df47d90ec","isMergeCommit":false,"messageTitle":"Add LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":20}}},{"hash":"c5c06cac75541e90f4d0a8b34e85c0ea8563375d","isMergeCommit":false,"messageTitle":"Add Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"5f03a0c212770e89e31cf5df1b85e551d218eba6","isMergeCommit":false,"messageTitle":"edit save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"5af46ed6a9a73dcbb35389e5b7121dbf81e0bda7","isMergeCommit":false,"messageTitle":"javadoc for save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"40c51b9a278885c6f5b1918990c9a2b31f77dd8e","isMergeCommit":false,"messageTitle":"added save javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"89add4266db5a1d2972dd0e59cf6ea995c27629d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Save.java\n","fileTypesAndContributionMap":{}},{"hash":"05af8d22fbbe669faeb271b383ea814b88f290a9","isMergeCommit":false,"messageTitle":"packaged files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":15}}},{"hash":"f32cb032881dbca9eab7638a539e43f2c3b78b48","isMergeCommit":false,"messageTitle":"reordered cupid.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":18}}}]},{"date":"2023-09-04","commitResults":[{"hash":"0eeacd3d1b8b47a0527fe488c9e0d0a169f0d628","isMergeCommit":false,"messageTitle":"Added Javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":10}}}]},{"date":"2023-09-08","commitResults":[{"hash":"f3ee1725af047d4b90e65ddd19189f101afb0782","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"58083adb87e01d210e2d708c8f7a29dc0b849b24","isMergeCommit":false,"messageTitle":"add JUnit","messageBody":"","tags":["A-Packages","A-MoreOOP","A-Jar","A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"txt":{"insertions":4,"deletions":0},"java":{"insertions":35,"deletions":0}}},{"hash":"78b7fda5deb234ff23b2e809e52f4de94818ccd6","isMergeCommit":false,"messageTitle":"update gradle dependencies","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1}}}]},{"date":"2023-09-10","commitResults":[{"hash":"60cc8664365f30e6db8a4c3949edec1c298c6c1a","isMergeCommit":false,"messageTitle":"Update Commands OOP","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":317,"deletions":166}}},{"hash":"9970058ba50fe0b3826573618d8072accfb2b792","isMergeCommit":false,"messageTitle":"update commands as string implementation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":47}}},{"hash":"fd6a3ba844e3f10f8bed4d81a61142fe3e20c8ae","isMergeCommit":false,"messageTitle":"Implement GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":28,"deletions":0},"java":{"insertions":57,"deletions":0}}},{"hash":"caf9f0e5374f3a90854a3434dca76a5de12c9713","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":28,"deletions":21},"java":{"insertions":162,"deletions":48}}},{"hash":"f6db952e4b74207b24d588b9d36aab0c40bdf623","isMergeCommit":false,"messageTitle":"update minor bug","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}},{"hash":"6b7ca679031ac1ddf4a1305438a3b5f8272da8b1","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"238013b3695b8121e6c23c7249b031c0f351b900","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"ba4a512d8c967294000b78e1edb3be51375f233b","isMergeCommit":false,"messageTitle":"Add help extension","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":35}}},{"hash":"55c802e5e0df16f27046f7cad55c55a5acde4aef","isMergeCommit":false,"messageTitle":"edit parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"e235a0b723554a333aa6b70912d83a7afe12816c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"3c640d96329177603adfa4b267510bf8bb923fe4","isMergeCommit":false,"messageTitle":"Update javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":1}}},{"hash":"c9d140f3822469ab0324b7fb8b16006f170e473b","isMergeCommit":false,"messageTitle":"update javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":51}}},{"hash":"0fdb437d2f07696ae94507d5a3d3aad23c7ae6ec","isMergeCommit":false,"messageTitle":"abstract load command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":47}}},{"hash":"8bf0cd915afdaf5f73c385a64b4d09a614635801","isMergeCommit":false,"messageTitle":"add assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"15295ca52cfab5527c381b74a5cee2a68fdee304","isMergeCommit":false,"messageTitle":"improve code quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":5}}},{"hash":"61d2d3c050ac3ec2b174109b24f92151d96dc4d2","isMergeCommit":false,"messageTitle":"add help","messageBody":"","tags":["C-Help","BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":1}}},{"hash":"55f09ae472670417eb414a6f80962da4b82b4fc4","isMergeCommit":false,"messageTitle":"Fix bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":49}}}]},{"date":"2023-09-16","commitResults":[{"hash":"868e86814c636be1b69390943b0c7bd0fe410b26","isMergeCommit":false,"messageTitle":"Help command: Assist user in using available functions","messageBody":"A help command is user-friendly for new users who are unfamiliar with the application or are unsure of the available functions.\n\nLet\u0027s,\n- Include a new command to provide the list of available functions and how to use them\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"41fefbc04d35a035cbd759ab32c4162872e632d5","isMergeCommit":false,"messageTitle":"Added JUnit test methods for deadline, event and todo.","messageBody":"There are several test cases to check the functionality of task classes.\nThe test checks for the correct string representation after the given\ninput is entered.\n\nInclude javadoc for all methods.\n\nAdded javadoc for all methods for better documentation and readability.\n\nAdded Assertions\n\nAdded assertions to check for null or invalid variable representations\nto debug.\n","tags":["A-CodeQuality","A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":28}}},{"hash":"cf7c81354e94d1415b636992f5c9b611044e859f","isMergeCommit":false,"messageTitle":"Updated javadocs","messageBody":"Updated javadocs for all common classes, methods and constructors.\n","fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":6}}},{"hash":"6fcbf4971b0bff6f8bb0d91813db93c9b2a0fe99","isMergeCommit":false,"messageTitle":"Updated checkstyle criterion","messageBody":"Minor edits on checkstyle. Renamed package from \"Runner\" to \"runner\".\n","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":115,"deletions":104}}}]}]},"authorFileTypeContributionMap":{"nicrandomlee":{"java":1567,"md":0,"fxml":35,"sh":0,"bat":1,"gradle":22,"txt":15}},"authorContributionVariance":{"nicrandomlee":44452.65},"authorDisplayNameMap":{"nicrandomlee":"CS2103-F13-4 LEE ..OLAS"}} diff --git a/phiphi-tan_ip_master/authorship.json b/phiphi-tan_ip_master/authorship.json index 47db38a8..87394d55 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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" mainClass.set(\"phi.Phi\")","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" archiveBaseName \u003d \"phi\"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":40,"phiphi-tan":7}},{"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/Deadline.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 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/Event.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 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-02"},{"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/Parser.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":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":" * Represents the handling of user-commands and making sense of them","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" public Parser(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"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":15,"author":{"gitId":"phiphi-tan"},"content":" * String output will be handled by the function caller (PHI)","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-input given to PHI","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" * @return Response of the parser to the input, to be printed by PHI","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" public String handle(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" if (input.startsWith(\"list\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" if (!input.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"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":25,"author":{"gitId":"phiphi-tan"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" return tasks.printList();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" return tasks.doTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" return tasks.undoTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Todo","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put an actual message in...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.startsWith(\"todo \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"Hey nice job, did you mean \\\"todo %s\\\"...\", input.substring(4));","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d input.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" return tasks.addTask(new ToDo(taskMsg, false));","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put an actual message in...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.startsWith(\"deadline \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"Hey genius, did you mean \\\"deadline %s\\\"...\", input.substring(8));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" return \"Look at which moron didn\u0027t add a deadline with the \\\"/by\\\" flag\";","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" int byFlag \u003d input.indexOf(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" if (byFlag \u003d\u003d 9) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" return \"Come on you have to fill in something...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.endsWith(\"/by\") || input.endsWith(\"/by \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" return \"Hey you have to give me a deadline!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d input.substring(9, byFlag - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" String deadlineString \u003d input.substring(byFlag + 4);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" return tasks.addTask(new Deadline(taskMsg, false, deadlineString));","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Event","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put an actual message in...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.startsWith(\"event \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":" return String.format(\"Hey genius, did you mean \\\"event %s\\\"...\", input.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/from\") \u0026\u0026 !input.contains(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"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":72,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":" return \"You\u0027re missing a \u0027 \\\"/from\\\" flag, halfwit\";","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":" } else if (!input.contains(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"phiphi-tan"},"content":" return \"You\u0027re missing a \\\"/to\\\" flag, dimwit\";","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"phiphi-tan"},"content":" int fromFlagStart \u003d input.indexOf(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"phiphi-tan"},"content":" int fromFlagEnd \u003d fromFlagStart + 6;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"phiphi-tan"},"content":" int toFlagStart \u003d input.indexOf(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"phiphi-tan"},"content":" int toFlagEnd \u003d toFlagStart + 4;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"phiphi-tan"},"content":" if (fromFlagStart \u003e toFlagStart) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"phiphi-tan"},"content":" return \"Please put the \\\"/from\\\" flag before the \\\"/to\\\" flag, thanksss\";","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"phiphi-tan"},"content":" } else if (fromFlagStart \u003d\u003d 6) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"phiphi-tan"},"content":" return \"Come on you have to fill in something...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"phiphi-tan"},"content":" } else if (toFlagStart \u003d\u003d fromFlagEnd) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"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":87,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.endsWith(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"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":89,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d input.substring(6, fromFlagStart - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"phiphi-tan"},"content":" String fromStr \u003d input.substring(fromFlagEnd, toFlagStart - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"phiphi-tan"},"content":" String toStr \u003d input.substring(toFlagEnd);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"phiphi-tan"},"content":" return tasks.addTask(new Event(taskMsg, false, fromStr, toStr));","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"phiphi-tan"},"content":" return tasks.deleteTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.equals(\"help\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"phiphi-tan"},"content":" return Ui.helpMsg();","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"phiphi-tan"},"content":" // Handling of Find","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"phiphi-tan"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"phiphi-tan"},"content":" if (input.equals(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"phiphi-tan"},"content":" return \"You gotta put something for me to find...\";","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"phiphi-tan"},"content":" String keyword \u003d input.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"phiphi-tan"},"content":" return tasks.findTasks(keyword);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":110,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"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":113,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":114}},{"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":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"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":6,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" * @author phiphi-tan","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" * @version 1.0.0","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"public class Phi {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" private final Ui phiUi;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" private final Storage taskStorage;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" private final Parser phiParser;","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-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new instance of Phi","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" * @param filePath the file path of the .txt file to be loaded from storage","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" public Phi(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" phiUi \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" taskStorage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" tasks \u003d taskStorage.readFromFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" phiParser \u003d new Parser(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" new Phi(\"./data/tasklist.txt\").run();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" private void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" phiUi.greeting();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" takeInput();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" phiUi.goodbye();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"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":40,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" private void takeInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" String input \u003d sc.nextLine().trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(phiParser.handle(input));","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" taskStorage.writeToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" System.out.println();","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" input \u003d sc.nextLine().trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" sc.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"phiphi-tan":52}},{"path":"src/main/java/phi/Storage.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 java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" * Represents all storage-related methods (reading from file, checking file paths etc.)","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" private File txtFile;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" private Path filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" * Constructor for a new Storage instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"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":22,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"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":24,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" public Storage(String pathString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" this.txtFile \u003d new File(pathString);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" this.filePath \u003d Paths.get(pathString);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" if (!Files.exists(filePath)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"No file found, new .txt file created!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" * Reads the input of the stored tasklist .txt file and returns the saved information","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" * @return TaskList object containing the tasks stored in tasklist.txt","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" public TaskList readFromFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" Scanner txtScanner \u003d new Scanner(txtFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" while (txtScanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" tasks.addFromTxt(txtScanner.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" txtScanner.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"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":54,"author":{"gitId":"phiphi-tan"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"Something went wrong... There\u0027s still no file to be found\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" return new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"phiphi-tan"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" * Writes the output of PHI\u0027s current tasklist to the .txt file in storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" * @param taskInput PHI\u0027s current TaskList object","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":" public void writeToFile(TaskList taskInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":" FileWriter output \u003d new FileWriter(txtFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":" output.write(taskInput.outputList());","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":" output.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"phiphi-tan"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"phiphi-tan"},"content":" e.getStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":" }","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"}],"authorContributionMap":{"phiphi-tan":76}},{"path":"src/main/java/phi/Task.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":"/**","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/TaskList.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 java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"phiphi-tan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"phiphi-tan"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":" * Represents the task list of the chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" public TaskList() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"phiphi-tan"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" private Task getTask(int i) {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" if (i \u003c\u003d 0 || i \u003e tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" throw new IllegalArgumentException(\"this task does not exist, genius..\");","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"phiphi-tan"},"content":" return tasks.get(i - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" * Marks a task as done and returns the corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" * Contains error handling for incorrect user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-inputted string to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" * @return String response","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" public String doTask(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" int number \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" Task t \u003d getTask(number);","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"phiphi-tan"},"content":" t.markDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"phiphi-tan"},"content":" return \"ALRIGHT NICE I\u0027ll mark this as completed :)\\n\" + t;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" } catch (NumberFormatException | StringIndexOutOfBoundsException n) {","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"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":39,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"phiphi-tan"},"content":" * Marks a task as undone and returns the corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"phiphi-tan"},"content":" * Contains error handling for incorrect user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-inputted string to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"phiphi-tan"},"content":" * @return String response","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"phiphi-tan"},"content":" public String undoTask(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"phiphi-tan"},"content":" int number \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"phiphi-tan"},"content":" Task t \u003d getTask(number);","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"phiphi-tan"},"content":" t.markUndone();","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"phiphi-tan"},"content":" return \"Oh nooo I will mark this undone then :(\\n\" + t;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"phiphi-tan"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"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":59,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"phiphi-tan"},"content":" * Adds a task to the TaskList","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"phiphi-tan"},"content":" * @param task Task to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"phiphi-tan"},"content":" * @return String with the tasklist information","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"phiphi-tan"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"phiphi-tan"},"content":" return \"Added:\\n\" + task;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"phiphi-tan"},"content":" * Deletes a task from the list and returns the corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"phiphi-tan"},"content":" * Contains error handling for incorrect user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"phiphi-tan"},"content":" * @param input User-inputted string to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"phiphi-tan"},"content":" * @return String response","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"phiphi-tan"},"content":" public String deleteTask(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"phiphi-tan"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"phiphi-tan"},"content":" int number \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"phiphi-tan"},"content":" Task t \u003d getTask(number);","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"phiphi-tan"},"content":" System.out.printf(\"Alright say bye bye to task %d!%n\", number);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.remove(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"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":89,"author":{"gitId":"phiphi-tan"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"phiphi-tan"},"content":" return \"Ugh to delete stuff, you have to input \\\"delete\\\" and the number...\";","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"phiphi-tan"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"phiphi-tan"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"phiphi-tan"},"content":" * Prints the current task list. If list is empty, returns a corresponding response message","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"phiphi-tan"},"content":" * @return String representation of task list","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"phiphi-tan"},"content":" public String printList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"phiphi-tan"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"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":104,"author":{"gitId":"phiphi-tan"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"phiphi-tan"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"phiphi-tan"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"phiphi-tan"},"content":" output.append(String.format(\"%d.%s%n\", tasks.indexOf(t) + 1, t.toString()));","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"phiphi-tan"},"content":" return output.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"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":115,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"phiphi-tan"},"content":" * @param input each individual line of input in the .txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"phiphi-tan"},"content":" public void addFromTxt(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"phiphi-tan"},"content":" Scanner sc \u003d new Scanner(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"phiphi-tan"},"content":" sc.useDelimiter(\"\\\\|\");","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"phiphi-tan"},"content":" // parameter handling","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"phiphi-tan"},"content":" String taskType \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"phiphi-tan"},"content":" boolean isComplete \u003d Boolean.parseBoolean(sc.next());","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"phiphi-tan"},"content":" String taskMsg \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"phiphi-tan"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"phiphi-tan"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(new ToDo(taskMsg, isComplete));","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"phiphi-tan"},"content":" // deadline task","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"phiphi-tan"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"phiphi-tan"},"content":" String deadline \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(new Deadline(taskMsg, isComplete, deadline));","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"phiphi-tan"},"content":" // event task","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"phiphi-tan"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"phiphi-tan"},"content":" String start \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"phiphi-tan"},"content":" String end \u003d sc.next();","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"phiphi-tan"},"content":" this.tasks.add(new Event(taskMsg, isComplete, start, end));","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"phiphi-tan"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(\"something went wrong...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"phiphi-tan"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"phiphi-tan"},"content":" * Returns the entire tasklist in output format, to be written by a Storage object.","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"phiphi-tan"},"content":" * @return A String containing the entire task list, formatted in output style.","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"phiphi-tan"},"content":" public String outputList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"phiphi-tan"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"phiphi-tan"},"content":" for (Task t : this.tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"phiphi-tan"},"content":" output.append(t.outputFormat()).append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"phiphi-tan"},"content":" return output.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"phiphi-tan"},"content":" public int getSize() {","lastModifiedDate":"2023-09-14"},{"lineNumber":161,"author":{"gitId":"phiphi-tan"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":165,"author":{"gitId":"phiphi-tan"},"content":" * Returns the list of all tasks that match the given String keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":166,"author":{"gitId":"phiphi-tan"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":167,"author":{"gitId":"phiphi-tan"},"content":" * @param searchString Keyword to be searched for","lastModifiedDate":"2023-09-14"},{"lineNumber":168,"author":{"gitId":"phiphi-tan"},"content":" * @return Concatenated String of all tasks containing argument keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":169,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":170,"author":{"gitId":"phiphi-tan"},"content":" public String findTasks(String searchString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"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":172,"author":{"gitId":"phiphi-tan"},"content":" for (Task t : this.tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"phiphi-tan"},"content":" if (t.getMsg().contains(searchString)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"phiphi-tan"},"content":" output.append(t).append(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"phiphi-tan"},"content":" return output.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"phiphi-tan":179}},{"path":"src/main/java/phi/ToDo.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-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.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":"/**","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 void greeting() {","lastModifiedDate":"2023-09-01"},{"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":" System.out.println(logo + greetingMsg);","lastModifiedDate":"2023-09-01"},{"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 void goodbye() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" String exitMsg \u003d \"okk THANKS FOR COMING BYE!\";","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" System.out.println(exitMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" * List of all accepted user commands","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"phiphi-tan"},"content":" public static String helpMsg() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"phiphi-tan"},"content":" return \"Here\u0027s a list of commands:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"phiphi-tan"},"content":" + \"1. list (prints out a list of all tasks)\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"phiphi-tan"},"content":" + \"2. todo [TASK] (creates a to-do with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"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":36,"author":{"gitId":"phiphi-tan"},"content":" + \"4. event [TASK] /from [yyyy-MM-dd] /to [yyyy-MM-dd]\"","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"phiphi-tan"},"content":" + \" (creates a corresponding event with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"phiphi-tan"},"content":" + \"5. mark [X] (marks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"phiphi-tan"},"content":" + \"6. unmark [X] (unmarks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"phiphi-tan"},"content":" + \"7. delete [X] (removes task X from the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"phiphi-tan"},"content":" + \"8. find [KEYWORD] (searches for tasks that contain corresponding KEYWORD)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"phiphi-tan"},"content":" + \"9. bye (exits the program)\";","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":44}},{"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":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" public void handleInvalidInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"SIKE I can\u0027t process that!\"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" + \" Try again or say \\\"help\\\" to see a list of all available commands\";","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, new Parser(new TaskList()).handle(\"invalid\"));","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-01"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" public void helpInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"Here\u0027s a list of commands:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" + \"1. list (prints out a list of all tasks)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" + \"2. todo [TASK] (creates a to-do with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"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":21,"author":{"gitId":"phiphi-tan"},"content":" + \"4. event [TASK] /from [yyyy-MM-dd] /to [yyyy-MM-dd]\"","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" + \" (creates a corresponding event with body \\\"TASK\\\")\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":" + \"5. mark [X] (marks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" + \"6. unmark [X] (unmarks task X in the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" + \"7. delete [X] (removes task X from the list)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" + \"8. find [KEYWORD] (searches for tasks that contain corresponding KEYWORD)\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" + \"9. bye (exits the program)\";","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, new Parser(new TaskList()).handle(\"help\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":30}},{"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":"","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"phiphi-tan"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"phiphi-tan"},"content":" public void markValid() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"phiphi-tan"},"content":" TaskList test \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"phiphi-tan"},"content":" test.addTask(new ToDo(\"coding\", false));","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"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":13,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, test.doTask(\"mark 1\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"phiphi-tan"},"content":" public void markInvalid() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"phiphi-tan"},"content":" TaskList test \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"phiphi-tan"},"content":" test.addTask(new ToDo(\"coding\", false));","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"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":21,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, test.doTask(\"mark\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"phiphi-tan"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"phiphi-tan"},"content":" public void todoValid() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"phiphi-tan"},"content":" String expected \u003d \"Added:\\n[T][ ] coding\";","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"phiphi-tan"},"content":" assertEquals(expected, new TaskList().addTask(new ToDo(\"coding\", false)));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"phiphi-tan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"phiphi-tan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"phiphi-tan"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"phiphi-tan":30}},{"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 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}}] diff --git a/phiphi-tan_ip_master/commits.json b/phiphi-tan_ip_master/commits.json index 35e83088..75da3c61 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}}}]}]},"authorFileTypeContributionMap":{"phiphi-tan":{"java":710,"md":132,"fxml":0,"sh":0,"bat":1,"gradle":7,"txt":27}},"authorContributionVariance":{"phiphi-tan":26940.406},"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}}}]}]},"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"}} diff --git a/prawnzyy_ip_master/authorship.json b/prawnzyy_ip_master/authorship.json index 5bce83da..cf8175d1 100644 --- a/prawnzyy_ip_master/authorship.json +++ b/prawnzyy_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"prawnzyy":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":"prawnzyy"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"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":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"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":"prawnzyy"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"prawnzyy":22,"-":41}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" private DialogBox(String text, Image img, String style) {","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" dialog.setStyle(style);","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" return new DialogBox(text, img, String.format(","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" \"-fx-background-color: rgb(%d,%d,%d); -fx-background-radius: 5\", 170, 220, 220));","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" var db \u003d new DialogBox(text, img, String.format(","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" \"-fx-background-color: rgb(%d,%d,%d); -fx-background-radius: 5\", 255, 255, 220));","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":65}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.File;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * The Duke Program is a chatbot that takes in","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" * input from the user and responds accordingly","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" private Storage storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" private Ui ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" private String uiOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" private boolean hasCreatedFile \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" * Constructor for the Duke object.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" * @param filePath the location of the storage file.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" this.hasCreatedFile \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" if (f.createNewFile()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" } catch (IOException Ioe) {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" ui.showIoError();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" public String getResponse(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" Command c \u003d Parser.parse(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" uiOutput \u003d c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" uiOutput \u003d ui.showError(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" uiOutput \u003d ui.showIoError();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" uiOutput \u003d ui.showOutOfBounds();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" uiOutput \u003d ui.showTimeFormatError();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" return uiOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" public boolean getJustCreatedFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" return this.hasCreatedFile;","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"prawnzyy":61,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" * Launches the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" stage.setTitle(\"Prawn\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().showInit();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":30}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/prawn.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" * Runs the starting portion of Prawn.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" public void showInit() {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" Duke d \u003d new Duke(\"storage.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" if (d.getJustCreatedFile()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(ui.showLoadingError(), dukeImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(ui.showWelcome(), dukeImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":61}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"import duke.command.UnknownCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * The duke.Parser class takes an input and returns","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" * a corresponding command.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":"public class Parser {","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" // Initialisation of objects and variables","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" private enum Commands {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" BYE,","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" LIST,","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" TODO,","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" DEADLINE,","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" EVENT,","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" MARK,","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" UNMARK,","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" DELETE,","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" FIND","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" * Returns a corresponding Command from input.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" * @param fullCommand a String with the command","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" * @return A Command to be executed","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" * @throws DukeException If input does not match","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" int index;","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" String[] temp \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" Commands command \u003d Commands.valueOf(temp[0].toUpperCase());","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" switch (command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" case BYE:","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" case LIST:","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" case MARK:","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" index \u003d Integer.parseInt(temp[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" case UNMARK:","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" index \u003d Integer.parseInt(temp[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" case FIND:","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" return new FindCommand(temp[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":" case DELETE:","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":" index \u003d Integer.parseInt(temp[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":" case TODO:","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":" return new AddCommand(new Todo(temp[1]));","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":" case EVENT:","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"prawnzyy"},"content":" return new AddCommand(new Event(temp[1]));","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":" return new AddCommand(new Deadline(temp[1]));","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":79,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":80,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"prawnzyy":80}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.File;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" * The storage class reads and writes from","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * the hard drive.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"public class Storage {","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" * Reads from the hard drive and returns the","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" * tasks that have been read.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" * @return An ArrayList of the tasks on hard drive.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" * @throws FileNotFoundException If file does not exist.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" public ArrayList\u003cTask\u003e load() throws FileNotFoundException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" String[] components \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" Task t;","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" if (components[0].startsWith(\"T\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" t \u003d new Todo(components[1], components[2]);","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" } else if (components[0].startsWith(\"D\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" t \u003d new Deadline(components[1], components[2], LocalDate.parse(components[3]));","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" t \u003d new Event(components[1], components[2], components[3], components[4]);","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" tasks.add(t);","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" return tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" * Rewrites the file in hard drive.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" * @param tasks TaskList containing the tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" * @throws IOException If file is corrupted.","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" public void rewrite(TaskList tasks) throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" ArrayList\u003cTask\u003e arrayTasks \u003d tasks.getTasks();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":" FileWriter file \u003d new FileWriter(\"storage.txt\");","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":" for (int i \u003d 0; i \u003c arrayTasks.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":" Task task \u003d arrayTasks.get(i);","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":" file.write(task.showFileRepresentation());","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":" file.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":" * Adds a new task to the hard drive.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":" * @param task the task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":" * @throws IOException If the file is corrupted.","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"prawnzyy"},"content":" public void append(Task task) throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"prawnzyy"},"content":" FileWriter file \u003d new FileWriter(\"storage.txt\", true);","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"prawnzyy"},"content":" file.write(task.showFileRepresentation());","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"prawnzyy"},"content":" file.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":83}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * The Storage class stores the tasks and performs","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" * interactions with the tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"public class TaskList {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" // Initialising variables and objects","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" private ArrayList\u003cTask\u003e storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" public TaskList() {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" this.storage \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" public TaskList(ArrayList\u003cTask\u003e arrayList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" this.storage \u003d arrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" * Adds a task to the storage","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" * @param t the task to be added","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" public void add(Task t) {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" this.storage.add(t);","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" // Sorts the storage based on the description.","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" Collections.sort(this.storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" /** Displays Items in TaskList */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" public String display() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" String temp \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" temp +\u003d (\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" for (int i \u003d 0; i \u003c this.storage.size(); i++) {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" temp +\u003d ((i + 1) + \". \" + this.storage.get(i) + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" return temp;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" * Marks a specific task as done","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" * @param index the index of the task to be marked","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" public Task mark(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" this.storage.get(index - 1).mark();","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" return this.storage.get(index - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" * Marks a specific task as undone","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" * @param index the index of the task to be unmarked","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" public Task unmark(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" this.storage.get(index - 1).unmark();","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" return this.storage.get(index - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":" * Removes a specific task from storage","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":" * @param index the index of the task to be removed","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":" public Task delete(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"prawnzyy"},"content":" return (this.storage.remove(index - 1));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":" return this.storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":" public int getSize() {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"prawnzyy"},"content":" return this.storage.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"prawnzyy"},"content":" * Finds the tasks that contain the text.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"prawnzyy"},"content":" * @param text the word to find.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"prawnzyy"},"content":" * @return an ArrayList of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"prawnzyy"},"content":" public ArrayList\u003cTask\u003e find(String text) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"prawnzyy"},"content":" ArrayList\u003cTask\u003e found \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"prawnzyy"},"content":" for (int i \u003d 0; i \u003c this.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"prawnzyy"},"content":" boolean hasText \u003d this.storage.get(i).getDescription().contains(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"prawnzyy"},"content":" if (!hasText) {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"prawnzyy"},"content":" continue;","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"prawnzyy"},"content":" found.add(this.storage.get(i));","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"prawnzyy"},"content":" return found;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"prawnzyy":98}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-18"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * The UI class contains methods that generate UI elements","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" * such as line spaces","lastModifiedDate":"2023-08-18"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-18"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-18"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103T AY23/24 Sem 1","lastModifiedDate":"2023-08-18"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-18"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"public class Ui {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" /** Generates a line spacer */","lastModifiedDate":"2023-08-18"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" private Scanner s;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" public Ui() {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" this.s \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" public void line() {","lastModifiedDate":"2023-08-18"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" System.out.println(\"\\n----------------------------------------\");","lastModifiedDate":"2023-08-18"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-18"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" * Displays the loading error","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" return (\"File was not found on hard drive\\nAttempting to create file...v\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" * Displays welcome message","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" return (\"Hello, I\u0027m Prawn\\nWhat would you like me to do sire? \");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" * Displays IO error","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" public String showIoError() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" return (\"Error in creating file\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" * Reads the input from the user","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" * @return The command from the user","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" return s.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" * Displays unknown command","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" public String showUnknownCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" return (\"I do not understand this command\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":" * Displays the Duke exception","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":" * @param msg The specific duke exception\u0027s message","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":" public String showError(String msg) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":" return (msg);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":" * Displays the add message","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":" * @param t Task being added","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":" * @param size Size of the current TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":" public String showAddMessage(Task t, int size) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":" return (\"Got it, will add task...\\n\" + t + \"\\n\" + \"Now, you have \" + size + \" task(s)\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"prawnzyy"},"content":" * Displays the mark message","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"prawnzyy"},"content":" public String showMarkMessage(Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"prawnzyy"},"content":" return (\"Alright, it has been marked\\n\" + t);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"prawnzyy"},"content":" * Displays the unmark message","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"prawnzyy"},"content":" public String showUnmarkMessage(Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"prawnzyy"},"content":" return (\"Alright, it has been unmarked\\n\" + t);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"prawnzyy"},"content":" * Displays the deleting message","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"prawnzyy"},"content":" * @param t The task deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"prawnzyy"},"content":" * @param size The current size of the TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"prawnzyy"},"content":" public String showDeleteMessage(Task t, int size) {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"prawnzyy"},"content":" return (\"Sigh... fine, removing...\\n\" + t + \"\\n\" + \"Now, you have \" + size + \" task(s)\");","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"prawnzyy"},"content":" * Displays the out of bound message","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"prawnzyy"},"content":" public String showOutOfBounds() {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"prawnzyy"},"content":" return (\"Cannot access out of bounds index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"prawnzyy"},"content":" * Displays the tasks that are found.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"prawnzyy"},"content":" * @param tasks the tasks to be displayed.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"prawnzyy"},"content":" public String showFoundTask(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"prawnzyy"},"content":" String temp \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"prawnzyy"},"content":" temp +\u003d \"Here are the matching task in your list:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"prawnzyy"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"prawnzyy"},"content":" temp +\u003d ((i + 1) + \". \" + tasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"prawnzyy"},"content":" return temp;","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"prawnzyy"},"content":" * Displays the time format error message","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"prawnzyy"},"content":" public String showTimeFormatError() {","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"prawnzyy"},"content":" return (\"The time format is wrong\");","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-18"}],"authorContributionMap":{"prawnzyy":132}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The AddCommand represents a command","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * to add a task to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" private Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * Sets the isExit to false and adds the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" * @param task the task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" tasks.add(this.task);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" storage.rewrite(tasks);","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" return (ui.showAddMessage(task, tasks.getSize()));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":34}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The Command class is an abstract class that","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * encapsulates the working of an executable command.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" private boolean isExit;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" public Command(boolean isExit) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" return isExit;","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" * Executes the command that the command object holds.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" * @param tasks TaskList of the current tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" * @param ui UI class to handle UI.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" * @param storage A storage object to handle file IO.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" * @throws IOException If file is corrupted.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":33}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * The DeleteCommand represents a command","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" * to delete a task from the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * Sets the isExit to false and adds the index to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" * @param index the index to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" Task t \u003d tasks.delete(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" storage.rewrite(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" return (ui.showDeleteMessage(t, tasks.getSize()));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":33}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * The ExitCommand represents a command to","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" * end the chatbot and exit","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" public ExitCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" super(true);","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" Platform.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":23}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The FindCommand represents a command","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * to find a specific task given a word","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" private String text;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * Sets the isExit to false and add the","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" * text to find.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" * @param text the text to find.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" public FindCommand(String text) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" ArrayList\u003cTask\u003e found \u003d tasks.find(text);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" return (ui.showFoundTask(found));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"prawnzyy":34}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" * The ListCommand is a command that","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * displays the current tasks on screen.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" public ListCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" return (tasks.display());","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":21}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The MarkCommand is a Command that","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * marks a task as completed.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" * Sets the isExit to false and adds","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * the index to mark","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" * @param index the index to mark.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" Task task \u003d tasks.mark(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" storage.rewrite(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" return (ui.showMarkMessage(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":34}},{"path":"src/main/java/duke/command/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" * The UnknownCommand represents a Command that","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * the chatbot does not understand.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" public UnknownCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" return (ui.showUnknownCommand());","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":21}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The UnmarkCommand represents a Command that","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * unmarks a specific task.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" * Sets the isExit to false and adds the index","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * to unmark.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" * @param index the index to unmark.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" Task task \u003d tasks.unmark(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" storage.rewrite(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" return (ui.showUnmarkMessage(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":34}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The DukeException Class extends Exception and is","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" * used to denote any exception specific to duke.Duke","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" super(msg);","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":11}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The EmptyDescriptionException Class extends DukeException and","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" * is used to denote when a command has a missing description","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"public class EmptyDescriptionException extends DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" public EmptyDescriptionException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" super(\"The description cannot be left blank\");","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"prawnzyy":11}},{"path":"src/main/java/duke/exception/MissingIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The MissingIndexException Class extends DukeException and is","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" * used to denote that there is a missing parameter or index","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"public class MissingIndexException extends DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" public MissingIndexException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" super(\"The index does not exist\");","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"prawnzyy":11}},{"path":"src/main/java/duke/exception/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The UnknownCommandException extends DukeException and is used","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" * to denote that duke.Duke does not understand that particular command","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"public class UnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" super(\"I do not understand this command\");","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":11}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.UnknownCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The Deadline class extends Task and has an additional field","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * to store when the task must be completed by","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" /** Constructor for Deadline */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" public Deadline(String done, String description, LocalDate by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" super(description, done);","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" * Sets the description and by date.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" * @param by date to finish the task by.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" public Deadline(String commands) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" String[] items \u003d commands.split(\" /\");","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" if (items.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" } else if (!items[1].startsWith(\"by \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" } else if (items[1].length() \u003d\u003d 3) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" assert items.length \u003e 1 : \"Items should be longer than 1\";","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" LocalDate date \u003d LocalDate.parse(items[1].substring(3));","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" this.description \u003d items[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" this.by \u003d date;","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" public String showFileRepresentation() {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" return (\"D\" + \" | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + this.description + \" | \"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" + by + \"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":59}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.UnknownCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" * The Event class extends Task. An event has 2 extra fields","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":" * of start and end time","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" protected String start;","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" protected String end;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" /** Constructor for Event */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" public Event(String done, String description, String start, String end) {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" super(description, done);","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" * Sets the description, start and end date.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" * @param start the start time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" * @param end the end time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" public Event(String commands) throws UnknownCommandException {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" String[] items \u003d commands.split(\" /\");","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" // Checks for correct parameters","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" boolean isCorrectLength \u003d items.length \u003d\u003d 3;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" if (!isCorrectLength) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" boolean hasCorrectStarting \u003d items[1].startsWith(\"from \") \u0026\u0026 items[2].startsWith(\"to \");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" if (!hasCorrectStarting) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" assert items.length \u003d\u003d 3 : \"Should only have 3 items in total\";","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" // Assigns parameters","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" this.description \u003d items[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" this.start \u003d items[1].substring(5);","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" this.end \u003d items[2].substring(3);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" return \"[E]\" + super.toString() + \" (from: \" + start + \" to: \" + end + \")\";","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" public String showFileRepresentation() {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" return (\"E\" + \" | \" + (this.isDone ? \"1\" : \"0\")","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" + \" | \" + this.description + \" | \" + start + \" | \" + end + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":58}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The abstract Task class is to encapsulate the task into a single object","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" * It will contain the description and whether it has been completed","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"public abstract class Task implements Comparable\u003cTask\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" protected String description;","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" * Constructor for Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" * @param description the task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" public Task(String description, String done) {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" this.isDone \u003d done.equals(\"1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" * Constructor for Task where isDone is default false.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" * Default constructor for Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" public Task() {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" * Checks isDone status.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" * @return Boolean value of whether the task is completed.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" * Marks task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" public void mark() {","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" * Marks task as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" public void unmark() {","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" return this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":70,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":" public abstract String showFileRepresentation();","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":" public int compareTo(Task t) {","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":" return this.description.compareTo(t.description);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":77}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The Todo class represents a Todo Task","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" /** Constructor for duke.task.Todo */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" public Todo(String done, String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" super(description, done);","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" public String showFileRepresentation() {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" return (\"T\" + \" | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + this.description + \"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":29}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: pink;\" xmlns\u003d\"http://javafx.com/javafx/17.0.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" opacity\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background: pink;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" public void testList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" Command c \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" assertEquals(false, c.isExit());","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" public void testExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" Command c \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" assertEquals(true, c.isExit());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" public void testAdd() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" Storage storage \u003d new Storage(\"storage.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" Command c \u003d Parser.parse(\"todo read book\");","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" assertEquals(1, tasks.getSize());","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"prawnzyy":50}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" public void testSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" assertEquals(0, tasks.getSize());","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" tasks.add(new Todo(\"read book\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" assertEquals(1, tasks.getSize());","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" public void testAdd() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" tasks.add(new Todo(\"read book\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"[T][ ] read book\", tasks.getTasks().get(0).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" public void testDelete_correctIndex_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" tasks.add(new Todo(\"read book\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" Task t \u003d tasks.delete(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"[T][ ] read book\", t.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" public void testDelete_wrongIndex_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" tasks.add(new Todo(\"read book\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" Task t \u003d tasks.delete(2);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"Index 1 out of bounds for length 1\", e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" public void testMarkAndUnmark() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" tasks.add(new Todo(\"read book\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" tasks.mark(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"[T][X] read book\", tasks.getTasks().get(0).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" tasks.unmark(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"[T][ ] read book\", tasks.getTasks().get(0).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"prawnzyy":54}},{"path":"src/test/java/duke/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"public class UiTest {","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" public void testOpening() {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" assertEquals(ui.showWelcome(), \"Hello, I\u0027m Prawn\\nWhat would you like me to do sire? \");","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" public void testIoError() {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" assertEquals(ui.showIoError(), \"Error in creating file\");","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" public void testUnknownCommand() {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" assertEquals(ui.showUnknownCommand(), \"I do not understand this command\");","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"prawnzyy":20}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"[T][ ] read books\", new Todo(\"read books\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" public void testFileRepresentation() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"T | 0 | read book\\n\", new Todo(\"read book\").showFileRepresentation());","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" public void testIsExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" assertEquals(false, new Todo(\"read book\").isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"prawnzyy":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"todo eat food","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"todo","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"deadline do homework /by Monday","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"event teambuilding /from: Aug 8 2pm /to: 6pm","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"doing homework","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"mark 1","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"mark 3","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"unmark 1","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"prawnzyy":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"prawnzyy":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":"prawnzyy"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"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":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"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":"prawnzyy"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"prawnzyy":22,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"## Prawn","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"Prawn is a **desktop chatbot for storing of various tasks, optimised for","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"use via the command line interface (CLI)** while still have the benefits","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"of the graphical user interface (GUI). ","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"### Adding Tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"Allows users to add various tasks *(Eg. todo, deadline, event)* to the ","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"task list for further viewing.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"### Marking of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"Allows users to mark specific tasks as done or unmark them if they","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"are incomplete.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"### Viewing of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":"Allows users to view all the tasks that they currently have and their","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"completion status.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":23,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":"### `list` - Displays the tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"Displays the current tasks .","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":"Format : `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"`list`","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":"### `todo` - Adds a todo task","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":"Adds a todo task to the current list.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":"Format: `todo [description]`","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":"`todo read book`, `todo finish homework`","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":"- The description of the task comes after the todo command","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":"- The description **must** be supplied","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":"- There can only be one description","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":"### `deadline` - Adds a deadline task","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":"Adds a deadline task with a date to the current list.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":"Format: `deadline [description] /by [YYYY-MM-DD]`","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":"`deadline return books /by 2023-09-09`, `deadline homework /by 2023-11-09`","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":"- The description and date **must** be specified in the above format","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":"### `event` - Adds an event task","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":"Adds an event task with a start and end date or time.","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":"Format: `event [description] /from [start date/time] /to [end date/time]`","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":"`event attend meeting /from Aug 21 2pm /to 4pm`","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":"- Description, start and end must be specified","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":"- Note that start and end **does not follow** the same format as deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":"- The format of start and end is up to the user","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":"### `mark` - Marks a task as done","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":"Marks a task at a specific index as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"prawnzyy"},"content":"Format: `mark [index]`","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"prawnzyy"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"prawnzyy"},"content":"`mark 1`, `mark 3`","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"prawnzyy"},"content":"- Note that the starting index is 1","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"prawnzyy"},"content":"- The indexing follows the order displayed under `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"prawnzyy"},"content":"### `unmark` - Unmarks a task as undone","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"prawnzyy"},"content":"Unmarks a task at a specific index as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"prawnzyy"},"content":"Format: `unmark [index]`","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"prawnzyy"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"prawnzyy"},"content":"`unmark 1`, `unmark 3`","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"prawnzyy"},"content":"- Note that the starting index is 1","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"prawnzyy"},"content":"- The indexing follows the order displayed under `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"prawnzyy"},"content":"### `delete` - Deletes a task","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"prawnzyy"},"content":"Deletes a task at a specific index.","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"prawnzyy"},"content":"Format: `delete [index]`","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"prawnzyy"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"prawnzyy"},"content":"`delete 1`, `delete 4`","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"prawnzyy"},"content":"- Note that the starting index is 1","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"prawnzyy"},"content":"### `find` - Find tasks that contains input word","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"prawnzyy"},"content":"Find tasks that contain the input word and displays them.","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"prawnzyy"},"content":"Format: `find [word]`","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":119,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":121,"author":{"gitId":"prawnzyy"},"content":"`find book`, `find movie`","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"prawnzyy"},"content":"- Note that the word is **case_sensitive**","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"prawnzyy"},"content":"### `bye` - Exits the application","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"prawnzyy"},"content":"Exits and closes the application window","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"prawnzyy"},"content":"Format: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"prawnzyy":112,"-":20}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" private DialogBox(String text, Image img, String style) {","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" dialog.setStyle(style);","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" return new DialogBox(text, img, String.format(","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" \"-fx-background-color: rgb(%d,%d,%d); -fx-background-radius: 5\", 170, 220, 220));","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" var db \u003d new DialogBox(text, img, String.format(","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" \"-fx-background-color: rgb(%d,%d,%d); -fx-background-radius: 5\", 255, 255, 220));","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":65}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.File;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * The Duke Program is a chatbot that takes in","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" * input from the user and responds accordingly","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" private Storage storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" private Ui ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" private String uiOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" private boolean hasCreatedFile \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" * Constructor for the Duke object.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" * @param filePath the location of the storage file.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" this.hasCreatedFile \u003d true;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" if (f.createNewFile()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" } catch (IOException Ioe) {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" ui.showIoError();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" public String getResponse(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" Command c \u003d Parser.parse(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" uiOutput \u003d c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" uiOutput \u003d ui.showError(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" uiOutput \u003d ui.showIoError();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" uiOutput \u003d ui.showOutOfBounds();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" uiOutput \u003d ui.showTimeFormatError();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" return uiOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" public boolean getJustCreatedFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" return this.hasCreatedFile;","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"prawnzyy":61,"-":3}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" * Launches the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" stage.setTitle(\"Prawn\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().showInit();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":30}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/prawn.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" * Runs the starting portion of Prawn.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" public void showInit() {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" Duke d \u003d new Duke(\"storage.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" if (d.getJustCreatedFile()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(ui.showLoadingError(), dukeImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(ui.showWelcome(), dukeImage));","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":61}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"import duke.command.UnknownCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * The duke.Parser class takes an input and returns","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" * a corresponding command.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":"public class Parser {","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" // Initialisation of objects and variables","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" private enum Commands {","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" BYE,","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" LIST,","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" TODO,","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" DEADLINE,","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" EVENT,","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" MARK,","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" UNMARK,","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" DELETE,","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" FIND","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" * Returns a corresponding Command from input.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" * @param fullCommand a String with the command","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" * @return A Command to be executed","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" * @throws DukeException If input does not match","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" int index;","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" String[] temp \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" Commands command \u003d Commands.valueOf(temp[0].toUpperCase());","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" switch (command) {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" case BYE:","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" case LIST:","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" case MARK:","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" index \u003d Integer.parseInt(temp[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" case UNMARK:","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" index \u003d Integer.parseInt(temp[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" case FIND:","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" return new FindCommand(temp[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":" case DELETE:","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":" index \u003d Integer.parseInt(temp[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":" case TODO:","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":" return new AddCommand(new Todo(temp[1]));","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":" case EVENT:","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"prawnzyy"},"content":" return new AddCommand(new Event(temp[1]));","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":" return new AddCommand(new Deadline(temp[1]));","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":" default:","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":79,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":80,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"prawnzyy":80}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.File;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" * The storage class reads and writes from","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * the hard drive.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"public class Storage {","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" * Reads from the hard drive and returns the","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" * tasks that have been read.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" * @return An ArrayList of the tasks on hard drive.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" * @throws FileNotFoundException If file does not exist.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" public ArrayList\u003cTask\u003e load() throws FileNotFoundException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" String[] components \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" Task t;","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" if (components[0].startsWith(\"T\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" t \u003d new Todo(components[1], components[2]);","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" } else if (components[0].startsWith(\"D\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" t \u003d new Deadline(components[1], components[2], LocalDate.parse(components[3]));","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" t \u003d new Event(components[1], components[2], components[3], components[4]);","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" tasks.add(t);","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" return tasks;","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" * Rewrites the file in hard drive.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" * @param tasks TaskList containing the tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" * @throws IOException If file is corrupted.","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" public void rewrite(TaskList tasks) throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" ArrayList\u003cTask\u003e arrayTasks \u003d tasks.getTasks();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":" FileWriter file \u003d new FileWriter(\"storage.txt\");","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":" for (int i \u003d 0; i \u003c arrayTasks.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":" Task task \u003d arrayTasks.get(i);","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":" file.write(task.showFileRepresentation());","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":" file.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":" * Adds a new task to the hard drive.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":" * @param task the task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":" * @throws IOException If the file is corrupted.","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"prawnzyy"},"content":" public void append(Task task) throws IOException {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"prawnzyy"},"content":" FileWriter file \u003d new FileWriter(\"storage.txt\", true);","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"prawnzyy"},"content":" file.write(task.showFileRepresentation());","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"prawnzyy"},"content":" file.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":83}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * The Storage class stores the tasks and performs","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" * interactions with the tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"public class TaskList {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" // Initialising variables and objects","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" private ArrayList\u003cTask\u003e storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" public TaskList() {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" this.storage \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" public TaskList(ArrayList\u003cTask\u003e arrayList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" this.storage \u003d arrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" * Adds a task to the storage","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" * @param t the task to be added","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" public void add(Task t) {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" this.storage.add(t);","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" // Sorts the storage based on the description.","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" Collections.sort(this.storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" /** Displays Items in TaskList */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" public String display() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" String temp \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" temp +\u003d (\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" for (int i \u003d 0; i \u003c this.storage.size(); i++) {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" temp +\u003d ((i + 1) + \". \" + this.storage.get(i) + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" return temp;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" * Marks a specific task as done","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" * @param index the index of the task to be marked","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" public Task mark(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" this.storage.get(index - 1).mark();","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" return this.storage.get(index - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" * Marks a specific task as undone","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" * @param index the index of the task to be unmarked","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" public Task unmark(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" this.storage.get(index - 1).unmark();","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" return this.storage.get(index - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":" * Removes a specific task from storage","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":" * @param index the index of the task to be removed","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":" public Task delete(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"prawnzyy"},"content":" return (this.storage.remove(index - 1));","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":" return this.storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":" public int getSize() {","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"prawnzyy"},"content":" return this.storage.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"prawnzyy"},"content":" * Finds the tasks that contain the text.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"prawnzyy"},"content":" * @param text the word to find.","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"prawnzyy"},"content":" * @return an ArrayList of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"prawnzyy"},"content":" public ArrayList\u003cTask\u003e find(String text) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"prawnzyy"},"content":" ArrayList\u003cTask\u003e found \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"prawnzyy"},"content":" for (int i \u003d 0; i \u003c this.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"prawnzyy"},"content":" boolean hasText \u003d this.storage.get(i).getDescription().contains(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"prawnzyy"},"content":" if (!hasText) {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"prawnzyy"},"content":" continue;","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"prawnzyy"},"content":" found.add(this.storage.get(i));","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"prawnzyy"},"content":" return found;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"prawnzyy":98}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-18"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * The UI class contains methods that generate UI elements","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" * such as line spaces","lastModifiedDate":"2023-08-18"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-18"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-18"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103T AY23/24 Sem 1","lastModifiedDate":"2023-08-18"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-18"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"public class Ui {","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" /** Generates a line spacer */","lastModifiedDate":"2023-08-18"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" private Scanner s;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" public Ui() {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" this.s \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" public void line() {","lastModifiedDate":"2023-08-18"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" System.out.println(\"\\n----------------------------------------\");","lastModifiedDate":"2023-08-18"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-18"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" * Displays the loading error","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" return (\"File was not found on hard drive\\nAttempting to create file...v\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" * Displays welcome message","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" return (\"Hello, I\u0027m Prawn\\nWhat would you like me to do sire? \");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" * Displays IO error","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" public String showIoError() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" return (\"Error in creating file\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" * Reads the input from the user","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" * @return The command from the user","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" return s.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" * Displays unknown command","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" public String showUnknownCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" return (\"I do not understand this command\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":" * Displays the Duke exception","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":" * @param msg The specific duke exception\u0027s message","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":" public String showError(String msg) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":" return (msg);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":" * Displays the add message","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":" * @param t Task being added","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":" * @param size Size of the current TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":" public String showAddMessage(Task t, int size) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":" return (\"Got it, will add task...\\n\" + t + \"\\n\" + \"Now, you have \" + size + \" task(s)\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"prawnzyy"},"content":" * Displays the mark message","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"prawnzyy"},"content":" public String showMarkMessage(Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"prawnzyy"},"content":" return (\"Alright, it has been marked\\n\" + t);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"prawnzyy"},"content":" * Displays the unmark message","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"prawnzyy"},"content":" public String showUnmarkMessage(Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"prawnzyy"},"content":" return (\"Alright, it has been unmarked\\n\" + t);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"prawnzyy"},"content":" * Displays the deleting message","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"prawnzyy"},"content":" * @param t The task deleted","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"prawnzyy"},"content":" * @param size The current size of the TaskList","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"prawnzyy"},"content":" public String showDeleteMessage(Task t, int size) {","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"prawnzyy"},"content":" return (\"Sigh... fine, removing...\\n\" + t + \"\\n\" + \"Now, you have \" + size + \" task(s)\");","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"prawnzyy"},"content":" * Displays the out of bound message","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"prawnzyy"},"content":" public String showOutOfBounds() {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"prawnzyy"},"content":" return (\"Cannot access out of bounds index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"prawnzyy"},"content":" * Displays the tasks that are found.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"prawnzyy"},"content":" * @param tasks the tasks to be displayed.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"prawnzyy"},"content":" public String showFoundTask(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"prawnzyy"},"content":" String temp \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"prawnzyy"},"content":" temp +\u003d \"Here are the matching task in your list:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"prawnzyy"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"prawnzyy"},"content":" temp +\u003d ((i + 1) + \". \" + tasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"prawnzyy"},"content":" return temp;","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"prawnzyy"},"content":" * Displays the time format error message","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"prawnzyy"},"content":" public String showTimeFormatError() {","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"prawnzyy"},"content":" return (\"The time format is wrong\");","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-18"}],"authorContributionMap":{"prawnzyy":132}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The AddCommand represents a command","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * to add a task to the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" private Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * Sets the isExit to false and adds the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" * @param task the task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" tasks.add(this.task);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" storage.rewrite(tasks);","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" return (ui.showAddMessage(task, tasks.getSize()));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":34}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The Command class is an abstract class that","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * encapsulates the working of an executable command.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" private boolean isExit;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" public Command(boolean isExit) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" return isExit;","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" * Executes the command that the command object holds.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" * @param tasks TaskList of the current tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" * @param ui UI class to handle UI.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" * @param storage A storage object to handle file IO.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" * @throws IOException If file is corrupted.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws IOException;","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":33}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * The DeleteCommand represents a command","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" * to delete a task from the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * Sets the isExit to false and adds the index to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" * @param index the index to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" Task t \u003d tasks.delete(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" storage.rewrite(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" return (ui.showDeleteMessage(t, tasks.getSize()));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":33}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * The ExitCommand represents a command to","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" * end the chatbot and exit","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" public ExitCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" super(true);","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" Platform.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" return \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":23}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The FindCommand represents a command","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * to find a specific task given a word","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" private String text;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * Sets the isExit to false and add the","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" * text to find.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" * @param text the text to find.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" public FindCommand(String text) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" ArrayList\u003cTask\u003e found \u003d tasks.find(text);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" return (ui.showFoundTask(found));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"prawnzyy":34}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" * The ListCommand is a command that","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * displays the current tasks on screen.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" public ListCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" return (tasks.display());","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":21}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The MarkCommand is a Command that","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * marks a task as completed.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" * Sets the isExit to false and adds","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * the index to mark","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" * @param index the index to mark.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" Task task \u003d tasks.mark(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" storage.rewrite(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" return (ui.showMarkMessage(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":34}},{"path":"src/main/java/duke/command/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" * The UnknownCommand represents a Command that","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * the chatbot does not understand.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" public UnknownCommand() {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" return (ui.showUnknownCommand());","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":21}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The UnmarkCommand represents a Command that","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * unmarks a specific task.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" private int index;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" * Sets the isExit to false and adds the index","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" * to unmark.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" * @param index the index to unmark.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" super(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" Task task \u003d tasks.unmark(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" storage.rewrite(tasks);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" return (ui.showUnmarkMessage(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":34}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The DukeException Class extends Exception and is","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" * used to denote any exception specific to duke.Duke","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" super(msg);","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":11}},{"path":"src/main/java/duke/exception/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The EmptyDescriptionException Class extends DukeException and","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" * is used to denote when a command has a missing description","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"public class EmptyDescriptionException extends DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" public EmptyDescriptionException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" super(\"The description cannot be left blank\");","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"prawnzyy":11}},{"path":"src/main/java/duke/exception/MissingIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The MissingIndexException Class extends DukeException and is","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" * used to denote that there is a missing parameter or index","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"public class MissingIndexException extends DukeException {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" public MissingIndexException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" super(\"The index does not exist\");","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"prawnzyy":11}},{"path":"src/main/java/duke/exception/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The UnknownCommandException extends DukeException and is used","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" * to denote that duke.Duke does not understand that particular command","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"public class UnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" super(\"I do not understand this command\");","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"prawnzyy":11}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.EmptyDescriptionException;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.UnknownCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" * The Deadline class extends Task and has an additional field","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" * to store when the task must be completed by","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" /** Constructor for Deadline */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" public Deadline(String done, String description, LocalDate by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" super(description, done);","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" * Sets the description and by date.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" * @param by date to finish the task by.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" public Deadline(String commands) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" String[] items \u003d commands.split(\" /\");","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" if (items.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" } else if (!items[1].startsWith(\"by \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" } else if (items[1].length() \u003d\u003d 3) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" assert items.length \u003e 1 : \"Items should be longer than 1\";","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" LocalDate date \u003d LocalDate.parse(items[1].substring(3));","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" this.description \u003d items[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" this.by \u003d date;","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" public String showFileRepresentation() {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" return (\"D\" + \" | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + this.description + \" | \"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" + by + \"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":59}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.UnknownCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" * The Event class extends Task. An event has 2 extra fields","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":" * of start and end time","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" protected String start;","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" protected String end;","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" /** Constructor for Event */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" public Event(String done, String description, String start, String end) {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" super(description, done);","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" * Sets the description, start and end date.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" * @param start the start time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" * @param end the end time of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" public Event(String commands) throws UnknownCommandException {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" String[] items \u003d commands.split(\" /\");","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" // Checks for correct parameters","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" boolean isCorrectLength \u003d items.length \u003d\u003d 3;","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" if (!isCorrectLength) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" boolean hasCorrectStarting \u003d items[1].startsWith(\"from \") \u0026\u0026 items[2].startsWith(\"to \");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" if (!hasCorrectStarting) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" assert items.length \u003d\u003d 3 : \"Should only have 3 items in total\";","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" // Assigns parameters","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" this.description \u003d items[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" this.start \u003d items[1].substring(5);","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" this.end \u003d items[2].substring(3);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" return \"[E]\" + super.toString() + \" (from: \" + start + \" to: \" + end + \")\";","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":" public String showFileRepresentation() {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" return (\"E\" + \" | \" + (this.isDone ? \"1\" : \"0\")","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" + \" | \" + this.description + \" | \" + start + \" | \" + end + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":58}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The abstract Task class is to encapsulate the task into a single object","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" * It will contain the description and whether it has been completed","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"public abstract class Task implements Comparable\u003cTask\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" protected String description;","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" * Constructor for Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" * @param description the task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" public Task(String description, String done) {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" this.isDone \u003d done.equals(\"1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":" * Constructor for Task where isDone is default false.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" * @param description the description of the task.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" * Default constructor for Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" public Task() {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" * Checks isDone status.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" * @return Boolean value of whether the task is completed.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" * Marks task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" public void mark() {","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"prawnzyy"},"content":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":56,"author":{"gitId":"prawnzyy"},"content":" * Marks task as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":58,"author":{"gitId":"prawnzyy"},"content":" public void unmark() {","lastModifiedDate":"2023-08-19"},{"lineNumber":59,"author":{"gitId":"prawnzyy"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":60,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":61,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":62,"author":{"gitId":"prawnzyy"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-19"},{"lineNumber":63,"author":{"gitId":"prawnzyy"},"content":" return this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":64,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":65,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":66,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":67,"author":{"gitId":"prawnzyy"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"prawnzyy"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":69,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":70,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"prawnzyy"},"content":" public abstract String showFileRepresentation();","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"prawnzyy"},"content":" public int compareTo(Task t) {","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"prawnzyy"},"content":" return this.description.compareTo(t.description);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":77}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.task;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":" * The Todo class represents a Todo Task","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":" *","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":" * @author Zi Xiang","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":" * @version CS2103 AY23/24 Sem 1","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" /** Constructor for duke.task.Todo */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" public Todo(String done, String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" super(description, done);","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" public String showFileRepresentation() {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" return (\"T\" + \" | \" + (this.isDone ? \"1\" : \"0\") + \" | \" + this.description + \"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":29}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: pink;\" xmlns\u003d\"http://javafx.com/javafx/17.0.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" opacity\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background: pink;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"prawnzyy":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" public void testList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" Command c \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" assertEquals(false, c.isExit());","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" public void testExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" Command c \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" assertEquals(true, c.isExit());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" public void testAdd() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" Storage storage \u003d new Storage(\"storage.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" Command c \u003d Parser.parse(\"todo read book\");","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" assertEquals(1, tasks.getSize());","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" fail();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"prawnzyy":50}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" public void testSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" assertEquals(0, tasks.getSize());","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" tasks.add(new Todo(\"read book\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" assertEquals(1, tasks.getSize());","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" public void testAdd() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" tasks.add(new Todo(\"read book\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"[T][ ] read book\", tasks.getTasks().get(0).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"prawnzyy"},"content":" public void testDelete_correctIndex_success() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"prawnzyy"},"content":" tasks.add(new Todo(\"read book\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"prawnzyy"},"content":" Task t \u003d tasks.delete(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"[T][ ] read book\", t.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"prawnzyy"},"content":" public void testDelete_wrongIndex_exceptionThrown() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"prawnzyy"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"prawnzyy"},"content":" tasks.add(new Todo(\"read book\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"prawnzyy"},"content":" Task t \u003d tasks.delete(2);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"prawnzyy"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"Index 1 out of bounds for length 1\", e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"prawnzyy"},"content":" public void testMarkAndUnmark() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"prawnzyy"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"prawnzyy"},"content":" tasks.add(new Todo(\"read book\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"prawnzyy"},"content":" tasks.mark(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"[T][X] read book\", tasks.getTasks().get(0).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"prawnzyy"},"content":" tasks.unmark(1);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"[T][ ] read book\", tasks.getTasks().get(0).toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"prawnzyy":54}},{"path":"src/test/java/duke/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"public class UiTest {","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" public void testOpening() {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" assertEquals(ui.showWelcome(), \"Hello, I\u0027m Prawn\\nWhat would you like me to do sire? \");","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" public void testIoError() {","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" assertEquals(ui.showIoError(), \"Error in creating file\");","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":" public void testUnknownCommand() {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" assertEquals(ui.showUnknownCommand(), \"I do not understand this command\");","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"prawnzyy":20}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"[T][ ] read books\", new Todo(\"read books\").toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"prawnzyy"},"content":" public void testFileRepresentation() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"prawnzyy"},"content":" assertEquals(\"T | 0 | read book\\n\", new Todo(\"read book\").showFileRepresentation());","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"prawnzyy"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"prawnzyy"},"content":" public void testIsExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"prawnzyy"},"content":" assertEquals(false, new Todo(\"read book\").isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"prawnzyy"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"prawnzyy"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"prawnzyy":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"prawnzyy"},"content":"todo eat food","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"prawnzyy"},"content":"todo","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"prawnzyy"},"content":"deadline do homework /by Monday","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"prawnzyy"},"content":"event teambuilding /from: Aug 8 2pm /to: 6pm","lastModifiedDate":"2023-08-19"},{"lineNumber":5,"author":{"gitId":"prawnzyy"},"content":"doing homework","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"prawnzyy"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"prawnzyy"},"content":"mark 1","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"prawnzyy"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"prawnzyy"},"content":"mark 3","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"prawnzyy"},"content":"unmark 1","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"prawnzyy"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"prawnzyy"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"prawnzyy":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"prawnzyy"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"prawnzyy":1,"-":20}}] diff --git a/prawnzyy_ip_master/commits.json b/prawnzyy_ip_master/commits.json index 62e55ea5..0cb4919f 100644 --- a/prawnzyy_ip_master/commits.json +++ b/prawnzyy_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"prawnzyy":[{"date":"2023-08-18","commitResults":[{"hash":"f69eb1cc9037235ccb5bd0d3c2de89fcca8c6e26","isMergeCommit":false,"messageTitle":"Completed Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-08-19","commitResults":[{"hash":"80216b8ac5bd712a3448af83231d7dd835a35e34","isMergeCommit":false,"messageTitle":"Completed Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":1}}},{"hash":"fddaf3180ddaa46da46fd5cd68d982a477f106fe","isMergeCommit":false,"messageTitle":"Completed Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":3}}},{"hash":"c413452a9e7c35b4e76c417e8fd12c871ce563eb","isMergeCommit":false,"messageTitle":"Completed Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":10}}},{"hash":"1dc19bd04dd735c79a6efabb7ed59ef533e08f0b","isMergeCommit":false,"messageTitle":"Bug fixes for Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":7}}},{"hash":"ce5763698e1353912e87b78d96889dc2e5623fca","isMergeCommit":false,"messageTitle":"Completed Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":5}}},{"hash":"1f46496dd57f44c3accf242688c07571b30d1c0f","isMergeCommit":false,"messageTitle":"First Iteration of runtest","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-20","commitResults":[{"hash":"56e83db39829be318aaee8c8901410f14f099e2b","isMergeCommit":false,"messageTitle":"Completed Level-5 Tentatively","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":20}}},{"hash":"67cd403fe96d44231e806548a256e1d6e8ae439b","isMergeCommit":false,"messageTitle":"Second Iteration of runtest","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"609f61566f79df421284eb1fd80baf6e471da9ca","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":24}}}]},{"date":"2023-08-25","commitResults":[{"hash":"bbd8769f941c0fb57c01fb07b16cc1e5be384564","isMergeCommit":false,"messageTitle":"Add Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":75}}},{"hash":"a017de659af393154b5ec52f05cf6c61918e5afc","isMergeCommit":true,"messageTitle":"Add Level 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9e1409714193fb5ad24174efe189b10cbc6796d8","isMergeCommit":false,"messageTitle":"Add Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":7}}},{"hash":"8d1e685be9ba8b81a61aaf654eaf6921ccedc613","isMergeCommit":true,"messageTitle":"Add Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"7f0258ad074312030fc3637949445201898adc13","isMergeCommit":false,"messageTitle":"Add A-MoreOOP","messageBody":"Many parts of code can be extracted out\n\nMoved various parts of code into separate classes\nto make code more user-friendly\n","fileTypesAndContributionMap":{"java":{"insertions":301,"deletions":173}}},{"hash":"d1611941a8ef53b43396f0ad663b7e21be3fa361","isMergeCommit":true,"messageTitle":"Add A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"43dc1735baee1868faefc704b8174ebb9592949b","isMergeCommit":false,"messageTitle":"Move files to packages","messageBody":"Files too cluttered\n\nHard to view\n\nSplit into various packages for\neasier viewing\n","fileTypesAndContributionMap":{"java":{"insertions":132,"deletions":35},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"9996b5dd8212c05126539b3b180361e43054e8a6","isMergeCommit":true,"messageTitle":"Move files into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"e5fea9f52f3670cfcb88b23467e53c85351c7079","isMergeCommit":true,"messageTitle":"Merge gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9ebe76e82c8316ee160c3108d34791d8ede46db3","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"5a0f2b0552854feebf5d5f98f7f7904518b5fa48","isMergeCommit":false,"messageTitle":"Add testing of Parser and TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":2}}},{"hash":"bc3025b73f67190b2c39cf04bc04f3ffe07fc0ba","isMergeCommit":false,"messageTitle":"Add Level 9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"ac5e89d477d7f6ddb315e178758eb065e1ecd939","isMergeCommit":false,"messageTitle":"Add Javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":12}}},{"hash":"d23f2350230dcff375a3f3c1d5e0ee26483b4e04","isMergeCommit":false,"messageTitle":"Update CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":20}}},{"hash":"8e0150ba8072dd5e9d9ee6609fe1cafd162af006","isMergeCommit":true,"messageTitle":"Add Level 9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"736ade5b0e4aaca11d73401df3d5b4f70ad6b58c","isMergeCommit":true,"messageTitle":"Add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"74aabbb9638145fd83f292fb12cb94fa7a57310b","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"b1fa489e003fa90472a7512b85a336fccda58aef","isMergeCommit":false,"messageTitle":"Clean up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":38}}}]},{"date":"2023-09-02","commitResults":[{"hash":"b061ea0f378ded3f48c6d952ac35ec8d939ef0c7","isMergeCommit":false,"messageTitle":"Add config checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":120,"deletions":47}}},{"hash":"ff34e13f06d120b58043272f410504e77f32f6fe","isMergeCommit":true,"messageTitle":"Add config checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"8398541d5b4f9aabed0d9f2014e830c17912d854","isMergeCommit":false,"messageTitle":"Add Level-10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":245,"deletions":90}}},{"hash":"8ad5763257feccc37996b18ddeb7783c611aa864","isMergeCommit":true,"messageTitle":"Add Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"ca0320b3bfd83ddc7180bb76e3bac558768ebf3f","isMergeCommit":false,"messageTitle":"Clean up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":85}}}]},{"date":"2023-09-07","commitResults":[{"hash":"05d98d431c13d80dfcf01ddb4bc4cd42baa30236","isMergeCommit":false,"messageTitle":"Add Jar file","messageBody":"Original Jar file did not include javaFx\n\nRebuilt the jar file using the shadow plugin\nto include javaFx\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"fxml":{"insertions":1,"deletions":1}}},{"hash":"f1dc28e77fd4a18928ac98ad40abefe0f25cebd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/prawnzyy/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cdbbe4e5c207f6f1c905754267e7e2040223b03f","isMergeCommit":false,"messageTitle":"Add assert statements","messageBody":"Some portions of the code have assumptions\nthat it will work\n\nAssertions have been added to check for such\nassumptions and to terminate early if there\nis any issue.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":5,"deletions":4}}}]},{"date":"2023-09-09","commitResults":[{"hash":"fc762ceaef79e344ad7a4fafd98f9aa2cd624ec5","isMergeCommit":false,"messageTitle":"Made happy path more prominent","messageBody":"There are several methods where the happy path\nis entangled within a few layers of if-else.\n\nMoved the correct path out of the nesting and made\nthe logic for each path and guard clause clearer.\n\nThis should allow others to better understand the flow\nof the program.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":22}}},{"hash":"834bcd4f1f3c69428771727af2f88f71f2dd572e","isMergeCommit":true,"messageTitle":"Merge pull request #1 from prawnzyy/branch-A-CodeQuality","messageBody":"Made happy path more prominent","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"055de3d130f9b3cd19c21d0ea6abc761ef89d23c","isMergeCommit":true,"messageTitle":"Resolved merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0a2e7b9cacaa73c8c3f89ae68263823b5e5bb447","isMergeCommit":true,"messageTitle":"Merge pull request #2 from prawnzyy/branch-A-Assertions","messageBody":"Add assert statements","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"fb761cdf3243a97b66e249f61a13cd25c8db0600","isMergeCommit":false,"messageTitle":"Add back accidentally removed assert statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"707c8357cebf88c0ce993e9e70f4e2a305bcd7c4","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":15}}}]},{"date":"2023-09-10","commitResults":[{"hash":"612752f4e11102d44b41e4a7710de650f032a5e3","isMergeCommit":false,"messageTitle":"Add sorting of tasks","messageBody":"Currently, tasks are sorted based on the order\nthey were inputted.\n\nBy sorting the task chronologically, it is easier to\nsee the tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"3354251bb6948d701f80f1f916ba59e95a8e1c06","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Sort\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"39e6bba4a261672c17735c12cbb80f57d39757bf","isMergeCommit":false,"messageTitle":"Fix Checkstyle issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-09-13","commitResults":[{"hash":"a928e59bc4942ab6864683b3669f0067f1280d84","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-14","commitResults":[{"hash":"7efee1a497706ff60feaf385c8c7690b6b09ab41","isMergeCommit":false,"messageTitle":"Update UI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":2,"deletions":4},"java":{"insertions":6,"deletions":3}}},{"hash":"03e15918401f52cb0ad1073bbc1eff55c782385a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-BetterGui\u0027","messageBody":"","tags":["A-BetterGui"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"a757b262ac207b59ff49836865ceef5796f19697","isMergeCommit":false,"messageTitle":"Add more Junit Test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":24}}},{"hash":"e222e4726cef3f481e86894c7d46065bf716676b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreTesting\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"prawnzyy":{"java":1302,"md":2,"fxml":36,"sh":0,"bat":1,"gradle":22,"txt":12}},"authorContributionVariance":{"prawnzyy":22384.42},"authorDisplayNameMap":{"prawnzyy":"CS2103T-F10-3 SEAH..IANG"}} +{"authorDailyContributionsMap":{"prawnzyy":[{"date":"2023-08-18","commitResults":[{"hash":"f69eb1cc9037235ccb5bd0d3c2de89fcca8c6e26","isMergeCommit":false,"messageTitle":"Completed Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-08-19","commitResults":[{"hash":"80216b8ac5bd712a3448af83231d7dd835a35e34","isMergeCommit":false,"messageTitle":"Completed Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":1}}},{"hash":"fddaf3180ddaa46da46fd5cd68d982a477f106fe","isMergeCommit":false,"messageTitle":"Completed Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":3}}},{"hash":"c413452a9e7c35b4e76c417e8fd12c871ce563eb","isMergeCommit":false,"messageTitle":"Completed Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":10}}},{"hash":"1dc19bd04dd735c79a6efabb7ed59ef533e08f0b","isMergeCommit":false,"messageTitle":"Bug fixes for Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":7}}},{"hash":"ce5763698e1353912e87b78d96889dc2e5623fca","isMergeCommit":false,"messageTitle":"Completed Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":5}}},{"hash":"1f46496dd57f44c3accf242688c07571b30d1c0f","isMergeCommit":false,"messageTitle":"First Iteration of runtest","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-20","commitResults":[{"hash":"56e83db39829be318aaee8c8901410f14f099e2b","isMergeCommit":false,"messageTitle":"Completed Level-5 Tentatively","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":20}}},{"hash":"67cd403fe96d44231e806548a256e1d6e8ae439b","isMergeCommit":false,"messageTitle":"Second Iteration of runtest","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"609f61566f79df421284eb1fd80baf6e471da9ca","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":24}}}]},{"date":"2023-08-25","commitResults":[{"hash":"bbd8769f941c0fb57c01fb07b16cc1e5be384564","isMergeCommit":false,"messageTitle":"Add Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":75}}},{"hash":"a017de659af393154b5ec52f05cf6c61918e5afc","isMergeCommit":true,"messageTitle":"Add Level 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"9e1409714193fb5ad24174efe189b10cbc6796d8","isMergeCommit":false,"messageTitle":"Add Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":7}}},{"hash":"8d1e685be9ba8b81a61aaf654eaf6921ccedc613","isMergeCommit":true,"messageTitle":"Add Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"7f0258ad074312030fc3637949445201898adc13","isMergeCommit":false,"messageTitle":"Add A-MoreOOP","messageBody":"Many parts of code can be extracted out\n\nMoved various parts of code into separate classes\nto make code more user-friendly\n","fileTypesAndContributionMap":{"java":{"insertions":301,"deletions":173}}},{"hash":"d1611941a8ef53b43396f0ad663b7e21be3fa361","isMergeCommit":true,"messageTitle":"Add A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"43dc1735baee1868faefc704b8174ebb9592949b","isMergeCommit":false,"messageTitle":"Move files to packages","messageBody":"Files too cluttered\n\nHard to view\n\nSplit into various packages for\neasier viewing\n","fileTypesAndContributionMap":{"java":{"insertions":132,"deletions":35},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"9996b5dd8212c05126539b3b180361e43054e8a6","isMergeCommit":true,"messageTitle":"Move files into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"e5fea9f52f3670cfcb88b23467e53c85351c7079","isMergeCommit":true,"messageTitle":"Merge gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9ebe76e82c8316ee160c3108d34791d8ede46db3","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"5a0f2b0552854feebf5d5f98f7f7904518b5fa48","isMergeCommit":false,"messageTitle":"Add testing of Parser and TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":2}}},{"hash":"bc3025b73f67190b2c39cf04bc04f3ffe07fc0ba","isMergeCommit":false,"messageTitle":"Add Level 9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"ac5e89d477d7f6ddb315e178758eb065e1ecd939","isMergeCommit":false,"messageTitle":"Add Javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":12}}},{"hash":"d23f2350230dcff375a3f3c1d5e0ee26483b4e04","isMergeCommit":false,"messageTitle":"Update CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":20}}},{"hash":"8e0150ba8072dd5e9d9ee6609fe1cafd162af006","isMergeCommit":true,"messageTitle":"Add Level 9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"736ade5b0e4aaca11d73401df3d5b4f70ad6b58c","isMergeCommit":true,"messageTitle":"Add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"74aabbb9638145fd83f292fb12cb94fa7a57310b","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"b1fa489e003fa90472a7512b85a336fccda58aef","isMergeCommit":false,"messageTitle":"Clean up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":38}}}]},{"date":"2023-09-02","commitResults":[{"hash":"b061ea0f378ded3f48c6d952ac35ec8d939ef0c7","isMergeCommit":false,"messageTitle":"Add config checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":120,"deletions":47}}},{"hash":"ff34e13f06d120b58043272f410504e77f32f6fe","isMergeCommit":true,"messageTitle":"Add config checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"8398541d5b4f9aabed0d9f2014e830c17912d854","isMergeCommit":false,"messageTitle":"Add Level-10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":245,"deletions":90}}},{"hash":"8ad5763257feccc37996b18ddeb7783c611aa864","isMergeCommit":true,"messageTitle":"Add Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"ca0320b3bfd83ddc7180bb76e3bac558768ebf3f","isMergeCommit":false,"messageTitle":"Clean up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":85}}}]},{"date":"2023-09-07","commitResults":[{"hash":"05d98d431c13d80dfcf01ddb4bc4cd42baa30236","isMergeCommit":false,"messageTitle":"Add Jar file","messageBody":"Original Jar file did not include javaFx\n\nRebuilt the jar file using the shadow plugin\nto include javaFx\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"fxml":{"insertions":1,"deletions":1}}},{"hash":"f1dc28e77fd4a18928ac98ad40abefe0f25cebd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/prawnzyy/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cdbbe4e5c207f6f1c905754267e7e2040223b03f","isMergeCommit":false,"messageTitle":"Add assert statements","messageBody":"Some portions of the code have assumptions\nthat it will work\n\nAssertions have been added to check for such\nassumptions and to terminate early if there\nis any issue.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":5,"deletions":4}}}]},{"date":"2023-09-09","commitResults":[{"hash":"fc762ceaef79e344ad7a4fafd98f9aa2cd624ec5","isMergeCommit":false,"messageTitle":"Made happy path more prominent","messageBody":"There are several methods where the happy path\nis entangled within a few layers of if-else.\n\nMoved the correct path out of the nesting and made\nthe logic for each path and guard clause clearer.\n\nThis should allow others to better understand the flow\nof the program.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":22}}},{"hash":"834bcd4f1f3c69428771727af2f88f71f2dd572e","isMergeCommit":true,"messageTitle":"Merge pull request #1 from prawnzyy/branch-A-CodeQuality","messageBody":"Made happy path more prominent","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"055de3d130f9b3cd19c21d0ea6abc761ef89d23c","isMergeCommit":true,"messageTitle":"Resolved merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0a2e7b9cacaa73c8c3f89ae68263823b5e5bb447","isMergeCommit":true,"messageTitle":"Merge pull request #2 from prawnzyy/branch-A-Assertions","messageBody":"Add assert statements","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"fb761cdf3243a97b66e249f61a13cd25c8db0600","isMergeCommit":false,"messageTitle":"Add back accidentally removed assert statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"707c8357cebf88c0ce993e9e70f4e2a305bcd7c4","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":15}}}]},{"date":"2023-09-10","commitResults":[{"hash":"612752f4e11102d44b41e4a7710de650f032a5e3","isMergeCommit":false,"messageTitle":"Add sorting of tasks","messageBody":"Currently, tasks are sorted based on the order\nthey were inputted.\n\nBy sorting the task chronologically, it is easier to\nsee the tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"3354251bb6948d701f80f1f916ba59e95a8e1c06","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Sort\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"39e6bba4a261672c17735c12cbb80f57d39757bf","isMergeCommit":false,"messageTitle":"Fix Checkstyle issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-09-13","commitResults":[{"hash":"a928e59bc4942ab6864683b3669f0067f1280d84","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-14","commitResults":[{"hash":"7efee1a497706ff60feaf385c8c7690b6b09ab41","isMergeCommit":false,"messageTitle":"Update UI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":2,"deletions":4},"java":{"insertions":6,"deletions":3}}},{"hash":"03e15918401f52cb0ad1073bbc1eff55c782385a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-BetterGui\u0027","messageBody":"","tags":["A-BetterGui"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"a757b262ac207b59ff49836865ceef5796f19697","isMergeCommit":false,"messageTitle":"Add more Junit Test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":24}}},{"hash":"e222e4726cef3f481e86894c7d46065bf716676b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreTesting\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a8ec70714825fa2314ea202543f71eb05c0d4763","isMergeCommit":false,"messageTitle":"Add readme","messageBody":"","tags":["A-UserGuide","A-Release"],"fileTypesAndContributionMap":{"md":{"insertions":116,"deletions":13}}}]}]},"authorFileTypeContributionMap":{"prawnzyy":{"java":1302,"md":114,"fxml":36,"sh":0,"bat":1,"gradle":22,"txt":12}},"authorContributionVariance":{"prawnzyy":22689.285},"authorDisplayNameMap":{"prawnzyy":"CS2103T-F10-3 SEAH..IANG"}} diff --git a/pzl111_ip_master/authorship.json b/pzl111_ip_master/authorship.json index 09e0228a..0ee0cd32 100644 --- a/pzl111_ip_master/authorship.json +++ b/pzl111_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":"pzl111"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"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":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"pzl111"},"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":"pzl111"},"content":" mainClass.set(\"smolbrain.Launcher\")","lastModifiedDate":"2023-09-08"},{"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":"pzl111"},"content":" archiveBaseName \u003d \"smolbrain\"","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":"pzl111"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":22,"-":41}},{"path":"data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"T00todo2","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"T11todo3","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"T01todo4","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"T01todo4","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"T11todo5","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"T02todo6","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"T02todo7","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"T02todo8","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"T00todo9","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"T01todo10","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"T00todo11","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"D02newtask /by 01/12/2200 1800","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"pzl111":12}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"# Smolbrain Chatbot: User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"Smolbrain is a **chatbot for tracking of tasks, optimised for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). With a strong mastery of typing commands, tasks management can be much more efficient than conventional GUI apps.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"Screenshot of Smolbrain Chatbot:","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"![Screenshot](screenshot.png) ","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"## Quick start","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"1. Ensure that Java `11` or above installed in your Computer.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"2. Download the latest `smolbrain.jar` from here.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"3. Copy the file to the folder you want to use as the _home folder_ for your Smolbrain Chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"4. To run the application, either:","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * Double-click the jar file to open.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" * Or open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar smolbrain.jar` command to run the application.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"5. 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.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" \u003cbr\u003eSome example commands you can try:","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * `list` : Lists all current saved tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * `todo NewTodo` : Adds a new task of type **Todo** with the title `NewTodo` to the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * `delete 3` : Deletes the 3rd task shown in the current task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" * `mark 1` : Marks the 3rd task shown in the current task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" * `bye` : Exits the app.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"6. Refer to the Features below for details of each command.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":"## Key Features ","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":"### Creation of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":"There are 3 different type of tasks available: **Todo**, **Deadline** and **Event**.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":"* **Todo** : A task with only a description.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":"* **Deadline** : A task with a description with the associated due date and time.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"* **Event** : A task with a description with the starting and ending date and times.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":"* Displayed tasks are prefixed by `[TYPE][MARKED][PRIORITY_LEVEL]`.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" * `TYPE` refers to the task type: `T` for **Todo**, `D` for **Deadline**, `E` for **Event**.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" * `MARKED` refers to marked state of task: `X` for marked, `0` for unmarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * `PRIORITY_LEVEL` refers to the assigned priority level of the task, with possible values 0, 1, 2 and 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":"### Marking of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"Tasks can be marked when completed, or unmarked when required, allowing to track which tasks are done.","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":"### Prioritising tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":"Tasks can be set with a priority level to indicate how urgent they are.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":"## Features List","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"\u003e ℹ️ Notes about the command format:","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"\u003e ","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":"\u003e * Words in `[UPPER_CASE]` are the parameters to be supplied by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":"\u003e * Task descriptions (indicated as `[DESCRIPTION]`), can have spaces in between them.","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":"\u003e * Typing `todo This is a todo` will create a new **Todo** task with the description `This is a todo`.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":"\u003e * Date and time must be given in this **exact format**: `DD/MM/YYYY HHmm`, otherwise there will be an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":"\u003e * Single digit days or months should have 2 numbers such as `03`, `09`.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":"\u003e * Time must not have semicolon characters `:` and should be in 24-hour format.","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":"### Adding a **todo** task: `todo`","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":"Adds a new **todo** task to the chatbot. ","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":"Format: `todo [DESCRIPTION]`","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":"* `[DESCRIPTION]` can have multiple spaces separating words. ","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":"* By default, the todo is unmarked and has a priority level of 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":"* `todo Housework` : Creates a new **todo** task with the description `Housework`.","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":"* `todo Create a new recipe` : Creates a new **todo** task with the description `Create a new recipe`.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":"### Adding a **deadline** task: `deadline`","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":"Adds a new **deadline** task to the chatbot with the due date and time. ","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":"Format: `deadline [DESCRIPTION] /by DD/MM/YYYY HHmm`","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":"* `[DESCRIPTION]` can have multiple spaces separating words. ","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":"* By default, the deadline is unmarked and has a priority level of 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":"* Date and time must be given in the exact format `DD/MM/YYYY HHmm`, as described above in the notes.","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":"* `deadline Homework assignment /by 20/12/2023 1800` : Creates a new **deadline** task with the description `Homework assignment`, with due date and time set to 20 Dec 2023 at 18:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":"* `deadline Cleaning /by 03/08/2023 0900` : Creates a new **deadline** task with the description `Cleaning`, with due date and time set to 03 Aug 2023 at 09:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":"### Adding an **event** task: `event`","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":"Adds a new **event** task to the chatbot with the starting and ending date and times.","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":"Format: `event [DESCRIPTION] /from DD/MM/YYYY HHmm /to DD/MM/YYYY HHmm`","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":"* `[DESCRIPTION]` can have multiple spaces separating words. ","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":"* By default, the event is unmarked and has a priority level of 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":"* Date and time must be given in the exact format `DD/MM/YYYY HHmm`, as described above in the notes.","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":"* `event Swimming /from 04/01/2023 0900 /to 04/01/2023 1100` : Creates a new **event** task with the description `Swimming`, with starting date and time set to 04 Jan 2023 at 09:00, ending date and time set to 04 Jan 2023 at 11:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":"* `event Birthday party /from 11/10/2023 1800 /to 11/10/2023 2200` : Creates a new **event** task with the description `Birthday party`, with starting date and time set to 11 Oct 2023 at 18:00, ending date and time set to 11 Oct 2023 at 22:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":"### Marking a task: `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":"Marks the specified task as complete.","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":"Format: `mark [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":"* Marks 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-16"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":"* Marking tasks will overwrite the current marked state of a task (marked tasks will remain marked)","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":"* `mark 1` : Marks the task indexed at 1.","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":"* `mark -1` : Error message displayed saying \"OOPS!!! Please provide a valid number within the range.\".","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":"* `mark 11` : If there are less than 11 tasks, an error message displayed saying \"OOPS!!! Please provide a valid number within the range.\".","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":"### Unmarking a task: `unmark`","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":"Unmarks the specified task as incomplete.","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":"Format: `unmark [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"pzl111"},"content":"* Unmarks 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-16"},{"lineNumber":131,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"pzl111"},"content":"* Unmarking tasks will overwrite the current marked state of a task (unmarked tasks will remain unmarked)","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"pzl111"},"content":"* `unmark 3` : Unmarks the task indexed at 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"pzl111"},"content":"* `unmark -3` : Error message displayed saying \"OOPS!!! Please provide a valid number within the range.\".","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"pzl111"},"content":"* `unmark 15` : If there are less than 15 tasks, an error message displayed saying \"OOPS!!! Please provide a valid number within the range.\".","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"pzl111"},"content":"### Deleting a task: `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"pzl111"},"content":"Deletes the specified task.","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"pzl111"},"content":"Format: `delete [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"pzl111"},"content":"* Deletes 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-16"},{"lineNumber":148,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"pzl111"},"content":"* Deleting tasks will re-order the indexing of remaining tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"pzl111"},"content":"* `delete 2` : Deletes the task indexed at 2.","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"pzl111"},"content":"* `delete -6` : Error message displayed saying \"OOPS!!! Please provide a valid number within the range.\".","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"pzl111"},"content":"* `delete 8` : If there are less than 8 tasks, an error message is displayed saying \"OOPS!!! Please provide a valid number within the range.\".","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"pzl111"},"content":"### Setting priority level : `priority`","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"pzl111"},"content":"Sets the priority level for the specified task.","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"pzl111"},"content":"Format: `priority [INDEX] [PRIORITY_LEVEL]`","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"pzl111"},"content":"* Sets the priority level of the task at the specified `[INDEX]` with priority level `[PRIORITY_LEVEL]`. 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-16"},{"lineNumber":165,"author":{"gitId":"pzl111"},"content":"* Priority level should only have the possible values 0, 1, 2 and 3. Otherwise, an error is displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"pzl111"},"content":"* Deleting tasks will re-order the indexing of remaining tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"pzl111"},"content":"\u003e ⚠️ The **task index comes first**, before the priority level.","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"pzl111"},"content":"* `priority 2 0` : Sets the task indexed at 2 to priority level 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"pzl111"},"content":"* `priority 5 3` : Sets the task indexed at 5 to priority level 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"pzl111"},"content":"* `priority 1 6` : Error message displayed saying \"OOPS!!! Please provide a valid priotity level from 0 to 3.\".","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"pzl111"},"content":"* `priority 5 -3` : Error message displayed saying \"OOPS!!! Please provide a valid priotity level from 0 to 3.\".","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":177,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"pzl111"},"content":"### Finding task by keyword: `find`","lastModifiedDate":"2023-09-16"},{"lineNumber":180,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"pzl111"},"content":"Finds tasks whose descriptions contains the keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":182,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":183,"author":{"gitId":"pzl111"},"content":"Format: `find [KEYWORD]`","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":185,"author":{"gitId":"pzl111"},"content":"* The search is **case-sensitive**. e.g `book` will **not** match `Book`.","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"pzl111"},"content":"* Only the task description is searched, not the date and times nor the task type.","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"pzl111"},"content":"* Descriptions containing the keyword but not the entire word are still matched e.g. `din` will match `Finding`.","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"pzl111"},"content":"* Keyword with spaces are included e.g. `ck ba` will match `Pack bags`.","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"pzl111"},"content":"* `find Book` : Returns `Book reading` and `Booking`.","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"pzl111"},"content":"* `find Birthday Par` : Returns `Birthday Party`, but not `birthday Party`.","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"pzl111"},"content":"* `find Birthday Par` : Returns `Birthday Party`, but not `birthday Party`.","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"pzl111"},"content":"* `find ck ba` : Returns `Pack bags` and `Crack back`.","lastModifiedDate":"2023-09-16"},{"lineNumber":195,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":196,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":198,"author":{"gitId":"pzl111"},"content":"### Listing all tasks: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":199,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":200,"author":{"gitId":"pzl111"},"content":"Shows all tasks in the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":201,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":202,"author":{"gitId":"pzl111"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":203,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":204,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":205,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":206,"author":{"gitId":"pzl111"},"content":"### Exiting the app: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":207,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":208,"author":{"gitId":"pzl111"},"content":"Exits the app.","lastModifiedDate":"2023-09-16"},{"lineNumber":209,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":210,"author":{"gitId":"pzl111"},"content":"Format: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":212,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":213,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":214,"author":{"gitId":"pzl111"},"content":"### Saving data","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"pzl111"},"content":"Smolbrain chatbot data are saved in the computer automatically after any command that changes the data. There is no need to save manually after each command.","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":218,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":219,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"pzl111"},"content":"### Editing data file","lastModifiedDate":"2023-09-16"},{"lineNumber":221,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":222,"author":{"gitId":"pzl111"},"content":"Smolbrain chatbot data are saved in the computer automatically as a TXT file named `data.txt` in the same directory as your `smolbrain.jar` file.","lastModifiedDate":"2023-09-16"},{"lineNumber":223,"author":{"gitId":"pzl111"},"content":"Tasks are encoded in the format `[TYPE][MARKED][PRIORITY_LEVEL][BODY]`.","lastModifiedDate":"2023-09-16"},{"lineNumber":224,"author":{"gitId":"pzl111"},"content":"* `[TYPE]` refers to the task type: `T` for **Todo**, `D` for **Deadline**, `E` for **Event**.","lastModifiedDate":"2023-09-16"},{"lineNumber":225,"author":{"gitId":"pzl111"},"content":"* `[MARKED]` refers to marked state of task: `1` for marked, `0` for unmarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":226,"author":{"gitId":"pzl111"},"content":"* `[PRIORITY_LEVEL]` refers to the assigned priority level of the task, with possible values 0, 1, 2 and 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":227,"author":{"gitId":"pzl111"},"content":"* `[BODY]` refers to task description, along with other parameters such as `/from` and its due date and time","lastModifiedDate":"2023-09-16"},{"lineNumber":228,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003ee.g. `D12Complete homework /by 22/10/2023 1800` refers to a **deadline** task with description `complete Homework`, due date and time of `22 Oct 2023 18:00`, that is marked and has priority level of 2.","lastModifiedDate":"2023-09-16"},{"lineNumber":229,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":230,"author":{"gitId":"pzl111"},"content":"\u003e ⚠️ **Caution:** If your changes to the data file does not follow the above encoding and makes its format invalid, Smolbrain chatbot might parse the data wrongly and give corrupted task data.","lastModifiedDate":"2023-09-16"},{"lineNumber":231,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":232,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":233,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":234,"author":{"gitId":"pzl111"},"content":"### Deleting data","lastModifiedDate":"2023-09-16"},{"lineNumber":235,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":236,"author":{"gitId":"pzl111"},"content":"Deleting the `data.txt` file in the same directory as your `smolbrain.jar` file will delete all saved data. When app is reopened again, it will restart as new app.","lastModifiedDate":"2023-09-16"},{"lineNumber":237,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":238,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":239,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":240,"author":{"gitId":"pzl111"},"content":"## Command summary","lastModifiedDate":"2023-09-16"},{"lineNumber":241,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":242,"author":{"gitId":"pzl111"},"content":"| Action | Format, Example |","lastModifiedDate":"2023-09-16"},{"lineNumber":243,"author":{"gitId":"pzl111"},"content":"| --- | --- |","lastModifiedDate":"2023-09-16"},{"lineNumber":244,"author":{"gitId":"pzl111"},"content":"| Add todo | `todo [DESCRIPTION]`\u003cbr\u003ee.g. `todo Create a new recipe`|","lastModifiedDate":"2023-09-16"},{"lineNumber":245,"author":{"gitId":"pzl111"},"content":"| Add deadline | `deadline [DESCRIPTION] /by DD/MM/YYYY HHmm`\u003cbr\u003e e.g. `deadline Homework assignment /by 20/12/2023 1800` |","lastModifiedDate":"2023-09-16"},{"lineNumber":246,"author":{"gitId":"pzl111"},"content":"| Add event | `event [DESCRIPTION] /from DD/MM/YYYY HHmm /to DD/MM/YYYY HHmm`\u003cbr\u003e e.g. `event Birthday party /from 11/10/2023 1800 /to 11/10/2023 2200` |","lastModifiedDate":"2023-09-16"},{"lineNumber":247,"author":{"gitId":"pzl111"},"content":"| Mark | `mark [INDEX]`\u003cbr\u003e e.g. `mark 2` |","lastModifiedDate":"2023-09-16"},{"lineNumber":248,"author":{"gitId":"pzl111"},"content":"| Unmark | `unmark [INDEX]`\u003cbr\u003e e.g. `unmark 5` |","lastModifiedDate":"2023-09-16"},{"lineNumber":249,"author":{"gitId":"pzl111"},"content":"| Delete | `delete [INDEX]`\u003cbr\u003e e.g. `delete 1` |","lastModifiedDate":"2023-09-16"},{"lineNumber":250,"author":{"gitId":"pzl111"},"content":"| Priority | `priority [INDEX] [PRIORITY_LEVEL]`\u003cbr\u003e e.g. `priority 7 3` |","lastModifiedDate":"2023-09-16"},{"lineNumber":251,"author":{"gitId":"pzl111"},"content":"| Find | `find [KEYWORD]`\u003cbr\u003e e.g. `find book` |","lastModifiedDate":"2023-09-16"},{"lineNumber":252,"author":{"gitId":"pzl111"},"content":"| List | `list` |","lastModifiedDate":"2023-09-16"},{"lineNumber":253,"author":{"gitId":"pzl111"},"content":"| Exit | `bye` |","lastModifiedDate":"2023-09-16"},{"lineNumber":254,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":255,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":256,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":257,"author":{"gitId":"pzl111"},"content":"## FAQ","lastModifiedDate":"2023-09-16"},{"lineNumber":258,"author":{"gitId":"pzl111"},"content":"**Q:** Why do I get errors when adding a new deadline or event task?\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":259,"author":{"gitId":"pzl111"},"content":"**A:** Check if the date and time follows the `DD/MM/YYYY HHmm` format, specifically having 2 numbers for single numbered date and months, 24-hour time format with no semicolon character `:` between hours and minutes.","lastModifiedDate":"2023-09-16"},{"lineNumber":260,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":261,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":262,"author":{"gitId":"pzl111"},"content":"**Q:** Can I have space separated task descriptions?\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":263,"author":{"gitId":"pzl111"},"content":"**A:** Yes, the descriptions can have any number of spaces between words, without affecting the command parsing.","lastModifiedDate":"2023-09-16"},{"lineNumber":264,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":265,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":266,"author":{"gitId":"pzl111"},"content":"**Q:** Are there any characters that I cannot use for the task description?\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":267,"author":{"gitId":"pzl111"},"content":"**A:** There are no restrictions on special characters such as `%` or `$`. However, phrases that are interpreted as a command format such as `/from` and `/by` are not allowed and not parsed as part of the description.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"pzl111":251,"-":16}},{"path":"src/main/java/smolbrain/BotDialog.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Custom BotDialog control, used to display a dialog from the chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"public class BotDialog extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" private BotDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/BotDialog.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" * Takes in a string input and an image to create a dialog for a bot.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" * @param text Input string for dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" * @param img Input image for dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" * @return A BotDialog object.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" public static BotDialog getDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" var db \u003d new BotDialog(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":62}},{"path":"src/main/java/smolbrain/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" * Constructor for this class.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" public Launcher() {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * Used to start the program.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * @param args String arguments.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":24}},{"path":"src/main/java/smolbrain/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" * A GUI for Smolbrain chatbot using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Constructor for this class.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public Main() {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * Starts the main application.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * @param stage Main primary stage for this application.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" stage.setTitle(\"Smolbrain Chatbot\");","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" stage.getIcons().add(new Image(this.getClass().getResourceAsStream(\"/images/bot.png\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().createSmolbrain();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":44}},{"path":"src/main/java/smolbrain/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" private Smolbrain smolbrain;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" private Image botImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/bot.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * Constructor for this class.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" public MainWindow() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * Initialise the scrollPane.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" * Creates and run a new Smolbrain object.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" public void createSmolbrain() {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" smolbrain \u003d new Smolbrain(\"data.txt\", this);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" smolbrain.run();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" * Retrieves the user\u0027s input and processes the command, then clear the user input field.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" displayUserText(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" smolbrain.process(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" * Display the provided input string as a user dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" * @param input String to display.","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":" public void displayUserText(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":" UserDialog.getDialog(input, userImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":" * Display the provided input string as a bot dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":" * @param input String to display.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" public void displayBotText(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":" BotDialog.getDialog(input, botImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":85}},{"path":"src/main/java/smolbrain/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.AddCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.InvalidCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.PriorityCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidNumberException;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidPriorityException;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingKeywordException;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * Parses any commands or string input.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" private static String descr;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" private static DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" private static LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" private static LocalDateTime dateTime2 \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" * Creates a parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" public Parser() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" * Parses a list command.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" * @return List command.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" public static Command parseList(String[] words) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" * Parses a todo command.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" * @return Todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" * @throws MissingDescriptionException If there was no description provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" public static Task parseTodo(String[] words) throws MissingDescriptionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" descr \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":" throw new MissingDescriptionException(\"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 1; i \u003c words.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":" descr \u003d descr + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":" descr \u003d descr.substring(0, descr.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" return new Todo(descr);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":" * Parses a deadline command.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" * @return Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" * @throws MissingDescriptionException If there was no description provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":" * @throws MissingTimeException If there was no time provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":" * @throws InvalidDateTimeException If the provided date or time was invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" public static Task parseDeadline(String[] words) throws MissingDescriptionException, MissingTimeException,","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":" InvalidDateTimeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":" boolean by \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":" descr \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":" String byText \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 1; i \u003c words.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":" if (words[i].equals(\"/by\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":" by \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":" if (by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":" byText \u003d byText + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":" descr \u003d descr + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":" if (descr.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":" throw new MissingDescriptionException(\"deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":" } else if (byText.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":" throw new MissingTimeException(\"deadline\", \"ending\");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":" descr \u003d descr.substring(0, descr.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":" byText \u003d byText.substring(0, byText.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":" dateTime \u003d LocalDateTime.parse(byText, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":" throw new InvalidDateTimeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":" return new Deadline(descr, dateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":" * Parses an event command.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":" * @return Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":" * @throws MissingDescriptionException If there was no description provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":" * @throws MissingTimeException If there was no time provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":" * @throws InvalidDateTimeException If the provided date or time was invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":" public static Task parseEvent(String[] words) throws MissingDescriptionException, MissingTimeException,","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":" InvalidDateTimeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":" boolean from \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":" boolean to \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":" descr \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":" String fromText \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"pzl111"},"content":" String toText \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 1; i \u003c words.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"pzl111"},"content":" if (words[i].equals(\"/from\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"pzl111"},"content":" from \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"pzl111"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"pzl111"},"content":" } else if (words[i].equals(\"/to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"pzl111"},"content":" to \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"pzl111"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"pzl111"},"content":" if (to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"pzl111"},"content":" toText \u003d toText + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"pzl111"},"content":" } else if (from) {","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"pzl111"},"content":" fromText \u003d fromText + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"pzl111"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"pzl111"},"content":" descr \u003d descr + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"pzl111"},"content":" if (descr.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"pzl111"},"content":" throw new MissingDescriptionException(\"event\");","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"pzl111"},"content":" } else if (fromText.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"pzl111"},"content":" throw new MissingTimeException(\"event\", \"start\");","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"pzl111"},"content":" } else if (toText.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"pzl111"},"content":" throw new MissingTimeException(\"event\", \"end\");","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"pzl111"},"content":" descr \u003d descr.substring(0, descr.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"pzl111"},"content":" fromText \u003d fromText.substring(0, fromText.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"pzl111"},"content":" toText \u003d toText.substring(0, toText.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"pzl111"},"content":" dateTime \u003d LocalDateTime.parse(fromText, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"pzl111"},"content":" dateTime2 \u003d LocalDateTime.parse(toText, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"pzl111"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"pzl111"},"content":" throw new InvalidDateTimeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"pzl111"},"content":" return new Event(descr, dateTime, dateTime2);","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"pzl111"},"content":" * Parses a mark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"pzl111"},"content":" * @return Mark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the provided number is out of range.","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"pzl111"},"content":" public static Command parseMark(String[] words) throws InvalidNumberException, InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"mark\");","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"pzl111"},"content":" return new MarkCommand(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"pzl111"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"mark\");","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"pzl111"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"pzl111"},"content":" * Parses a unmark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"pzl111"},"content":" * @return Unmark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the provided number is out of range.","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"pzl111"},"content":" public static Command parseUnmark(String[] words) throws InvalidNumberException, InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"mark\");","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"pzl111"},"content":" return new UnmarkCommand(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"pzl111"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"mark\");","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"pzl111"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"pzl111"},"content":" * Parses a delete command.","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"pzl111"},"content":" * @return Delete command.","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the provided number is out of range.","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"pzl111"},"content":" public static Command parseDelete(String[] words) throws InvalidNumberException, InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"delete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"pzl111"},"content":" return new DeleteCommand(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"pzl111"},"content":" } catch (NumberFormatException ex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"delete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"pzl111"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"pzl111"},"content":" * Parses a find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"pzl111"},"content":" * @return Find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"pzl111"},"content":" * @throws MissingKeywordException If keyword was not given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"pzl111"},"content":" public static Command parseFind(String[] words) throws MissingKeywordException {","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"pzl111"},"content":" descr \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"pzl111"},"content":" throw new MissingKeywordException();","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 1; i \u003c words.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"pzl111"},"content":" descr \u003d descr + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"pzl111"},"content":" descr \u003d descr.substring(0, descr.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"pzl111"},"content":" return new FindCommand(descr);","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":249,"author":{"gitId":"pzl111"},"content":" * Parses a priority command.","lastModifiedDate":"2023-09-09"},{"lineNumber":250,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":251,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-09"},{"lineNumber":252,"author":{"gitId":"pzl111"},"content":" * @return Priority command.","lastModifiedDate":"2023-09-09"},{"lineNumber":253,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-09"},{"lineNumber":254,"author":{"gitId":"pzl111"},"content":" * @throws InvalidPriorityException If the provided priority level is out of range.","lastModifiedDate":"2023-09-09"},{"lineNumber":255,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":256,"author":{"gitId":"pzl111"},"content":" public static Command parsePriority(String[] words) throws InvalidNumberException, InvalidPriorityException {","lastModifiedDate":"2023-09-09"},{"lineNumber":257,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":258,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"select the task\");","lastModifiedDate":"2023-09-09"},{"lineNumber":259,"author":{"gitId":"pzl111"},"content":" } else if (words.length \u003c 3) {","lastModifiedDate":"2023-09-09"},{"lineNumber":260,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"set as priority level\");","lastModifiedDate":"2023-09-09"},{"lineNumber":261,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":262,"author":{"gitId":"pzl111"},"content":" int id;","lastModifiedDate":"2023-09-09"},{"lineNumber":263,"author":{"gitId":"pzl111"},"content":" int level;","lastModifiedDate":"2023-09-09"},{"lineNumber":264,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":265,"author":{"gitId":"pzl111"},"content":" id \u003d Integer.parseInt(words[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":266,"author":{"gitId":"pzl111"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":267,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"select the task\");","lastModifiedDate":"2023-09-09"},{"lineNumber":268,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":269,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":270,"author":{"gitId":"pzl111"},"content":" level \u003d Integer.parseInt(words[2]);","lastModifiedDate":"2023-09-09"},{"lineNumber":271,"author":{"gitId":"pzl111"},"content":" if (!(level \u003e\u003d 0 \u0026\u0026 level \u003c\u003d 3)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":272,"author":{"gitId":"pzl111"},"content":" throw new InvalidPriorityException();","lastModifiedDate":"2023-09-09"},{"lineNumber":273,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":274,"author":{"gitId":"pzl111"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":275,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"set as priority level\");","lastModifiedDate":"2023-09-09"},{"lineNumber":276,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":277,"author":{"gitId":"pzl111"},"content":" return new PriorityCommand(id, level);","lastModifiedDate":"2023-09-09"},{"lineNumber":278,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":279,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":280,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":281,"author":{"gitId":"pzl111"},"content":" * Parses the given input by the user including passing it into its separate parse functions.","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":283,"author":{"gitId":"pzl111"},"content":" * @param input String of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":284,"author":{"gitId":"pzl111"},"content":" * @return Command that was parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"pzl111"},"content":" * @throws MissingDescriptionException If there was no description provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"pzl111"},"content":" * @throws MissingTimeException If there was no time provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"pzl111"},"content":" * @throws InvalidDateTimeException If the provided date or time was invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":289,"author":{"gitId":"pzl111"},"content":" * @throws InvalidPriorityException If the provided priority level is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":290,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the provided number is out of range.","lastModifiedDate":"2023-09-01"},{"lineNumber":291,"author":{"gitId":"pzl111"},"content":" * @throws MissingKeywordException If no keyword was provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":292,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":293,"author":{"gitId":"pzl111"},"content":" public static Command parse(String input) throws MissingDescriptionException, MissingTimeException,","lastModifiedDate":"2023-09-01"},{"lineNumber":294,"author":{"gitId":"pzl111"},"content":" InvalidDateTimeException, InvalidNumberException, InvalidRangeException, MissingKeywordException,","lastModifiedDate":"2023-09-09"},{"lineNumber":295,"author":{"gitId":"pzl111"},"content":" InvalidPriorityException {","lastModifiedDate":"2023-09-09"},{"lineNumber":296,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":297,"author":{"gitId":"pzl111"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":298,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":299,"author":{"gitId":"pzl111"},"content":" switch (words[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":300,"author":{"gitId":"pzl111"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":301,"author":{"gitId":"pzl111"},"content":" return parseList(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":302,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":303,"author":{"gitId":"pzl111"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":304,"author":{"gitId":"pzl111"},"content":" return new AddCommand(parseTodo(words));","lastModifiedDate":"2023-09-01"},{"lineNumber":305,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":306,"author":{"gitId":"pzl111"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":307,"author":{"gitId":"pzl111"},"content":" return new AddCommand(parseDeadline(words));","lastModifiedDate":"2023-09-01"},{"lineNumber":308,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":309,"author":{"gitId":"pzl111"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":310,"author":{"gitId":"pzl111"},"content":" return new AddCommand(parseEvent(words));","lastModifiedDate":"2023-09-01"},{"lineNumber":311,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":312,"author":{"gitId":"pzl111"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":313,"author":{"gitId":"pzl111"},"content":" return parseMark(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":314,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":315,"author":{"gitId":"pzl111"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":316,"author":{"gitId":"pzl111"},"content":" return parseUnmark(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":317,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":318,"author":{"gitId":"pzl111"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":319,"author":{"gitId":"pzl111"},"content":" return parseDelete(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":320,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":321,"author":{"gitId":"pzl111"},"content":" case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":322,"author":{"gitId":"pzl111"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":323,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":324,"author":{"gitId":"pzl111"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":325,"author":{"gitId":"pzl111"},"content":" return parseFind(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":326,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":327,"author":{"gitId":"pzl111"},"content":" case \"priority\":","lastModifiedDate":"2023-09-09"},{"lineNumber":328,"author":{"gitId":"pzl111"},"content":" return parsePriority(words);","lastModifiedDate":"2023-09-09"},{"lineNumber":329,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":330,"author":{"gitId":"pzl111"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":331,"author":{"gitId":"pzl111"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":332,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":333,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":334,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":335,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":336,"author":{"gitId":"pzl111"},"content":" * Used for save file parsing, it parses the given input by the user including","lastModifiedDate":"2023-09-01"},{"lineNumber":337,"author":{"gitId":"pzl111"},"content":" * passing it into its separate parse functions.","lastModifiedDate":"2023-09-01"},{"lineNumber":338,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":339,"author":{"gitId":"pzl111"},"content":" * @param input String of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":340,"author":{"gitId":"pzl111"},"content":" * @return Task parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":341,"author":{"gitId":"pzl111"},"content":" * @throws MissingDescriptionException If there was no description provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":342,"author":{"gitId":"pzl111"},"content":" * @throws MissingTimeException If there was no time provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":343,"author":{"gitId":"pzl111"},"content":" * @throws InvalidDateTimeException If the provided date or time was invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":344,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":345,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the provided number is out of range.","lastModifiedDate":"2023-09-01"},{"lineNumber":346,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":347,"author":{"gitId":"pzl111"},"content":" public static Task parseLoading(String input) throws MissingDescriptionException, MissingTimeException,","lastModifiedDate":"2023-09-01"},{"lineNumber":348,"author":{"gitId":"pzl111"},"content":" InvalidDateTimeException, InvalidNumberException, InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":349,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":350,"author":{"gitId":"pzl111"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":351,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":352,"author":{"gitId":"pzl111"},"content":" switch (words[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":353,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":354,"author":{"gitId":"pzl111"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":355,"author":{"gitId":"pzl111"},"content":" return parseTodo(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":356,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":357,"author":{"gitId":"pzl111"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":358,"author":{"gitId":"pzl111"},"content":" return parseDeadline(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":359,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":360,"author":{"gitId":"pzl111"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":361,"author":{"gitId":"pzl111"},"content":" return parseEvent(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":362,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":363,"author":{"gitId":"pzl111"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":364,"author":{"gitId":"pzl111"},"content":" return new Task(\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":365,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":366,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":367,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":368,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":369,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":370,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":370}},{"path":"src/main/java/smolbrain/Smolbrain.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidNumberException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidPriorityException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingKeywordException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * Smolbrain class which is the chatbot. It takes in input to create and save tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"public class Smolbrain {","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" private static boolean loading \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Creates a smolbrain object.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * @param filePath Filepath of the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @param mainwindow MainWindow object for this application.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" public Smolbrain(String filePath, MainWindow mainwindow) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" ui \u003d new Ui(mainwindow);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" storage \u003d new Storage(filePath, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" tasks \u003d new TaskList(storage.load(), ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * Processes the given input string to generate and execute commands.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" * @param input Input string by user.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" public void process(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" assert tasks !\u003d null : \"No tasklist found for chatbot\";","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" assert ui !\u003d null : \"No Ui found for chatbot\";","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" assert storage !\u003d null : \"No storage found for chatbot\";","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" } catch (InvalidRangeException | MissingDescriptionException | MissingTimeException","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" | InvalidNumberException | InvalidDateTimeException | MissingKeywordException","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" | InvalidPriorityException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" * Runs the smolbrain chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"pzl111":64}},{"path":"src/main/java/smolbrain/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import static java.lang.Integer.parseInt;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidNumberException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * Manages the save file with creation, editing and loading functionalities.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * Creates a storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @param filePath Filepath of the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * @param ui Ui object used for this application.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" public Storage(String filePath, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" assert !filePath.equals(\"\") : \"No file path was provided for data storage\";","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" * Appends the text passed into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" * @param text Text to append to save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" * @throws IOException If there is problems accessing the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" public void appendToFile(String text) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" fw.write(text);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" fw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" * Writes the text passed into the save file, overwriting any previous data.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" * @param text Text to write to save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" * @throws IOException If there is problems accessing the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" public void writeToFile(String text) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" fw.write(text);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" fw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":" * Loads the save file contents for the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" * @return ArrayList of tasks from the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" ArrayList\u003cTask\u003e tasklist \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":" ArrayList\u003cString\u003e strings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" strings.add(s.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 0; i \u003c strings.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" String type \u003d strings.get(i).substring(0, 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" String marked \u003d strings.get(i).substring(1, 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":" int priorityLevel \u003d parseInt(strings.get(i).substring(2, 3));","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":" String remain \u003d strings.get(i).substring(3);","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":" String txt \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":" case \"T\":","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":" txt \u003d \"todo \" + remain;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":" case \"D\":","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":" txt \u003d \"deadline \" + remain;","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":" case \"E\":","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":" txt \u003d \"event \" + remain;","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(txt);","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":" tasklist.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":" if (marked.equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":" task.mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":" task.setPriorityLevel(priorityLevel);","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":" | InvalidDateTimeException | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":" f.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Welcome new user!!!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":" } catch (IOException e1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":" ui.showError(e1);","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":" return tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":128}},{"path":"src/main/java/smolbrain/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":" * Deals with user interaction and display of messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" private MainWindow mainwindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * Creates a Ui object.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * @param mainwindow MainWindow object used for this application.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" public Ui(MainWindow mainwindow) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" assert mainwindow !\u003d null : \"No mainwindow was found\";","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.mainwindow \u003d mainwindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" mainwindow.displayBotText(\"Hello! I\u0027m Smolbrain\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" * Displays a straight line to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" public void showLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" mainwindow.displayBotText(\"____________________________________________________________\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" * Reads the next line that is entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" * @return String input from user.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" * Displays a formatted error message from the exception passed.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" * @param e Exception encountered by program.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" public void showError(Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" mainwindow.displayBotText(\"OOPS!!! \" + e);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" * Displays the specified message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" * @param s Message to display.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" public void showMessage(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" mainwindow.displayBotText(s);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":65}},{"path":"src/main/java/smolbrain/UserDialog.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Custom BotDialog control, used to display a dialog from the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"public class UserDialog extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" private UserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/UserDialog.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"pzl111"},"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":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" * Takes in a string input and an image to create a dialog for a user.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" * @param text Input string for dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" * @param img Input image for dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" * @return A UserDialog object.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" public static UserDialog getDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" return new UserDialog(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"pzl111":61}},{"path":"src/main/java/smolbrain/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles adding tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class AddCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param task Task to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" if (!isLoading) {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Got it. I\u0027ve added this task: \\n\" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Now you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" tasks.updateTasks(storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":48}},{"path":"src/main/java/smolbrain/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Used for other classes to implement different commands for chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public interface Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the id given by user for array access is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" public void setLoading();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":28}},{"path":"src/main/java/smolbrain/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" * Handles deleting tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private int id;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * @param id Array id of task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public DeleteCommand(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" this.id \u003d id;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the id given by user for array access is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" if (this.id \u003c 0 || this.id \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" Task task \u003d tasks.getTask(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" tasks.deleteTask(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Noted. I\u0027ve removed this task: \\n\" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Now you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" tasks.updateTasks(storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":53}},{"path":"src/main/java/smolbrain/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles exiting chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Creates an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" Platform.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":42}},{"path":"src/main/java/smolbrain/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" * Handles finding task with keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" private String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param keyword Keyword to check.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Here are the matching tasks in your list: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" tasks.findTasks(this.keyword, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":45}},{"path":"src/main/java/smolbrain/command/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles an invalid or unknown command given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class InvalidCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Creates an invalid command.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" public InvalidCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" ui.showError(new InvalidCommandException());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":42}},{"path":"src/main/java/smolbrain/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" * Handles listing of all tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" * Creates a list command.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" tasks.displayTasks(ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":41}},{"path":"src/main/java/smolbrain/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles marking tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private int id;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param id Array id of task to mark.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public MarkCommand(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.id \u003d id;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the id given by user for array access is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" if (this.id \u003c 0 || this.id \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" tasks.markTask(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Nice! I\u0027ve marked this task as done: \\n\" + tasks.getTask(id));","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" tasks.updateTasks(storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":50}},{"path":"src/main/java/smolbrain/command/PriorityCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles setting priority level of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class PriorityCommand implements Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private int id;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private int priorityLevel;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * @param id Array id of task to set priority.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * @param level Priority level in this command.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" public PriorityCommand(int id, int level) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" this.id \u003d id;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" this.priorityLevel \u003d level;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * Executes ths command.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the id given by user for array access is out of bound.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidRangeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" if (this.id \u003c 0 || this.id \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" tasks.setTaskPriority(id, priorityLevel);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"OK, I\u0027ve marked this task with priority level \" + priorityLevel + \": \\n\" + tasks.getTask(id));","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" tasks.updateTasks(storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"pzl111":53}},{"path":"src/main/java/smolbrain/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles unmarking tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private int id;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param id Array id of task to unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public UnmarkCommand(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.id \u003d id;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the id given by user for array access is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" if (this.id \u003c 0 || this.id \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" tasks.unmarkTask(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"OK, I\u0027ve marked this task as not done yet: \\n\" + tasks.getTask(id));","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" tasks.updateTasks(storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":50}},{"path":"src/main/java/smolbrain/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles an invalid or unknown command given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" return \"I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":25}},{"path":"src/main/java/smolbrain/exception/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles an invalid date or time given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class InvalidDateTimeException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" public InvalidDateTimeException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" return \"Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"pzl111":25}},{"path":"src/main/java/smolbrain/exception/InvalidNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles an invalid number given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class InvalidNumberException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /** Type of task */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" private String taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * @param taskType Type of task involved.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" public InvalidNumberException(String taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception, specified with the task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" return \"Please provide a valid number to \" + taskType + \".\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pzl111":31}},{"path":"src/main/java/smolbrain/exception/InvalidPriorityException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles invalid priority level given by user.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class InvalidPriorityException extends Exception {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" public InvalidPriorityException() {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" return \"Please provide a valid priority level from 0 to 3.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"pzl111":25}},{"path":"src/main/java/smolbrain/exception/InvalidRangeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles out of bound array access id given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class InvalidRangeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" public InvalidRangeException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" return \"Please provide a valid number within the range.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pzl111":25}},{"path":"src/main/java/smolbrain/exception/MissingDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles when task description is missing.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class MissingDescriptionException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /** Type of task */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" private String taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * @param taskType Type of task involved.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" public MissingDescriptionException(String taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception, specified with the task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" return \"The description of a \" + taskType + \" cannot be empty.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pzl111":31}},{"path":"src/main/java/smolbrain/exception/MissingKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles when keyword missing.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class MissingKeywordException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" public MissingKeywordException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" return \"Please provide a keyword for finding task(s).\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":25}},{"path":"src/main/java/smolbrain/exception/MissingTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles when required time for task is missing.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class MissingTimeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /** Type of task */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" private String taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" /** Type of time */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" private String timeType;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * @param taskType Type of time that was missing.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * @param timeType Type of task involved.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" public MissingTimeException(String taskType, String timeType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" this.timeType \u003d timeType;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception, specified with the time and task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" return \"The \" + timeType + \" time of a \" + taskType + \" cannot be empty.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pzl111":35}},{"path":"src/main/java/smolbrain/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":" * Creates a deadline task with description and end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" /** End date and time of deadline */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" * Creates a deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * @param description Task description.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param by Task end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" assert !description.equals(\"\") : \"Description of deadline cannot possibly be empty\";","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" * Encodes this task into a string for saving into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" * @return Encoded string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" public String encode() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" DateTimeFormatter stringformatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" return \"D\" + getStatusNumber() + super.priorityLevel + super.description","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" + \" /by \" + this.by.format(stringformatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"pzl111":48}},{"path":"src/main/java/smolbrain/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":" * Creates an event task with description, start and end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" /** Start date and time of deadline*/","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" /** End date and time of deadline*/","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * Creates a deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * @param description Task description.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * @param from Task start time.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" * @param to Task end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" assert !description.equals(\"\") : \"Description of event cannot possibly be empty\";","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(formatter)","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" + \" to: \" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" * Encodes this task into a string for saving into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" * @return Encoded string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" public String encode() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" return \"E\" + getStatusNumber() + super.priorityLevel + super.description","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" + \" /from \" + this.from.format(formatter) + \" /to \" + this.to.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"pzl111":53}},{"path":"src/main/java/smolbrain/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Used to create different task types","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /** Task description */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" protected String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" /** Whether task is done */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" /** Task priority level **/","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" protected int priorityLevel \u003d 0;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Creates a task with specified description.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param description Task description.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * Returns the string symbol indicating if task is marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @return String symbol.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" * Returns a number as a string indicating if task is marked, for saving into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * @return String representation of marked number.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" public String getStatusNumber() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" return (isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" * Marks this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" public void mark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" * Unmarks this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" public void unmark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" * Sets the priority level of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" * @param level Priority level for this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" public void setPriorityLevel(int level) {","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" this.priorityLevel \u003d level;","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" * Checks if task description contains the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" * @param keyword Keyword to check.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":" * @return Whether task description contains the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" public boolean contain(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":" * Encodes this task into a string for saving into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" * @return Encoded string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":" public String encode() {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" return \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":" return String.format(\"[%s][%d] %s\", getStatusIcon(), priorityLevel, description);","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"pzl111":95}},{"path":"src/main/java/smolbrain/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" * List of tasks for chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private ArrayList\u003cTask\u003e tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Creates a tasklist with the given ArrayList of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * @param tasklist Tasklist using given ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" * @param ui Ui object used for this application.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" public TaskList(ArrayList\u003cTask\u003e tasklist, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" this.tasklist \u003d tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * Adds the given task into tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @param task Task to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" tasklist.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * Deletes the given task from tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" * @param id Id of task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" public void deleteTask(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" tasklist.remove(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" * Marks the given task in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" * @param id Id of task to mark.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" public void markTask(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" tasklist.get(id).mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" * Unmarks the given task in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" * @param id Id of task to unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" public void unmarkTask(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" tasklist.get(id).unmark();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" * Sets the priority the given task in tasklist.","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" * @param id Id of task to set priority.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" * @param level Priority level to set.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":" public void setTaskPriority(int id, int level) {","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" tasklist.get(id).setPriorityLevel(level);","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":" * Returns the number of tasks in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" * @return Number of tasks in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":" public int getSize() {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":" return tasklist.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" * Displays all the tasks in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" public void displayTasks(Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":" if (tasklist.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"You have no tasks currently.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":" return;","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":" String message \u003d \"Here are the tasks in your list: \\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 0; i \u003c tasklist.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":" message +\u003d (i + 1) + \". \" + tasklist.get(i) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":" ui.showMessage(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":" * Returns the specified task in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":" * @param id Id of task to retrieve.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":" * @return Task at the specified id.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":" public Task getTask(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":" return tasklist.get(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":" * Saves the tasks in tasklist into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":" public void updateTasks(Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":" if (tasklist.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":" storage.writeToFile(\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":" return;","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 0; i \u003c tasklist.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":" if (i \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":" storage.writeToFile(tasklist.get(i).encode());","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":" storage.appendToFile(System.lineSeparator() + tasklist.get(i).encode());","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":" * Finds and prints all the tasks in tasklist that contain the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"pzl111"},"content":" * @param keyword Keyword to check.","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"pzl111"},"content":" public void findTasks(String keyword, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"pzl111"},"content":" if (tasklist.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"pzl111"},"content":" return;","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"pzl111"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 0; i \u003c tasklist.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"pzl111"},"content":" if (tasklist.get(i).contain(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"pzl111"},"content":" message +\u003d ((i + 1) + \". \" + tasklist.get(i) + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"pzl111"},"content":" ui.showMessage(message);","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":146}},{"path":"src/main/java/smolbrain/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Creates a todo task with description.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates a todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" * @param description Task description.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" assert !description.equals(\"\") : \"Description of todo cannot possibly be empty\";","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * Encodes this task into a string for saving into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * @return Encoded string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" public String encode() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" return \"T\" + getStatusNumber() + super.priorityLevel + super.description;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"pzl111":38}},{"path":"src/main/resources/view/BotDialog.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"pzl111"},"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-05"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"TOP_LEFT\" style\u003d\"-fx-background-color: #1B2940; -fx-padding: 10 12 10 12; -fx-background-radius: 12;\" text\u003d\"Label\" textFill\u003d\"WHITE\" wrapText\u003d\"true\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" \u003cFont name\u003d\"Tahoma\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" disable\u003d\"true\" fitHeight\u003d\"26.0\" fitWidth\u003d\"26.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" \u003cImage url\u003d\"@../images/DaUser.png\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":31}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #030C1A;\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"smolbrain.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"46.0\" prefWidth\u003d\"336.0\" promptText\u003d\"Type command here...\" style\u003d\"-fx-border-width: 6; -fx-border-color: #030C1A; -fx-background-color: #121F33; -fx-text-fill: white; -fx-background-insets: 6; -fx-background-radius: 10;\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" \u003cFont name\u003d\"Tahoma\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" \u003c/opaqueInsets\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"336.0\" layoutY\u003d\"560.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"33.0\" prefWidth\u003d\"56.0\" style\u003d\"-fx-background-insets: 0; -fx-background-color: #0E59C7; -fx-background-radius: 10;\" text\u003d\"SEND\" textFill\u003d\"WHITE\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" \u003cFont name\u003d\"Segoe UI\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" focusTraversable\u003d\"false\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background: #030C1A; -fx-border-width: 0; -fx-background-insets: 0;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" fillWidth\u003d\"false\" prefWidth\u003d\"388.0\" spacing\u003d\"10.0\" style\u003d\"-fx-background-color: #030C1A; -fx-border-width: 0; -fx-background-insets: 1;\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" \u003c/padding\u003e\u003c/VBox\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":33}},{"path":"src/main/resources/view/UserDialog.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"pzl111"},"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-05"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"TOP_LEFT\" style\u003d\"-fx-background-color: #0E59C7; -fx-padding: 10 12 10 12; -fx-background-radius: 12;\" text\u003d\"Label\" textFill\u003d\"WHITE\" wrapText\u003d\"true\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" \u003cFont name\u003d\"Tahoma\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" disable\u003d\"true\" fitHeight\u003d\"26.0\" fitWidth\u003d\"26.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"pzl111":27}},{"path":"src/test/java/smolbrain/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidNumberException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" public void parseTodoTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" String input \u003d \"todo todo1\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[T][ ][0] todo1\";","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" public void parseTodoTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" String input \u003d \"todo tododescription 123\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[T][ ][0] tododescription 123\";","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" public void parseInvalidTodo() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" String input \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" public void parseDeadlineTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline newdeadline1 /by 06/12/2020 1800\";","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[D][ ][0] newdeadline1 (by: Dec 06 2020 18:00)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":" public void parseDeadlineTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline newdeadline1 with spaced out text /by 16/02/2120 1100\";","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[D][ ][0] newdeadline1 with spaced out text (by: Feb 16 2120 11:00)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline description\";","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The ending time of a deadline cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest3() {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline description /by 12/2/2000 1900\";","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest4() {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline description /by 12/31/2000 1900\";","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest5() {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline description /by 12/11/2000 2500\";","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest6() {","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline description /by 12/11/2000 11:00\";","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"pzl111"},"content":" public void parseEventTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event newevent1 /from 06/12/2020 1800 /to 06/12/3020 1800\";","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[E][ ][0] newevent1 (from: Dec 06 2020 18:00 to: Dec 06 3020 18:00)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"pzl111"},"content":" public void parseEventTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event newevent2 with space text /from 06/11/1900 1800 /to 06/12/2020 2300\";","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[E][ ][0] newevent2 with space text (from: Nov 06 1900 18:00 to: Dec 06 2020 23:00)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":177,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":190,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event eventdescr\";","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The start time of a event cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":203,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest3() {","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event eventdescr /from 06/11/1900 1800\";","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The end time of a event cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":216,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest4() {","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event description /from 12/2/2000 1900 /to 12/2/2000 1900\";","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":229,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest5() {","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event description /from 12/31/2000 1900 /to 12/31/2000 1900\";","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":242,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest6() {","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event description /from 12/11/2000 2500 /to 12/11/2000 2500\";","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":255,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":263,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":264,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest7() {","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event description /from 12/11/2000 11:00 /to 12/11/2000 11:00\";","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":268,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":274,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":276}},{"path":"src/test/java/smolbrain/UiStub.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Stub for Ui class","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class UiStub {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" public String showLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" return \"____________________________________________________________\";","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" public String showError(Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" return \"OOPS!!! \" + e;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" public String showMessage(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" return s;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":20}},{"path":"src/test/java/smolbrain/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" public void newTodoTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"[T][ ][0] todo1description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, new Todo(\"todo1description\").toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" public void newTodoTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"[T][ ][0] todo2description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, new Todo(\"todo2description\").toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" public void markedTodoTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"[T][X][0] todo1description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" Todo todo \u003d new Todo(\"todo1description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" todo.mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, todo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" public void markedTodoTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"[T][X][0] todo2description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" Todo todo \u003d new Todo(\"todo2description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" todo.mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, todo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" public void encodeUnmarkedTodoTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"T00todo1description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, new Todo(\"todo1description\").encode());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" public void encodeMarkedTodoTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"T10todo2description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" Todo todo \u003d new Todo(\"todo2description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" todo.mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, todo.encode());","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":52}},{"path":"text-ui-test/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"T1read book","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"D0return book /by 06/06/1999 1800","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"E0project meeting /from 06/06/1999 1800 /to 06/12/2009 2200","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"T0borrow book","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"delete","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"delete -1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"deadline return book /by 06/06/1999 1800","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"event project meeting /from 06/06/1999 1800 /to 06/12/2009 2200","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"todo join sports club","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":"delete 4","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"pzl111":19}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"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":"pzl111"},"content":"java -classpath ..\\bin Smolbrain \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":{"pzl111":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":"pzl111"},"content":"java -classpath ../bin Smolbrain \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":{"pzl111":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"# Smolbrain Chatbot: User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"Smolbrain is a **chatbot for tracking of tasks, optimised for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). With a strong mastery of typing commands, tasks management can be much more efficient than conventional GUI apps.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"Screenshot of Smolbrain Chatbot:","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"![Screenshot](docs/screenshot.png) ","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"## Quick start","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"1. Ensure that Java `11` or above installed in your Computer.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"2. Download the latest `smolbrain.jar` from [here](https://github.com/pzl111/ip/releases/tag/A-Release).","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"3. Copy the file to the folder you want to use as the _home folder_ for your Smolbrain Chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"pzl111"},"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 smolbrain.jar` command to run the application.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"5. 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.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" \u003cbr\u003eSome example commands you can try:","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * `list` : Lists all current saved tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * `todo NewTodo` : Adds a new task of type **Todo** with the title `NewTodo` to the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * `delete 3` : Deletes the 3rd task shown in the current task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * `mark 1` : Marks the 1st task shown in the current task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * `bye` : Exits the app.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":"6. Refer to the Features below for details of each command.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"\u003e ⚠️ **Important:** Running the jar file by double-clicking and opening via `Java(TM) Platform SE binary` might cause an exception displayed `OOPS!!! java.io.IOException: Access is denied`. Run the application through the command terminal as shown above instead.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"## Key Features ","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":"### Creation of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":"There are 3 different types of tasks available: **Todo**, **Deadline** and **Event**.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":"* **Todo** : A task with only a description.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"* **Deadline** : A task with a description with the associated due date and time.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":"* **Event** : A task with a description with the starting and ending date and times.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"* Displayed tasks are prefixed by `[TYPE][MARKED][PRIORITY_LEVEL]`.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" * `TYPE` refers to the task type: `T` for **Todo**, `D` for **Deadline**, `E` for **Event**.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * `MARKED` refers to marked state of task: `X` for marked, `0` for unmarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" * `PRIORITY_LEVEL` refers to the assigned priority level of the task, with possible values 0, 1, 2 and 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":"### Marking of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"Tasks can be marked when completed, or unmarked when required, allowing to track which tasks are done.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"### Prioritising tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":"Tasks can be set with a priority level to indicate how urgent they are.","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":"## Features List","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"\u003e ℹ️ Notes about the command format:","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":"\u003e ","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":"\u003e * Words in `[UPPER_CASE]` are the parameters to be supplied by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":"\u003e * Task descriptions (indicated as `[DESCRIPTION]`), can have spaces in between them.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":"\u003e * Typing `todo This is a todo` will create a new **Todo** task with the description `This is a todo`.","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":"\u003e * Date and time must be given in this **exact format**: `DD/MM/YYYY HHmm`, otherwise there will be an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":"\u003e * Single digit days or months should have 2 numbers such as `03`, `09`.","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":"\u003e * Time must not have semicolon characters `:` and should be in 24-hour format.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":"### Adding a **Todo** task: `todo`","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":"Adds a new **Todo** task to the chatbot. ","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":"Format: `todo [DESCRIPTION]`","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":"* `[DESCRIPTION]` can have multiple spaces for separating words. ","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":"* By default, the task is unmarked and has a priority level of 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":"* `todo Housework` : Creates a new **Todo** task with the description `Housework`.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":"* `todo Create a new recipe` : Creates a new **Todo** task with the description `Create a new recipe`.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":"### Adding a **Deadline** task: `deadline`","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":"Adds a new **Deadline** task to the chatbot with the due date and time. ","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":"Format: `deadline [DESCRIPTION] /by DD/MM/YYYY HHmm`","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":"* `[DESCRIPTION]` can have multiple spaces for separating words. ","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":"* By default, the task is unmarked and has a priority level of 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":"* Date and time must be given in the exact format `DD/MM/YYYY HHmm`, as described above in the notes.","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":"* `deadline Homework assignment /by 20/12/2023 1800` : Creates a new **Deadline** task with the description `Homework assignment`, with due date and time set to 20 Dec 2023 at 18:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":"* `deadline Cleaning /by 03/08/2023 0900` : Creates a new **Deadline** task with the description `Cleaning`, with due date and time set to 03 Aug 2023 at 09:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":"### Adding an **Event** task: `Event`","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":"Adds a new **Event** task to the chatbot with the starting and ending date and times.","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":"Format: `event [DESCRIPTION] /from DD/MM/YYYY HHmm /to DD/MM/YYYY HHmm`","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":"* `[DESCRIPTION]` can have multiple spaces for separating words. ","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":"* By default, the task is unmarked and has a priority level of 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":"* Date and time must be given in the exact format `DD/MM/YYYY HHmm`, as described above in the notes.","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":"* `event Swimming /from 04/01/2023 0900 /to 04/01/2023 1100` : Creates a new **Event** task with the description `Swimming`, with starting date and time set to 04 Jan 2023 at 09:00, ending date and time set to 04 Jan 2023 at 11:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":"* `event Birthday party /from 11/10/2023 1800 /to 11/10/2023 2200` : Creates a new **Event** task with the description `Birthday party`, with starting date and time set to 11 Oct 2023 at 18:00, ending date and time set to 11 Oct 2023 at 22:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":"### Marking a task: `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":"Marks the specified task as complete.","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":"Format: `mark [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":"* Marks 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-16"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":"* Marking tasks will overwrite the current marked state of a task (marked tasks will remain marked)","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":"* `mark 1` : Marks the task indexed at 1.","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":"* `mark -1` : Error message displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":"* `mark 11` : If there are less than 11 tasks, an error message is displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":"### Unmarking a task: `unmark`","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":"Unmarks the specified task as incomplete.","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"pzl111"},"content":"Format: `unmark [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"pzl111"},"content":"* Unmarks 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-16"},{"lineNumber":132,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"pzl111"},"content":"* Unmarking tasks will overwrite the current marked state of a task (unmarked tasks will remain unmarked)","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"pzl111"},"content":"* `unmark 3` : Unmarks the task indexed at 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"pzl111"},"content":"* `unmark -3` : Error message displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"pzl111"},"content":"* `unmark 15` : If there are less than 15 tasks, an error message is displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"pzl111"},"content":"### Deleting a task: `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"pzl111"},"content":"Deletes the specified task.","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"pzl111"},"content":"Format: `delete [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"pzl111"},"content":"* Deletes 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-16"},{"lineNumber":149,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"pzl111"},"content":"* Deleting tasks will re-order the indexing of remaining tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"pzl111"},"content":"* `delete 2` : Deletes the task indexed at 2.","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"pzl111"},"content":"* `delete -6` : Error message displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"pzl111"},"content":"* `delete 8` : If there are less than 8 tasks, an error message is displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"pzl111"},"content":"### Setting priority level : `priority`","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"pzl111"},"content":"Sets the priority level for the specified task.","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"pzl111"},"content":"Format: `priority [INDEX] [PRIORITY_LEVEL]`","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"pzl111"},"content":"* Sets the priority level of the task at the specified `[INDEX]` with priority level `[PRIORITY_LEVEL]`. 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-16"},{"lineNumber":166,"author":{"gitId":"pzl111"},"content":"* Priority level should only have the possible values 0, 1, 2 and 3. Otherwise, an error is displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"pzl111"},"content":"* Deleting tasks will re-order the indexing of remaining tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"pzl111"},"content":"\u003e ⚠️ The **task index comes first**, before the priority level.","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"pzl111"},"content":"* `priority 2 0` : Sets the task indexed at 2 to priority level 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"pzl111"},"content":"* `priority 5 3` : Sets the task indexed at 5 to priority level 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"pzl111"},"content":"* `priority 1 6` : Error message displayed saying `OOPS!!! Please provide a valid priotity level from 0 to 3.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"pzl111"},"content":"* `priority 5 -3` : Error message displayed saying `OOPS!!! Please provide a valid priotity level from 0 to 3.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":177,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":180,"author":{"gitId":"pzl111"},"content":"### Finding task by keyword: `find`","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":182,"author":{"gitId":"pzl111"},"content":"Finds tasks whose descriptions contains the keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":183,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"pzl111"},"content":"Format: `find [KEYWORD]`","lastModifiedDate":"2023-09-16"},{"lineNumber":185,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"pzl111"},"content":"* The search is **case-sensitive**. e.g `book` will **not** match `Book`.","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"pzl111"},"content":"* Only the task description is searched, not the date and times nor the task type.","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"pzl111"},"content":"* Descriptions containing the keyword but not the entire word are still matched e.g. `din` will match `Finding`.","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"pzl111"},"content":"* Keyword with spaces are included e.g. `ck ba` will match `Pack bags`.","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"pzl111"},"content":"* `find Book` : Returns `Book reading` and `Booking`.","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"pzl111"},"content":"* `find Birthday Par` : Returns `Birthday Party`, but not `birthday Party`.","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"pzl111"},"content":"* `find ck ba` : Returns `Pack bags` and `Crack back`.","lastModifiedDate":"2023-09-16"},{"lineNumber":195,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":196,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":198,"author":{"gitId":"pzl111"},"content":"### Listing all tasks: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":199,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":200,"author":{"gitId":"pzl111"},"content":"Shows all tasks in the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":201,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":202,"author":{"gitId":"pzl111"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":203,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":204,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":205,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":206,"author":{"gitId":"pzl111"},"content":"### Exiting the app: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":207,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":208,"author":{"gitId":"pzl111"},"content":"Exits the app.","lastModifiedDate":"2023-09-16"},{"lineNumber":209,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":210,"author":{"gitId":"pzl111"},"content":"Format: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":211,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":212,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":213,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":214,"author":{"gitId":"pzl111"},"content":"### Saving data","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"pzl111"},"content":"Smolbrain chatbot data are saved in the computer automatically after any command that changes the data. There is no need to save manually after each command.","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":218,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":219,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"pzl111"},"content":"### Editing data file","lastModifiedDate":"2023-09-16"},{"lineNumber":221,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":222,"author":{"gitId":"pzl111"},"content":"Smolbrain chatbot data is saved in the computer automatically as a TXT file named `data.txt` in the same directory as your `smolbrain.jar` file.","lastModifiedDate":"2023-09-16"},{"lineNumber":223,"author":{"gitId":"pzl111"},"content":"Tasks are encoded in the format `[TYPE][MARKED][PRIORITY_LEVEL][BODY]`.","lastModifiedDate":"2023-09-16"},{"lineNumber":224,"author":{"gitId":"pzl111"},"content":"* `[TYPE]` refers to the task type: `T` for **Todo**, `D` for **Deadline**, `E` for **Event**.","lastModifiedDate":"2023-09-16"},{"lineNumber":225,"author":{"gitId":"pzl111"},"content":"* `[MARKED]` refers to marked state of task: `1` for marked, `0` for unmarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":226,"author":{"gitId":"pzl111"},"content":"* `[PRIORITY_LEVEL]` refers to the assigned priority level of the task, with possible values 0, 1, 2 and 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":227,"author":{"gitId":"pzl111"},"content":"* `[BODY]` refers to task description, along with other parameters such as `/from` and its due date and time","lastModifiedDate":"2023-09-16"},{"lineNumber":228,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003ee.g. `D12Complete homework /by 22/10/2023 1800` refers to a **Deadline** task with description `complete Homework`, due date and time of `22 Oct 2023 18:00`, that is marked and has priority level of 2.","lastModifiedDate":"2023-09-16"},{"lineNumber":229,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":230,"author":{"gitId":"pzl111"},"content":"\u003e ⚠️ **Caution:** If your changes to the data file does not follow the above encoding and makes its format invalid, Smolbrain chatbot might parse the data wrongly and give corrupted task data.","lastModifiedDate":"2023-09-16"},{"lineNumber":231,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":232,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":233,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":234,"author":{"gitId":"pzl111"},"content":"### Deleting data","lastModifiedDate":"2023-09-16"},{"lineNumber":235,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":236,"author":{"gitId":"pzl111"},"content":"Deleting the `data.txt` file in the same directory as your `smolbrain.jar` file will delete all saved data. When app is reopened again, it will restart as a new app.","lastModifiedDate":"2023-09-16"},{"lineNumber":237,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":238,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":239,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":240,"author":{"gitId":"pzl111"},"content":"## Command summary","lastModifiedDate":"2023-09-16"},{"lineNumber":241,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":242,"author":{"gitId":"pzl111"},"content":"| Action | Format, Example |","lastModifiedDate":"2023-09-16"},{"lineNumber":243,"author":{"gitId":"pzl111"},"content":"| --- | --- |","lastModifiedDate":"2023-09-16"},{"lineNumber":244,"author":{"gitId":"pzl111"},"content":"| Add **Todo** | `todo [DESCRIPTION]`\u003cbr\u003ee.g. `todo Create a new recipe`|","lastModifiedDate":"2023-09-16"},{"lineNumber":245,"author":{"gitId":"pzl111"},"content":"| Add **Deadline** | `deadline [DESCRIPTION] /by DD/MM/YYYY HHmm`\u003cbr\u003e e.g. `deadline Homework assignment /by 20/12/2023 1800` |","lastModifiedDate":"2023-09-16"},{"lineNumber":246,"author":{"gitId":"pzl111"},"content":"| Add **Event** | `event [DESCRIPTION] /from DD/MM/YYYY HHmm /to DD/MM/YYYY HHmm`\u003cbr\u003e e.g. `event Birthday party /from 11/10/2023 1800 /to 11/10/2023 2200` |","lastModifiedDate":"2023-09-16"},{"lineNumber":247,"author":{"gitId":"pzl111"},"content":"| Mark | `mark [INDEX]`\u003cbr\u003e e.g. `mark 2` |","lastModifiedDate":"2023-09-16"},{"lineNumber":248,"author":{"gitId":"pzl111"},"content":"| Unmark | `unmark [INDEX]`\u003cbr\u003e e.g. `unmark 5` |","lastModifiedDate":"2023-09-16"},{"lineNumber":249,"author":{"gitId":"pzl111"},"content":"| Delete | `delete [INDEX]`\u003cbr\u003e e.g. `delete 1` |","lastModifiedDate":"2023-09-16"},{"lineNumber":250,"author":{"gitId":"pzl111"},"content":"| Priority | `priority [INDEX] [PRIORITY_LEVEL]`\u003cbr\u003e e.g. `priority 7 3` |","lastModifiedDate":"2023-09-16"},{"lineNumber":251,"author":{"gitId":"pzl111"},"content":"| Find | `find [KEYWORD]`\u003cbr\u003e e.g. `find book` |","lastModifiedDate":"2023-09-16"},{"lineNumber":252,"author":{"gitId":"pzl111"},"content":"| List | `list` |","lastModifiedDate":"2023-09-16"},{"lineNumber":253,"author":{"gitId":"pzl111"},"content":"| Exit | `bye` |","lastModifiedDate":"2023-09-16"},{"lineNumber":254,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":255,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":256,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":257,"author":{"gitId":"pzl111"},"content":"## FAQ","lastModifiedDate":"2023-09-16"},{"lineNumber":258,"author":{"gitId":"pzl111"},"content":"**Q:** Why do I get errors when adding a new deadline or event task?\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":259,"author":{"gitId":"pzl111"},"content":"**A:** Check if the date and time follows the `DD/MM/YYYY HHmm` format, specifically having 2 numbers for single numbered date and months, 24-hour time format with no semicolon character `:` between hours and minutes.","lastModifiedDate":"2023-09-16"},{"lineNumber":260,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":261,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":262,"author":{"gitId":"pzl111"},"content":"**Q:** Can I have space separated task descriptions?\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":263,"author":{"gitId":"pzl111"},"content":"**A:** Yes, the descriptions can have any number of spaces between words, without affecting the command parsing.","lastModifiedDate":"2023-09-16"},{"lineNumber":264,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":265,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":266,"author":{"gitId":"pzl111"},"content":"**Q:** Are there any characters that I cannot use for the task description?\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":267,"author":{"gitId":"pzl111"},"content":"**A:** There are no restrictions on special characters such as `%` or `$`. However, phrases that are interpreted as a command format such as `/from` and `/by` are not allowed and not parsed as part of the description.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"pzl111":267}},{"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":"pzl111"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"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":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"pzl111"},"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":"pzl111"},"content":" mainClass.set(\"smolbrain.Launcher\")","lastModifiedDate":"2023-09-08"},{"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":"pzl111"},"content":" archiveBaseName \u003d \"smolbrain\"","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":"pzl111"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":22,"-":41}},{"path":"data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"T00todo2","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"T11todo3","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"T01todo4","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"T01todo4","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"T11todo5","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"T02todo6","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"T02todo7","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"T02todo8","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"T00todo9","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"T01todo10","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"T00todo11","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"D02newtask /by 01/12/2200 1800","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"pzl111":12}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"# Smolbrain Chatbot: User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"Smolbrain is a **chatbot for tracking of tasks, optimised for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). With a strong mastery of typing commands, tasks management can be much more efficient than conventional GUI apps.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"Screenshot of Smolbrain Chatbot:","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"![Screenshot](screenshot.png) ","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"## Quick start","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"1. Ensure that Java `11` or above installed in your Computer.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"2. Download the latest `smolbrain.jar` from [here](https://github.com/pzl111/ip/releases/tag/A-Release).","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"3. Copy the file to the folder you want to use as the _home folder_ for your Smolbrain Chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"pzl111"},"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 smolbrain.jar` command to run the application.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"5. 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.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" \u003cbr\u003eSome example commands you can try:","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * `list` : Lists all current saved tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * `todo NewTodo` : Adds a new task of type **Todo** with the title `NewTodo` to the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * `delete 3` : Deletes the 3rd task shown in the current task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * `mark 1` : Marks the 1st task shown in the current task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * `bye` : Exits the app.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":"6. Refer to the Features below for details of each command.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"\u003e ⚠️ **Important:** Running the jar file by double-clicking and opening via `Java(TM) Platform SE binary` might cause an exception displayed `OOPS!!! java.io.IOException: Access is denied`. Run the application through the command terminal as shown above instead.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"## Key Features ","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":"### Creation of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":"There are 3 different types of tasks available: **Todo**, **Deadline** and **Event**.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":"* **Todo** : A task with only a description.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"* **Deadline** : A task with a description with the associated due date and time.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":"* **Event** : A task with a description with the starting and ending date and times.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"* Displayed tasks are prefixed by `[TYPE][MARKED][PRIORITY_LEVEL]`.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" * `TYPE` refers to the task type: `T` for **Todo**, `D` for **Deadline**, `E` for **Event**.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * `MARKED` refers to marked state of task: `X` for marked, `0` for unmarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" * `PRIORITY_LEVEL` refers to the assigned priority level of the task, with possible values 0, 1, 2 and 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":"### Marking of tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"Tasks can be marked when completed, or unmarked when required, allowing to track which tasks are done.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"### Prioritising tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":"Tasks can be set with a priority level to indicate how urgent they are.","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":"## Features List","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"\u003e ℹ️ Notes about the command format:","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":"\u003e ","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":"\u003e * Words in `[UPPER_CASE]` are the parameters to be supplied by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":"\u003e * Task descriptions (indicated as `[DESCRIPTION]`), can have spaces in between them.","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":"\u003e * Typing `todo This is a todo` will create a new **Todo** task with the description `This is a todo`.","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":"\u003e * Date and time must be given in this **exact format**: `DD/MM/YYYY HHmm`, otherwise there will be an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":"\u003e * Single digit days or months should have 2 numbers such as `03`, `09`.","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":"\u003e * Time must not have semicolon characters `:` and should be in 24-hour format.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":"### Adding a **Todo** task: `todo`","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":"Adds a new **Todo** task to the chatbot. ","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":"Format: `todo [DESCRIPTION]`","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":"* `[DESCRIPTION]` can have multiple spaces for separating words. ","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":"* By default, the task is unmarked and has a priority level of 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":"* `todo Housework` : Creates a new **Todo** task with the description `Housework`.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":"* `todo Create a new recipe` : Creates a new **Todo** task with the description `Create a new recipe`.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":"### Adding a **Deadline** task: `deadline`","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":"Adds a new **Deadline** task to the chatbot with the due date and time. ","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":"Format: `deadline [DESCRIPTION] /by DD/MM/YYYY HHmm`","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":"* `[DESCRIPTION]` can have multiple spaces for separating words. ","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":"* By default, the task is unmarked and has a priority level of 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":"* Date and time must be given in the exact format `DD/MM/YYYY HHmm`, as described above in the notes.","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":"* `deadline Homework assignment /by 20/12/2023 1800` : Creates a new **Deadline** task with the description `Homework assignment`, with due date and time set to 20 Dec 2023 at 18:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":"* `deadline Cleaning /by 03/08/2023 0900` : Creates a new **Deadline** task with the description `Cleaning`, with due date and time set to 03 Aug 2023 at 09:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":"### Adding an **Event** task: `Event`","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":"Adds a new **Event** task to the chatbot with the starting and ending date and times.","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":"Format: `event [DESCRIPTION] /from DD/MM/YYYY HHmm /to DD/MM/YYYY HHmm`","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":"* `[DESCRIPTION]` can have multiple spaces for separating words. ","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":"* By default, the task is unmarked and has a priority level of 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":"* Date and time must be given in the exact format `DD/MM/YYYY HHmm`, as described above in the notes.","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":"* `event Swimming /from 04/01/2023 0900 /to 04/01/2023 1100` : Creates a new **Event** task with the description `Swimming`, with starting date and time set to 04 Jan 2023 at 09:00, ending date and time set to 04 Jan 2023 at 11:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":"* `event Birthday party /from 11/10/2023 1800 /to 11/10/2023 2200` : Creates a new **Event** task with the description `Birthday party`, with starting date and time set to 11 Oct 2023 at 18:00, ending date and time set to 11 Oct 2023 at 22:00.","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":"### Marking a task: `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":"Marks the specified task as complete.","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":"Format: `mark [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":"* Marks 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-16"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":"* Marking tasks will overwrite the current marked state of a task (marked tasks will remain marked)","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":"* `mark 1` : Marks the task indexed at 1.","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":"* `mark -1` : Error message displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":"* `mark 11` : If there are less than 11 tasks, an error message is displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":"### Unmarking a task: `unmark`","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":"Unmarks the specified task as incomplete.","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"pzl111"},"content":"Format: `unmark [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"pzl111"},"content":"* Unmarks 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-16"},{"lineNumber":132,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"pzl111"},"content":"* Unmarking tasks will overwrite the current marked state of a task (unmarked tasks will remain unmarked)","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"pzl111"},"content":"* `unmark 3` : Unmarks the task indexed at 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"pzl111"},"content":"* `unmark -3` : Error message displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"pzl111"},"content":"* `unmark 15` : If there are less than 15 tasks, an error message is displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"pzl111"},"content":"### Deleting a task: `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"pzl111"},"content":"Deletes the specified task.","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"pzl111"},"content":"Format: `delete [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"pzl111"},"content":"* Deletes 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-16"},{"lineNumber":149,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"pzl111"},"content":"* Deleting tasks will re-order the indexing of remaining tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"pzl111"},"content":"* `delete 2` : Deletes the task indexed at 2.","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"pzl111"},"content":"* `delete -6` : Error message displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"pzl111"},"content":"* `delete 8` : If there are less than 8 tasks, an error message is displayed saying `OOPS!!! Please provide a valid number within the range.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"pzl111"},"content":"### Setting priority level : `priority`","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"pzl111"},"content":"Sets the priority level for the specified task.","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"pzl111"},"content":"Format: `priority [INDEX] [PRIORITY_LEVEL]`","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"pzl111"},"content":"* Sets the priority level of the task at the specified `[INDEX]` with priority level `[PRIORITY_LEVEL]`. 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-16"},{"lineNumber":166,"author":{"gitId":"pzl111"},"content":"* Priority level should only have the possible values 0, 1, 2 and 3. Otherwise, an error is displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"pzl111"},"content":"* Providing a non-positive index or index that is greater than the number of tasks will result in an error displayed.","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"pzl111"},"content":"* Deleting tasks will re-order the indexing of remaining tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"pzl111"},"content":"\u003e ⚠️ The **task index comes first**, before the priority level.","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"pzl111"},"content":"* `priority 2 0` : Sets the task indexed at 2 to priority level 0.","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"pzl111"},"content":"* `priority 5 3` : Sets the task indexed at 5 to priority level 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"pzl111"},"content":"* `priority 1 6` : Error message displayed saying `OOPS!!! Please provide a valid priotity level from 0 to 3.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"pzl111"},"content":"* `priority 5 -3` : Error message displayed saying `OOPS!!! Please provide a valid priotity level from 0 to 3.`.","lastModifiedDate":"2023-09-16"},{"lineNumber":177,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":180,"author":{"gitId":"pzl111"},"content":"### Finding task by keyword: `find`","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":182,"author":{"gitId":"pzl111"},"content":"Finds tasks whose descriptions contains the keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":183,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"pzl111"},"content":"Format: `find [KEYWORD]`","lastModifiedDate":"2023-09-16"},{"lineNumber":185,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"pzl111"},"content":"* The search is **case-sensitive**. e.g `book` will **not** match `Book`.","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"pzl111"},"content":"* Only the task description is searched, not the date and times nor the task type.","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"pzl111"},"content":"* Descriptions containing the keyword but not the entire word are still matched e.g. `din` will match `Finding`.","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"pzl111"},"content":"* Keyword with spaces are included e.g. `ck ba` will match `Pack bags`.","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"pzl111"},"content":"Examples: ","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"pzl111"},"content":"* `find Book` : Returns `Book reading` and `Booking`.","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"pzl111"},"content":"* `find Birthday Par` : Returns `Birthday Party`, but not `birthday Party`.","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"pzl111"},"content":"* `find ck ba` : Returns `Pack bags` and `Crack back`.","lastModifiedDate":"2023-09-16"},{"lineNumber":195,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":196,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":198,"author":{"gitId":"pzl111"},"content":"### Listing all tasks: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":199,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":200,"author":{"gitId":"pzl111"},"content":"Shows all tasks in the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":201,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":202,"author":{"gitId":"pzl111"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":203,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":204,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":205,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":206,"author":{"gitId":"pzl111"},"content":"### Exiting the app: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":207,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":208,"author":{"gitId":"pzl111"},"content":"Exits the app.","lastModifiedDate":"2023-09-16"},{"lineNumber":209,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":210,"author":{"gitId":"pzl111"},"content":"Format: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":212,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":213,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":214,"author":{"gitId":"pzl111"},"content":"### Saving data","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"pzl111"},"content":"Smolbrain chatbot data are saved in the computer automatically after any command that changes the data. There is no need to save manually after each command.","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":218,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":219,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"pzl111"},"content":"### Editing data file","lastModifiedDate":"2023-09-16"},{"lineNumber":221,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":222,"author":{"gitId":"pzl111"},"content":"Smolbrain chatbot data is saved in the computer automatically as a TXT file named `data.txt` in the same directory as your `smolbrain.jar` file.","lastModifiedDate":"2023-09-16"},{"lineNumber":223,"author":{"gitId":"pzl111"},"content":"Tasks are encoded in the format `[TYPE][MARKED][PRIORITY_LEVEL][BODY]`.","lastModifiedDate":"2023-09-16"},{"lineNumber":224,"author":{"gitId":"pzl111"},"content":"* `[TYPE]` refers to the task type: `T` for **Todo**, `D` for **Deadline**, `E` for **Event**.","lastModifiedDate":"2023-09-16"},{"lineNumber":225,"author":{"gitId":"pzl111"},"content":"* `[MARKED]` refers to marked state of task: `1` for marked, `0` for unmarked.","lastModifiedDate":"2023-09-16"},{"lineNumber":226,"author":{"gitId":"pzl111"},"content":"* `[PRIORITY_LEVEL]` refers to the assigned priority level of the task, with possible values 0, 1, 2 and 3.","lastModifiedDate":"2023-09-16"},{"lineNumber":227,"author":{"gitId":"pzl111"},"content":"* `[BODY]` refers to task description, along with other parameters such as `/from` and its due date and time","lastModifiedDate":"2023-09-16"},{"lineNumber":228,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003ee.g. `D12Complete homework /by 22/10/2023 1800` refers to a **Deadline** task with description `complete Homework`, due date and time of `22 Oct 2023 18:00`, that is marked and has priority level of 2.","lastModifiedDate":"2023-09-16"},{"lineNumber":229,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":230,"author":{"gitId":"pzl111"},"content":"\u003e ⚠️ **Caution:** If your changes to the data file does not follow the above encoding and makes its format invalid, Smolbrain chatbot might parse the data wrongly and give corrupted task data.","lastModifiedDate":"2023-09-16"},{"lineNumber":231,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":232,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":233,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":234,"author":{"gitId":"pzl111"},"content":"### Deleting data","lastModifiedDate":"2023-09-16"},{"lineNumber":235,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":236,"author":{"gitId":"pzl111"},"content":"Deleting the `data.txt` file in the same directory as your `smolbrain.jar` file will delete all saved data. When app is reopened again, it will restart as a new app.","lastModifiedDate":"2023-09-16"},{"lineNumber":237,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":238,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":239,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":240,"author":{"gitId":"pzl111"},"content":"## Command summary","lastModifiedDate":"2023-09-16"},{"lineNumber":241,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":242,"author":{"gitId":"pzl111"},"content":"| Action | Format, Example |","lastModifiedDate":"2023-09-16"},{"lineNumber":243,"author":{"gitId":"pzl111"},"content":"| --- | --- |","lastModifiedDate":"2023-09-16"},{"lineNumber":244,"author":{"gitId":"pzl111"},"content":"| Add **Todo** | `todo [DESCRIPTION]`\u003cbr\u003ee.g. `todo Create a new recipe`|","lastModifiedDate":"2023-09-16"},{"lineNumber":245,"author":{"gitId":"pzl111"},"content":"| Add **Deadline** | `deadline [DESCRIPTION] /by DD/MM/YYYY HHmm`\u003cbr\u003e e.g. `deadline Homework assignment /by 20/12/2023 1800` |","lastModifiedDate":"2023-09-16"},{"lineNumber":246,"author":{"gitId":"pzl111"},"content":"| Add **Event** | `event [DESCRIPTION] /from DD/MM/YYYY HHmm /to DD/MM/YYYY HHmm`\u003cbr\u003e e.g. `event Birthday party /from 11/10/2023 1800 /to 11/10/2023 2200` |","lastModifiedDate":"2023-09-16"},{"lineNumber":247,"author":{"gitId":"pzl111"},"content":"| Mark | `mark [INDEX]`\u003cbr\u003e e.g. `mark 2` |","lastModifiedDate":"2023-09-16"},{"lineNumber":248,"author":{"gitId":"pzl111"},"content":"| Unmark | `unmark [INDEX]`\u003cbr\u003e e.g. `unmark 5` |","lastModifiedDate":"2023-09-16"},{"lineNumber":249,"author":{"gitId":"pzl111"},"content":"| Delete | `delete [INDEX]`\u003cbr\u003e e.g. `delete 1` |","lastModifiedDate":"2023-09-16"},{"lineNumber":250,"author":{"gitId":"pzl111"},"content":"| Priority | `priority [INDEX] [PRIORITY_LEVEL]`\u003cbr\u003e e.g. `priority 7 3` |","lastModifiedDate":"2023-09-16"},{"lineNumber":251,"author":{"gitId":"pzl111"},"content":"| Find | `find [KEYWORD]`\u003cbr\u003e e.g. `find book` |","lastModifiedDate":"2023-09-16"},{"lineNumber":252,"author":{"gitId":"pzl111"},"content":"| List | `list` |","lastModifiedDate":"2023-09-16"},{"lineNumber":253,"author":{"gitId":"pzl111"},"content":"| Exit | `bye` |","lastModifiedDate":"2023-09-16"},{"lineNumber":254,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":255,"author":{"gitId":"pzl111"},"content":"\u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":256,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":257,"author":{"gitId":"pzl111"},"content":"## FAQ","lastModifiedDate":"2023-09-16"},{"lineNumber":258,"author":{"gitId":"pzl111"},"content":"**Q:** Why do I get errors when adding a new deadline or event task?\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":259,"author":{"gitId":"pzl111"},"content":"**A:** Check if the date and time follows the `DD/MM/YYYY HHmm` format, specifically having 2 numbers for single numbered date and months, 24-hour time format with no semicolon character `:` between hours and minutes.","lastModifiedDate":"2023-09-16"},{"lineNumber":260,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":261,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":262,"author":{"gitId":"pzl111"},"content":"**Q:** Can I have space separated task descriptions?\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":263,"author":{"gitId":"pzl111"},"content":"**A:** Yes, the descriptions can have any number of spaces between words, without affecting the command parsing.","lastModifiedDate":"2023-09-16"},{"lineNumber":264,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":265,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":266,"author":{"gitId":"pzl111"},"content":"**Q:** Are there any characters that I cannot use for the task description?\u003cbr\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":267,"author":{"gitId":"pzl111"},"content":"**A:** There are no restrictions on special characters such as `%` or `$`. However, phrases that are interpreted as a command format such as `/from` and `/by` are not allowed and not parsed as part of the description.","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"pzl111":251,"-":16}},{"path":"src/main/java/smolbrain/BotDialog.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Custom BotDialog control, used to display a dialog from the chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"public class BotDialog extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" private BotDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/BotDialog.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" * Takes in a string input and an image to create a dialog for a bot.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" * @param text Input string for dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" * @param img Input image for dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" * @return A BotDialog object.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" public static BotDialog getDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" var db \u003d new BotDialog(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":62}},{"path":"src/main/java/smolbrain/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" * Constructor for this class.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" public Launcher() {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * Used to start the program.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * @param args String arguments.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":24}},{"path":"src/main/java/smolbrain/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" * A GUI for Smolbrain chatbot using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Constructor for this class.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public Main() {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * Starts the main application.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * @param stage Main primary stage for this application.","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" stage.setTitle(\"Smolbrain Chatbot\");","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" stage.getIcons().add(new Image(this.getClass().getResourceAsStream(\"/images/bot.png\")));","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().createSmolbrain();","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":44}},{"path":"src/main/java/smolbrain/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" private Smolbrain smolbrain;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" private Image botImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/bot.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * Constructor for this class.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" public MainWindow() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * Initialise the scrollPane.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" * Creates and run a new Smolbrain object.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" public void createSmolbrain() {","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" smolbrain \u003d new Smolbrain(\"data.txt\", this);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" smolbrain.run();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" * Retrieves the user\u0027s input and processes the command, then clear the user input field.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" displayUserText(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" smolbrain.process(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" * Display the provided input string as a user dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" * @param input String to display.","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":" public void displayUserText(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":" UserDialog.getDialog(input, userImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":" * Display the provided input string as a bot dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":" * @param input String to display.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" public void displayBotText(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":" BotDialog.getDialog(input, botImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":85}},{"path":"src/main/java/smolbrain/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.AddCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.InvalidCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.PriorityCommand;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidNumberException;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidPriorityException;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingKeywordException;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * Parses any commands or string input.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" private static String descr;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" private static DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" private static LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" private static LocalDateTime dateTime2 \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" * Creates a parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" public Parser() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" * Parses a list command.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" * @return List command.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" public static Command parseList(String[] words) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" * Parses a todo command.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" * @return Todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" * @throws MissingDescriptionException If there was no description provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" public static Task parseTodo(String[] words) throws MissingDescriptionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" descr \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":" throw new MissingDescriptionException(\"todo\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 1; i \u003c words.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":" descr \u003d descr + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":" descr \u003d descr.substring(0, descr.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" return new Todo(descr);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":" * Parses a deadline command.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" * @return Deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" * @throws MissingDescriptionException If there was no description provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":" * @throws MissingTimeException If there was no time provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":" * @throws InvalidDateTimeException If the provided date or time was invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" public static Task parseDeadline(String[] words) throws MissingDescriptionException, MissingTimeException,","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":" InvalidDateTimeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":" boolean by \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":" descr \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":" String byText \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 1; i \u003c words.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":" if (words[i].equals(\"/by\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":" by \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":" if (by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":" byText \u003d byText + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":" descr \u003d descr + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":" if (descr.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":" throw new MissingDescriptionException(\"deadline\");","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":" } else if (byText.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":" throw new MissingTimeException(\"deadline\", \"ending\");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":" descr \u003d descr.substring(0, descr.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":" byText \u003d byText.substring(0, byText.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":" dateTime \u003d LocalDateTime.parse(byText, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":" throw new InvalidDateTimeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":" return new Deadline(descr, dateTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":" * Parses an event command.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":" * @return Event task.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":" * @throws MissingDescriptionException If there was no description provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":" * @throws MissingTimeException If there was no time provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":" * @throws InvalidDateTimeException If the provided date or time was invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":" public static Task parseEvent(String[] words) throws MissingDescriptionException, MissingTimeException,","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":" InvalidDateTimeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":" boolean from \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":" boolean to \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":" descr \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":" String fromText \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"pzl111"},"content":" String toText \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 1; i \u003c words.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"pzl111"},"content":" if (words[i].equals(\"/from\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"pzl111"},"content":" from \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"pzl111"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"pzl111"},"content":" } else if (words[i].equals(\"/to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"pzl111"},"content":" to \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"pzl111"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"pzl111"},"content":" if (to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"pzl111"},"content":" toText \u003d toText + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"pzl111"},"content":" } else if (from) {","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"pzl111"},"content":" fromText \u003d fromText + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"pzl111"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"pzl111"},"content":" descr \u003d descr + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"pzl111"},"content":" if (descr.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"pzl111"},"content":" throw new MissingDescriptionException(\"event\");","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"pzl111"},"content":" } else if (fromText.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"pzl111"},"content":" throw new MissingTimeException(\"event\", \"start\");","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"pzl111"},"content":" } else if (toText.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"pzl111"},"content":" throw new MissingTimeException(\"event\", \"end\");","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"pzl111"},"content":" descr \u003d descr.substring(0, descr.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"pzl111"},"content":" fromText \u003d fromText.substring(0, fromText.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"pzl111"},"content":" toText \u003d toText.substring(0, toText.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"pzl111"},"content":" dateTime \u003d LocalDateTime.parse(fromText, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"pzl111"},"content":" dateTime2 \u003d LocalDateTime.parse(toText, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"pzl111"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"pzl111"},"content":" throw new InvalidDateTimeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"pzl111"},"content":" return new Event(descr, dateTime, dateTime2);","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"pzl111"},"content":" * Parses a mark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"pzl111"},"content":" * @return Mark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the provided number is out of range.","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"pzl111"},"content":" public static Command parseMark(String[] words) throws InvalidNumberException, InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"mark\");","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"pzl111"},"content":" return new MarkCommand(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"pzl111"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"mark\");","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"pzl111"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"pzl111"},"content":" * Parses a unmark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"pzl111"},"content":" * @return Unmark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the provided number is out of range.","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"pzl111"},"content":" public static Command parseUnmark(String[] words) throws InvalidNumberException, InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"mark\");","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"pzl111"},"content":" return new UnmarkCommand(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"pzl111"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"mark\");","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"pzl111"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"pzl111"},"content":" * Parses a delete command.","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"pzl111"},"content":" * @return Delete command.","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the provided number is out of range.","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"pzl111"},"content":" public static Command parseDelete(String[] words) throws InvalidNumberException, InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"delete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"pzl111"},"content":" return new DeleteCommand(Integer.parseInt(words[1]) - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"pzl111"},"content":" } catch (NumberFormatException ex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"delete\");","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"pzl111"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"pzl111"},"content":" * Parses a find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"pzl111"},"content":" * @return Find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"pzl111"},"content":" * @throws MissingKeywordException If keyword was not given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"pzl111"},"content":" public static Command parseFind(String[] words) throws MissingKeywordException {","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"pzl111"},"content":" descr \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"pzl111"},"content":" throw new MissingKeywordException();","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 1; i \u003c words.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"pzl111"},"content":" descr \u003d descr + words[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"pzl111"},"content":" descr \u003d descr.substring(0, descr.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"pzl111"},"content":" return new FindCommand(descr);","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":249,"author":{"gitId":"pzl111"},"content":" * Parses a priority command.","lastModifiedDate":"2023-09-09"},{"lineNumber":250,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":251,"author":{"gitId":"pzl111"},"content":" * @param words Array of strings that was split by spaces.","lastModifiedDate":"2023-09-09"},{"lineNumber":252,"author":{"gitId":"pzl111"},"content":" * @return Priority command.","lastModifiedDate":"2023-09-09"},{"lineNumber":253,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-09"},{"lineNumber":254,"author":{"gitId":"pzl111"},"content":" * @throws InvalidPriorityException If the provided priority level is out of range.","lastModifiedDate":"2023-09-09"},{"lineNumber":255,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":256,"author":{"gitId":"pzl111"},"content":" public static Command parsePriority(String[] words) throws InvalidNumberException, InvalidPriorityException {","lastModifiedDate":"2023-09-09"},{"lineNumber":257,"author":{"gitId":"pzl111"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":258,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"select the task\");","lastModifiedDate":"2023-09-09"},{"lineNumber":259,"author":{"gitId":"pzl111"},"content":" } else if (words.length \u003c 3) {","lastModifiedDate":"2023-09-09"},{"lineNumber":260,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"set as priority level\");","lastModifiedDate":"2023-09-09"},{"lineNumber":261,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":262,"author":{"gitId":"pzl111"},"content":" int id;","lastModifiedDate":"2023-09-09"},{"lineNumber":263,"author":{"gitId":"pzl111"},"content":" int level;","lastModifiedDate":"2023-09-09"},{"lineNumber":264,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":265,"author":{"gitId":"pzl111"},"content":" id \u003d Integer.parseInt(words[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":266,"author":{"gitId":"pzl111"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":267,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"select the task\");","lastModifiedDate":"2023-09-09"},{"lineNumber":268,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":269,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":270,"author":{"gitId":"pzl111"},"content":" level \u003d Integer.parseInt(words[2]);","lastModifiedDate":"2023-09-09"},{"lineNumber":271,"author":{"gitId":"pzl111"},"content":" if (!(level \u003e\u003d 0 \u0026\u0026 level \u003c\u003d 3)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":272,"author":{"gitId":"pzl111"},"content":" throw new InvalidPriorityException();","lastModifiedDate":"2023-09-09"},{"lineNumber":273,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":274,"author":{"gitId":"pzl111"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":275,"author":{"gitId":"pzl111"},"content":" throw new InvalidNumberException(\"set as priority level\");","lastModifiedDate":"2023-09-09"},{"lineNumber":276,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":277,"author":{"gitId":"pzl111"},"content":" return new PriorityCommand(id, level);","lastModifiedDate":"2023-09-09"},{"lineNumber":278,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":279,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":280,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":281,"author":{"gitId":"pzl111"},"content":" * Parses the given input by the user including passing it into its separate parse functions.","lastModifiedDate":"2023-09-01"},{"lineNumber":282,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":283,"author":{"gitId":"pzl111"},"content":" * @param input String of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":284,"author":{"gitId":"pzl111"},"content":" * @return Command that was parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"pzl111"},"content":" * @throws MissingDescriptionException If there was no description provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"pzl111"},"content":" * @throws MissingTimeException If there was no time provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"pzl111"},"content":" * @throws InvalidDateTimeException If the provided date or time was invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":289,"author":{"gitId":"pzl111"},"content":" * @throws InvalidPriorityException If the provided priority level is invalid.","lastModifiedDate":"2023-09-09"},{"lineNumber":290,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the provided number is out of range.","lastModifiedDate":"2023-09-01"},{"lineNumber":291,"author":{"gitId":"pzl111"},"content":" * @throws MissingKeywordException If no keyword was provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":292,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":293,"author":{"gitId":"pzl111"},"content":" public static Command parse(String input) throws MissingDescriptionException, MissingTimeException,","lastModifiedDate":"2023-09-01"},{"lineNumber":294,"author":{"gitId":"pzl111"},"content":" InvalidDateTimeException, InvalidNumberException, InvalidRangeException, MissingKeywordException,","lastModifiedDate":"2023-09-09"},{"lineNumber":295,"author":{"gitId":"pzl111"},"content":" InvalidPriorityException {","lastModifiedDate":"2023-09-09"},{"lineNumber":296,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":297,"author":{"gitId":"pzl111"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":298,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":299,"author":{"gitId":"pzl111"},"content":" switch (words[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":300,"author":{"gitId":"pzl111"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":301,"author":{"gitId":"pzl111"},"content":" return parseList(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":302,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":303,"author":{"gitId":"pzl111"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":304,"author":{"gitId":"pzl111"},"content":" return new AddCommand(parseTodo(words));","lastModifiedDate":"2023-09-01"},{"lineNumber":305,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":306,"author":{"gitId":"pzl111"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":307,"author":{"gitId":"pzl111"},"content":" return new AddCommand(parseDeadline(words));","lastModifiedDate":"2023-09-01"},{"lineNumber":308,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":309,"author":{"gitId":"pzl111"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":310,"author":{"gitId":"pzl111"},"content":" return new AddCommand(parseEvent(words));","lastModifiedDate":"2023-09-01"},{"lineNumber":311,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":312,"author":{"gitId":"pzl111"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":313,"author":{"gitId":"pzl111"},"content":" return parseMark(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":314,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":315,"author":{"gitId":"pzl111"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":316,"author":{"gitId":"pzl111"},"content":" return parseUnmark(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":317,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":318,"author":{"gitId":"pzl111"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":319,"author":{"gitId":"pzl111"},"content":" return parseDelete(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":320,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":321,"author":{"gitId":"pzl111"},"content":" case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":322,"author":{"gitId":"pzl111"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":323,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":324,"author":{"gitId":"pzl111"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":325,"author":{"gitId":"pzl111"},"content":" return parseFind(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":326,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":327,"author":{"gitId":"pzl111"},"content":" case \"priority\":","lastModifiedDate":"2023-09-09"},{"lineNumber":328,"author":{"gitId":"pzl111"},"content":" return parsePriority(words);","lastModifiedDate":"2023-09-09"},{"lineNumber":329,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":330,"author":{"gitId":"pzl111"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":331,"author":{"gitId":"pzl111"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":332,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":333,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":334,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":335,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":336,"author":{"gitId":"pzl111"},"content":" * Used for save file parsing, it parses the given input by the user including","lastModifiedDate":"2023-09-01"},{"lineNumber":337,"author":{"gitId":"pzl111"},"content":" * passing it into its separate parse functions.","lastModifiedDate":"2023-09-01"},{"lineNumber":338,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":339,"author":{"gitId":"pzl111"},"content":" * @param input String of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":340,"author":{"gitId":"pzl111"},"content":" * @return Task parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":341,"author":{"gitId":"pzl111"},"content":" * @throws MissingDescriptionException If there was no description provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":342,"author":{"gitId":"pzl111"},"content":" * @throws MissingTimeException If there was no time provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":343,"author":{"gitId":"pzl111"},"content":" * @throws InvalidDateTimeException If the provided date or time was invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":344,"author":{"gitId":"pzl111"},"content":" * @throws InvalidNumberException If the provided number cannot be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":345,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the provided number is out of range.","lastModifiedDate":"2023-09-01"},{"lineNumber":346,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":347,"author":{"gitId":"pzl111"},"content":" public static Task parseLoading(String input) throws MissingDescriptionException, MissingTimeException,","lastModifiedDate":"2023-09-01"},{"lineNumber":348,"author":{"gitId":"pzl111"},"content":" InvalidDateTimeException, InvalidNumberException, InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":349,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":350,"author":{"gitId":"pzl111"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":351,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":352,"author":{"gitId":"pzl111"},"content":" switch (words[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":353,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":354,"author":{"gitId":"pzl111"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":355,"author":{"gitId":"pzl111"},"content":" return parseTodo(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":356,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":357,"author":{"gitId":"pzl111"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":358,"author":{"gitId":"pzl111"},"content":" return parseDeadline(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":359,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":360,"author":{"gitId":"pzl111"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":361,"author":{"gitId":"pzl111"},"content":" return parseEvent(words);","lastModifiedDate":"2023-09-01"},{"lineNumber":362,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":363,"author":{"gitId":"pzl111"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":364,"author":{"gitId":"pzl111"},"content":" return new Task(\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":365,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":366,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":367,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":368,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":369,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":370,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":370}},{"path":"src/main/java/smolbrain/Smolbrain.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidNumberException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidPriorityException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingKeywordException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * Smolbrain class which is the chatbot. It takes in input to create and save tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"public class Smolbrain {","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" private static boolean loading \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Creates a smolbrain object.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * @param filePath Filepath of the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @param mainwindow MainWindow object for this application.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" public Smolbrain(String filePath, MainWindow mainwindow) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" ui \u003d new Ui(mainwindow);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" storage \u003d new Storage(filePath, ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" tasks \u003d new TaskList(storage.load(), ui);","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * Processes the given input string to generate and execute commands.","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" * @param input Input string by user.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" public void process(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" assert tasks !\u003d null : \"No tasklist found for chatbot\";","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" assert ui !\u003d null : \"No Ui found for chatbot\";","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" assert storage !\u003d null : \"No storage found for chatbot\";","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" } catch (InvalidRangeException | MissingDescriptionException | MissingTimeException","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" | InvalidNumberException | InvalidDateTimeException | MissingKeywordException","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" | InvalidPriorityException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" * Runs the smolbrain chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" public void run() {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"pzl111":64}},{"path":"src/main/java/smolbrain/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import static java.lang.Integer.parseInt;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidNumberException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * Manages the save file with creation, editing and loading functionalities.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * Creates a storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @param filePath Filepath of the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * @param ui Ui object used for this application.","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" public Storage(String filePath, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" assert !filePath.equals(\"\") : \"No file path was provided for data storage\";","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" * Appends the text passed into the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" * @param text Text to append to save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" * @throws IOException If there is problems accessing the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" public void appendToFile(String text) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" fw.write(text);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" fw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" * Writes the text passed into the save file, overwriting any previous data.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" * @param text Text to write to save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" * @throws IOException If there is problems accessing the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" public void writeToFile(String text) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" fw.write(text);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" fw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":" * Loads the save file contents for the chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" * @return ArrayList of tasks from the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" ArrayList\u003cTask\u003e tasklist \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":" ArrayList\u003cString\u003e strings \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" strings.add(s.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 0; i \u003c strings.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" String type \u003d strings.get(i).substring(0, 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" String marked \u003d strings.get(i).substring(1, 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":" int priorityLevel \u003d parseInt(strings.get(i).substring(2, 3));","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":" String remain \u003d strings.get(i).substring(3);","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":" String txt \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":" case \"T\":","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":" txt \u003d \"todo \" + remain;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":" case \"D\":","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":" txt \u003d \"deadline \" + remain;","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":" case \"E\":","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":" txt \u003d \"event \" + remain;","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(txt);","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":" tasklist.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":" if (marked.equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":" task.mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":" task.setPriorityLevel(priorityLevel);","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":" | InvalidDateTimeException | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":" f.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Welcome new user!!!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":" } catch (IOException e1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":" ui.showError(e1);","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":" return tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":128}},{"path":"src/main/java/smolbrain/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":" * Deals with user interaction and display of messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" private MainWindow mainwindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * Creates a Ui object.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * @param mainwindow MainWindow object used for this application.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" public Ui(MainWindow mainwindow) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" assert mainwindow !\u003d null : \"No mainwindow was found\";","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.mainwindow \u003d mainwindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" mainwindow.displayBotText(\"Hello! I\u0027m Smolbrain\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" * Displays a straight line to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" public void showLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" mainwindow.displayBotText(\"____________________________________________________________\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" * Reads the next line that is entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" * @return String input from user.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" * Displays a formatted error message from the exception passed.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" * @param e Exception encountered by program.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" public void showError(Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" mainwindow.displayBotText(\"OOPS!!! \" + e);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" * Displays the specified message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" * @param s Message to display.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" public void showMessage(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" mainwindow.displayBotText(s);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":65}},{"path":"src/main/java/smolbrain/UserDialog.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Custom BotDialog control, used to display a dialog from the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"public class UserDialog extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" private UserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/UserDialog.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"pzl111"},"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":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" * Takes in a string input and an image to create a dialog for a user.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" * @param text Input string for dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" * @param img Input image for dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" * @return A UserDialog object.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" public static UserDialog getDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" return new UserDialog(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"pzl111":61}},{"path":"src/main/java/smolbrain/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles adding tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class AddCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private Task task;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param task Task to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" if (!isLoading) {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Got it. I\u0027ve added this task: \\n\" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Now you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" tasks.updateTasks(storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":48}},{"path":"src/main/java/smolbrain/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Used for other classes to implement different commands for chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public interface Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the id given by user for array access is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" public void setLoading();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":28}},{"path":"src/main/java/smolbrain/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" * Handles deleting tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private int id;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * @param id Array id of task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public DeleteCommand(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" this.id \u003d id;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the id given by user for array access is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" if (this.id \u003c 0 || this.id \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" Task task \u003d tasks.getTask(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" tasks.deleteTask(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Noted. I\u0027ve removed this task: \\n\" + task);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Now you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" tasks.updateTasks(storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":53}},{"path":"src/main/java/smolbrain/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles exiting chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Creates an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" Platform.exit();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":42}},{"path":"src/main/java/smolbrain/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" * Handles finding task with keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" private String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param keyword Keyword to check.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Here are the matching tasks in your list: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" tasks.findTasks(this.keyword, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":45}},{"path":"src/main/java/smolbrain/command/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles an invalid or unknown command given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class InvalidCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Creates an invalid command.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" public InvalidCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" ui.showError(new InvalidCommandException());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":42}},{"path":"src/main/java/smolbrain/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" * Handles listing of all tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" * Creates a list command.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" tasks.displayTasks(ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":41}},{"path":"src/main/java/smolbrain/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles marking tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private int id;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param id Array id of task to mark.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public MarkCommand(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.id \u003d id;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the id given by user for array access is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" if (this.id \u003c 0 || this.id \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" tasks.markTask(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"Nice! I\u0027ve marked this task as done: \\n\" + tasks.getTask(id));","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" tasks.updateTasks(storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":50}},{"path":"src/main/java/smolbrain/command/PriorityCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles setting priority level of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class PriorityCommand implements Command {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private int id;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private int priorityLevel;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * @param id Array id of task to set priority.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * @param level Priority level in this command.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" public PriorityCommand(int id, int level) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" this.id \u003d id;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" this.priorityLevel \u003d level;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * Executes ths command.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the id given by user for array access is out of bound.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidRangeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" if (this.id \u003c 0 || this.id \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" tasks.setTaskPriority(id, priorityLevel);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"OK, I\u0027ve marked this task with priority level \" + priorityLevel + \": \\n\" + tasks.getTask(id));","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" tasks.updateTasks(storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"pzl111":53}},{"path":"src/main/java/smolbrain/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Handles unmarking tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" private int id;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private boolean isLoading;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * Creates the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param id Array id of task to unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public UnmarkCommand(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.id \u003d id;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" * Executes this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * @param tasks List of tasks of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @throws InvalidRangeException If the id given by user for array access is out of bound.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws InvalidRangeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" if (this.id \u003c 0 || this.id \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" throw new InvalidRangeException();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" tasks.unmarkTask(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"OK, I\u0027ve marked this task as not done yet: \\n\" + tasks.getTask(id));","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" tasks.updateTasks(storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" * Sets the flag that chatbot is loading to true.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" public void setLoading() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" this.isLoading \u003d true;","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":50}},{"path":"src/main/java/smolbrain/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles an invalid or unknown command given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" return \"I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":25}},{"path":"src/main/java/smolbrain/exception/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles an invalid date or time given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class InvalidDateTimeException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" public InvalidDateTimeException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" return \"Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"pzl111":25}},{"path":"src/main/java/smolbrain/exception/InvalidNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles an invalid number given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class InvalidNumberException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /** Type of task */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" private String taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * @param taskType Type of task involved.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" public InvalidNumberException(String taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception, specified with the task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" return \"Please provide a valid number to \" + taskType + \".\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pzl111":31}},{"path":"src/main/java/smolbrain/exception/InvalidPriorityException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles invalid priority level given by user.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class InvalidPriorityException extends Exception {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" public InvalidPriorityException() {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" return \"Please provide a valid priority level from 0 to 3.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"pzl111":25}},{"path":"src/main/java/smolbrain/exception/InvalidRangeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles out of bound array access id given by user.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class InvalidRangeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" public InvalidRangeException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" return \"Please provide a valid number within the range.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pzl111":25}},{"path":"src/main/java/smolbrain/exception/MissingDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles when task description is missing.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class MissingDescriptionException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /** Type of task */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" private String taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * @param taskType Type of task involved.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" public MissingDescriptionException(String taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception, specified with the task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" return \"The description of a \" + taskType + \" cannot be empty.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pzl111":31}},{"path":"src/main/java/smolbrain/exception/MissingKeywordException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles when keyword missing.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class MissingKeywordException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" public MissingKeywordException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" return \"Please provide a keyword for finding task(s).\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":25}},{"path":"src/main/java/smolbrain/exception/MissingTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Handles when required time for task is missing.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class MissingTimeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /** Type of task */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" private String taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" /** Type of time */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" private String timeType;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" * Creates the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * @param taskType Type of time that was missing.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * @param timeType Type of task involved.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" public MissingTimeException(String taskType, String timeType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" super();","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" this.timeType \u003d timeType;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of the exception, specified with the time and task type.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" return \"The \" + timeType + \" time of a \" + taskType + \" cannot be empty.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"pzl111":35}},{"path":"src/main/java/smolbrain/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":" * Creates a deadline task with description and end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" /** End date and time of deadline */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" * Creates a deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * @param description Task description.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param by Task end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" assert !description.equals(\"\") : \"Description of deadline cannot possibly be empty\";","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" * Encodes this task into a string for saving into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" * @return Encoded string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" public String encode() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" DateTimeFormatter stringformatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" return \"D\" + getStatusNumber() + super.priorityLevel + super.description","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" + \" /by \" + this.by.format(stringformatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"pzl111":48}},{"path":"src/main/java/smolbrain/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":" * Creates an event task with description, start and end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" /** Start date and time of deadline*/","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" /** End date and time of deadline*/","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" * Creates a deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * @param description Task description.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * @param from Task start time.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" * @param to Task end time.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" assert !description.equals(\"\") : \"Description of event cannot possibly be empty\";","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(formatter)","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" + \" to: \" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" * Encodes this task into a string for saving into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" * @return Encoded string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" public String encode() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" return \"E\" + getStatusNumber() + super.priorityLevel + super.description","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" + \" /from \" + this.from.format(formatter) + \" /to \" + this.to.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"pzl111":53}},{"path":"src/main/java/smolbrain/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Used to create different task types","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /** Task description */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" protected String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" /** Whether task is done */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" /** Task priority level **/","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" protected int priorityLevel \u003d 0;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" * Creates a task with specified description.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * @param description Task description.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" * Returns the string symbol indicating if task is marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" * @return String symbol.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" * Returns a number as a string indicating if task is marked, for saving into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * @return String representation of marked number.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" public String getStatusNumber() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" return (isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" * Marks this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" public void mark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" * Unmarks this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" public void unmark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" * Sets the priority level of this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" * @param level Priority level for this task.","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" public void setPriorityLevel(int level) {","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" this.priorityLevel \u003d level;","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" * Checks if task description contains the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" * @param keyword Keyword to check.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":" * @return Whether task description contains the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" public boolean contain(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":" * Encodes this task into a string for saving into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" * @return Encoded string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":" public String encode() {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" return \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":" return String.format(\"[%s][%d] %s\", getStatusIcon(), priorityLevel, description);","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"pzl111":95}},{"path":"src/main/java/smolbrain/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import smolbrain.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"import smolbrain.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" * List of tasks for chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" private ArrayList\u003cTask\u003e tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" private Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" * Creates a tasklist with the given ArrayList of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" * @param tasklist Tasklist using given ArrayList.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" * @param ui Ui object used for this application.","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" public TaskList(ArrayList\u003cTask\u003e tasklist, Ui ui) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" this.tasklist \u003d tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * Adds the given task into tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" * @param task Task to add.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" tasklist.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" * Deletes the given task from tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" * @param id Id of task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" public void deleteTask(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" tasklist.remove(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" * Marks the given task in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" * @param id Id of task to mark.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" public void markTask(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" tasklist.get(id).mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" * Unmarks the given task in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" * @param id Id of task to unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" public void unmarkTask(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" tasklist.get(id).unmark();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" * Sets the priority the given task in tasklist.","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" * @param id Id of task to set priority.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" * @param level Priority level to set.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":" public void setTaskPriority(int id, int level) {","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" tasklist.get(id).setPriorityLevel(level);","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":" * Returns the number of tasks in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" * @return Number of tasks in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":" public int getSize() {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":" return tasklist.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" * Displays all the tasks in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" public void displayTasks(Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":" if (tasklist.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":" ui.showMessage(\"You have no tasks currently.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":" return;","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":" String message \u003d \"Here are the tasks in your list: \\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 0; i \u003c tasklist.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":" message +\u003d (i + 1) + \". \" + tasklist.get(i) + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":" ui.showMessage(message);","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":" * Returns the specified task in tasklist.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":" * @param id Id of task to retrieve.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":" * @return Task at the specified id.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":" public Task getTask(int id) {","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":" return tasklist.get(id);","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":" * Saves the tasks in tasklist into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":" * @param storage Storage manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":" public void updateTasks(Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":" if (tasklist.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":" storage.writeToFile(\"\");","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":" return;","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 0; i \u003c tasklist.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":" if (i \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":" storage.writeToFile(tasklist.get(i).encode());","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":" storage.appendToFile(System.lineSeparator() + tasklist.get(i).encode());","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":" * Finds and prints all the tasks in tasklist that contain the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"pzl111"},"content":" * @param keyword Keyword to check.","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"pzl111"},"content":" * @param ui Ui manager of chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"pzl111"},"content":" public void findTasks(String keyword, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"pzl111"},"content":" if (tasklist.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"pzl111"},"content":" return;","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"pzl111"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"pzl111"},"content":" for (int i \u003d 0; i \u003c tasklist.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"pzl111"},"content":" if (tasklist.get(i).contain(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"pzl111"},"content":" message +\u003d ((i + 1) + \". \" + tasklist.get(i) + \"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"pzl111"},"content":" ui.showMessage(message);","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":146}},{"path":"src/main/java/smolbrain/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Creates a todo task with description.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" * Creates a todo task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" * @param description Task description.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" assert !description.equals(\"\") : \"Description of todo cannot possibly be empty\";","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" * Returns the string representation of this task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" * @return String representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" * Encodes this task into a string for saving into save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" * @return Encoded string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" public String encode() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" return \"T\" + getStatusNumber() + super.priorityLevel + super.description;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"pzl111":38}},{"path":"src/main/resources/view/BotDialog.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"pzl111"},"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-05"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"TOP_LEFT\" style\u003d\"-fx-background-color: #1B2940; -fx-padding: 10 12 10 12; -fx-background-radius: 12;\" text\u003d\"Label\" textFill\u003d\"WHITE\" wrapText\u003d\"true\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" \u003cFont name\u003d\"Tahoma\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" disable\u003d\"true\" fitHeight\u003d\"26.0\" fitWidth\u003d\"26.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" \u003cimage\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" \u003cImage url\u003d\"@../images/DaUser.png\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" \u003c/image\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":31}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #030C1A;\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"smolbrain.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"46.0\" prefWidth\u003d\"336.0\" promptText\u003d\"Type command here...\" style\u003d\"-fx-border-width: 6; -fx-border-color: #030C1A; -fx-background-color: #121F33; -fx-text-fill: white; -fx-background-insets: 6; -fx-background-radius: 10;\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" \u003cFont name\u003d\"Tahoma\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" \u003c/opaqueInsets\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"336.0\" layoutY\u003d\"560.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"33.0\" prefWidth\u003d\"56.0\" style\u003d\"-fx-background-insets: 0; -fx-background-color: #0E59C7; -fx-background-radius: 10;\" text\u003d\"SEND\" textFill\u003d\"WHITE\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" \u003cFont name\u003d\"Segoe UI\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" focusTraversable\u003d\"false\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background: #030C1A; -fx-border-width: 0; -fx-background-insets: 0;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" fillWidth\u003d\"false\" prefWidth\u003d\"388.0\" spacing\u003d\"10.0\" style\u003d\"-fx-background-color: #030C1A; -fx-border-width: 0; -fx-background-insets: 1;\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" \u003c/padding\u003e\u003c/VBox\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"pzl111":33}},{"path":"src/main/resources/view/UserDialog.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"pzl111"},"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-05"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" \u003cLabel fx:id\u003d\"dialog\" alignment\u003d\"TOP_LEFT\" style\u003d\"-fx-background-color: #0E59C7; -fx-padding: 10 12 10 12; -fx-background-radius: 12;\" text\u003d\"Label\" textFill\u003d\"WHITE\" wrapText\u003d\"true\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" \u003cFont name\u003d\"Tahoma\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" disable\u003d\"true\" fitHeight\u003d\"26.0\" fitWidth\u003d\"26.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" \u003cInsets left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"pzl111":27}},{"path":"src/test/java/smolbrain/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidDateTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidNumberException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.InvalidRangeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"import smolbrain.exception.MissingTimeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"import smolbrain.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" public void parseTodoTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" String input \u003d \"todo todo1\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[T][ ][0] todo1\";","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" public void parseTodoTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" String input \u003d \"todo tododescription 123\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[T][ ][0] tododescription 123\";","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" public void parseInvalidTodo() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" String input \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"pzl111"},"content":" public void parseDeadlineTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline newdeadline1 /by 06/12/2020 1800\";","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[D][ ][0] newdeadline1 (by: Dec 06 2020 18:00)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"pzl111"},"content":" public void parseDeadlineTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline newdeadline1 with spaced out text /by 16/02/2120 1100\";","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[D][ ][0] newdeadline1 with spaced out text (by: Feb 16 2120 11:00)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The description of a deadline cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline description\";","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The ending time of a deadline cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest3() {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline description /by 12/2/2000 1900\";","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest4() {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline description /by 12/31/2000 1900\";","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest5() {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline description /by 12/11/2000 2500\";","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"pzl111"},"content":" public void parseInvalidDeadlineTest6() {","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"pzl111"},"content":" String input \u003d \"deadline description /by 12/11/2000 11:00\";","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"pzl111"},"content":" public void parseEventTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event newevent1 /from 06/12/2020 1800 /to 06/12/3020 1800\";","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[E][ ][0] newevent1 (from: Dec 06 2020 18:00 to: Dec 06 3020 18:00)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"pzl111"},"content":" public void parseEventTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event newevent2 with space text /from 06/11/1900 1800 /to 06/12/2020 2300\";","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"pzl111"},"content":" String output \u003d \"[E][ ][0] newevent2 with space text (from: Nov 06 1900 18:00 to: Dec 06 2020 23:00)\";","lastModifiedDate":"2023-09-09"},{"lineNumber":177,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"pzl111"},"content":" assertEquals(output, task.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The description of a event cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":190,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event eventdescr\";","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The start time of a event cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":203,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest3() {","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event eventdescr /from 06/11/1900 1800\";","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! The end time of a event cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":216,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest4() {","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event description /from 12/2/2000 1900 /to 12/2/2000 1900\";","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":229,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest5() {","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event description /from 12/31/2000 1900 /to 12/31/2000 1900\";","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":242,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest6() {","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event description /from 12/11/2000 2500 /to 12/11/2000 2500\";","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":255,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":258,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":259,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":260,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":262,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":263,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":264,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":265,"author":{"gitId":"pzl111"},"content":" public void parseInvalidEventTest7() {","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"pzl111"},"content":" String input \u003d \"event description /from 12/11/2000 11:00 /to 12/11/2000 11:00\";","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"pzl111"},"content":" String output \u003d \"OOPS!!! Please provide a valid date and time with format of dd//MM/yyyy HHmm.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":268,"author":{"gitId":"pzl111"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"pzl111"},"content":" Task task \u003d Parser.parseLoading(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"pzl111"},"content":" fail();","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"pzl111"},"content":" } catch (InvalidNumberException | InvalidRangeException | MissingTimeException | InvalidDateTimeException","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"pzl111"},"content":" | MissingDescriptionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"pzl111"},"content":" assertEquals(output, new UiStub().showError(e));","lastModifiedDate":"2023-09-01"},{"lineNumber":274,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":275,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":276,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":276}},{"path":"src/test/java/smolbrain/UiStub.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":" * Stub for Ui class","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"public class UiStub {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":" public String showLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" return \"____________________________________________________________\";","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" public String showError(Exception e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" return \"OOPS!!! \" + e;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" public String showMessage(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" return s;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":20}},{"path":"src/test/java/smolbrain/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"package smolbrain.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":" public void newTodoTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"[T][ ][0] todo1description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, new Todo(\"todo1description\").toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":" public void newTodoTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"[T][ ][0] todo2description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, new Todo(\"todo2description\").toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"pzl111"},"content":" public void markedTodoTest1() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"[T][X][0] todo1description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"pzl111"},"content":" Todo todo \u003d new Todo(\"todo1description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"pzl111"},"content":" todo.mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, todo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"pzl111"},"content":" public void markedTodoTest2() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"[T][X][0] todo2description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"pzl111"},"content":" Todo todo \u003d new Todo(\"todo2description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"pzl111"},"content":" todo.mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, todo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"pzl111"},"content":" public void encodeUnmarkedTodoTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"T00todo1description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, new Todo(\"todo1description\").encode());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"pzl111"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"pzl111"},"content":" public void encodeMarkedTodoTest() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"pzl111"},"content":" String descr \u003d \"T10todo2description\";","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"pzl111"},"content":" Todo todo \u003d new Todo(\"todo2description\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"pzl111"},"content":" todo.mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"pzl111"},"content":" assertEquals(descr, todo.encode());","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"pzl111"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"pzl111"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"pzl111"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":52}},{"path":"text-ui-test/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"T1read book","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"D0return book /by 06/06/1999 1800","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"E0project meeting /from 06/06/1999 1800 /to 06/12/2009 2200","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"T0borrow book","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"pzl111":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"pzl111"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"pzl111"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"pzl111"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"pzl111"},"content":"delete","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"pzl111"},"content":"delete -1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"pzl111"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"pzl111"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"pzl111"},"content":"deadline return book /by 06/06/1999 1800","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"pzl111"},"content":"event project meeting /from 06/06/1999 1800 /to 06/12/2009 2200","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"pzl111"},"content":"todo join sports club","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"pzl111"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"pzl111"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"pzl111"},"content":"mark 4","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"pzl111"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"pzl111"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"pzl111"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"pzl111"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"pzl111"},"content":"delete 4","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"pzl111"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"pzl111":19}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"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":"pzl111"},"content":"java -classpath ..\\bin Smolbrain \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":{"pzl111":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":"pzl111"},"content":"java -classpath ../bin Smolbrain \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":{"pzl111":1,"-":37}}] diff --git a/pzl111_ip_master/commits.json b/pzl111_ip_master/commits.json index 0daea2d5..35689501 100644 --- a/pzl111_ip_master/commits.json +++ b/pzl111_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"pzl111":[{"date":"2023-08-20","commitResults":[{"hash":"38eda6dcb2bb8a465e1ae52d0bfe56dea0b9b018","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":10}}},{"hash":"3d1ad9eb69ddf7363bf550e3789af2b1227ec56b","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"3ba642b5a286c65f7d99b088825db394d5f78e56","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"eca12aae0f79ae0efe9de1eefbf466619b0d5ee7","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":3}}},{"hash":"de0378263b8c86acdc2729310b98ecca4dbcdcd9","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":27}}}]},{"date":"2023-08-23","commitResults":[{"hash":"2a8a0356f79c5e7089bfc627a55a5f3894efb071","isMergeCommit":false,"messageTitle":"Level-6 completed","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":85,"deletions":10},"bat":{"insertions":1,"deletions":1}}},{"hash":"bda46fdc317e6af779c8d9aac122b2f7a1eb7707","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":190,"deletions":157}}},{"hash":"26c2903701d94d099388cf4eff3e6acee9885b6a","isMergeCommit":false,"messageTitle":"Completed A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":18,"deletions":1}}}]},{"date":"2023-08-25","commitResults":[{"hash":"2698f04c318a300e7c39a00c5a6ccfa51e944cd6","isMergeCommit":false,"messageTitle":"Fixed A-TextUiTesting not working because of \u0027FC\u0027 command not found","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"7e9323312748a33fd1012c8a317d4416c44eef37","isMergeCommit":false,"messageTitle":"Complete Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":253,"deletions":141}}},{"hash":"d15dc02b2b4acce8b9918bce301f61f71309f73e","isMergeCommit":false,"messageTitle":"Add LocalDate imports","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"90d56fa27146c2a9c112f03fb8aa8883943bace9","isMergeCommit":false,"messageTitle":"Finish implementing dateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5},"java":{"insertions":30,"deletions":11}}},{"hash":"6d765fee16c7a09fe8b19b320bc7093663d14671","isMergeCommit":false,"messageTitle":"Add error checking for dateTime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"bbe9851ef91c2c0cb0d9c346f996ab3150c874c6","isMergeCommit":false,"messageTitle":"Complete Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}},{"hash":"822d7eeb956f5a10860f5d2a4370853e7a699f0c","isMergeCommit":false,"messageTitle":"Change data.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5}}},{"hash":"e8aef76830d1ce2646b13a16cde7d4d366743f93","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"cf2ea201ad0b51bfc4cba8943ef15fc78aa681fd","isMergeCommit":false,"messageTitle":"Complete A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":8},"java":{"insertions":581,"deletions":277}}},{"hash":"78243bcf086fd54e23467c9db8feec4c8cf30945","isMergeCommit":false,"messageTitle":"Make Command Interface public","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"2d823d236b91dde3b3c6de28b6dbdfb900fc28e8","isMergeCommit":false,"messageTitle":"Complete A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":144,"deletions":21}}},{"hash":"24b295bfcc4d33d5622869b051ed573c9d05ee47","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-Increments","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3d0aa004de2b652ca26440abd79896e0068facc9","isMergeCommit":false,"messageTitle":"Complete A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":3,"deletions":1}}},{"hash":"f4eaea820e6658e0f55ecebe5e46766330d83fb5","isMergeCommit":false,"messageTitle":"Setup JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"9eb3168e1b72993d88663063248ee9b4c94da735","isMergeCommit":false,"messageTitle":"Testing Todo with JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":0}}},{"hash":"09d8a89459e9e50a52628c0fe6d3a45b7428f659","isMergeCommit":false,"messageTitle":"Complete A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":290,"deletions":17}}},{"hash":"9f378cfe225b5bfa28650534894343cf379b12e4","isMergeCommit":false,"messageTitle":"Complete A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"dded3a5c67816a3e23adf4eb99714f38b5bacc6d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Increments\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"10caa3bb2816afa239bd4ef39508b47b5c306378","isMergeCommit":false,"messageTitle":"Complete Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":96,"deletions":21}}},{"hash":"93b331e6bda98f2d13187451b5fa12abf75466f5","isMergeCommit":false,"messageTitle":"Complete A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":527,"deletions":4}}},{"hash":"4df8a8b8bfdcdeace8f930a10861c411a8b7fcb3","isMergeCommit":false,"messageTitle":"Configure A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"8e78bbca5a3b8247978281853eefa1c53c064bbc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/smolbrain/Parser.java\n#\tsrc/main/java/smolbrain/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"d815fbe52afffa9f6bf3b8111bd1ad2ccd969a1f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cb675d0ed8df30c9e530b513977eddb8319de85d","isMergeCommit":false,"messageTitle":"Fix coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":271,"deletions":182}}},{"hash":"254aa77975f3c3fb2b9989cd551a48f042a3bd63","isMergeCommit":false,"messageTitle":"Fix javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"720c4138d0a270ae6470addd0f004c4e17cf1809","isMergeCommit":false,"messageTitle":"Initialise JavaFX with template files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":52,"deletions":0},"java":{"insertions":163,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"da498bd86526defbea4ffa07b8d63d9c7fb463e7","isMergeCommit":false,"messageTitle":"Done integrating smolbrain parsing, with text overflow","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"fxml":{"insertions":72,"deletions":18},"java":{"insertions":201,"deletions":51}}},{"hash":"c47d394ffb4a6eb5dc9670c890fe519ff0c4a84c","isMergeCommit":false,"messageTitle":"Shrink height of dialog box","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":4,"deletions":3}}},{"hash":"8d5da12fd8e57db3e079a97f2480dc4e0d771c9f","isMergeCommit":false,"messageTitle":"Shift profile picture smaller and in corner","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"fxml":{"insertions":3,"deletions":6}}},{"hash":"5d3a93da5ba187f2f76bb402cade3e151804a91e","isMergeCommit":false,"messageTitle":"complete dialog box, with text bg color, paddings, set window title","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":14,"deletions":7},"java":{"insertions":2,"deletions":3}}},{"hash":"244a9bc394b8d66009897ea2dd0a3e604a02b1e8","isMergeCommit":false,"messageTitle":"create another userdialog for user input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":31,"deletions":50},"java":{"insertions":62,"deletions":1}}},{"hash":"0db9504a469691873481c58d86290ee313b0f4a5","isMergeCommit":false,"messageTitle":"Complete UI design","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":11,"deletions":12},"java":{"insertions":5,"deletions":2}}},{"hash":"b61dbd215ba35985665cfd202059589845a09c33","isMergeCommit":false,"messageTitle":"Complete Level-10","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":10,"deletions":10},"java":{"insertions":91,"deletions":275}}},{"hash":"ae85d52e7a4154a32f12d4918aaf7ff82fbf5509","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"62626f9ae50f62d35ff16d90fe49d68c9e24f895","isMergeCommit":false,"messageTitle":"Change run configuration for gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"2fbf7527dd81ef74a73c7d3a6c42446e33a49e93","isMergeCommit":false,"messageTitle":"Complete code qualtiy, by implementing more happy paths, renaming booleans to starting with \"is\"","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":14},"java":{"insertions":34,"deletions":31}}}]},{"date":"2023-09-09","commitResults":[{"hash":"56b693896baf8797e456a2c612fb5d4f7c761311","isMergeCommit":false,"messageTitle":"Complete A-Assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":1,"deletions":2},"java":{"insertions":12,"deletions":2}}},{"hash":"e4a3b2638e73583c71322f1222067683e9d0fed0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from pzl111/branch-A-Assertions","messageBody":"Complete A-Assertions","fileTypesAndContributionMap":{}},{"hash":"b581069b9e3fe71e3ae6350d1ad76d1b67c057ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/pzl111/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"64cf3df66edc09d370dcf5a1d6c5dcbb8799523b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"# Conflicts:\n#\tdata.txt\n","fileTypesAndContributionMap":{}},{"hash":"54e453b323ca8cda0c19debf6b2a742de67d122c","isMergeCommit":true,"messageTitle":"Merge pull request #2 from pzl111/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}},{"hash":"5bb7cd7ecd5ed682c0b9b61ec8e6bd460f563ec7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/pzl111/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c603ba62823f9f575ce07bf77d1817c1f2766087","isMergeCommit":false,"messageTitle":"Add priority command","messageBody":"Different tasks have different priorities that signify its urgency, but it cannot be included currently.\n\nTasks can now have a priority level assigned to them from 0 to 3. The default priority level of a task is set to 0.\n\nTo change the priority level of a task, use the priority command \"priority id level\",\nwhere id is the index of the task and level is the priority level to set to.\n","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":11},"java":{"insertions":178,"deletions":36}}},{"hash":"7bb90e0ead55db407a331c7099e059d1e86f176e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8e952b5a7b5972079f6eeb1fa5847a4b989b790f","isMergeCommit":false,"messageTitle":"Add welcome message for new users","messageBody":"Currently there is no difference in the greeting message for returning or new users.\nHence it is difficult for a user to know if he or she has used the chatbot before.\n\nWith the addition of a welcome message of \"Welcome new user!!!\", the user\nwill definitely know if this is a new account with new data.\n\nIt can also be used to verify that all previous data has been cleared and\nthe chatbot is reset.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"8c39807e887e11085f62ac8795e2f68f68887ef3","isMergeCommit":false,"messageTitle":"Change the chatbot message when there are no tasks in chatbot.","messageBody":"Previously, regardless of how many tasks are in the chatbot, when the user\nsends the list command, it gives the same message \"Here are the tasks in your list:\",\nfollowed by the list of tasks. However, when there are no tasks, the message seems to be\nstrange where it describes an empty list.\n\nThe message is now changed to show \"You have no tasks currently.\" when there are no\ntasks in the chatbot. This is now more natural as a dialog and is straight and concise.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-16","commitResults":[{"hash":"b6ac06cef3691da20c5974db900d68eb7eb59186","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":53,"deletions":11}}},{"hash":"778c0cd658380c670155f964c9de91644546e06f","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":10,"deletions":2}}},{"hash":"ac50016015928b3a58eb84f129c04b3bc161edc6","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":149,"deletions":19}}},{"hash":"ec80f7457fe138a37178347465d6ad4e2d519750","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":4,"deletions":1}}},{"hash":"bccd178c48a8924f804aad572f5240ac258e5fdf","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":0,"deletions":1}}},{"hash":"79805282e5ab6463c80c3586dbfee1c81032508e","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":13,"deletions":1}}},{"hash":"c2a6360cb65d5e6d09f6cd0bb9d09d815f42c3e3","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":17,"deletions":1}}},{"hash":"d67311bdc1a97a0239d6048c09498e3d86125652","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":15,"deletions":0}}},{"hash":"4631f077f6d99b0faf67355bc3dc6ebb8c059785","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":0}}},{"hash":"7e05b1c1b957a4dc5d3588a3fd7f157599e75d52","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":10,"deletions":10}}},{"hash":"e5fe688771fc010f0a1b068107801a404799d855","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":14,"deletions":16}}},{"hash":"81fef250b74f289b8279b4f5b362bd07b1cfe6de","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":13,"deletions":1}}},{"hash":"d8424caeb45fcbbdc15e8696e51674e822d89f38","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":7,"deletions":7}}},{"hash":"8fd21527687df30b728e96cd404cac6afcc78831","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"pzl111":{"java":2305,"md":251,"fxml":91,"sh":1,"bat":1,"gradle":22,"txt":35}},"authorContributionVariance":{"pzl111":243107.34},"authorDisplayNameMap":{"pzl111":"CS2103T-T11-3 PHUA..LIAN"}} +{"authorDailyContributionsMap":{"pzl111":[{"date":"2023-08-20","commitResults":[{"hash":"38eda6dcb2bb8a465e1ae52d0bfe56dea0b9b018","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":10}}},{"hash":"3d1ad9eb69ddf7363bf550e3789af2b1227ec56b","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"3ba642b5a286c65f7d99b088825db394d5f78e56","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"eca12aae0f79ae0efe9de1eefbf466619b0d5ee7","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":3}}},{"hash":"de0378263b8c86acdc2729310b98ecca4dbcdcd9","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":27}}}]},{"date":"2023-08-23","commitResults":[{"hash":"2a8a0356f79c5e7089bfc627a55a5f3894efb071","isMergeCommit":false,"messageTitle":"Level-6 completed","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":85,"deletions":10},"bat":{"insertions":1,"deletions":1}}},{"hash":"bda46fdc317e6af779c8d9aac122b2f7a1eb7707","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":190,"deletions":157}}},{"hash":"26c2903701d94d099388cf4eff3e6acee9885b6a","isMergeCommit":false,"messageTitle":"Completed A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":18,"deletions":1}}}]},{"date":"2023-08-25","commitResults":[{"hash":"2698f04c318a300e7c39a00c5a6ccfa51e944cd6","isMergeCommit":false,"messageTitle":"Fixed A-TextUiTesting not working because of \u0027FC\u0027 command not found","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"7e9323312748a33fd1012c8a317d4416c44eef37","isMergeCommit":false,"messageTitle":"Complete Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":253,"deletions":141}}},{"hash":"d15dc02b2b4acce8b9918bce301f61f71309f73e","isMergeCommit":false,"messageTitle":"Add LocalDate imports","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"90d56fa27146c2a9c112f03fb8aa8883943bace9","isMergeCommit":false,"messageTitle":"Finish implementing dateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5},"java":{"insertions":30,"deletions":11}}},{"hash":"6d765fee16c7a09fe8b19b320bc7093663d14671","isMergeCommit":false,"messageTitle":"Add error checking for dateTime","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"bbe9851ef91c2c0cb0d9c346f996ab3150c874c6","isMergeCommit":false,"messageTitle":"Complete Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}},{"hash":"822d7eeb956f5a10860f5d2a4370853e7a699f0c","isMergeCommit":false,"messageTitle":"Change data.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":5}}},{"hash":"e8aef76830d1ce2646b13a16cde7d4d366743f93","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"cf2ea201ad0b51bfc4cba8943ef15fc78aa681fd","isMergeCommit":false,"messageTitle":"Complete A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":8},"java":{"insertions":581,"deletions":277}}},{"hash":"78243bcf086fd54e23467c9db8feec4c8cf30945","isMergeCommit":false,"messageTitle":"Make Command Interface public","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"2d823d236b91dde3b3c6de28b6dbdfb900fc28e8","isMergeCommit":false,"messageTitle":"Complete A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":144,"deletions":21}}},{"hash":"24b295bfcc4d33d5622869b051ed573c9d05ee47","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-Increments","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3d0aa004de2b652ca26440abd79896e0068facc9","isMergeCommit":false,"messageTitle":"Complete A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":3,"deletions":1}}},{"hash":"f4eaea820e6658e0f55ecebe5e46766330d83fb5","isMergeCommit":false,"messageTitle":"Setup JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"9eb3168e1b72993d88663063248ee9b4c94da735","isMergeCommit":false,"messageTitle":"Testing Todo with JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":52,"deletions":0}}},{"hash":"09d8a89459e9e50a52628c0fe6d3a45b7428f659","isMergeCommit":false,"messageTitle":"Complete A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":290,"deletions":17}}},{"hash":"9f378cfe225b5bfa28650534894343cf379b12e4","isMergeCommit":false,"messageTitle":"Complete A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"dded3a5c67816a3e23adf4eb99714f38b5bacc6d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Increments\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"10caa3bb2816afa239bd4ef39508b47b5c306378","isMergeCommit":false,"messageTitle":"Complete Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":96,"deletions":21}}},{"hash":"93b331e6bda98f2d13187451b5fa12abf75466f5","isMergeCommit":false,"messageTitle":"Complete A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":527,"deletions":4}}},{"hash":"4df8a8b8bfdcdeace8f930a10861c411a8b7fcb3","isMergeCommit":false,"messageTitle":"Configure A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"8e78bbca5a3b8247978281853eefa1c53c064bbc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/smolbrain/Parser.java\n#\tsrc/main/java/smolbrain/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"d815fbe52afffa9f6bf3b8111bd1ad2ccd969a1f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cb675d0ed8df30c9e530b513977eddb8319de85d","isMergeCommit":false,"messageTitle":"Fix coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":271,"deletions":182}}},{"hash":"254aa77975f3c3fb2b9989cd551a48f042a3bd63","isMergeCommit":false,"messageTitle":"Fix javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"720c4138d0a270ae6470addd0f004c4e17cf1809","isMergeCommit":false,"messageTitle":"Initialise JavaFX with template files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":52,"deletions":0},"java":{"insertions":163,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"da498bd86526defbea4ffa07b8d63d9c7fb463e7","isMergeCommit":false,"messageTitle":"Done integrating smolbrain parsing, with text overflow","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"fxml":{"insertions":72,"deletions":18},"java":{"insertions":201,"deletions":51}}},{"hash":"c47d394ffb4a6eb5dc9670c890fe519ff0c4a84c","isMergeCommit":false,"messageTitle":"Shrink height of dialog box","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":4,"deletions":3}}},{"hash":"8d5da12fd8e57db3e079a97f2480dc4e0d771c9f","isMergeCommit":false,"messageTitle":"Shift profile picture smaller and in corner","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"fxml":{"insertions":3,"deletions":6}}},{"hash":"5d3a93da5ba187f2f76bb402cade3e151804a91e","isMergeCommit":false,"messageTitle":"complete dialog box, with text bg color, paddings, set window title","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":14,"deletions":7},"java":{"insertions":2,"deletions":3}}},{"hash":"244a9bc394b8d66009897ea2dd0a3e604a02b1e8","isMergeCommit":false,"messageTitle":"create another userdialog for user input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":31,"deletions":50},"java":{"insertions":62,"deletions":1}}},{"hash":"0db9504a469691873481c58d86290ee313b0f4a5","isMergeCommit":false,"messageTitle":"Complete UI design","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":11,"deletions":12},"java":{"insertions":5,"deletions":2}}},{"hash":"b61dbd215ba35985665cfd202059589845a09c33","isMergeCommit":false,"messageTitle":"Complete Level-10","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":10,"deletions":10},"java":{"insertions":91,"deletions":275}}},{"hash":"ae85d52e7a4154a32f12d4918aaf7ff82fbf5509","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"62626f9ae50f62d35ff16d90fe49d68c9e24f895","isMergeCommit":false,"messageTitle":"Change run configuration for gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"2fbf7527dd81ef74a73c7d3a6c42446e33a49e93","isMergeCommit":false,"messageTitle":"Complete code qualtiy, by implementing more happy paths, renaming booleans to starting with \"is\"","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":14},"java":{"insertions":34,"deletions":31}}}]},{"date":"2023-09-09","commitResults":[{"hash":"56b693896baf8797e456a2c612fb5d4f7c761311","isMergeCommit":false,"messageTitle":"Complete A-Assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":1,"deletions":2},"java":{"insertions":12,"deletions":2}}},{"hash":"e4a3b2638e73583c71322f1222067683e9d0fed0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from pzl111/branch-A-Assertions","messageBody":"Complete A-Assertions","fileTypesAndContributionMap":{}},{"hash":"b581069b9e3fe71e3ae6350d1ad76d1b67c057ba","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/pzl111/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"64cf3df66edc09d370dcf5a1d6c5dcbb8799523b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"# Conflicts:\n#\tdata.txt\n","fileTypesAndContributionMap":{}},{"hash":"54e453b323ca8cda0c19debf6b2a742de67d122c","isMergeCommit":true,"messageTitle":"Merge pull request #2 from pzl111/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}},{"hash":"5bb7cd7ecd5ed682c0b9b61ec8e6bd460f563ec7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/pzl111/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c603ba62823f9f575ce07bf77d1817c1f2766087","isMergeCommit":false,"messageTitle":"Add priority command","messageBody":"Different tasks have different priorities that signify its urgency, but it cannot be included currently.\n\nTasks can now have a priority level assigned to them from 0 to 3. The default priority level of a task is set to 0.\n\nTo change the priority level of a task, use the priority command \"priority id level\",\nwhere id is the index of the task and level is the priority level to set to.\n","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":11},"java":{"insertions":178,"deletions":36}}},{"hash":"7bb90e0ead55db407a331c7099e059d1e86f176e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8e952b5a7b5972079f6eeb1fa5847a4b989b790f","isMergeCommit":false,"messageTitle":"Add welcome message for new users","messageBody":"Currently there is no difference in the greeting message for returning or new users.\nHence it is difficult for a user to know if he or she has used the chatbot before.\n\nWith the addition of a welcome message of \"Welcome new user!!!\", the user\nwill definitely know if this is a new account with new data.\n\nIt can also be used to verify that all previous data has been cleared and\nthe chatbot is reset.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"8c39807e887e11085f62ac8795e2f68f68887ef3","isMergeCommit":false,"messageTitle":"Change the chatbot message when there are no tasks in chatbot.","messageBody":"Previously, regardless of how many tasks are in the chatbot, when the user\nsends the list command, it gives the same message \"Here are the tasks in your list:\",\nfollowed by the list of tasks. However, when there are no tasks, the message seems to be\nstrange where it describes an empty list.\n\nThe message is now changed to show \"You have no tasks currently.\" when there are no\ntasks in the chatbot. This is now more natural as a dialog and is straight and concise.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-16","commitResults":[{"hash":"b6ac06cef3691da20c5974db900d68eb7eb59186","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":53,"deletions":11}}},{"hash":"778c0cd658380c670155f964c9de91644546e06f","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":10,"deletions":2}}},{"hash":"ac50016015928b3a58eb84f129c04b3bc161edc6","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":149,"deletions":19}}},{"hash":"ec80f7457fe138a37178347465d6ad4e2d519750","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":4,"deletions":1}}},{"hash":"bccd178c48a8924f804aad572f5240ac258e5fdf","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":0,"deletions":1}}},{"hash":"79805282e5ab6463c80c3586dbfee1c81032508e","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":13,"deletions":1}}},{"hash":"c2a6360cb65d5e6d09f6cd0bb9d09d815f42c3e3","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":17,"deletions":1}}},{"hash":"d67311bdc1a97a0239d6048c09498e3d86125652","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":15,"deletions":0}}},{"hash":"4631f077f6d99b0faf67355bc3dc6ebb8c059785","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":0}}},{"hash":"7e05b1c1b957a4dc5d3588a3fd7f157599e75d52","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":10,"deletions":10}}},{"hash":"e5fe688771fc010f0a1b068107801a404799d855","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":14,"deletions":16}}},{"hash":"81fef250b74f289b8279b4f5b362bd07b1cfe6de","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":13,"deletions":1}}},{"hash":"d8424caeb45fcbbdc15e8696e51674e822d89f38","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":7,"deletions":7}}},{"hash":"8fd21527687df30b728e96cd404cac6afcc78831","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":1}}},{"hash":"960673d86a80eb3b34600d61420920d19b28ade3","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-UserGuide","A-Release"],"fileTypesAndContributionMap":{"md":{"insertions":19,"deletions":19}}},{"hash":"2fd13f635d2332b9842d1572bcaf165601439735","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"bc292c91127591a3c2b981fa1a9d1861995018ad","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":267,"deletions":24}}},{"hash":"d3ba0f9795a81d0857f012c5c439cab37bad140e","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":6,"deletions":4}}},{"hash":"46aa8a1052df8efe3ea8c903d2d4c82f0472f89d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":2}}},{"hash":"5ec1851de0862d22c5235ce980c722e21946ac69","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":5,"deletions":3}}},{"hash":"3382ce090119aa79b901f37c05f24ed73d21d98a","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":3}}},{"hash":"3084fb604b143905770edcf83c98b5adaff1eac2","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":3}}},{"hash":"e57468c0f38ceb4582003109400e112680b5e719","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":15,"deletions":16}}},{"hash":"93e1291e665c9c9472adcd5e986b50ebde7896d8","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":15,"deletions":16}}}]}]},"authorFileTypeContributionMap":{"pzl111":{"java":2305,"md":518,"fxml":91,"sh":1,"bat":1,"gradle":22,"txt":35}},"authorContributionVariance":{"pzl111":254286.23},"authorDisplayNameMap":{"pzl111":"CS2103T-T11-3 PHUA..LIAN"}} diff --git a/qyaner_ip_master/authorship.json b/qyaner_ip_master/authorship.json index e36acfac..2c0626e6 100644 --- a/qyaner_ip_master/authorship.json +++ b/qyaner_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"# Duke ","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"\u003e “Your mind is for having ideas, not holding them.” – David Allen([source](https://dansilvestre.com/productivity-quotes/))","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"Duke frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"- text-based","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"- easy to learn","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"- ~FAST~ **_SUPER FAST_** to use","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":"All you need to do is,","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"1. download it from [here](https://github.com/qyaner/ip).","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":"2. double-click it.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"4. let it manage your tasks for you 😉","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":"And it is **_FREE_**!","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":"Features:","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"- [x] Managing tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":"- [x] Managing deadlines","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" ---","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" ","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":"```ruby","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":"public class Main {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"qyaner":33,"-":5}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"//repositories {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"// mavenCentral()","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"//}","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"//","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"//dependencies {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"// testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":"// testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"//}","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":"mainClassName \u003d \u0027duke.Launcher\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"qyaner":29,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" protected String dueDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" protected String[] parts;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" protected String date;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" protected String time;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" * Creates a new Deadline instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" * @param dueDate The deadline of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" public Deadline(String description, String dueDate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" * Extracts and processes the date and time from the \u0027by\u0027 string.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" public void dateTime() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" parts \u003d this.dueDate.split(\"/\");","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" String day;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" String month;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" String year;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" if (parts.length !\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" if (parts[0].length() \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" day \u003d \"0\" + parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" day \u003d parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" if (parts[1].length() \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" month \u003d \"0\" + parts[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" month \u003d parts[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" String[] yearTime \u003d parts[2].split(\"\\\\s+\");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" if (yearTime.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" year \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" year \u003d yearTime[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" time \u003d yearTime[1].substring(0, 2) + \":\" + yearTime[1].substring(2);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" date \u003d year + \"-\" + month + \"-\" + day;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string to save the task to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" return \"D\" + \" | \" + super.saveTask() + \" | \" + this.dueDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string for display.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" dateTime();","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" return \"[D]\" + super.toString() + \" (by: \" + dueDate + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" LocalDate deadline \u003d LocalDate.parse(date);","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":" if (time \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":" deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" LocalTime deadlineTime \u003d LocalTime.parse(time);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":" deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \", \" +","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":" deadlineTime.format(DateTimeFormatter.ofPattern(\"hh:mma\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":98}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" * A dialog box in the user interface that displays both user and Duke\u0027s messages.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" * Creates a new DialogBox instance.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" * @param text The text message to be displayed in the dialog box.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" * @param image THe image to be displayed alongside the text message.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" public DialogBox(String text, Image image) {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" assert text !\u003d null : \"Text cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" assert image !\u003d null : \"Image cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" displayPicture.setImage(image);","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" * Creates a user dialog box with the specified text and image.","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" * @param text The text message to be displayed in the dialog box.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" * @param image The image to be displayed alongside the text message.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" * @return A new DialogBox instance with the specified text and image.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" public static DialogBox getUserDialog(String text, Image image) {","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" return new DialogBox(text, image);","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" * Creates a Duke dialog box with the specified text and image.","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" * @param text The text message to be displayed in the dialog box.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" * @param image The image to be displayed alongside the text message.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" * @return A new DialogBox instance with the specified text and image.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" public static DialogBox getDukeDialog(String text, Image image) {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" var db \u003d new DialogBox(text, image);","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":81}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":" * A chatbot that helps a person to keep track of a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" private static final String FILE_PATH \u003d \"./data/main.txt\";","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" * Creates a new duke.Duke instance.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" public Duke() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" System.out.println(\"Loading Error\");","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" * Generates a response to user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" * @param input The user\u0027s input command.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" assert !input.isEmpty() : \"Input cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" return Parser.parse(input, tasks, storage, ui);","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"qyaner":44,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":" * Exception to be thrown when errors such as incorrect inputs entered by user occur.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" * Creates a new DukeException instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * @param message to be printed when errors occur.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":19}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":" * Represents an event task that occurs during a specified time range.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * Creates a new Event instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" * @param from The starting time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" * @param to The ending time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string to save the event task to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" return \"E\" + \" | \" + super.saveTask() + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string for display.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":45}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" * A GUI for duke.Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" * Starts the Duke GUI application by loading the main FXML layout and setting up the primary stage.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" * @param stage The primary stage for this application.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" assert duke !\u003d null : \"Duke instance is null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":38}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * Controller for duke.MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" private Duke duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" * Initializes the `MainWindow` controller, setting up the initial state of the user interface.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" * Binds the scroll pane to the height of the dialog container and displays an introductory message.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(ui.showIntro(), dukeImage));","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" * Sets the Duke instance to be used for processing user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" * @param d The Duke instance to set.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":" assert d !\u003d null : \"Duke instance cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" * Creates two dialog boxes, one echoing user input and the other containing duke.Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" assert input !\u003d null \u0026\u0026 !input.isEmpty() : \"User input cannot be null or empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" if (response.equalsIgnoreCase(\"Bye. Hope to see you again soon!\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" Platform.exit();","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" System.exit(0);","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":76}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * Deals with making sense of the user\u0027s command.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * Parses the given command and performs corresponding actions on the provided list, storage and ui.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" * @param command The command to be parsed and executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into file and load tasks from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with user.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" public static String parse(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" if (command.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" return ui.showBye();","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"delete\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" return parseDelete(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" } else if (command.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" return ui.printList(list);","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"find\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" return parseFind(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"mark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" return parseMark(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" return parseUnmark(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"todo\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" return parseTodo(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" return parseDeadline(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"event\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" return parseEvent(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":" * Parses the \"delete\" command and removes a task from the task list by its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" * @param command The \"delete\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"delete\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"delete\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" public static String parseDelete(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" String[] sub \u003d command.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" if (sub.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" int number \u003d Integer.parseInt(sub[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" if (number \u003c list.getSize() \u0026\u0026 number \u003e\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" Task removedTask \u003d list.delete(number);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" return ui.removeTask(list, removedTask);","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The task you entered is not in the list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the task I need to delete\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" * Parses the \"find\" command and searches for tasks containing a specific keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" * @param command The \"find\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"find\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"find\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" public static String parseFind(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":" String keyword \u003d command.substring(5).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d list.find(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" return ui.printMatchingTasks(matchingTasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":" * Parses the \"mark\" command and marks a task as done by its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":" * @param command The \"mark\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"mark\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"mark\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"qyaner"},"content":" public static String parseMark(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"qyaner"},"content":" String[] sub \u003d command.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"qyaner"},"content":" if (sub.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"qyaner"},"content":" int number \u003d Integer.parseInt(sub[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"qyaner"},"content":" if (number \u003c list.getSize() \u0026\u0026 number \u003e\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"qyaner"},"content":" list.getTask(number).markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"qyaner"},"content":" return ui.mark(list, number);","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The task you entered is not in the list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the task I need to mark\");","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"qyaner"},"content":" * Parses the \"unmark\" command and marks a task as not done by its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"qyaner"},"content":" * @param command The \"unmark\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"unmark\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"unmark\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"qyaner"},"content":" public static String parseUnmark(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"qyaner"},"content":" String[] sub \u003d command.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"qyaner"},"content":" if (sub.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"qyaner"},"content":" int number \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"qyaner"},"content":" if (number \u003c list.getSize() \u0026\u0026 number \u003e\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"qyaner"},"content":" list.getTask(number).markAsNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"qyaner"},"content":" return ui.unMark(list, number);","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The task you entered is not in the list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the task I need to unmark\");","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"qyaner"},"content":" * Parses the \"todo\" command and adds a new \"Todo\" task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"qyaner"},"content":" * @param command The \"todo\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"todo\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"todo\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"qyaner"},"content":" public static String parseTodo(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"qyaner"},"content":" String todo \u003d command.substring(4).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"qyaner"},"content":" if (todo.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"qyaner"},"content":" Todo newTodo \u003d new Todo(todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"qyaner"},"content":" list.add(newTodo);","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":169,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"qyaner"},"content":" return ui.addTodo(list, newTodo);","lastModifiedDate":"2023-09-07"},{"lineNumber":171,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"qyaner"},"content":" * Parses the \"deadline\" command and adds a new \"Deadline\" task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":177,"author":{"gitId":"qyaner"},"content":" * @param command The \"deadline\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":178,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":179,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":180,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":181,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"deadline\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":182,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"deadline\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":183,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":184,"author":{"gitId":"qyaner"},"content":" public static String parseDeadline(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":185,"author":{"gitId":"qyaner"},"content":" String deadline \u003d command.substring(8).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"qyaner"},"content":" if (deadline.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"qyaner"},"content":" // separate the task and its deadline","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"qyaner"},"content":" String[] sub \u003d deadline.split(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"qyaner"},"content":" if (sub.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"qyaner"},"content":" String description \u003d sub[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"qyaner"},"content":" String by \u003d sub[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"qyaner"},"content":" Deadline newDeadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"qyaner"},"content":" list.add(newDeadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":200,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":201,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"qyaner"},"content":" return ui.addDeadline(list, newDeadline);","lastModifiedDate":"2023-09-07"},{"lineNumber":203,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the deadline\");","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":207,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":208,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":209,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":210,"author":{"gitId":"qyaner"},"content":" * Parses the \"event\" command and adds a new \"Event\" task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":211,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":212,"author":{"gitId":"qyaner"},"content":" * @param command The \"event\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":213,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":214,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":215,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":216,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"event\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":217,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"event\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":218,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":219,"author":{"gitId":"qyaner"},"content":" public static String parseEvent(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":220,"author":{"gitId":"qyaner"},"content":" String event \u003d command.substring(5).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"qyaner"},"content":" if (event.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"qyaner"},"content":" // separate event and timing","lastModifiedDate":"2023-08-29"},{"lineNumber":225,"author":{"gitId":"qyaner"},"content":" String[] sub \u003d event.split(\"/from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":227,"author":{"gitId":"qyaner"},"content":" if (sub.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":228,"author":{"gitId":"qyaner"},"content":" String description \u003d sub[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"qyaner"},"content":" String timing \u003d sub[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":230,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":231,"author":{"gitId":"qyaner"},"content":" // separate start time and end time","lastModifiedDate":"2023-08-29"},{"lineNumber":232,"author":{"gitId":"qyaner"},"content":" String[] fromTo \u003d timing.split(\"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":234,"author":{"gitId":"qyaner"},"content":" if (fromTo.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"qyaner"},"content":" String from \u003d fromTo[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":236,"author":{"gitId":"qyaner"},"content":" String to \u003d fromTo[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":237,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":238,"author":{"gitId":"qyaner"},"content":" Event newEvent \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":239,"author":{"gitId":"qyaner"},"content":" list.add(newEvent);","lastModifiedDate":"2023-08-29"},{"lineNumber":240,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":241,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":242,"author":{"gitId":"qyaner"},"content":" return ui.addEvent(list, newEvent);","lastModifiedDate":"2023-09-07"},{"lineNumber":243,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":244,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the time the event ends\");","lastModifiedDate":"2023-08-29"},{"lineNumber":245,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":246,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":247,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the timings\");","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":251}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" * Deals with saving tasks into file and loading tasks from file.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" * Create a new Storage instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" * @param filePath The file path where the list of tasks are stored in.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" assert filePath !\u003d null \u0026\u0026 !filePath.isEmpty() : \"File path cannot be null or empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" * Saves the list of tasks into file.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" public void save(TaskList list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" for (int i \u003d 0; i \u003c list.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" fileWriter.write(list.getTask(i).saveTask() + System.lineSeparator());","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" * Loads the list of tasks from file.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" * @return an ArrayList instance containing the lists of tasks stored in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" String saveFormat \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" tasks.add(Task.loadData(saveFormat));","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" System.out.println((e.getMessage()));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":73}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":" * Represents a basic task with a description and completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * Creates a new Task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" assert description !\u003d null \u0026\u0026 !description.isEmpty() : \"Description cannot be null or empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" * Returns the status icon for the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" * @return A string representing the task\u0027s completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" * Retrieves the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string to save the task to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" return \"1\" + \" | \" + this.description;","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" return \"0\" + \" | \" + this.description;","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" * Loads task data from a formatted string.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" * @param savedTasks A formatted string representing a saved task.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" * @return A Task object reconstructed from the saved data.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" public static Task loadData(String savedTasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" String[] parts \u003d savedTasks.split(\" \\\\| \");","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" String doneOrNot \u003d parts[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" Task task;","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":" if (doneOrNot.equals(\"1\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"qyaner"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"qyaner"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"qyaner"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"qyaner"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"qyaner"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"qyaner"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"qyaner"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"qyaner"},"content":" return task;","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"qyaner"},"content":" * Converts the task to a formatted string for display.","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"qyaner"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"qyaner"},"content":" return this.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":122}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" * Creates a new TaskList instance with the provided list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" * @param list The initial list of tasks for the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If the provided list of tasks is null.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" public TaskList(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" if (list \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"Empty taskList\");","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" * Creates an empty TaskList instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" this.list \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" };","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" * @param task The task to be added to the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" public void add(Task task) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" // Check for duplicates by comparing descriptions","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" for (Task existingTask : list) {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" if (existingTask.getDescription().equalsIgnoreCase(task.getDescription())) {","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! This task already exists in the list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" // If no duplicates are found, add the task to the list","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" * Deletes a task from the TaskList at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" * @return The task that was removed from the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" public Task delete(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" Task removedTask \u003d list.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" return removedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" * Retrieves a task from the TaskList at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" return list.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" * Gets the number of tasks in the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" * @return The number of tasks in the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" public int getSize() {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" return list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" * Finds tasks in the task list that contain the specified keyword in their descriptions.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":" * @param keyword The keyword to search for within task descriptions.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" * @return An ArrayList of tasks that contain the keyword in their descriptions.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":" public ArrayList\u003cTask\u003e find(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":" for (Task task : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":" return matchingTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":97}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":" * Represents a task that the user needs to do.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" * Creates a new Todo instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * @param description contains the description of the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string to be saved into a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" return \"T\" + \" | \" + super.saveTask();","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string for display.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":38}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" * Return strings containing messages to interact with user.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" * Creates a new Ui instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" public Ui() {}","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" * Generates the welcome message when program is first started.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" * @return A String showing the welcome message","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" public String showIntro() {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Hello! I\u0027m duke.Duke.\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" * Generates a goodbye message.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" * @return A string showing the goodbye message.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" public String showBye() {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" * Generates a message when a task is removed, indicating the removed task and the updated task count.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" * @param removedTask The task to be removed.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the removal and the updated task count.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" public String removeTask(TaskList list, Task removedTask) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" assert removedTask !\u003d null : \"Removed task cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Noted. I\u0027ve removed this task:\\n\" + removedTask.toString() +","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" \"\\nNow you have \" + list.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" * Generates a message when the user requests to list all tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" * @return A String message listing all tasks or indicating that there are no tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" public String printList(TaskList list) {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" if (list.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" stringBuilder.append(\"There are no tasks in your list.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" stringBuilder.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" for (int i \u003d 0; i \u003c list.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" stringBuilder.append((i + 1) + \". \" + list.getTask(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" * Generates a message when the user requests to list matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" * @param matchingTasks The list of matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" * @return A String message listing matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" public String printMatchingTasks(ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" assert matchingTasks !\u003d null : \"matchingTasks list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":" stringBuilder.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" stringBuilder.append((i + 1) + \". \" + matchingTasks.get(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":" * Generates a message when a task is marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"qyaner"},"content":" * @param index The task index to be marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the task was marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"qyaner"},"content":" public String mark(TaskList list, int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"qyaner"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c list.getSize() : \"Task index is out of bounds\";","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Nice! I\u0027ve marked this task as done:\\n\" + list.getTask(index).toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"qyaner"},"content":" * Generates a message when a task is unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"qyaner"},"content":" * @param index The task index to be unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the task was unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"qyaner"},"content":" public String unMark(TaskList list, int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"qyaner"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c list.getSize() : \"Task index is out of bounds\";","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"qyaner"},"content":" String s \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\" + list.getTask(index).toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"qyaner"},"content":" * Generates a message when the user wants to add a \"todo\" to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"qyaner"},"content":" * @param newTodo The new todo task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the addition of the new todo task.","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"qyaner"},"content":" public String addTodo(TaskList list, Todo newTodo) {","lastModifiedDate":"2023-09-07"},{"lineNumber":134,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"qyaner"},"content":" assert newTodo !\u003d null : \"New todo cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Got it. I\u0027ve added this task:\\n\" + newTodo.toString() +","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"qyaner"},"content":" \"\\nNow you have \" + list.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"qyaner"},"content":" * Generates a message when the user wants to add a \"deadline\" to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"qyaner"},"content":" * @param newDeadline The new deadline task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the addition of the new deadline task.","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"qyaner"},"content":" public String addDeadline(TaskList list, Deadline newDeadline) {","lastModifiedDate":"2023-09-07"},{"lineNumber":150,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"qyaner"},"content":" assert newDeadline !\u003d null : \"New deadline cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Got it. I\u0027ve added this task:\\n\" + newDeadline.toString() +","lastModifiedDate":"2023-09-07"},{"lineNumber":154,"author":{"gitId":"qyaner"},"content":" \"\\nNow you have \" + list.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":155,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":156,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"qyaner"},"content":" * Generates a message when the user wants to add an \"event\" to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"qyaner"},"content":" * @param newEvent The new event task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the addition of the new event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"qyaner"},"content":" public String addEvent(TaskList list, Event newEvent) {","lastModifiedDate":"2023-09-07"},{"lineNumber":166,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"qyaner"},"content":" assert newEvent !\u003d null : \"New event cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":168,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Got it. I\u0027ve added this task:\\n\" + newEvent.toString() +","lastModifiedDate":"2023-09-07"},{"lineNumber":170,"author":{"gitId":"qyaner"},"content":" \"\\nNow you have \" + list.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":171,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":172,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":174}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"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-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"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":12,"author":{"gitId":"qyaner"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" \u003cInsets right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":19}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"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-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"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":"qyaner"},"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":"qyaner"},"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":"qyaner"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" * Tests the methods in Parser class.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" public void testParse1() throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" String input1 \u003d \"todo buy book\";","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" String input2 \u003d \"todo read book\";","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" String input3 \u003d \"delete 1\";","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" String input4 \u003d \"mark 1\";","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" Storage storage \u003d new Storage(\"data/list.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" String output1 \u003d Parser.parse(input1, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" String output2 \u003d Parser.parse(input2, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" String output3 \u003d Parser.parse(input3, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" String output4 \u003d Parser.parse(input4, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Got it. I\u0027ve added this task:\\n[T][ ] buy book\\n\" +","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" \"Now you have 1 tasks in the list.\", output1);","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Got it. I\u0027ve added this task:\\n[T][ ] read book\\n\" +","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" \"Now you have 2 tasks in the list.\", output2);","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Noted. I\u0027ve removed this task:\\n[T][ ] buy book\\n\" +","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" \"Now you have 1 tasks in the list.\", output3);","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Nice! I\u0027ve marked this task as done:\\n[T][X] read book\", output4);","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" assertEquals(1, list.getSize());","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" assertTrue(list.getTask(0) instanceof Todo);","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[T][X] read book\", list.getTask(0).toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" public void testParse2() throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" String input1 \u003d \"deadline cs2030s lab /by 5/10/2023 2359\";","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" String input2 \u003d \"event project meeting /from Sat 8pm /to 10pm\";","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" String input3 \u003d \"mark 10\";","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" String input4 \u003d \"mark 1\";","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" String input5 \u003d \"mark 3\";","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":" String input6 \u003d \"unmark 3\";","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" Storage storage \u003d new Storage(\"data/list.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" String output1 \u003d Parser.parse(input1, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" String output2 \u003d Parser.parse(input2, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" String output3;","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" String output4 \u003d Parser.parse(input4, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" String output5;","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" String output6;","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" output3 \u003d Parser.parse(input3, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" output3 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" output5 \u003d Parser.parse(input5, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" output5 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" output6 \u003d Parser.parse(input6, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" output6 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Got it. I\u0027ve added this task:\\n[D][ ] cs2030s lab \" +","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" \"(by: Oct 5 2023, 11:59PM)\\nNow you have 1 tasks in the list.\", output1);","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Got it. I\u0027ve added this task:\\n[E][ ] project meeting \" +","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" \"(from: Sat 8pm to: 10pm)\\nNow you have 2 tasks in the list.\", output2);","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! The task you entered is not in the list\", output3);","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" \"[D][X] cs2030s lab (by: Oct 5 2023, 11:59PM)\", output4);","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! The task you entered is not in the list\", output5);","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! The task you entered is not in the list\", output6);","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":" assertEquals(2, list.getSize());","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":" assertTrue(list.getTask(0) instanceof Deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" assertTrue(list.getTask(1) instanceof Event);","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[D][X] cs2030s lab (by: Oct 5 2023, 11:59PM)\", list.getTask(0).toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[E][ ] project meeting (from: Sat 8pm to: 10pm)\", list.getTask(1).toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":" public void testParse3() throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":" String input1 \u003d \"hello\";","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"qyaner"},"content":" String input2 \u003d \"deadline \";","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"qyaner"},"content":" String input3 \u003d \"deadline /by\";","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"qyaner"},"content":" String input4 \u003d \"event /from\";","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"qyaner"},"content":" String input5 \u003d \"event /from Mon 2pm /to\";","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"qyaner"},"content":" String input6 \u003d \"mark 0\";","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"qyaner"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"qyaner"},"content":" Storage storage \u003d new Storage(\"data/list.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"qyaner"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"qyaner"},"content":" String output1;","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"qyaner"},"content":" String output2;","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"qyaner"},"content":" String output3;","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"qyaner"},"content":" String output4;","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"qyaner"},"content":" String output5;","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"qyaner"},"content":" String output6;","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"qyaner"},"content":" output1 \u003d Parser.parse(input1, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"qyaner"},"content":" output1 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"qyaner"},"content":" output2 \u003d Parser.parse(input2, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":122,"author":{"gitId":"qyaner"},"content":" output2 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":123,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"qyaner"},"content":" output3 \u003d Parser.parse(input3, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":127,"author":{"gitId":"qyaner"},"content":" output3 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"qyaner"},"content":" output4 \u003d Parser.parse(input4, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":132,"author":{"gitId":"qyaner"},"content":" output4 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":134,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"qyaner"},"content":" output5 \u003d Parser.parse(input5, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"qyaner"},"content":" output5 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":139,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":140,"author":{"gitId":"qyaner"},"content":" output6 \u003d Parser.parse(input6, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":142,"author":{"gitId":"qyaner"},"content":" output6 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":143,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":144,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", output1);","lastModifiedDate":"2023-09-15"},{"lineNumber":145,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! The description of a deadline cannot be empty.\", output2);","lastModifiedDate":"2023-09-15"},{"lineNumber":146,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! Please fill in the deadline\", output3);","lastModifiedDate":"2023-09-15"},{"lineNumber":147,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! Please fill in the timings\", output4);","lastModifiedDate":"2023-09-15"},{"lineNumber":148,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! Please fill in the time the event ends\", output5);","lastModifiedDate":"2023-09-15"},{"lineNumber":149,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! The task you entered is not in the list\", output6);","lastModifiedDate":"2023-09-15"},{"lineNumber":150,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":151,"author":{"gitId":"qyaner"},"content":" assertEquals(0, list.getSize());","lastModifiedDate":"2023-09-15"},{"lineNumber":152,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":153,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":153}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" * Tests the methods in Storage class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" public void testSaveAndLoad() throws IOException, DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" Path filePath \u003d Path.of(\"data/test.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" Storage storage \u003d new Storage(filePath.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" Todo todo \u003d new Todo(\"read book\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" Deadline deadline \u003d new Deadline(\"return book\", \"Monday\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" Event event \u003d new Event(\"project meeting\", \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" list.add(todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" list.add(deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" list.add(event);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" // Assert","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" assertEquals(3, lines.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" assertEquals(\"T | 0 | read book\", lines.get(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" assertEquals(\"D | 0 | return book | Monday\", lines.get(1));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" assertEquals(\"E | 0 | project meeting | Mon 2pm | 4pm\", lines.get(2));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" public void testLoadInvalidFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" String invalidFilePath \u003d \"invalid-file-path.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" Storage storage \u003d new Storage(invalidFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" assertThrows(NullPointerException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":53}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":" * Tests the methods in TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" public void testAdd() throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" Todo todo \u003d new Todo(\"read book\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" Deadline deadline \u003d new Deadline(\"return book\", \"Monday\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" Event event \u003d new Event(\"project meeting\", \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" list.add(todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" list.add(deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" list.add(event);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" assertEquals(3, list.getSize());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" assertEquals(todo, list.getTask(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" assertEquals(deadline, list.getTask(1));","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" assertEquals(event, list.getTask(2));","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[T][ ] read book\", list.getTask(0).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[D][ ] return book (by: Monday)\", list.getTask(1).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[E][ ] project meeting (from: Mon 2pm to: 4pm)\", list.getTask(2).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":35}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-07"},{"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":{"qyaner":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"# Duke ","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"\u003e “Your mind is for having ideas, not holding them.” – David Allen([source](https://dansilvestre.com/productivity-quotes/))","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"Duke frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"- text-based","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"- easy to learn","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"- ~FAST~ **_SUPER FAST_** to use","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":"All you need to do is,","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"1. download it from [here](https://github.com/qyaner/ip).","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":"2. double-click it.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"4. let it manage your tasks for you 😉","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":"And it is **_FREE_**!","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":"Features:","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"- [x] Managing tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":"- [x] Managing deadlines","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":"- [ ] Reminders (coming soon)","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" ---","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" ","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":"```ruby","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":"public class Main {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"qyaner":33,"-":5}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"//repositories {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"// mavenCentral()","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"//}","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"//","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"//dependencies {","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"// testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":"// testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"//}","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":"mainClassName \u003d \u0027duke.Launcher\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"qyaner":29,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"# User Guide for May","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"May is a text-based task management application that helps you keep track of your to-do items, deadlines, and events. This guide will help you get started with May and make the most out of its features.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"### Adding a Todo: `todo`","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"Adds a todo to the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"Format: `todo [DESCRIPTION]`","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"- `todo read book`","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"- `todo run`","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"### Adding a Deadline: `deadline`","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"Adds a task with a deadline to the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":"Format: `deadline [DESCRIPTION] /by [DUE_DATE]`","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"- `deadline return book /by Monday`","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":"- `deadline assignment /by 23/9/2023`","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":"- `deadline homework /by 23/9/2023 2359`","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":"### Adding an Event: `event`","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":"Adds an event with the timing to the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":"Format: `event [DESCRIPTION] /from [START_TIME] /to [END_TIME]`","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":"- `event project meeting /from 2pm /to 4pm`","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":"- `event lecture /from 8am /to 10am`","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":"### Listing all tasks: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":"Shows a list of all tasks in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":"### Finding tasks by name: `find`","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":"Finds tasks whose descriptions contain any of the given words.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":"Format: `find [KEYWORDS] `","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":"- Only the description is searched.","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":"- `find book` returns `return book` and `read book`","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":"- `find read` returns `read book`","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":"### Deleting a task: `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":"Deletes the specified task from the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":"Format: `delete [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":"- Deletes the task at the specified INDEX.","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":"- The index refers to the index number shown in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":"- The index must be a positive integer 1, 2, 3, …​","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":"- `delete 2` deletes the 2nd task in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":"### Marking a task as done: `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":"Marks the specified task from the list as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":"Format: `mark [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":"- Marks the task at the specified INDEX as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":"- The index refers to the index number shown in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":"- The index must be a positive integer 1, 2, 3, …​","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":"- `mark 2` marks the 2nd task in the task list as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":"### Marking a task as not done: `unmark`","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":"Marks the specified task from the list as not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":"Format: `unmark [INDEX]`","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":"- Marks the task at the specified INDEX as not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":"- The index refers to the index number shown in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":"- The index must be a positive integer 1, 2, 3, …​","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":"- `unmark 2` marks the 2nd task in the task list as not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":"### Exiting the program: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":"Exits the program.","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":"Format: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"qyaner":84,"-":14}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" protected String dueDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" protected String[] parts;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" protected String date;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" protected String time;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" * Creates a new Deadline instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" * @param dueDate The deadline of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" public Deadline(String description, String dueDate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" this.dueDate \u003d dueDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" * Extracts and processes the date and time from the \u0027by\u0027 string.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" public void dateTime() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" parts \u003d this.dueDate.split(\"/\");","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" String day;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" String month;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" String year;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" if (parts.length !\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" if (parts[0].length() \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" day \u003d \"0\" + parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" day \u003d parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" if (parts[1].length() \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" month \u003d \"0\" + parts[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" month \u003d parts[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" String[] yearTime \u003d parts[2].split(\"\\\\s+\");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" if (yearTime.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" year \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" year \u003d yearTime[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" time \u003d yearTime[1].substring(0, 2) + \":\" + yearTime[1].substring(2);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" date \u003d year + \"-\" + month + \"-\" + day;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string to save the task to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" return \"D\" + \" | \" + super.saveTask() + \" | \" + this.dueDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string for display.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" dateTime();","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" return \"[D]\" + super.toString() + \" (by: \" + dueDate + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" LocalDate deadline \u003d LocalDate.parse(date);","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":" if (time \u003d\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":" deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" LocalTime deadlineTime \u003d LocalTime.parse(time);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":" return \"[D]\" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":" deadline.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \", \" +","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":" deadlineTime.format(DateTimeFormatter.ofPattern(\"hh:mma\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":98}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" * A dialog box in the user interface that displays both user and Duke\u0027s messages.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" private Label dialog;","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" * Creates a new DialogBox instance.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" * @param text The text message to be displayed in the dialog box.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" * @param image THe image to be displayed alongside the text message.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" public DialogBox(String text, Image image) {","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" assert text !\u003d null : \"Text cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" assert image !\u003d null : \"Image cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" displayPicture.setImage(image);","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" * Creates a user dialog box with the specified text and image.","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" * @param text The text message to be displayed in the dialog box.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" * @param image The image to be displayed alongside the text message.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" * @return A new DialogBox instance with the specified text and image.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" public static DialogBox getUserDialog(String text, Image image) {","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" return new DialogBox(text, image);","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" * Creates a Duke dialog box with the specified text and image.","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" * @param text The text message to be displayed in the dialog box.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" * @param image The image to be displayed alongside the text message.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" * @return A new DialogBox instance with the specified text and image.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" public static DialogBox getDukeDialog(String text, Image image) {","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" var db \u003d new DialogBox(text, image);","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":81}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":" * A chatbot that helps a person to keep track of a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" private static final String FILE_PATH \u003d \"./data/main.txt\";","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" * Creates a new duke.Duke instance.","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" public Duke() {","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" System.out.println(\"Loading Error\");","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" * Generates a response to user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" * @param input The user\u0027s input command.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" assert !input.isEmpty() : \"Input cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" return Parser.parse(input, tasks, storage, ui);","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"qyaner":44,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":" * Exception to be thrown when errors such as incorrect inputs entered by user occur.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" * Creates a new DukeException instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * @param message to be printed when errors occur.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":19}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":" * Represents an event task that occurs during a specified time range.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * Creates a new Event instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" * @param from The starting time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" * @param to The ending time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string to save the event task to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" return \"E\" + \" | \" + super.saveTask() + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string for display.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":45}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" * A GUI for duke.Duke using FXML.","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" * Starts the Duke GUI application by loading the main FXML layout and setting up the primary stage.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" * @param stage The primary stage for this application.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" assert duke !\u003d null : \"Duke instance is null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-07"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" stage.show();","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":38}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * Controller for duke.MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" private Duke duke;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" private Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" * Initializes the `MainWindow` controller, setting up the initial state of the user interface.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" * Binds the scroll pane to the height of the dialog container and displays an introductory message.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" public void initialize() {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(ui.showIntro(), dukeImage));","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" * Sets the Duke instance to be used for processing user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" * @param d The Duke instance to set.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":" assert d !\u003d null : \"Duke instance cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" * Creates two dialog boxes, one echoing user input and the other containing duke.Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" @FXML","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" assert input !\u003d null \u0026\u0026 !input.isEmpty() : \"User input cannot be null or empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" if (response.equalsIgnoreCase(\"Bye. Hope to see you again soon!\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" Platform.exit();","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" System.exit(0);","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" );","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" userInput.clear();","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":76}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * Deals with making sense of the user\u0027s command.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * Parses the given command and performs corresponding actions on the provided list, storage and ui.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" * @param command The command to be parsed and executed.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into file and load tasks from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with user.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the command.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" public static String parse(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" if (command.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" return ui.showBye();","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"delete\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" return parseDelete(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" } else if (command.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" return ui.printList(list);","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"find\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" return parseFind(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"mark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" return parseMark(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" return parseUnmark(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"todo\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" return parseTodo(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" return parseDeadline(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" } else if (command.toLowerCase().startsWith(\"event\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" return parseEvent(command, list, storage, ui);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":" * Parses the \"delete\" command and removes a task from the task list by its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" * @param command The \"delete\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"delete\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"delete\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" public static String parseDelete(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" String[] sub \u003d command.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" if (sub.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" int number \u003d Integer.parseInt(sub[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" if (number \u003c list.getSize() \u0026\u0026 number \u003e\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" Task removedTask \u003d list.delete(number);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" return ui.removeTask(list, removedTask);","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The task you entered is not in the list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the task I need to delete\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" * Parses the \"find\" command and searches for tasks containing a specific keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" * @param command The \"find\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"find\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"find\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" public static String parseFind(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":" String keyword \u003d command.substring(5).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d list.find(keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" return ui.printMatchingTasks(matchingTasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":" * Parses the \"mark\" command and marks a task as done by its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":" * @param command The \"mark\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"mark\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"mark\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"qyaner"},"content":" public static String parseMark(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"qyaner"},"content":" String[] sub \u003d command.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"qyaner"},"content":" if (sub.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"qyaner"},"content":" int number \u003d Integer.parseInt(sub[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"qyaner"},"content":" if (number \u003c list.getSize() \u0026\u0026 number \u003e\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"qyaner"},"content":" list.getTask(number).markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":112,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"qyaner"},"content":" return ui.mark(list, number);","lastModifiedDate":"2023-09-07"},{"lineNumber":114,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The task you entered is not in the list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the task I need to mark\");","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"qyaner"},"content":" * Parses the \"unmark\" command and marks a task as not done by its index.","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"qyaner"},"content":" * @param command The \"unmark\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"unmark\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"unmark\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"qyaner"},"content":" public static String parseUnmark(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"qyaner"},"content":" String[] sub \u003d command.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"qyaner"},"content":" if (sub.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"qyaner"},"content":" int number \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"qyaner"},"content":" if (number \u003c list.getSize() \u0026\u0026 number \u003e\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"qyaner"},"content":" list.getTask(number).markAsNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"qyaner"},"content":" return ui.unMark(list, number);","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The task you entered is not in the list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the task I need to unmark\");","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"qyaner"},"content":" * Parses the \"todo\" command and adds a new \"Todo\" task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"qyaner"},"content":" * @param command The \"todo\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"todo\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"todo\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"qyaner"},"content":" public static String parseTodo(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"qyaner"},"content":" String todo \u003d command.substring(4).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"qyaner"},"content":" if (todo.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"qyaner"},"content":" Todo newTodo \u003d new Todo(todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"qyaner"},"content":" list.add(newTodo);","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":169,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"qyaner"},"content":" return ui.addTodo(list, newTodo);","lastModifiedDate":"2023-09-07"},{"lineNumber":171,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":172,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"qyaner"},"content":" * Parses the \"deadline\" command and adds a new \"Deadline\" task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":177,"author":{"gitId":"qyaner"},"content":" * @param command The \"deadline\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":178,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":179,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":180,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":181,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"deadline\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":182,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"deadline\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":183,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":184,"author":{"gitId":"qyaner"},"content":" public static String parseDeadline(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":185,"author":{"gitId":"qyaner"},"content":" String deadline \u003d command.substring(8).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":186,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":187,"author":{"gitId":"qyaner"},"content":" if (deadline.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":188,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":189,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"qyaner"},"content":" // separate the task and its deadline","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"qyaner"},"content":" String[] sub \u003d deadline.split(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"qyaner"},"content":" if (sub.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"qyaner"},"content":" String description \u003d sub[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"qyaner"},"content":" String by \u003d sub[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"qyaner"},"content":" Deadline newDeadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"qyaner"},"content":" list.add(newDeadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":200,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":201,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"qyaner"},"content":" return ui.addDeadline(list, newDeadline);","lastModifiedDate":"2023-09-07"},{"lineNumber":203,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the deadline\");","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":206,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":207,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":208,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":209,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":210,"author":{"gitId":"qyaner"},"content":" * Parses the \"event\" command and adds a new \"Event\" task to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":211,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":212,"author":{"gitId":"qyaner"},"content":" * @param command The \"event\" command to be parsed and executed.","lastModifiedDate":"2023-09-09"},{"lineNumber":213,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":214,"author":{"gitId":"qyaner"},"content":" * @param storage Saves tasks into a file and loads tasks from the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":215,"author":{"gitId":"qyaner"},"content":" * @param ui Displays messages to interact with the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":216,"author":{"gitId":"qyaner"},"content":" * @return A string containing the response to the \"event\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":217,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If there is an error in parsing the \"event\" command.","lastModifiedDate":"2023-09-09"},{"lineNumber":218,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":219,"author":{"gitId":"qyaner"},"content":" public static String parseEvent(String command, TaskList list, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":220,"author":{"gitId":"qyaner"},"content":" String event \u003d command.substring(5).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"qyaner"},"content":" if (event.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"qyaner"},"content":" // separate event and timing","lastModifiedDate":"2023-08-29"},{"lineNumber":225,"author":{"gitId":"qyaner"},"content":" String[] sub \u003d event.split(\"/from\");","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":227,"author":{"gitId":"qyaner"},"content":" if (sub.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":228,"author":{"gitId":"qyaner"},"content":" String description \u003d sub[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"qyaner"},"content":" String timing \u003d sub[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":230,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":231,"author":{"gitId":"qyaner"},"content":" // separate start time and end time","lastModifiedDate":"2023-08-29"},{"lineNumber":232,"author":{"gitId":"qyaner"},"content":" String[] fromTo \u003d timing.split(\"/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":234,"author":{"gitId":"qyaner"},"content":" if (fromTo.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"qyaner"},"content":" String from \u003d fromTo[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":236,"author":{"gitId":"qyaner"},"content":" String to \u003d fromTo[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":237,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":238,"author":{"gitId":"qyaner"},"content":" Event newEvent \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-29"},{"lineNumber":239,"author":{"gitId":"qyaner"},"content":" list.add(newEvent);","lastModifiedDate":"2023-08-29"},{"lineNumber":240,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-09-07"},{"lineNumber":241,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":242,"author":{"gitId":"qyaner"},"content":" return ui.addEvent(list, newEvent);","lastModifiedDate":"2023-09-07"},{"lineNumber":243,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":244,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the time the event ends\");","lastModifiedDate":"2023-08-29"},{"lineNumber":245,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":246,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":247,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! Please fill in the timings\");","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":251}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" * Deals with saving tasks into file and loading tasks from file.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" * Create a new Storage instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" * @param filePath The file path where the list of tasks are stored in.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" assert filePath !\u003d null \u0026\u0026 !filePath.isEmpty() : \"File path cannot be null or empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" * Saves the list of tasks into file.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" * @param list Contains the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" public void save(TaskList list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" for (int i \u003d 0; i \u003c list.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" fileWriter.write(list.getTask(i).saveTask() + System.lineSeparator());","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" * Loads the list of tasks from file.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" * @return an ArrayList instance containing the lists of tasks stored in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" String saveFormat \u003d scanner.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" tasks.add(Task.loadData(saveFormat));","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" scanner.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" System.out.println((e.getMessage()));","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":73}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":" * Represents a basic task with a description and completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * Creates a new Task instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" assert description !\u003d null \u0026\u0026 !description.isEmpty() : \"Description cannot be null or empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" * Returns the status icon for the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" * @return A string representing the task\u0027s completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" * Retrieves the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string to save the task to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" return \"1\" + \" | \" + this.description;","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" return \"0\" + \" | \" + this.description;","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" * Loads task data from a formatted string.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" * @param savedTasks A formatted string representing a saved task.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" * @return A Task object reconstructed from the saved data.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" public static Task loadData(String savedTasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" String[] parts \u003d savedTasks.split(\" \\\\| \");","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" String doneOrNot \u003d parts[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" Task task;","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":" if (doneOrNot.equals(\"1\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"qyaner"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"qyaner"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"qyaner"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"qyaner"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"qyaner"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"qyaner"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"qyaner"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"qyaner"},"content":" return task;","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"qyaner"},"content":" * Converts the task to a formatted string for display.","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"qyaner"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"qyaner"},"content":" return this.getStatusIcon() + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":122}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" * Creates a new TaskList instance with the provided list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" * @param list The initial list of tasks for the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" * @throws DukeException If the provided list of tasks is null.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" public TaskList(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" if (list \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"Empty taskList\");","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" * Creates an empty TaskList instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" public TaskList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" this.list \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" };","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" * @param task The task to be added to the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" public void add(Task task) throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" // Check for duplicates by comparing descriptions","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" for (Task existingTask : list) {","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" if (existingTask.getDescription().equalsIgnoreCase(task.getDescription())) {","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" throw new DukeException(\"OOPS!!! This task already exists in the list.\");","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" // If no duplicates are found, add the task to the list","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" * Deletes a task from the TaskList at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" * @return The task that was removed from the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" public Task delete(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" Task removedTask \u003d list.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" return removedTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" * Retrieves a task from the TaskList at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" return list.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" * Gets the number of tasks in the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" * @return The number of tasks in the TaskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" public int getSize() {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" return list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" * Finds tasks in the task list that contain the specified keyword in their descriptions.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":" * @param keyword The keyword to search for within task descriptions.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" * @return An ArrayList of tasks that contain the keyword in their descriptions.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":" public ArrayList\u003cTask\u003e find(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":" for (Task task : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":" return matchingTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":97}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":" * Represents a task that the user needs to do.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" * Creates a new Todo instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * @param description contains the description of the todo.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string to be saved into a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" public String saveTask() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" return \"T\" + \" | \" + super.saveTask();","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" * Returns a formatted string for display.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":38}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" * Return strings containing messages to interact with user.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" * Creates a new Ui instance.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" public Ui() {}","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" * Generates the welcome message when program is first started.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" * @return A String showing the welcome message","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" public String showIntro() {","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Hello! I\u0027m May.\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" * Generates a goodbye message.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" * @return A string showing the goodbye message.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" public String showBye() {","lastModifiedDate":"2023-09-07"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" * Generates a message when a task is removed, indicating the removed task and the updated task count.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" * @param removedTask The task to be removed.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the removal and the updated task count.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" public String removeTask(TaskList list, Task removedTask) {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" assert removedTask !\u003d null : \"Removed task cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Noted. I\u0027ve removed this task:\\n\" + removedTask.toString() +","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" \"\\nNow you have \" + list.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" * Generates a message when the user requests to list all tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" * @return A String message listing all tasks or indicating that there are no tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" public String printList(TaskList list) {","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":" if (list.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" stringBuilder.append(\"There are no tasks in your list.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" stringBuilder.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" for (int i \u003d 0; i \u003c list.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" stringBuilder.append((i + 1) + \". \" + list.getTask(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" * Generates a message when the user requests to list matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" * @param matchingTasks The list of matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" * @return A String message listing matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" public String printMatchingTasks(ArrayList\u003cTask\u003e matchingTasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" assert matchingTasks !\u003d null : \"matchingTasks list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-07"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":" stringBuilder.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" stringBuilder.append((i + 1) + \". \" + matchingTasks.get(i).toString() + \"\\n\");","lastModifiedDate":"2023-09-07"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":" * Generates a message when a task is marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"qyaner"},"content":" * @param index The task index to be marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the task was marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"qyaner"},"content":" public String mark(TaskList list, int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"qyaner"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c list.getSize() : \"Task index is out of bounds\";","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Nice! I\u0027ve marked this task as done:\\n\" + list.getTask(index).toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":109,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"qyaner"},"content":" * Generates a message when a task is unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"qyaner"},"content":" * @param index The task index to be unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the task was unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"qyaner"},"content":" public String unMark(TaskList list, int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"qyaner"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c list.getSize() : \"Task index is out of bounds\";","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"qyaner"},"content":" String s \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\" + list.getTask(index).toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"qyaner"},"content":" * Generates a message when the user wants to add a \"todo\" to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"qyaner"},"content":" * @param newTodo The new todo task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the addition of the new todo task.","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"qyaner"},"content":" public String addTodo(TaskList list, Todo newTodo) {","lastModifiedDate":"2023-09-07"},{"lineNumber":134,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"qyaner"},"content":" assert newTodo !\u003d null : \"New todo cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Got it. I\u0027ve added this task:\\n\" + newTodo.toString() +","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"qyaner"},"content":" \"\\nNow you have \" + list.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"qyaner"},"content":" * Generates a message when the user wants to add a \"deadline\" to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"qyaner"},"content":" * @param newDeadline The new deadline task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the addition of the new deadline task.","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"qyaner"},"content":" public String addDeadline(TaskList list, Deadline newDeadline) {","lastModifiedDate":"2023-09-07"},{"lineNumber":150,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"qyaner"},"content":" assert newDeadline !\u003d null : \"New deadline cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Got it. I\u0027ve added this task:\\n\" + newDeadline.toString() +","lastModifiedDate":"2023-09-07"},{"lineNumber":154,"author":{"gitId":"qyaner"},"content":" \"\\nNow you have \" + list.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":155,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":156,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"qyaner"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"qyaner"},"content":" * Generates a message when the user wants to add an \"event\" to the task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"qyaner"},"content":" * @param list The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"qyaner"},"content":" * @param newEvent The new event task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"qyaner"},"content":" * @return A String message indicating the addition of the new event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"qyaner"},"content":" public String addEvent(TaskList list, Event newEvent) {","lastModifiedDate":"2023-09-07"},{"lineNumber":166,"author":{"gitId":"qyaner"},"content":" assert list !\u003d null : \"Task list cannot be empty.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"qyaner"},"content":" assert newEvent !\u003d null : \"New event cannot be null.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":168,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"qyaner"},"content":" String s \u003d \"Got it. I\u0027ve added this task:\\n\" + newEvent.toString() +","lastModifiedDate":"2023-09-07"},{"lineNumber":170,"author":{"gitId":"qyaner"},"content":" \"\\nNow you have \" + list.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-07"},{"lineNumber":171,"author":{"gitId":"qyaner"},"content":" return s;","lastModifiedDate":"2023-09-07"},{"lineNumber":172,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":173,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":174}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"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-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"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":12,"author":{"gitId":"qyaner"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" \u003cInsets right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":19}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"qyaner"},"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-07"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"qyaner"},"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":"qyaner"},"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":"qyaner"},"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":"qyaner"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"qyaner":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-15"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-15"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":" * Tests the methods in Parser class.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" public void testParse1() throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" String input1 \u003d \"todo buy book\";","lastModifiedDate":"2023-09-15"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" String input2 \u003d \"todo read book\";","lastModifiedDate":"2023-09-15"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" String input3 \u003d \"delete 1\";","lastModifiedDate":"2023-09-15"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" String input4 \u003d \"mark 1\";","lastModifiedDate":"2023-09-15"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":" Storage storage \u003d new Storage(\"data/list.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" String output1 \u003d Parser.parse(input1, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":" String output2 \u003d Parser.parse(input2, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" String output3 \u003d Parser.parse(input3, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" String output4 \u003d Parser.parse(input4, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Got it. I\u0027ve added this task:\\n[T][ ] buy book\\n\" +","lastModifiedDate":"2023-09-15"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" \"Now you have 1 tasks in the list.\", output1);","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Got it. I\u0027ve added this task:\\n[T][ ] read book\\n\" +","lastModifiedDate":"2023-09-15"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" \"Now you have 2 tasks in the list.\", output2);","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Noted. I\u0027ve removed this task:\\n[T][ ] buy book\\n\" +","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" \"Now you have 1 tasks in the list.\", output3);","lastModifiedDate":"2023-09-15"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Nice! I\u0027ve marked this task as done:\\n[T][X] read book\", output4);","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" assertEquals(1, list.getSize());","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" assertTrue(list.getTask(0) instanceof Todo);","lastModifiedDate":"2023-09-15"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[T][X] read book\", list.getTask(0).toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":" public void testParse2() throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" String input1 \u003d \"deadline cs2030s lab /by 5/10/2023 2359\";","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" String input2 \u003d \"event project meeting /from Sat 8pm /to 10pm\";","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":" String input3 \u003d \"mark 10\";","lastModifiedDate":"2023-09-15"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" String input4 \u003d \"mark 1\";","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" String input5 \u003d \"mark 3\";","lastModifiedDate":"2023-09-15"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":" String input6 \u003d \"unmark 3\";","lastModifiedDate":"2023-09-15"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" Storage storage \u003d new Storage(\"data/list.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":" String output1 \u003d Parser.parse(input1, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"qyaner"},"content":" String output2 \u003d Parser.parse(input2, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":55,"author":{"gitId":"qyaner"},"content":" String output3;","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"qyaner"},"content":" String output4 \u003d Parser.parse(input4, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"qyaner"},"content":" String output5;","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"qyaner"},"content":" String output6;","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"qyaner"},"content":" output3 \u003d Parser.parse(input3, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"qyaner"},"content":" output3 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":67,"author":{"gitId":"qyaner"},"content":" output5 \u003d Parser.parse(input5, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":68,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":69,"author":{"gitId":"qyaner"},"content":" output5 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":70,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":71,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":72,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":73,"author":{"gitId":"qyaner"},"content":" output6 \u003d Parser.parse(input6, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":74,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":75,"author":{"gitId":"qyaner"},"content":" output6 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":78,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Got it. I\u0027ve added this task:\\n[D][ ] cs2030s lab \" +","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"qyaner"},"content":" \"(by: Oct 5 2023, 11:59PM)\\nNow you have 1 tasks in the list.\", output1);","lastModifiedDate":"2023-09-15"},{"lineNumber":80,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Got it. I\u0027ve added this task:\\n[E][ ] project meeting \" +","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"qyaner"},"content":" \"(from: Sat 8pm to: 10pm)\\nNow you have 2 tasks in the list.\", output2);","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! The task you entered is not in the list\", output3);","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"qyaner"},"content":" assertEquals(\"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"qyaner"},"content":" \"[D][X] cs2030s lab (by: Oct 5 2023, 11:59PM)\", output4);","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! The task you entered is not in the list\", output5);","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! The task you entered is not in the list\", output6);","lastModifiedDate":"2023-09-15"},{"lineNumber":87,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":88,"author":{"gitId":"qyaner"},"content":" assertEquals(2, list.getSize());","lastModifiedDate":"2023-09-15"},{"lineNumber":89,"author":{"gitId":"qyaner"},"content":" assertTrue(list.getTask(0) instanceof Deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":90,"author":{"gitId":"qyaner"},"content":" assertTrue(list.getTask(1) instanceof Event);","lastModifiedDate":"2023-09-15"},{"lineNumber":91,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[D][X] cs2030s lab (by: Oct 5 2023, 11:59PM)\", list.getTask(0).toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[E][ ] project meeting (from: Sat 8pm to: 10pm)\", list.getTask(1).toString());","lastModifiedDate":"2023-09-15"},{"lineNumber":93,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":94,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":95,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-09-15"},{"lineNumber":96,"author":{"gitId":"qyaner"},"content":" public void testParse3() throws DukeException {","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"qyaner"},"content":" String input1 \u003d \"hello\";","lastModifiedDate":"2023-09-15"},{"lineNumber":98,"author":{"gitId":"qyaner"},"content":" String input2 \u003d \"deadline \";","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"qyaner"},"content":" String input3 \u003d \"deadline /by\";","lastModifiedDate":"2023-09-15"},{"lineNumber":100,"author":{"gitId":"qyaner"},"content":" String input4 \u003d \"event /from\";","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"qyaner"},"content":" String input5 \u003d \"event /from Mon 2pm /to\";","lastModifiedDate":"2023-09-15"},{"lineNumber":102,"author":{"gitId":"qyaner"},"content":" String input6 \u003d \"mark 0\";","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"qyaner"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"qyaner"},"content":" Storage storage \u003d new Storage(\"data/list.txt\");","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"qyaner"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"qyaner"},"content":" String output1;","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"qyaner"},"content":" String output2;","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"qyaner"},"content":" String output3;","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"qyaner"},"content":" String output4;","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"qyaner"},"content":" String output5;","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"qyaner"},"content":" String output6;","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"qyaner"},"content":" output1 \u003d Parser.parse(input1, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"qyaner"},"content":" output1 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"qyaner"},"content":" output2 \u003d Parser.parse(input2, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":122,"author":{"gitId":"qyaner"},"content":" output2 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":123,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":125,"author":{"gitId":"qyaner"},"content":" output3 \u003d Parser.parse(input3, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":127,"author":{"gitId":"qyaner"},"content":" output3 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"qyaner"},"content":" output4 \u003d Parser.parse(input4, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":132,"author":{"gitId":"qyaner"},"content":" output4 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":134,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"qyaner"},"content":" output5 \u003d Parser.parse(input5, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"qyaner"},"content":" output5 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":139,"author":{"gitId":"qyaner"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":140,"author":{"gitId":"qyaner"},"content":" output6 \u003d Parser.parse(input6, list, storage, ui);","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"qyaner"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":142,"author":{"gitId":"qyaner"},"content":" output6 \u003d e.getMessage(); // Store the exception message","lastModifiedDate":"2023-09-15"},{"lineNumber":143,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":144,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\", output1);","lastModifiedDate":"2023-09-15"},{"lineNumber":145,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! The description of a deadline cannot be empty.\", output2);","lastModifiedDate":"2023-09-15"},{"lineNumber":146,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! Please fill in the deadline\", output3);","lastModifiedDate":"2023-09-15"},{"lineNumber":147,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! Please fill in the timings\", output4);","lastModifiedDate":"2023-09-15"},{"lineNumber":148,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! Please fill in the time the event ends\", output5);","lastModifiedDate":"2023-09-15"},{"lineNumber":149,"author":{"gitId":"qyaner"},"content":" assertEquals(\"OOPS!!! The task you entered is not in the list\", output6);","lastModifiedDate":"2023-09-15"},{"lineNumber":150,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":151,"author":{"gitId":"qyaner"},"content":" assertEquals(0, list.getSize());","lastModifiedDate":"2023-09-15"},{"lineNumber":152,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":153,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":153}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":" * Tests the methods in Storage class.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" public void testSaveAndLoad() throws IOException, DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" Path filePath \u003d Path.of(\"data/test.txt\");","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" Storage storage \u003d new Storage(filePath.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" Todo todo \u003d new Todo(\"read book\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" Deadline deadline \u003d new Deadline(\"return book\", \"Monday\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" Event event \u003d new Event(\"project meeting\", \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" list.add(todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" list.add(deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" list.add(event);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":" storage.save(list);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"qyaner"},"content":" // Assert","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"qyaner"},"content":" assertEquals(3, lines.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"qyaner"},"content":" assertEquals(\"T | 0 | read book\", lines.get(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"qyaner"},"content":" assertEquals(\"D | 0 | return book | Monday\", lines.get(1));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"qyaner"},"content":" assertEquals(\"E | 0 | project meeting | Mon 2pm | 4pm\", lines.get(2));","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"qyaner"},"content":" public void testLoadInvalidFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"qyaner"},"content":" String invalidFilePath \u003d \"invalid-file-path.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"qyaner"},"content":" Storage storage \u003d new Storage(invalidFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"qyaner"},"content":" assertThrows(NullPointerException.class, () -\u003e {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"qyaner"},"content":" storage.load();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"qyaner"},"content":" });","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":53}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"qyaner"},"content":" * Tests the methods in TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"qyaner"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"qyaner"},"content":" * @author Qin Yan Er","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"qyaner"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"qyaner"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"qyaner"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"qyaner"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"qyaner"},"content":" public void testAdd() throws DukeException {","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"qyaner"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"qyaner"},"content":" Todo todo \u003d new Todo(\"read book\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":" Deadline deadline \u003d new Deadline(\"return book\", \"Monday\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"qyaner"},"content":" Event event \u003d new Event(\"project meeting\", \"Mon 2pm\", \"4pm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"qyaner"},"content":" list.add(todo);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"qyaner"},"content":" list.add(deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"qyaner"},"content":" list.add(event);","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"qyaner"},"content":" assertEquals(3, list.getSize());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"qyaner"},"content":" assertEquals(todo, list.getTask(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"qyaner"},"content":" assertEquals(deadline, list.getTask(1));","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"qyaner"},"content":" assertEquals(event, list.getTask(2));","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[T][ ] read book\", list.getTask(0).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[D][ ] return book (by: Monday)\", list.getTask(1).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"qyaner"},"content":" assertEquals(\"[E][ ] project meeting (from: Mon 2pm to: 4pm)\", list.getTask(2).toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"qyaner"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"qyaner"},"content":"}","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"qyaner"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"qyaner":35}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"qyaner"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"qyaner"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"qyaner"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"qyaner"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"qyaner"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"qyaner"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"qyaner"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"qyaner":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"qyaner"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-07"},{"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":{"qyaner":1,"-":20}}] diff --git a/qyaner_ip_master/commits.json b/qyaner_ip_master/commits.json index 9fda4a4a..dc5ef378 100644 --- a/qyaner_ip_master/commits.json +++ b/qyaner_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"qyaner":[{"date":"2023-08-21","commitResults":[{"hash":"9ec188fac089cbd0366fbb357dfc70d749cfee25","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"417325bea777318782ecea57e903e2ede321ccb4","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"4befd1a43875c839dbb6c1cecd18c54b7695f02e","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"8ccbfbf489574f5005559d4e7f5f891894d9fadf","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":9}}}]},{"date":"2023-08-22","commitResults":[{"hash":"98679731711bf025f6af5740288c991e98898f48","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":8}}},{"hash":"c7b85de3b1d45185486b40264b549c4fadfc64f0","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":38}}},{"hash":"7c5c5b69e3a5c95013d54d7e5d1f0933cd052430","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":23}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e48535d573c09c335f51802042c85e2bf7a9d564","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":7,"deletions":6}}},{"hash":"d1bdd434393f3fa6e84a6bdddf7985f9433d5e5b","isMergeCommit":false,"messageTitle":"separated classes into different files and added some comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":99}}}]},{"date":"2023-08-26","commitResults":[{"hash":"928ec51b25ea85c608c0a53c6f10f0bfdc312f04","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":2}}},{"hash":"8018e33d08126269be167d5e3833fc15448d9482","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"f96880eeeaf62afefe3edb7ecf8ee2c065528ed4","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":1}}},{"hash":"0903019fe6b48549cb375e9530932ba6c6eb0669","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"4dc6607e961019099747de42371874984f491d34","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":271,"deletions":154}}},{"hash":"feac2eba82d98569abad8200f3a3ee1938c499b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b33ef21191a86bb9bff15b575314004c8032055b","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":4}}},{"hash":"ad4fad2bf87cff1e751c31580b1eda90d1ac412f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"a012079457ec6a62ba602e61578a9ca369280c37","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8c663923ab024d95ac8987696e0a56520d2cfa77","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"f89bc9e4d16b0fa4bfdee4b29220e29477e07673","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":276,"deletions":35}}},{"hash":"2b6b417023b4f628c3db9c0f78ac9a181f81f4a9","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f188576900bdd0fedd832c36a307dc2d5b79a57c","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":281,"deletions":5}}},{"hash":"547163c5a68667cec6ff91c31e2b3a78eeceb629","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":11}}},{"hash":"da37e354426033345588309422093cf44e28da4b","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":9}}},{"hash":"f31aa9e3e37434d6641be8eaf367bfd193dbbcd6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"43166a08c4ea7245a055595dcb917c1a32ca31f9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"9ddc3bc28039c76e17af6ffae896d00bb44911aa","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"841600fd57625b1c49041e6c1ec5278f19badb88","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":34,"deletions":24}}}]},{"date":"2023-09-05","commitResults":[{"hash":"dd88e7e95f4d4c22c0a083dd428554dedaca7164","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":6,"deletions":4}}}]},{"date":"2023-09-07","commitResults":[{"hash":"1530d3393fd8877720941b3120128ee3a163f95e","isMergeCommit":false,"messageTitle":"Level-10: Created GUI for Duke","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":26,"deletions":2},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":284,"deletions":140}}},{"hash":"c3c5a70c5de37ca43d3871dbfaa18ebbeda9630e","isMergeCommit":false,"messageTitle":"put the new classes into duke package","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":101,"deletions":119},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3e95a2e24bb583041e3eb235fd6aa4d5595fd1e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7530f8a1e506dbe2d767259e7080fb89feda49a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/qyaner/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"0427a43a12d48c5a24f22e0579053f22b972e76f","isMergeCommit":false,"messageTitle":"update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":23}}}]},{"date":"2023-09-09","commitResults":[{"hash":"2fb28fe1add2c6265e7ac3286244c80abb6ea5f2","isMergeCommit":false,"messageTitle":"Add assertions in various classes","messageBody":"Classes have important assumptions that may not hold at various points in the code.\n\nLet\u0027s add assertions so that such assumptions can be defined and so the runtime can verify them. For example, we can check if the input is null by using assertions.\n","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"java":{"insertions":49,"deletions":16}}},{"hash":"570adbe0abeaba77b6188d5225cb721b74b87c65","isMergeCommit":false,"messageTitle":"Add and improve on javadocs for all public classes and methods","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":95,"deletions":77}}},{"hash":"fd08aa8e8daafd662fe17c1913ecfb6188440890","isMergeCommit":false,"messageTitle":"Parser class: separate parse method into shorter methods","messageBody":"Parse method was too long and may have affected code readability.\n\nLet\u0027s refactor the parse method by breaking it down into smaller methods. Each new method is responsible for parsing and executing a specific type of command.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":99}}},{"hash":"d5b1ac62bb53c149b7efc345ca74c6b6be8c8c40","isMergeCommit":true,"messageTitle":"Merge pull request #1 from qyaner/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"f951af3c71c023bee841257676b4276234a3e81c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b3bd4fbfba40c75bdefce6ce2811adc2ff4a7a63","isMergeCommit":true,"messageTitle":"Merge pull request #2 from qyaner/branch-A-Assertions","messageBody":"Add assertions in various classes","fileTypesAndContributionMap":{}},{"hash":"b97066c775a8dd2f11b7abea4ebc21b8becb5ea6","isMergeCommit":false,"messageTitle":"Parser class: Add javadocs to new methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":0}}}]},{"date":"2023-09-14","commitResults":[{"hash":"a699d53f74040a4b10594ca09a82d5e67e12ad11","isMergeCommit":false,"messageTitle":"TaskList class: Implement duplicate task detection in add method","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}},{"hash":"90efc1ff141dc4fabcfd431450a537c405bd8b01","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-extensions\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"2282aff29ef577062175c3e8915f4d65f1d955a9","isMergeCommit":false,"messageTitle":"ParserTest class: Update to test the changed Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":91}}}]}]},"authorFileTypeContributionMap":{"qyaner":{"java":1409,"md":33,"fxml":38,"sh":0,"bat":1,"gradle":29,"txt":7}},"authorContributionVariance":{"qyaner":45603.254},"authorDisplayNameMap":{"qyaner":"CS2103T-W10-3 QIN ..N ER"}} +{"authorDailyContributionsMap":{"qyaner":[{"date":"2023-08-21","commitResults":[{"hash":"9ec188fac089cbd0366fbb357dfc70d749cfee25","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"417325bea777318782ecea57e903e2ede321ccb4","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"4befd1a43875c839dbb6c1cecd18c54b7695f02e","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"8ccbfbf489574f5005559d4e7f5f891894d9fadf","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":9}}}]},{"date":"2023-08-22","commitResults":[{"hash":"98679731711bf025f6af5740288c991e98898f48","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":8}}},{"hash":"c7b85de3b1d45185486b40264b549c4fadfc64f0","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":38}}},{"hash":"7c5c5b69e3a5c95013d54d7e5d1f0933cd052430","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":23}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e48535d573c09c335f51802042c85e2bf7a9d564","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":7,"deletions":6}}},{"hash":"d1bdd434393f3fa6e84a6bdddf7985f9433d5e5b","isMergeCommit":false,"messageTitle":"separated classes into different files and added some comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":99}}}]},{"date":"2023-08-26","commitResults":[{"hash":"928ec51b25ea85c608c0a53c6f10f0bfdc312f04","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":2}}},{"hash":"8018e33d08126269be167d5e3833fc15448d9482","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"f96880eeeaf62afefe3edb7ecf8ee2c065528ed4","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":1}}},{"hash":"0903019fe6b48549cb375e9530932ba6c6eb0669","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"4dc6607e961019099747de42371874984f491d34","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":271,"deletions":154}}},{"hash":"feac2eba82d98569abad8200f3a3ee1938c499b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b33ef21191a86bb9bff15b575314004c8032055b","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":4}}},{"hash":"ad4fad2bf87cff1e751c31580b1eda90d1ac412f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"a012079457ec6a62ba602e61578a9ca369280c37","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8c663923ab024d95ac8987696e0a56520d2cfa77","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"f89bc9e4d16b0fa4bfdee4b29220e29477e07673","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":276,"deletions":35}}},{"hash":"2b6b417023b4f628c3db9c0f78ac9a181f81f4a9","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f188576900bdd0fedd832c36a307dc2d5b79a57c","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":281,"deletions":5}}},{"hash":"547163c5a68667cec6ff91c31e2b3a78eeceb629","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":11}}},{"hash":"da37e354426033345588309422093cf44e28da4b","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":9}}},{"hash":"f31aa9e3e37434d6641be8eaf367bfd193dbbcd6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"43166a08c4ea7245a055595dcb917c1a32ca31f9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"9ddc3bc28039c76e17af6ffae896d00bb44911aa","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"841600fd57625b1c49041e6c1ec5278f19badb88","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":34,"deletions":24}}}]},{"date":"2023-09-05","commitResults":[{"hash":"dd88e7e95f4d4c22c0a083dd428554dedaca7164","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":6,"deletions":4}}}]},{"date":"2023-09-07","commitResults":[{"hash":"1530d3393fd8877720941b3120128ee3a163f95e","isMergeCommit":false,"messageTitle":"Level-10: Created GUI for Duke","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":26,"deletions":2},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":284,"deletions":140}}},{"hash":"c3c5a70c5de37ca43d3871dbfaa18ebbeda9630e","isMergeCommit":false,"messageTitle":"put the new classes into duke package","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":101,"deletions":119},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3e95a2e24bb583041e3eb235fd6aa4d5595fd1e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7530f8a1e506dbe2d767259e7080fb89feda49a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/qyaner/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"0427a43a12d48c5a24f22e0579053f22b972e76f","isMergeCommit":false,"messageTitle":"update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":23}}}]},{"date":"2023-09-09","commitResults":[{"hash":"2fb28fe1add2c6265e7ac3286244c80abb6ea5f2","isMergeCommit":false,"messageTitle":"Add assertions in various classes","messageBody":"Classes have important assumptions that may not hold at various points in the code.\n\nLet\u0027s add assertions so that such assumptions can be defined and so the runtime can verify them. For example, we can check if the input is null by using assertions.\n","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"java":{"insertions":49,"deletions":16}}},{"hash":"570adbe0abeaba77b6188d5225cb721b74b87c65","isMergeCommit":false,"messageTitle":"Add and improve on javadocs for all public classes and methods","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":95,"deletions":77}}},{"hash":"fd08aa8e8daafd662fe17c1913ecfb6188440890","isMergeCommit":false,"messageTitle":"Parser class: separate parse method into shorter methods","messageBody":"Parse method was too long and may have affected code readability.\n\nLet\u0027s refactor the parse method by breaking it down into smaller methods. Each new method is responsible for parsing and executing a specific type of command.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":99}}},{"hash":"d5b1ac62bb53c149b7efc345ca74c6b6be8c8c40","isMergeCommit":true,"messageTitle":"Merge pull request #1 from qyaner/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"f951af3c71c023bee841257676b4276234a3e81c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b3bd4fbfba40c75bdefce6ce2811adc2ff4a7a63","isMergeCommit":true,"messageTitle":"Merge pull request #2 from qyaner/branch-A-Assertions","messageBody":"Add assertions in various classes","fileTypesAndContributionMap":{}},{"hash":"b97066c775a8dd2f11b7abea4ebc21b8becb5ea6","isMergeCommit":false,"messageTitle":"Parser class: Add javadocs to new methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":0}}}]},{"date":"2023-09-14","commitResults":[{"hash":"a699d53f74040a4b10594ca09a82d5e67e12ad11","isMergeCommit":false,"messageTitle":"TaskList class: Implement duplicate task detection in add method","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}},{"hash":"90efc1ff141dc4fabcfd431450a537c405bd8b01","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-extensions\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"2282aff29ef577062175c3e8915f4d65f1d955a9","isMergeCommit":false,"messageTitle":"ParserTest class: Update to test the changed Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":91}}}]},{"date":"2023-09-16","commitResults":[{"hash":"92fef703968ad3ec624a12aca1d773d89e8a5692","isMergeCommit":false,"messageTitle":"Add Ui.png","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"fe32087c4475366d5e2f476f580f0c4c909a81aa","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":92,"deletions":5}}},{"hash":"19a5fc0f28343b08d3535d823fe39e9f2c1aaf09","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":0,"deletions":18}}}]}]},"authorFileTypeContributionMap":{"qyaner":{"java":1409,"md":117,"fxml":38,"sh":0,"bat":1,"gradle":29,"txt":7}},"authorContributionVariance":{"qyaner":44083.582},"authorDisplayNameMap":{"qyaner":"CS2103T-W10-3 QIN ..N ER"}} diff --git a/reposense-logs/reposense.log.0 b/reposense-logs/reposense.log.0 index 6868d9c3..a1838b58 100644 --- a/reposense-logs/reposense.log.0 +++ b/reposense-logs/reposense.log.0 @@ -1,66 +1,66 @@ -Sep 16, 2023 3:08:16 AM reposense.system.LogsManager addFileHandler +Sep 16, 2023 1:56:05 PM reposense.system.LogsManager addFileHandler INFO: Log temp folder has been successfully created -Sep 16, 2023 3:08:16 AM reposense.parser.CsvParser validateHeader +Sep 16, 2023 1:56:06 PM 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 16, 2023 3:08:17 AM reposense.parser.CsvParser validateHeader +Sep 16, 2023 1:56:07 PM 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 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias scarletblanks found. The alias will belong to the last author - ScarletBlanks -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kb-tay found. The alias will belong to the last author - Kb-Tay -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias ryam found. The alias will belong to the last author - ryamgoh -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jason found. The alias will belong to the last author - jason-raiin -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias h1410101 found. The alias will belong to the last author - H1410101 -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shashahchk found. The alias will belong to the last author - shashahchk -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yucongkoo found. The alias will belong to the last author - yucongkoo -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kokseng1 found. The alias will belong to the last author - Kokseng1 -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias vanessamae23 found. The alias will belong to the last author - Vanessamae23 -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias singa-pirate found. The alias will belong to the last author - Singa-pirate -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kurt found. The alias will belong to the last author - Kurtyjlee -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nicholastng010601 found. The alias will belong to the last author - nicholastng010601 -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias weiennn found. The alias will belong to the last author - Weiennn -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias adammangzijun found. The alias will belong to the last author - adammangzijun -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias scarletblanks found. The alias will belong to the last author - ScarletBlanks -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kb-tay found. The alias will belong to the last author - Kb-Tay -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias ryam found. The alias will belong to the last author - ryamgoh -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jason found. The alias will belong to the last author - jason-raiin -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias h1410101 found. The alias will belong to the last author - H1410101 -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shashahchk found. The alias will belong to the last author - shashahchk -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yucongkoo found. The alias will belong to the last author - yucongkoo -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kokseng1 found. The alias will belong to the last author - Kokseng1 -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias vanessamae23 found. The alias will belong to the last author - Vanessamae23 -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias singa-pirate found. The alias will belong to the last author - Singa-pirate -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kurt found. The alias will belong to the last author - Kurtyjlee -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nicholastng010601 found. The alias will belong to the last author - nicholastng010601 -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias weiennn found. The alias will belong to the last author - Weiennn -Sep 16, 2023 3:08:17 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Sep 16, 2023 1:56:07 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias adammangzijun found. The alias will belong to the last author - adammangzijun -Sep 16, 2023 3:08:17 AM reposense.git.GitConfig getGlobalGitLfsConfig +Sep 16, 2023 1:56:07 PM 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 16, 2023 3:08:17 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/siqirua/ip.git... -Sep 16, 2023 3:08:17 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/emzm2023/ip.git... -Sep 16, 2023 3:08:17 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/thaddeusong/ip.git... -Sep 16, 2023 3:08:17 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/CJ-Lee01/ip.git... -Sep 16, 2023 3:08:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/emzm2023/ip.git to complete... -Sep 16, 2023 3:08:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/thaddeusong/ip.git... +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/siqirua/ip.git to complete... -Sep 16, 2023 3:08:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/thaddeusong/ip.git to complete... -Sep 16, 2023 3:08:17 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/CJ-Lee01/ip.git to complete... -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/emzm2023/ip.git completed! -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/emzm2023/ip.git to complete... +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/siqirua/ip.git completed! +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanteckfang/ip.git... -Sep 16, 2023 3:08:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [1/480] Analyzing https://github.com/emzm2023/ip.git (master)... -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.ReportGenerator analyzeRepos +INFO: [1/480] Analyzing https://github.com/siqirua/ip.git (master)... +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanteckfang/ip.git to complete... -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/thaddeusong/ip.git completed! -Sep 16, 2023 3:08:18 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/emzm2023/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/siqirua/ip.git completed! -Sep 16, 2023 3:08:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/emzm2023/ip.git (master)... -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/emzm2023/ip.git completed! +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ph-nathan/ip.git... -Sep 16, 2023 3:08:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [2/480] Analyzing https://github.com/siqirua/ip.git (master)... -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.ReportGenerator analyzeRepos +INFO: [2/480] Analyzing https://github.com/emzm2023/ip.git (master)... +Sep 16, 2023 1:56:07 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/siqirua/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/thaddeusong/ip.git completed! +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ph-nathan/ip.git to complete... -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/butteredyakiimo/ip.git... -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/CJ-Lee01/ip.git completed! -Sep 16, 2023 3:08:18 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/siqirua/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/butteredyakiimo/ip.git... +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/butteredyakiimo/ip.git to complete... -Sep 16, 2023 3:08:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:56:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/siqirua/ip.git (master)... -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/emzm2023/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/emzm2023/ip.git (master)... +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yuxunn/ip.git... -Sep 16, 2023 3:08:18 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:07 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yuxunn/ip.git to complete... -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tanteckfang/ip.git completed! -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/RB9823/ip.git... -Sep 16, 2023 3:08:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/emzm2023/ip.git (master)... -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/RB9823/ip.git to complete... -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ph-nathan/ip.git completed! -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/TyrusLye/ip.git... -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yuxunn/ip.git completed! -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/TyrusLye/ip.git to complete... -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cxo05/ip.git... -Sep 16, 2023 3:08:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/emzm2023/ip.git (master)... -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/butteredyakiimo/ip.git completed! -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cxo05/ip.git... +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/cxo05/ip.git to complete... -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/shyanyong/ip.git... -Sep 16, 2023 3:08:19 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/shyanyong/ip.git to complete... -Sep 16, 2023 3:08:19 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/emzm2023/ip.git (master) completed! -Sep 16, 2023 3:08:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [3/480] Analyzing https://github.com/thaddeusong/ip.git (master)... -Sep 16, 2023 3:08:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/thaddeusong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/thaddeusong/ip.git (master)... -Sep 16, 2023 3:08:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/siqirua/ip.git (master)... -Sep 16, 2023 3:08:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/siqirua/ip.git (master)... -Sep 16, 2023 3:08:19 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/siqirua/ip.git (master) completed! -Sep 16, 2023 3:08:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [4/480] Analyzing https://github.com/CJ-Lee01/ip.git (master)... -Sep 16, 2023 3:08:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/CJ-Lee01/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/CJ-Lee01/ip.git (master)... -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/RB9823/ip.git completed! -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/TyrusLye/ip.git completed! -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/howenc/ip.git... -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kurtyjlee/ip.git... -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/howenc/ip.git to complete... -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Kurtyjlee/ip.git to complete... -Sep 16, 2023 3:08:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/thaddeusong/ip.git (master)... -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cxo05/ip.git completed! -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/howenc/ip.git to complete... +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/shyanyong/ip.git completed! -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/josepholim/ip.git... -Sep 16, 2023 3:08:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/thaddeusong/ip.git (master)... -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/josepholim/ip.git to complete... -Sep 16, 2023 3:08:20 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/thaddeusong/ip.git (master) completed! -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cxo05/ip.git completed! +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/geoffong11/ip.git... -Sep 16, 2023 3:08:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [5/480] Analyzing https://github.com/tanteckfang/ip.git (master)... -Sep 16, 2023 3:08:20 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:08 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/geoffong11/ip.git to complete... -Sep 16, 2023 3:08:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanteckfang/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanteckfang/ip.git (master)... -Sep 16, 2023 3:08:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/CJ-Lee01/ip.git (master)... -Sep 16, 2023 3:08:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/CJ-Lee01/ip.git (master)... -Sep 16, 2023 3:08:20 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/CJ-Lee01/ip.git (master) completed! -Sep 16, 2023 3:08:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [6/480] Analyzing https://github.com/ph-nathan/ip.git (master)... -Sep 16, 2023 3:08:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ph-nathan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ph-nathan/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanteckfang/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ph-nathan/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanteckfang/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ph-nathan/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanteckfang/ip.git (master) completed! -Sep 16, 2023 3:08:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [7/480] Analyzing https://github.com/yuxunn/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ph-nathan/ip.git (master) completed! -Sep 16, 2023 3:08:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [8/480] Analyzing https://github.com/butteredyakiimo/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Kurtyjlee/ip.git completed! -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jianrong7/ip.git... -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jianrong7/ip.git to complete... -Sep 16, 2023 3:08:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yuxunn/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yuxunn/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/howenc/ip.git completed! -Sep 16, 2023 3:08:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/butteredyakiimo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/butteredyakiimo/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/josepholim/ip.git completed! -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/howenc/ip.git completed! +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/A1WAYSD/ip.git... -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/NgChunMan/ip.git... -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/A1WAYSD/ip.git to complete... -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/geoffong11/ip.git completed! -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/NgChunMan/ip.git to complete... -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/limjunxian1/ip.git... -Sep 16, 2023 3:08:21 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/A1WAYSD/ip.git to complete... +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/limjunxian1/ip.git to complete... -Sep 16, 2023 3:08:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yuxunn/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yuxunn/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yuxunn/ip.git (master) completed! -Sep 16, 2023 3:08:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [9/480] Analyzing https://github.com/TyrusLye/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TyrusLye/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TyrusLye/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TyrusLye/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TyrusLye/ip.git (master)... -Sep 16, 2023 3:08:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TyrusLye/ip.git (master) completed! -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [10/480] Analyzing https://github.com/RB9823/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RB9823/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RB9823/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/butteredyakiimo/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/butteredyakiimo/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jianrong7/ip.git completed! -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jack1e0/ip.git... -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/emzm2023/ip.git (master)... +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jack1e0/ip.git to complete... -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/butteredyakiimo/ip.git (master) completed! -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [11/480] Analyzing https://github.com/cxo05/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/A1WAYSD/ip.git completed! -Sep 16, 2023 3:08:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RB9823/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/hjoneweek/ip.git... -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/hjoneweek/ip.git to complete... -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/cxo05/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/cxo05/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RB9823/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RB9823/ip.git (master) completed! -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [12/480] Analyzing https://github.com/shyanyong/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/NgChunMan/ip.git completed! -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dishenggg/ip.git... -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/hjoneweek/ip.git... +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/limjunxian1/ip.git completed! -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shyanyong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shyanyong/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/emzm2023/ip.git (master)... +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dishenggg/ip.git... +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/hjoneweek/ip.git to complete... +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dishenggg/ip.git to complete... -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zhyuhan/ip.git... -Sep 16, 2023 3:08:22 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zhyuhan/ip.git to complete... -Sep 16, 2023 3:08:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shyanyong/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shyanyong/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shyanyong/ip.git (master) completed! -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [13/480] Analyzing https://github.com/Kurtyjlee/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/cxo05/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Kurtyjlee/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Kurtyjlee/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/cxo05/ip.git (master)... -Sep 16, 2023 3:08:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/cxo05/ip.git (master) completed! -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [14/480] Analyzing https://github.com/howenc/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/howenc/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/howenc/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/siqirua/ip.git (master)... +Sep 16, 2023 1:56:09 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/emzm2023/ip.git (master) completed! +Sep 16, 2023 1:56:09 PM reposense.report.ReportGenerator analyzeRepos +INFO: [3/480] Analyzing https://github.com/thaddeusong/ip.git (master)... +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jack1e0/ip.git completed! -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/hjoneweek/ip.git completed! -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/siqirua/ip.git (master)... +Sep 16, 2023 1:56:09 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Dioclei/ip.git... -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:09 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/thaddeusong/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/thaddeusong/ip.git (master)... +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Dioclei/ip.git to complete... +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/hjoneweek/ip.git completed! +Sep 16, 2023 1:56:10 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/siqirua/ip.git (master) completed! +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Daphne789/ip.git... -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.ReportGenerator analyzeRepos +INFO: [4/480] Analyzing https://github.com/CJ-Lee01/ip.git (master)... +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Daphne789/ip.git to complete... -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Dioclei/ip.git to complete... -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dishenggg/ip.git completed! -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WinstonLeonard/ip.git... -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WinstonLeonard/ip.git to complete... -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/zhyuhan/ip.git completed! -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/CJ-Lee01/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/CJ-Lee01/ip.git (master)... +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WinstonLeonard/ip.git... +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/peiran18/ip.git... -Sep 16, 2023 3:08:23 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/peiran18/ip.git to complete... -Sep 16, 2023 3:08:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Kurtyjlee/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Kurtyjlee/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kurtyjlee/ip.git (master) completed! -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [15/480] Analyzing https://github.com/josepholim/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/josepholim/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/josepholim/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/howenc/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/howenc/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/howenc/ip.git (master) completed! -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [16/480] Analyzing https://github.com/geoffong11/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/geoffong11/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/geoffong11/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/josepholim/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/josepholim/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/josepholim/ip.git (master) completed! -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [17/480] Analyzing https://github.com/jianrong7/ip.git (master)... -Sep 16, 2023 3:08:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jianrong7/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jianrong7/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/geoffong11/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/geoffong11/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/geoffong11/ip.git (master) completed! -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [18/480] Analyzing https://github.com/A1WAYSD/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WinstonLeonard/ip.git to complete... +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Dioclei/ip.git completed! +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Daphne789/ip.git completed! -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AriellaCallista/ip.git... -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Dioclei/ip.git completed! -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AriellaCallista/ip.git to complete... -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/A1WAYSD/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/A1WAYSD/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/migfoo02/ip.git... -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WinstonLeonard/ip.git completed! -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Jonyxzx/ip.git... -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AriellaCallista/ip.git to complete... +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/migfoo02/ip.git to complete... -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Jonyxzx/ip.git to complete... -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/peiran18/ip.git completed! -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WinstonLeonard/ip.git completed! +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Jonyxzx/ip.git... +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SynapseProgramming/ip.git... -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SynapseProgramming/ip.git to complete... -Sep 16, 2023 3:08:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jianrong7/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jianrong7/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jianrong7/ip.git (master) completed! -Sep 16, 2023 3:08:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/A1WAYSD/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [19/480] Analyzing https://github.com/NgChunMan/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/A1WAYSD/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/NgChunMan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/NgChunMan/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/A1WAYSD/ip.git (master) completed! -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [20/480] Analyzing https://github.com/limjunxian1/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/limjunxian1/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/limjunxian1/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/limjunxian1/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/limjunxian1/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/limjunxian1/ip.git (master) completed! -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [21/480] Analyzing https://github.com/jack1e0/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AriellaCallista/ip.git completed! -Sep 16, 2023 3:08:24 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jack1e0/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jack1e0/ip.git (master)... -Sep 16, 2023 3:08:24 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Darren159/ip.git... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Jonyxzx/ip.git to complete... +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/migfoo02/ip.git completed! -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Darren159/ip.git... +Sep 16, 2023 1:56:10 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Darren159/ip.git to complete... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/thaddeusong/ip.git (master)... +Sep 16, 2023 1:56:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/thaddeusong/ip.git (master)... +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Jonyxzx/ip.git completed! +Sep 16, 2023 1:56:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/CJ-Lee01/ip.git (master)... +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/imkwokyong/ip.git... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/thaddeusong/ip.git (master) completed! +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SynapseProgramming/ip.git completed! +Sep 16, 2023 1:56:11 PM reposense.report.ReportGenerator analyzeRepos +INFO: [5/480] Analyzing https://github.com/tanteckfang/ip.git (master)... +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AriellaCallista/ip.git completed! +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/imkwokyong/ip.git to complete... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Jonyxzx/ip.git completed! -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/joeng03/ip.git... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/joeng03/ip.git to complete... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SynapseProgramming/ip.git completed! -Sep 16, 2023 3:08:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/NgChunMan/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/vijay-shankaranand/ip.git... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/CJ-Lee01/ip.git (master)... +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/vijay-shankaranand/ip.git to complete... -Sep 16, 2023 3:08:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/NgChunMan/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/NgChunMan/ip.git (master) completed! -Sep 16, 2023 3:08:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [22/480] Analyzing https://github.com/hjoneweek/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/hjoneweek/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/hjoneweek/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jack1e0/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jack1e0/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jack1e0/ip.git (master) completed! -Sep 16, 2023 3:08:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [23/480] Analyzing https://github.com/dishenggg/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dishenggg/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dishenggg/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/hjoneweek/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/hjoneweek/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/hjoneweek/ip.git (master) completed! -Sep 16, 2023 3:08:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [24/480] Analyzing https://github.com/zhyuhan/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zhyuhan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zhyuhan/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanteckfang/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanteckfang/ip.git (master)... +Sep 16, 2023 1:56:11 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/CJ-Lee01/ip.git (master) completed! +Sep 16, 2023 1:56:11 PM reposense.report.ReportGenerator analyzeRepos +INFO: [6/480] Analyzing https://github.com/ph-nathan/ip.git (master)... +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/joeng03/ip.git to complete... +Sep 16, 2023 1:56:11 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ph-nathan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ph-nathan/ip.git (master)... +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Darren159/ip.git completed! -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/joeng03/ip.git completed! -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/SelwynAng/ip.git... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jeffrey-jian/ip.git... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/SelwynAng/ip.git to complete... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/joeng03/ip.git completed! +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/imkwokyong/ip.git completed! -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jeffrey-jian/ip.git to complete... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jeffrey-jian/ip.git... +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanyyyming/ip.git... -Sep 16, 2023 3:08:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dishenggg/ip.git (master)... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tanyyyming/ip.git to complete... -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jeffrey-jian/ip.git to complete... +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/vijay-shankaranand/ip.git completed! -Sep 16, 2023 3:08:25 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tanyyyming/ip.git to complete... +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/JCSnap/ip.git... -Sep 16, 2023 3:08:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dishenggg/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dishenggg/ip.git (master) completed! -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/JCSnap/ip.git to complete... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [25/480] Analyzing https://github.com/Daphne789/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Daphne789/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Daphne789/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zhyuhan/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zhyuhan/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zhyuhan/ip.git (master) completed! -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [26/480] Analyzing https://github.com/Dioclei/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Dioclei/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Dioclei/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Daphne789/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Daphne789/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Daphne789/ip.git (master) completed! -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [27/480] Analyzing https://github.com/WinstonLeonard/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WinstonLeonard/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WinstonLeonard/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Dioclei/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Dioclei/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Dioclei/ip.git (master) completed! -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [28/480] Analyzing https://github.com/peiran18/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/peiran18/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/peiran18/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/SelwynAng/ip.git completed! -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AprupKale/ip.git... -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AprupKale/ip.git to complete... -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanyyyming/ip.git completed! -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jeffrey-jian/ip.git completed! -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JCSnap/ip.git completed! -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanyyyming/ip.git completed! +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/woojiahao/ip.git... -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/PetrichorPrecipice/ip.git... -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/woojiahao/ip.git to complete... -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/PetrichorPrecipice/ip.git... +Sep 16, 2023 1:56:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanteckfang/ip.git (master)... +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/PetrichorPrecipice/ip.git to complete... -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JCSnap/ip.git completed! +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/syamfarh/ip.git... -Sep 16, 2023 3:08:26 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanteckfang/ip.git (master)... +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/syamfarh/ip.git to complete... -Sep 16, 2023 3:08:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WinstonLeonard/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/peiran18/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/WinstonLeonard/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/WinstonLeonard/ip.git (master) completed! -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [29/480] Analyzing https://github.com/AriellaCallista/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/peiran18/ip.git (master)... -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/peiran18/ip.git (master) completed! -Sep 16, 2023 3:08:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [30/480] Analyzing https://github.com/migfoo02/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AriellaCallista/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AriellaCallista/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/migfoo02/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/migfoo02/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/migfoo02/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/migfoo02/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/migfoo02/ip.git (master) completed! -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [31/480] Analyzing https://github.com/Jonyxzx/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Jonyxzx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Jonyxzx/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AriellaCallista/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AriellaCallista/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AriellaCallista/ip.git (master) completed! -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [32/480] Analyzing https://github.com/SynapseProgramming/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SynapseProgramming/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SynapseProgramming/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ph-nathan/ip.git (master)... +Sep 16, 2023 1:56:12 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanteckfang/ip.git (master) completed! +Sep 16, 2023 1:56:12 PM reposense.report.ReportGenerator analyzeRepos +INFO: [7/480] Analyzing https://github.com/yuxunn/ip.git (master)... +Sep 16, 2023 1:56:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ph-nathan/ip.git (master)... +Sep 16, 2023 1:56:12 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ph-nathan/ip.git (master) completed! +Sep 16, 2023 1:56:12 PM reposense.report.ReportGenerator analyzeRepos +INFO: [8/480] Analyzing https://github.com/butteredyakiimo/ip.git (master)... +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AprupKale/ip.git completed! -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yuxunn/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yuxunn/ip.git (master)... +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/D-Limiter/ip.git... -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/D-Limiter/ip.git to complete... -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/PetrichorPrecipice/ip.git completed! -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/syamfarh/ip.git completed! -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/butteredyakiimo/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/butteredyakiimo/ip.git (master)... +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/woojiahao/ip.git completed! -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/coderhuang559/ip.git... -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LINCHENYU2030S/ip.git... -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/coderhuang559/ip.git to complete... -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/syamfarh/ip.git completed! +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/PetrichorPrecipice/ip.git completed! +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LINCHENYU2030S/ip.git... +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/pra-navi/ip.git... -Sep 16, 2023 3:08:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Jonyxzx/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/pra-navi/ip.git to complete... -Sep 16, 2023 3:08:27 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LINCHENYU2030S/ip.git to complete... -Sep 16, 2023 3:08:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Jonyxzx/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Jonyxzx/ip.git (master) completed! -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [33/480] Analyzing https://github.com/Darren159/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Darren159/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Darren159/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SynapseProgramming/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SynapseProgramming/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SynapseProgramming/ip.git (master) completed! -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [34/480] Analyzing https://github.com/joeng03/ip.git (master)... -Sep 16, 2023 3:08:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/joeng03/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/joeng03/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/joeng03/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Darren159/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/joeng03/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/joeng03/ip.git (master) completed! -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [35/480] Analyzing https://github.com/imkwokyong/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Darren159/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Darren159/ip.git (master) completed! -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [36/480] Analyzing https://github.com/vijay-shankaranand/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/imkwokyong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/imkwokyong/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/vijay-shankaranand/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/vijay-shankaranand/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/D-Limiter/ip.git completed! -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/phiphi-tan/ip.git... -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/phiphi-tan/ip.git to complete... -Sep 16, 2023 3:08:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/vijay-shankaranand/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/vijay-shankaranand/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/vijay-shankaranand/ip.git (master) completed! -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [37/480] Analyzing https://github.com/SelwynAng/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:12 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/pra-navi/ip.git completed! +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LINCHENYU2030S/ip.git completed! -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ktzy0305/ip.git... -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ktzy0305/ip.git to complete... -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/pra-navi/ip.git completed! -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SelwynAng/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SelwynAng/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LordSaumya/ip.git... -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LordSaumya/ip.git to complete... -Sep 16, 2023 3:08:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/imkwokyong/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/imkwokyong/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/imkwokyong/ip.git (master) completed! -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [38/480] Analyzing https://github.com/jeffrey-jian/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/coderhuang559/ip.git completed! -Sep 16, 2023 3:08:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jeffrey-jian/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jeffrey-jian/ip.git (master)... -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LordSaumya/ip.git to complete... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/phiphi-tan/ip.git completed! +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Chen1x/ip.git... -Sep 16, 2023 3:08:28 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Chen1x/ip.git to complete... -Sep 16, 2023 3:08:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SelwynAng/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SelwynAng/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SelwynAng/ip.git (master) completed! -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [39/480] Analyzing https://github.com/tanyyyming/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jeffrey-jian/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanyyyming/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanyyyming/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jeffrey-jian/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jeffrey-jian/ip.git (master) completed! -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [40/480] Analyzing https://github.com/JCSnap/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/JCSnap/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/JCSnap/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/phiphi-tan/ip.git completed! -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yanghengtang/ip.git... -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yanghengtang/ip.git to complete... -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yuxunn/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yuxunn/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yuxunn/ip.git (master) completed! +Sep 16, 2023 1:56:13 PM reposense.report.ReportGenerator analyzeRepos +INFO: [9/480] Analyzing https://github.com/RB9823/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RB9823/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RB9823/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ktzy0305/ip.git completed! -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/johnnythesnake12/ip.git... -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/johnnythesnake12/ip.git to complete... -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chen1x/ip.git completed! -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LordSaumya/ip.git completed! -Sep 16, 2023 3:08:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JCSnap/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chen1x/ip.git completed! +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/johnnythesnake12/ip.git... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/oeggy03/ip.git... -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/p-xp/ip.git... -Sep 16, 2023 3:08:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/JCSnap/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/JCSnap/ip.git (master) completed! -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [41/480] Analyzing https://github.com/AprupKale/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/p-xp/ip.git to complete... -Sep 16, 2023 3:08:29 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/oeggy03/ip.git to complete... -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AprupKale/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AprupKale/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanyyyming/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanyyyming/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanyyyming/ip.git (master) completed! -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [42/480] Analyzing https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/PetrichorPrecipice/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AprupKale/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AprupKale/ip.git (master)... -Sep 16, 2023 3:08:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AprupKale/ip.git (master) completed! -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [43/480] Analyzing https://github.com/syamfarh/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/syamfarh/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/syamfarh/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/johnnythesnake12/ip.git to complete... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/p-xp/ip.git... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yanghengtang/ip.git completed! -Sep 16, 2023 3:08:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/p-xp/ip.git to complete... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/matochichap/ip.git... -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/matochichap/ip.git to complete... -Sep 16, 2023 3:08:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/PetrichorPrecipice/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/PetrichorPrecipice/ip.git (master) completed! -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [44/480] Analyzing https://github.com/woojiahao/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/woojiahao/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/woojiahao/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RB9823/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RB9823/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RB9823/ip.git (master) completed! +Sep 16, 2023 1:56:13 PM reposense.report.ReportGenerator analyzeRepos +INFO: [10/480] Analyzing https://github.com/TyrusLye/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/johnnythesnake12/ip.git completed! -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/applepiofmyeye/ip.git... -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TyrusLye/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TyrusLye/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/butteredyakiimo/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/applepiofmyeye/ip.git to complete... -Sep 16, 2023 3:08:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/syamfarh/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/oeggy03/ip.git completed! -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/p-xp/ip.git completed! -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/TiwKangXu/ip.git... -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/p-xp/ip.git completed! +Sep 16, 2023 1:56:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/butteredyakiimo/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/TiwKangXu/ip.git to complete... -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ScarletBlanks/ip.git... -Sep 16, 2023 3:08:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/syamfarh/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/syamfarh/ip.git (master) completed! -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [45/480] Analyzing https://github.com/D-Limiter/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ScarletBlanks/ip.git to complete... -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/D-Limiter/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/D-Limiter/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/woojiahao/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/woojiahao/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/D-Limiter/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/D-Limiter/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/D-Limiter/ip.git (master) completed! -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [46/480] Analyzing https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/woojiahao/ip.git (master) completed! -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [47/480] Analyzing https://github.com/pra-navi/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LINCHENYU2030S/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/pra-navi/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/pra-navi/ip.git (master)... -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/matochichap/ip.git completed! -Sep 16, 2023 3:08:30 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ScarletBlanks/ip.git... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/chiayunrong/ip.git... -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:13 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/butteredyakiimo/ip.git (master) completed! +Sep 16, 2023 1:56:13 PM reposense.report.ReportGenerator analyzeRepos +INFO: [11/480] Analyzing https://github.com/shyanyong/ip.git (master)... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ScarletBlanks/ip.git to complete... +Sep 16, 2023 1:56:13 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/chiayunrong/ip.git to complete... -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shyanyong/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shyanyong/ip.git (master)... +Sep 16, 2023 1:56:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TyrusLye/ip.git (master)... +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/applepiofmyeye/ip.git completed! -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/devanshubisht/ip.git... -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/devanshubisht/ip.git to complete... -Sep 16, 2023 3:08:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ScarletBlanks/ip.git completed! -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/TiwKangXu/ip.git completed! -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TyrusLye/ip.git (master)... +Sep 16, 2023 1:56:14 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TyrusLye/ip.git (master) completed! +Sep 16, 2023 1:56:14 PM reposense.report.ReportGenerator analyzeRepos +INFO: [12/480] Analyzing https://github.com/cxo05/ip.git (master)... +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/devanshubisht/ip.git... +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jx124/ip.git... -Sep 16, 2023 3:08:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LINCHENYU2030S/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Clin-lyx/ip.git... -Sep 16, 2023 3:08:31 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LINCHENYU2030S/ip.git (master) completed! -Sep 16, 2023 3:08:31 AM reposense.report.ReportGenerator analyzeRepos -INFO: [48/480] Analyzing https://github.com/coderhuang559/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/cxo05/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/cxo05/ip.git (master)... +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/devanshubisht/ip.git to complete... +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jx124/ip.git to complete... -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Clin-lyx/ip.git to complete... -Sep 16, 2023 3:08:31 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/coderhuang559/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/coderhuang559/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/pra-navi/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/pra-navi/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/pra-navi/ip.git (master) completed! -Sep 16, 2023 3:08:31 AM reposense.report.ReportGenerator analyzeRepos -INFO: [49/480] Analyzing https://github.com/phiphi-tan/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/phiphi-tan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/phiphi-tan/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ScarletBlanks/ip.git completed! +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chiayunrong/ip.git completed! -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Clin-lyx/ip.git... +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AryanG01/ip.git... -Sep 16, 2023 3:08:31 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Clin-lyx/ip.git to complete... +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AryanG01/ip.git to complete... -Sep 16, 2023 3:08:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/coderhuang559/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/coderhuang559/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/coderhuang559/ip.git (master) completed! -Sep 16, 2023 3:08:31 AM reposense.report.ReportGenerator analyzeRepos -INFO: [50/480] Analyzing https://github.com/ktzy0305/ip.git (master)... -Sep 16, 2023 3:08:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/phiphi-tan/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jx124/ip.git completed! +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/devanshubisht/ip.git completed! -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ktzy0305/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ktzy0305/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kayabuttertoastt/ip.git... -Sep 16, 2023 3:08:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/phiphi-tan/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/phiphi-tan/ip.git (master) completed! -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [51/480] Analyzing https://github.com/LordSaumya/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kayabuttertoastt/ip.git to complete... -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LordSaumya/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LordSaumya/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Clin-lyx/ip.git completed! -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/sheryew/ip.git... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AryanG01/ip.git completed! +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/sheryew/ip.git to complete... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jx124/ip.git completed! -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kayabuttertoastt/ip.git to complete... +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jonasongg/ip.git... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jonasongg/ip.git to complete... -Sep 16, 2023 3:08:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LordSaumya/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LordSaumya/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LordSaumya/ip.git (master) completed! -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [52/480] Analyzing https://github.com/Chen1x/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Chen1x/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Chen1x/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AryanG01/ip.git completed! -Sep 16, 2023 3:08:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Chen1x/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ktzy0305/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Clin-lyx/ip.git completed! +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/yiwen101/ip.git... -Sep 16, 2023 3:08:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Chen1x/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Chen1x/ip.git (master) completed! -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [53/480] Analyzing https://github.com/yanghengtang/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/yiwen101/ip.git to complete... -Sep 16, 2023 3:08:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ktzy0305/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ktzy0305/ip.git (master) completed! -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [54/480] Analyzing https://github.com/johnnythesnake12/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yanghengtang/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yanghengtang/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/johnnythesnake12/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/johnnythesnake12/ip.git (master)... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shyanyong/ip.git (master)... +Sep 16, 2023 1:56:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shyanyong/ip.git (master)... +Sep 16, 2023 1:56:14 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shyanyong/ip.git (master) completed! +Sep 16, 2023 1:56:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/kayabuttertoastt/ip.git completed! -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:14 PM reposense.report.ReportGenerator analyzeRepos +INFO: [13/480] Analyzing https://github.com/Kurtyjlee/ip.git (master)... +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tiongMax/ip.git... -Sep 16, 2023 3:08:32 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tiongMax/ip.git to complete... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Kurtyjlee/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Kurtyjlee/ip.git (master)... +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/sheryew/ip.git completed! -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chuababyy/ip.git... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chuababyy/ip.git to complete... -Sep 16, 2023 3:08:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/johnnythesnake12/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jonasongg/ip.git completed! -Sep 16, 2023 3:08:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/johnnythesnake12/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/johnnythesnake12/ip.git (master) completed! -Sep 16, 2023 3:08:33 AM reposense.report.ReportGenerator analyzeRepos -INFO: [55/480] Analyzing https://github.com/oeggy03/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chuababyy/ip.git... +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/supermii2/ip.git... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chuababyy/ip.git to complete... +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/supermii2/ip.git to complete... -Sep 16, 2023 3:08:33 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/oeggy03/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/oeggy03/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yanghengtang/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yanghengtang/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yanghengtang/ip.git (master) completed! -Sep 16, 2023 3:08:33 AM reposense.report.ReportGenerator analyzeRepos -INFO: [56/480] Analyzing https://github.com/p-xp/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/p-xp/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/p-xp/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/yiwen101/ip.git completed! -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/remuslum/ip.git... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/remuslum/ip.git to complete... -Sep 16, 2023 3:08:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/oeggy03/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/cxo05/ip.git (master)... +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tiongMax/ip.git completed! -Sep 16, 2023 3:08:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/oeggy03/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/oeggy03/ip.git (master) completed! -Sep 16, 2023 3:08:33 AM reposense.report.ReportGenerator analyzeRepos -INFO: [57/480] Analyzing https://github.com/matochichap/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/kanna-1/ip.git... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/cxo05/ip.git (master)... +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/kanna-1/ip.git to complete... -Sep 16, 2023 3:08:33 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/matochichap/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/matochichap/ip.git (master)... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/cxo05/ip.git (master) completed! +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/chuababyy/ip.git completed! -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.ReportGenerator analyzeRepos +INFO: [14/480] Analyzing https://github.com/josepholim/ip.git (master)... +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nicolengk/ip.git... -Sep 16, 2023 3:08:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicolengk/ip.git to complete... -Sep 16, 2023 3:08:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/p-xp/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/p-xp/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/p-xp/ip.git (master) completed! -Sep 16, 2023 3:08:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [58/480] Analyzing https://github.com/applepiofmyeye/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/applepiofmyeye/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/applepiofmyeye/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/supermii2/ip.git completed! -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicolengk/ip.git to complete... +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/newway1814/ip.git... -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/newway1814/ip.git to complete... -Sep 16, 2023 3:08:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/matochichap/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/applepiofmyeye/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/matochichap/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/matochichap/ip.git (master) completed! -Sep 16, 2023 3:08:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [59/480] Analyzing https://github.com/TiwKangXu/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/applepiofmyeye/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/applepiofmyeye/ip.git (master) completed! -Sep 16, 2023 3:08:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TiwKangXu/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TiwKangXu/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/josepholim/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/josepholim/ip.git (master)... +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/remuslum/ip.git completed! -Sep 16, 2023 3:08:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [60/480] Analyzing https://github.com/ScarletBlanks/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/glenngnng/ip.git... -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/glenngnng/ip.git to complete... -Sep 16, 2023 3:08:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ScarletBlanks/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ScarletBlanks/ip.git (master)... -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/newway1814/ip.git completed! +Sep 16, 2023 1:56:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nicolengk/ip.git completed! -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zsh-eng/ip.git... -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zsh-eng/ip.git to complete... -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/newway1814/ip.git completed! -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/mingyuanc/ip.git... -Sep 16, 2023 3:08:34 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zsh-eng/ip.git to complete... +Sep 16, 2023 1:56:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Kurtyjlee/ip.git (master)... +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/mingyuanc/ip.git to complete... -Sep 16, 2023 3:08:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ScarletBlanks/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ScarletBlanks/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ScarletBlanks/ip.git (master) completed! -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [61/480] Analyzing https://github.com/chiayunrong/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TiwKangXu/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chiayunrong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chiayunrong/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TiwKangXu/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TiwKangXu/ip.git (master) completed! -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [62/480] Analyzing https://github.com/devanshubisht/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kanna-1/ip.git completed! -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/devanshubisht/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/devanshubisht/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/glenngnng/ip.git completed! +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LamJiuFong/ip.git... -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LamJiuFong/ip.git to complete... -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/glenngnng/ip.git completed! -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/GlendaChong/ip.git... -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/GlendaChong/ip.git to complete... -Sep 16, 2023 3:08:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chiayunrong/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/devanshubisht/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/chiayunrong/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/chiayunrong/ip.git (master) completed! -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [63/480] Analyzing https://github.com/Clin-lyx/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/devanshubisht/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/devanshubisht/ip.git (master) completed! -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [64/480] Analyzing https://github.com/jx124/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jx124/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jx124/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Clin-lyx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Clin-lyx/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Kurtyjlee/ip.git (master)... +Sep 16, 2023 1:56:16 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kurtyjlee/ip.git (master) completed! +Sep 16, 2023 1:56:16 PM reposense.report.ReportGenerator analyzeRepos +INFO: [15/480] Analyzing https://github.com/howenc/ip.git (master)... +Sep 16, 2023 1:56:16 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/howenc/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/howenc/ip.git (master)... +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/zsh-eng/ip.git completed! -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mingyuanc/ip.git completed! +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/GlendaChong/ip.git... +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/starrylight99/ip.git... -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/GlendaChong/ip.git to complete... +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LamJiuFong/ip.git completed! +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/starrylight99/ip.git to complete... -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mingyuanc/ip.git completed! -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/josepholim/ip.git (master)... +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AustinHuang1203/ip.git... -Sep 16, 2023 3:08:35 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kanna-1/ip.git completed! +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AustinHuang1203/ip.git to complete... -Sep 16, 2023 3:08:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jx124/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jx124/ip.git (master)... -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jx124/ip.git (master) completed! -Sep 16, 2023 3:08:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [65/480] Analyzing https://github.com/AryanG01/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LamJiuFong/ip.git completed! -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AryanG01/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AryanG01/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/seewhyjay/ip.git... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/josepholim/ip.git (master)... +Sep 16, 2023 1:56:16 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/josepholim/ip.git (master) completed! +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/seewhyjay/ip.git to complete... -Sep 16, 2023 3:08:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Clin-lyx/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Clin-lyx/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Clin-lyx/ip.git (master) completed! -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [66/480] Analyzing https://github.com/kayabuttertoastt/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kayabuttertoastt/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kayabuttertoastt/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.ReportGenerator analyzeRepos +INFO: [16/480] Analyzing https://github.com/geoffong11/ip.git (master)... +Sep 16, 2023 1:56:16 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/geoffong11/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/geoffong11/ip.git (master)... +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/GlendaChong/ip.git completed! -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruth-lim/ip.git... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ruth-lim/ip.git to complete... -Sep 16, 2023 3:08:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AryanG01/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AryanG01/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AryanG01/ip.git (master) completed! -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [67/480] Analyzing https://github.com/sheryew/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/sheryew/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/sheryew/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/starrylight99/ip.git completed! -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruth-lim/ip.git... +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/limzhenwy/ip.git... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ruth-lim/ip.git to complete... +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/limzhenwy/ip.git to complete... -Sep 16, 2023 3:08:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kayabuttertoastt/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kayabuttertoastt/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kayabuttertoastt/ip.git (master) completed! -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [68/480] Analyzing https://github.com/jonasongg/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jonasongg/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jonasongg/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AustinHuang1203/ip.git completed! -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/xCOLOURx/ip.git... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/xCOLOURx/ip.git to complete... -Sep 16, 2023 3:08:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/sheryew/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/sheryew/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/sheryew/ip.git (master) completed! -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [69/480] Analyzing https://github.com/yiwen101/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yiwen101/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yiwen101/ip.git (master)... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/seewhyjay/ip.git completed! -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:16 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/zacwong2151/ip.git... -Sep 16, 2023 3:08:36 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/zacwong2151/ip.git to complete... -Sep 16, 2023 3:08:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jonasongg/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/howenc/ip.git (master)... +Sep 16, 2023 1:56:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/howenc/ip.git (master)... +Sep 16, 2023 1:56:17 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/howenc/ip.git (master) completed! +Sep 16, 2023 1:56:17 PM reposense.report.ReportGenerator analyzeRepos +INFO: [17/480] Analyzing https://github.com/jianrong7/ip.git (master)... +Sep 16, 2023 1:56:17 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jianrong7/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jianrong7/ip.git (master)... +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xCOLOURx/ip.git completed! +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ruth-lim/ip.git completed! -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Zjinnnn/ip.git... -Sep 16, 2023 3:08:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jonasongg/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Zjinnnn/ip.git to complete... -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jonasongg/ip.git (master) completed! -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [70/480] Analyzing https://github.com/tiongMax/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tiongMax/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tiongMax/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/limzhenwy/ip.git completed! -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/awhb/ip.git... -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/awhb/ip.git to complete... -Sep 16, 2023 3:08:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yiwen101/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yiwen101/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yiwen101/ip.git (master) completed! -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [71/480] Analyzing https://github.com/chuababyy/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chuababyy/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chuababyy/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiongMax/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiongMax/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiongMax/ip.git (master) completed! -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [72/480] Analyzing https://github.com/supermii2/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/supermii2/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/supermii2/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xCOLOURx/ip.git completed! -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/teoks0199/ip.git... -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Zjinnnn/ip.git to complete... +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/awhb/ip.git to complete... +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/teoks0199/ip.git to complete... -Sep 16, 2023 3:08:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chuababyy/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/zacwong2151/ip.git completed! -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/qz1004/ip.git... -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/qz1004/ip.git to complete... -Sep 16, 2023 3:08:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/chuababyy/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/chuababyy/ip.git (master) completed! -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [73/480] Analyzing https://github.com/remuslum/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/remuslum/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/remuslum/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/supermii2/ip.git (master)... -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Zjinnnn/ip.git completed! -Sep 16, 2023 3:08:37 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/geoffong11/ip.git (master)... +Sep 16, 2023 1:56:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/geoffong11/ip.git (master)... +Sep 16, 2023 1:56:17 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/geoffong11/ip.git (master) completed! +Sep 16, 2023 1:56:17 PM reposense.report.ReportGenerator analyzeRepos +INFO: [18/480] Analyzing https://github.com/A1WAYSD/ip.git (master)... +Sep 16, 2023 1:56:17 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/A1WAYSD/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/A1WAYSD/ip.git (master)... +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/teoks0199/ip.git completed! +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/pangyyen/ip.git... -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/pangyyen/ip.git to complete... -Sep 16, 2023 3:08:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/supermii2/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/supermii2/ip.git (master) completed! -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [74/480] Analyzing https://github.com/nicolengk/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nicolengk/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nicolengk/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/awhb/ip.git completed! -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/pangyyen/ip.git to complete... +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Zjinnnn/ip.git completed! +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Mahidharah/ip.git... -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Mahidharah/ip.git to complete... -Sep 16, 2023 3:08:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/remuslum/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/remuslum/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/remuslum/ip.git (master) completed! -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [75/480] Analyzing https://github.com/newway1814/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/newway1814/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/newway1814/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nicolengk/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nicolengk/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nicolengk/ip.git (master) completed! -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [76/480] Analyzing https://github.com/kanna-1/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kanna-1/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kanna-1/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/teoks0199/ip.git completed! -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jason-raiin/ip.git... -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jason-raiin/ip.git to complete... -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/qz1004/ip.git completed! -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ravern/ip.git... -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jason-raiin/ip.git to complete... +Sep 16, 2023 1:56:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ravern/ip.git to complete... -Sep 16, 2023 3:08:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/newway1814/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/newway1814/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/newway1814/ip.git (master) completed! -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [77/480] Analyzing https://github.com/glenngnng/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/glenngnng/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/glenngnng/ip.git (master)... -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/pangyyen/ip.git completed! -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jianrong7/ip.git (master)... +Sep 16, 2023 1:56:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jianrong7/ip.git (master)... +Sep 16, 2023 1:56:17 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jianrong7/ip.git (master) completed! +Sep 16, 2023 1:56:18 PM reposense.report.ReportGenerator analyzeRepos +INFO: [19/480] Analyzing https://github.com/NgChunMan/ip.git (master)... +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Mahidharah/ip.git completed! +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/bobscodedump/ip.git... -Sep 16, 2023 3:08:38 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/NgChunMan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/NgChunMan/ip.git (master)... +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/pangyyen/ip.git completed! +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/bobscodedump/ip.git to complete... -Sep 16, 2023 3:08:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/glenngnng/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Mahidharah/ip.git completed! -Sep 16, 2023 3:08:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/glenngnng/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/glenngnng/ip.git (master) completed! -Sep 16, 2023 3:08:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [78/480] Analyzing https://github.com/zsh-eng/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/nixonwidjaja/ip.git... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nixonwidjaja/ip.git to complete... -Sep 16, 2023 3:08:39 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zsh-eng/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zsh-eng/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jason-raiin/ip.git completed! -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/techjay-c/ip.git... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/techjay-c/ip.git to complete... -Sep 16, 2023 3:08:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kanna-1/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kanna-1/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kanna-1/ip.git (master) completed! -Sep 16, 2023 3:08:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [79/480] Analyzing https://github.com/mingyuanc/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mingyuanc/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mingyuanc/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ravern/ip.git completed! -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nixonwidjaja/ip.git to complete... +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/techjay-c/ip.git... +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ryanozx/ip.git... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/techjay-c/ip.git to complete... +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ryanozx/ip.git to complete... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/A1WAYSD/ip.git (master)... +Sep 16, 2023 1:56:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/A1WAYSD/ip.git (master)... +Sep 16, 2023 1:56:18 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/A1WAYSD/ip.git (master) completed! +Sep 16, 2023 1:56:18 PM reposense.report.ReportGenerator analyzeRepos +INFO: [20/480] Analyzing https://github.com/limjunxian1/ip.git (master)... +Sep 16, 2023 1:56:18 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/limjunxian1/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/limjunxian1/ip.git (master)... +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/bobscodedump/ip.git completed! -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LuahJunYang/ip.git... -Sep 16, 2023 3:08:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zsh-eng/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/LuahJunYang/ip.git to complete... -Sep 16, 2023 3:08:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zsh-eng/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zsh-eng/ip.git (master) completed! -Sep 16, 2023 3:08:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [80/480] Analyzing https://github.com/LamJiuFong/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LamJiuFong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LamJiuFong/ip.git (master)... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/nixonwidjaja/ip.git completed! -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/HEEaZ/ip.git... -Sep 16, 2023 3:08:39 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/HEEaZ/ip.git to complete... -Sep 16, 2023 3:08:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mingyuanc/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mingyuanc/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mingyuanc/ip.git (master) completed! -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [81/480] Analyzing https://github.com/GlendaChong/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/GlendaChong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/GlendaChong/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/techjay-c/ip.git completed! -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ryanozx/ip.git completed! +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/dom-buri/ip.git... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LamJiuFong/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/dom-buri/ip.git to complete... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LamJiuFong/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LamJiuFong/ip.git (master) completed! -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [82/480] Analyzing https://github.com/starrylight99/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ryanozx/ip.git completed! -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/techjay-c/ip.git completed! +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AlainS87/ip.git... -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AlainS87/ip.git to complete... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/starrylight99/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/starrylight99/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LuahJunYang/ip.git completed! -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AlainS87/ip.git to complete... +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tiongjjyi/ip.git... -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tiongjjyi/ip.git to complete... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/GlendaChong/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/GlendaChong/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/GlendaChong/ip.git (master) completed! -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [83/480] Analyzing https://github.com/AustinHuang1203/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/starrylight99/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AustinHuang1203/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AustinHuang1203/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/starrylight99/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/starrylight99/ip.git (master) completed! -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [84/480] Analyzing https://github.com/seewhyjay/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/seewhyjay/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/seewhyjay/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/HEEaZ/ip.git completed! -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tiongjjyi/ip.git to complete... +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Vanessamae23/ip.git... -Sep 16, 2023 3:08:40 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:18 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Vanessamae23/ip.git to complete... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AustinHuang1203/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AustinHuang1203/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AustinHuang1203/ip.git (master) completed! -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [85/480] Analyzing https://github.com/ruth-lim/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruth-lim/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruth-lim/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/seewhyjay/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/seewhyjay/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/seewhyjay/ip.git (master) completed! -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [86/480] Analyzing https://github.com/limzhenwy/ip.git (master)... -Sep 16, 2023 3:08:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/limzhenwy/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/limzhenwy/ip.git (master)... -Sep 16, 2023 3:08:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/dom-buri/ip.git completed! -Sep 16, 2023 3:08:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/fuyiqiao/ip.git... -Sep 16, 2023 3:08:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/fuyiqiao/ip.git to complete... -Sep 16, 2023 3:08:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tiongjjyi/ip.git completed! -Sep 16, 2023 3:08:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/spatuly/ip.git... -Sep 16, 2023 3:08:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/spatuly/ip.git to complete... -Sep 16, 2023 3:08:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/limzhenwy/ip.git (master)... -Sep 16, 2023 3:08:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/limzhenwy/ip.git (master)... -Sep 16, 2023 3:08:41 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/limzhenwy/ip.git (master) completed! -Sep 16, 2023 3:08:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [87/480] Analyzing https://github.com/xCOLOURx/ip.git (master)... -Sep 16, 2023 3:08:41 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/xCOLOURx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/xCOLOURx/ip.git (master)... -Sep 16, 2023 3:08:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Vanessamae23/ip.git completed! -Sep 16, 2023 3:08:41 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanshiyu1999/ip.git... -Sep 16, 2023 3:08:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/limjunxian1/ip.git (master)... +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanshiyu1999/ip.git to complete... -Sep 16, 2023 3:08:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ruth-lim/ip.git (master)... -Sep 16, 2023 3:08:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ruth-lim/ip.git (master)... -Sep 16, 2023 3:08:41 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ruth-lim/ip.git (master) completed! -Sep 16, 2023 3:08:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [88/480] Analyzing https://github.com/zacwong2151/ip.git (master)... -Sep 16, 2023 3:08:41 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/zacwong2151/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/zacwong2151/ip.git (master)... -Sep 16, 2023 3:08:41 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/limjunxian1/ip.git (master)... +Sep 16, 2023 1:56:19 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/limjunxian1/ip.git (master) completed! +Sep 16, 2023 1:56:19 PM reposense.report.ReportGenerator analyzeRepos +INFO: [21/480] Analyzing https://github.com/jack1e0/ip.git (master)... +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/fuyiqiao/ip.git completed! -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Kb-Tay/ip.git... -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jack1e0/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jack1e0/ip.git (master)... +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Kb-Tay/ip.git to complete... -Sep 16, 2023 3:08:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/xCOLOURx/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/xCOLOURx/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/xCOLOURx/ip.git (master) completed! -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/spatuly/ip.git completed! -Sep 16, 2023 3:08:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [89/480] Analyzing https://github.com/Zjinnnn/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/beatricecst/ip.git... -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/NgChunMan/ip.git (master)... +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/beatricecst/ip.git to complete... -Sep 16, 2023 3:08:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Zjinnnn/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Zjinnnn/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/NgChunMan/ip.git (master)... +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/tanshiyu1999/ip.git completed! -Sep 16, 2023 3:08:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zacwong2151/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/NgChunMan/ip.git (master) completed! +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/tanveersingh10/ip.git... -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.ReportGenerator analyzeRepos +INFO: [22/480] Analyzing https://github.com/hjoneweek/ip.git (master)... +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/tanveersingh10/ip.git to complete... -Sep 16, 2023 3:08:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zacwong2151/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zacwong2151/ip.git (master) completed! -Sep 16, 2023 3:08:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [90/480] Analyzing https://github.com/awhb/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/awhb/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/awhb/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Zjinnnn/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:19 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/hjoneweek/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/hjoneweek/ip.git (master)... +Sep 16, 2023 1:56:19 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Kb-Tay/ip.git completed! -Sep 16, 2023 3:08:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Zjinnnn/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/thienmy0/ip.git... -Sep 16, 2023 3:08:42 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Zjinnnn/ip.git (master) completed! -Sep 16, 2023 3:08:42 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/thienmy0/ip.git to complete... -Sep 16, 2023 3:08:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [91/480] Analyzing https://github.com/teoks0199/ip.git (master)... -Sep 16, 2023 3:08:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/awhb/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/teoks0199/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/teoks0199/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlainS87/ip.git completed! -Sep 16, 2023 3:08:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/awhb/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/beatricecst/ip.git completed! +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/s0ngyang/ip.git... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/awhb/ip.git (master) completed! -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/s0ngyang/ip.git to complete... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [92/480] Analyzing https://github.com/qz1004/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/qz1004/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/qz1004/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/beatricecst/ip.git completed! -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanveersingh10/ip.git completed! +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ldinghan/ip.git... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ldinghan/ip.git to complete... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanveersingh10/ip.git completed! -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/s0ngyang/ip.git completed! +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/feifeiraindrops/ip.git... -Sep 16, 2023 3:08:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/teoks0199/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/feifeiraindrops/ip.git to complete... -Sep 16, 2023 3:08:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/teoks0199/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/teoks0199/ip.git (master) completed! -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [93/480] Analyzing https://github.com/pangyyen/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/pangyyen/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/pangyyen/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/qz1004/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/qz1004/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/qz1004/ip.git (master) completed! -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [94/480] Analyzing https://github.com/Mahidharah/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Mahidharah/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Mahidharah/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Mahidharah/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Mahidharah/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Mahidharah/ip.git (master) completed! -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [95/480] Analyzing https://github.com/jason-raiin/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jason-raiin/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jason-raiin/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/pangyyen/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/s0ngyang/ip.git completed! -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/thienmy0/ip.git completed! -Sep 16, 2023 3:08:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/pangyyen/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/ryanongwx/ip.git... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/pangyyen/ip.git (master) completed! -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [96/480] Analyzing https://github.com/ravern/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kwangthiag/ip.git... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/ryanongwx/ip.git to complete... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kwangthiag/ip.git to complete... -Sep 16, 2023 3:08:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ravern/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ravern/ip.git (master)... -Sep 16, 2023 3:08:43 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/ldinghan/ip.git completed! -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jack1e0/ip.git (master)... +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kwangthiag/ip.git... +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kwangthiag/ip.git to complete... +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/feifeiraindrops/ip.git completed! +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/elhy1999/ip.git... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jack1e0/ip.git (master)... +Sep 16, 2023 1:56:20 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jack1e0/ip.git (master) completed! +Sep 16, 2023 1:56:20 PM reposense.report.ReportGenerator analyzeRepos +INFO: [23/480] Analyzing https://github.com/dishenggg/ip.git (master)... +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/elhy1999/ip.git to complete... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/feifeiraindrops/ip.git completed! -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ryanongwx/ip.git completed! +Sep 16, 2023 1:56:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/hjoneweek/ip.git (master)... +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/songgthu/ip.git... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:20 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dishenggg/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dishenggg/ip.git (master)... +Sep 16, 2023 1:56:20 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/songgthu/ip.git to complete... -Sep 16, 2023 3:08:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jason-raiin/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jason-raiin/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jason-raiin/ip.git (master) completed! -Sep 16, 2023 3:08:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [97/480] Analyzing https://github.com/bobscodedump/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bobscodedump/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bobscodedump/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ravern/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ravern/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ravern/ip.git (master) completed! -Sep 16, 2023 3:08:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [98/480] Analyzing https://github.com/nixonwidjaja/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/nixonwidjaja/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/nixonwidjaja/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/bobscodedump/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/hjoneweek/ip.git (master)... +Sep 16, 2023 1:56:20 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/hjoneweek/ip.git (master) completed! +Sep 16, 2023 1:56:20 PM reposense.report.ReportGenerator analyzeRepos +INFO: [24/480] Analyzing https://github.com/zhyuhan/ip.git (master)... +Sep 16, 2023 1:56:21 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zhyuhan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zhyuhan/ip.git (master)... +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/kwangthiag/ip.git completed! -Sep 16, 2023 3:08:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/bobscodedump/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ryanongwx/ip.git completed! -Sep 16, 2023 3:08:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/bobscodedump/ip.git (master) completed! -Sep 16, 2023 3:08:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [99/480] Analyzing https://github.com/techjay-c/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/GohTengFong/ip.git... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/simbayippy/ip.git... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/GohTengFong/ip.git to complete... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/simbayippy/ip.git to complete... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/elhy1999/ip.git completed! -Sep 16, 2023 3:08:44 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/techjay-c/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/techjay-c/ip.git (master)... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/simbayippy/ip.git... +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/simbayippy/ip.git to complete... +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/songgthu/ip.git completed! +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Khaleelur-Rahman/ip.git... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Khaleelur-Rahman/ip.git to complete... -Sep 16, 2023 3:08:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/songgthu/ip.git completed! -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlainS87/ip.git completed! +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/proto-aiken-13/ip.git... -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/proto-aiken-13/ip.git to complete... -Sep 16, 2023 3:08:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nixonwidjaja/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nixonwidjaja/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nixonwidjaja/ip.git (master) completed! -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [100/480] Analyzing https://github.com/ryanozx/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryanozx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryanozx/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/techjay-c/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/techjay-c/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/techjay-c/ip.git (master) completed! -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [101/480] Analyzing https://github.com/LuahJunYang/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LuahJunYang/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LuahJunYang/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LuahJunYang/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LuahJunYang/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LuahJunYang/ip.git (master) completed! -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [102/480] Analyzing https://github.com/HEEaZ/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryanozx/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/HEEaZ/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/HEEaZ/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryanozx/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryanozx/ip.git (master) completed! -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [103/480] Analyzing https://github.com/dom-buri/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dom-buri/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dom-buri/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/simbayippy/ip.git completed! -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/GohTengFong/ip.git completed! +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/bwangpj/ip.git... -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/bwangpj/ip.git to complete... -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/GohTengFong/ip.git completed! -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/simbayippy/ip.git completed! +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/weeweh/ip.git... -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/weeweh/ip.git to complete... -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/Khaleelur-Rahman/ip.git completed! -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/weeweh/ip.git to complete... +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/s-peiran/ip.git... -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/s-peiran/ip.git to complete... -Sep 16, 2023 3:08:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/HEEaZ/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/HEEaZ/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/HEEaZ/ip.git (master) completed! -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [104/480] Analyzing https://github.com/tiongjjyi/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dishenggg/ip.git (master)... +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/proto-aiken-13/ip.git completed! -Sep 16, 2023 3:08:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tiongjjyi/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tiongjjyi/ip.git (master)... -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bwangpj/ip.git completed! +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/jylow/ip.git... -Sep 16, 2023 3:08:45 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/jylow/ip.git to complete... -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dom-buri/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dom-buri/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dom-buri/ip.git (master) completed! -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [105/480] Analyzing https://github.com/Vanessamae23/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiongjjyi/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Vanessamae23/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Vanessamae23/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiongjjyi/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiongjjyi/ip.git (master) completed! -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [106/480] Analyzing https://github.com/fuyiqiao/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/fuyiqiao/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/fuyiqiao/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/fuyiqiao/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/fuyiqiao/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/fuyiqiao/ip.git (master) completed! -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [107/480] Analyzing https://github.com/spatuly/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/spatuly/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/spatuly/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Vanessamae23/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/weeweh/ip.git completed! -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/lawruixi/ip.git... -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bwangpj/ip.git completed! -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dishenggg/ip.git (master)... +Sep 16, 2023 1:56:21 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dishenggg/ip.git (master) completed! +Sep 16, 2023 1:56:21 PM reposense.report.ReportGenerator analyzeRepos +INFO: [25/480] Analyzing https://github.com/Dioclei/ip.git (master)... +Sep 16, 2023 1:56:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/lawruixi/ip.git to complete... -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:21 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Dioclei/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Dioclei/ip.git (master)... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/weeweh/ip.git completed! +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/JeremyYong128/ip.git... -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/s-peiran/ip.git completed! -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Vanessamae23/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Vanessamae23/ip.git (master) completed! -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/brandon-nam/ip.git... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [108/480] Analyzing https://github.com/tanshiyu1999/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zhyuhan/ip.git (master)... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/JeremyYong128/ip.git to complete... -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/brandon-nam/ip.git to complete... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanshiyu1999/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanshiyu1999/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zhyuhan/ip.git (master)... +Sep 16, 2023 1:56:22 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zhyuhan/ip.git (master) completed! +Sep 16, 2023 1:56:22 PM reposense.report.ReportGenerator analyzeRepos +INFO: [26/480] Analyzing https://github.com/Daphne789/ip.git (master)... +Sep 16, 2023 1:56:22 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Daphne789/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Daphne789/ip.git (master)... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/jylow/ip.git completed! -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/LHeng1/ip.git... -Sep 16, 2023 3:08:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LHeng1/ip.git to complete... -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanshiyu1999/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/spatuly/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanshiyu1999/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanshiyu1999/ip.git (master) completed! -Sep 16, 2023 3:08:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/spatuly/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [109/480] Analyzing https://github.com/Kb-Tay/ip.git (master)... -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/spatuly/ip.git (master) completed! -Sep 16, 2023 3:08:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [110/480] Analyzing https://github.com/AlainS87/ip.git (master)... -Sep 16, 2023 3:08:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Kb-Tay/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Kb-Tay/ip.git (master)... -Sep 16, 2023 3:08:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Kb-Tay/ip.git (master)... -Sep 16, 2023 3:08:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Kb-Tay/ip.git (master)... -Sep 16, 2023 3:08:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Kb-Tay/ip.git (master) completed! -Sep 16, 2023 3:08:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [111/480] Analyzing https://github.com/beatricecst/ip.git (master)... -Sep 16, 2023 3:08:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/beatricecst/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/beatricecst/ip.git (master)... -Sep 16, 2023 3:08:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AlainS87/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AlainS87/ip.git (master)... -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JeremyYong128/ip.git completed! -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/lawruixi/ip.git completed! -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/brandon-nam/ip.git completed! -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LHeng1/ip.git to complete... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/Leb14/ip.git... -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JeremyYong128/ip.git completed! +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/B-enguin/ip.git... -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/Leb14/ip.git to complete... -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/s-kybound/ip.git... -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/brandon-nam/ip.git completed! +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/B-enguin/ip.git to complete... -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/s-kybound/ip.git... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/s-kybound/ip.git to complete... -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Dioclei/ip.git (master)... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/LHeng1/ip.git completed! -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner spawnCloneProcess +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/wesho1107/ip.git... -Sep 16, 2023 3:08:47 AM reposense.report.RepoCloner waitForCloneProcess +Sep 16, 2023 1:56:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Dioclei/ip.git (master)... +Sep 16, 2023 1:56:22 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Dioclei/ip.git (master) completed! +Sep 16, 2023 1:56:22 PM reposense.report.ReportGenerator analyzeRepos +INFO: [27/480] Analyzing https://github.com/peiran18/ip.git (master)... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/wesho1107/ip.git to complete... -Sep 16, 2023 3:08:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/B-enguin/ip.git completed! +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/s-kybound/ip.git completed! +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Leb14/ip.git completed! +Sep 16, 2023 1:56:22 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/peiran18/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/peiran18/ip.git (master)... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yihfei/ip.git... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AaronJT1/ip.git... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dlathyun/ip.git... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AaronJT1/ip.git to complete... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yihfei/ip.git to complete... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dlathyun/ip.git to complete... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wesho1107/ip.git completed! +Sep 16, 2023 1:56:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Daphne789/ip.git (master)... +Sep 16, 2023 1:56:22 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ricketytoc/ip.git... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ricketytoc/ip.git to complete... +Sep 16, 2023 1:56:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Daphne789/ip.git (master)... +Sep 16, 2023 1:56:23 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Daphne789/ip.git (master) completed! +Sep 16, 2023 1:56:23 PM reposense.report.ReportGenerator analyzeRepos +INFO: [28/480] Analyzing https://github.com/WinstonLeonard/ip.git (master)... +Sep 16, 2023 1:56:23 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WinstonLeonard/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WinstonLeonard/ip.git (master)... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dlathyun/ip.git completed! +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yihfei/ip.git completed! +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Angelyxx/ip.git... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jingting1412/ip.git... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AaronJT1/ip.git completed! +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jingting1412/ip.git to complete... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Angelyxx/ip.git to complete... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/SinhaVedant/ip.git... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/SinhaVedant/ip.git to complete... +Sep 16, 2023 1:56:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/peiran18/ip.git (master)... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ricketytoc/ip.git completed! +Sep 16, 2023 1:56:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/peiran18/ip.git (master)... +Sep 16, 2023 1:56:23 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/peiran18/ip.git (master) completed! +Sep 16, 2023 1:56:23 PM reposense.report.ReportGenerator analyzeRepos +INFO: [29/480] Analyzing https://github.com/migfoo02/ip.git (master)... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/freddychenyouren2/ip.git... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/freddychenyouren2/ip.git to complete... +Sep 16, 2023 1:56:23 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/migfoo02/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/migfoo02/ip.git (master)... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jingting1412/ip.git completed! +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Angelyxx/ip.git completed! +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SinhaVedant/ip.git completed! +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jordankanghm/ip.git... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/adhigop13/ip.git... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jordankanghm/ip.git to complete... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/waseemingly/ip.git... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/waseemingly/ip.git to complete... +Sep 16, 2023 1:56:23 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/adhigop13/ip.git to complete... +Sep 16, 2023 1:56:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WinstonLeonard/ip.git (master)... +Sep 16, 2023 1:56:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/WinstonLeonard/ip.git (master)... +Sep 16, 2023 1:56:23 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/WinstonLeonard/ip.git (master) completed! +Sep 16, 2023 1:56:23 PM reposense.report.ReportGenerator analyzeRepos +INFO: [30/480] Analyzing https://github.com/Jonyxzx/ip.git (master)... +Sep 16, 2023 1:56:24 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Jonyxzx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Jonyxzx/ip.git (master)... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/adhigop13/ip.git completed! +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/raydenlim/ip.git... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jordankanghm/ip.git completed! +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/raydenlim/ip.git to complete... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jingyu987/ip.git... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jingyu987/ip.git to complete... +Sep 16, 2023 1:56:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/migfoo02/ip.git (master)... +Sep 16, 2023 1:56:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/migfoo02/ip.git (master)... +Sep 16, 2023 1:56:24 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/migfoo02/ip.git (master) completed! +Sep 16, 2023 1:56:24 PM reposense.report.ReportGenerator analyzeRepos +INFO: [31/480] Analyzing https://github.com/SynapseProgramming/ip.git (master)... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/freddychenyouren2/ip.git completed! +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/FerdiHS/ip.git... +Sep 16, 2023 1:56:24 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SynapseProgramming/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SynapseProgramming/ip.git (master)... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/FerdiHS/ip.git to complete... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/raydenlim/ip.git completed! +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jingyu987/ip.git completed! +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jrchoo/ip.git... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/RiyaMehta2211/ip.git... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jrchoo/ip.git to complete... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/RiyaMehta2211/ip.git to complete... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/FerdiHS/ip.git completed! +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/leezhanpeng/ip.git... +Sep 16, 2023 1:56:24 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/leezhanpeng/ip.git to complete... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/RiyaMehta2211/ip.git completed! +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jrchoo/ip.git completed! +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/juzzztinsoong/ip.git... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/juzzztinsoong/ip.git to complete... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/darrentfy/ip.git... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/darrentfy/ip.git to complete... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/leezhanpeng/ip.git completed! +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/redtailedfox/ip.git... +Sep 16, 2023 1:56:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SynapseProgramming/ip.git (master)... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/redtailedfox/ip.git to complete... +Sep 16, 2023 1:56:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SynapseProgramming/ip.git (master)... +Sep 16, 2023 1:56:25 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SynapseProgramming/ip.git (master) completed! +Sep 16, 2023 1:56:25 PM reposense.report.ReportGenerator analyzeRepos +INFO: [32/480] Analyzing https://github.com/AriellaCallista/ip.git (master)... +Sep 16, 2023 1:56:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Jonyxzx/ip.git (master)... +Sep 16, 2023 1:56:25 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AriellaCallista/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AriellaCallista/ip.git (master)... +Sep 16, 2023 1:56:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Jonyxzx/ip.git (master)... +Sep 16, 2023 1:56:25 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Jonyxzx/ip.git (master) completed! +Sep 16, 2023 1:56:25 PM reposense.report.ReportGenerator analyzeRepos +INFO: [33/480] Analyzing https://github.com/Darren159/ip.git (master)... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/juzzztinsoong/ip.git completed! +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/darrentfy/ip.git completed! +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Fallman2/ip.git... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Fallman2/ip.git to complete... +Sep 16, 2023 1:56:25 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Darren159/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Darren159/ip.git (master)... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Heran9/ip.git... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/redtailedfox/ip.git completed! +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Heran9/ip.git to complete... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/VN-Hao/ip.git... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/VN-Hao/ip.git to complete... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Fallman2/ip.git completed! +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Heran9/ip.git completed! +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jingjie88/ip.git... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/H1410101/ip.git... +Sep 16, 2023 1:56:25 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/H1410101/ip.git to complete... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/VN-Hao/ip.git completed! +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jingjie88/ip.git to complete... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kimshitong/ip.git... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kimshitong/ip.git to complete... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/H1410101/ip.git completed! +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jingjie88/ip.git completed! +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ivanleekk/ip.git... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kimshitong/ip.git completed! +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lamchenghou/ip.git... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tayruxin/ip.git... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ivanleekk/ip.git to complete... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tayruxin/ip.git to complete... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lamchenghou/ip.git to complete... +Sep 16, 2023 1:56:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Darren159/ip.git (master)... +Sep 16, 2023 1:56:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Darren159/ip.git (master)... +Sep 16, 2023 1:56:26 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Darren159/ip.git (master) completed! +Sep 16, 2023 1:56:26 PM reposense.report.ReportGenerator analyzeRepos +INFO: [34/480] Analyzing https://github.com/imkwokyong/ip.git (master)... +Sep 16, 2023 1:56:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AriellaCallista/ip.git (master)... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ivanleekk/ip.git completed! +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/waseemingly/ip.git completed! +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/raynertjx/ip.git... +Sep 16, 2023 1:56:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AriellaCallista/ip.git (master)... +Sep 16, 2023 1:56:26 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/imkwokyong/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/imkwokyong/ip.git (master)... +Sep 16, 2023 1:56:26 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AriellaCallista/ip.git (master) completed! +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zhengyup/ip.git... +Sep 16, 2023 1:56:26 PM reposense.report.ReportGenerator analyzeRepos +INFO: [35/480] Analyzing https://github.com/joeng03/ip.git (master)... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/raynertjx/ip.git to complete... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zhengyup/ip.git to complete... +Sep 16, 2023 1:56:26 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/joeng03/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/joeng03/ip.git (master)... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lamchenghou/ip.git completed! +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/larrywang0701/ip.git... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tayruxin/ip.git completed! +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/larrywang0701/ip.git to complete... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Carlintyj/ip.git... +Sep 16, 2023 1:56:26 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Carlintyj/ip.git to complete... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhengyup/ip.git completed! +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wxwern/ip.git... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/raynertjx/ip.git completed! +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wxwern/ip.git to complete... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nubnubyas/ip.git... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/larrywang0701/ip.git completed! +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nubnubyas/ip.git to complete... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/aslam341/ip.git... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/aslam341/ip.git to complete... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Carlintyj/ip.git completed! +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LWZ19/ip.git... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LWZ19/ip.git to complete... +Sep 16, 2023 1:56:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/joeng03/ip.git (master)... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wxwern/ip.git completed! +Sep 16, 2023 1:56:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/joeng03/ip.git (master)... +Sep 16, 2023 1:56:27 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/joeng03/ip.git (master) completed! +Sep 16, 2023 1:56:27 PM reposense.report.ReportGenerator analyzeRepos +INFO: [36/480] Analyzing https://github.com/vijay-shankaranand/ip.git (master)... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/timleow/ip.git... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/timleow/ip.git to complete... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nubnubyas/ip.git completed! +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/rayshawntan/ip.git... +Sep 16, 2023 1:56:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/imkwokyong/ip.git (master)... +Sep 16, 2023 1:56:27 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/vijay-shankaranand/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/vijay-shankaranand/ip.git (master)... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rayshawntan/ip.git to complete... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aslam341/ip.git completed! +Sep 16, 2023 1:56:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/imkwokyong/ip.git (master)... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/aexolate/ip.git... +Sep 16, 2023 1:56:27 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/imkwokyong/ip.git (master) completed! +Sep 16, 2023 1:56:27 PM reposense.report.ReportGenerator analyzeRepos +INFO: [37/480] Analyzing https://github.com/SelwynAng/ip.git (master)... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/aexolate/ip.git to complete... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LWZ19/ip.git completed! +Sep 16, 2023 1:56:27 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SelwynAng/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SelwynAng/ip.git (master)... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Sheeepen/ip.git... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Sheeepen/ip.git to complete... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/timleow/ip.git completed! +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shuyangk/ip.git... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/shuyangk/ip.git to complete... +Sep 16, 2023 1:56:27 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rayshawntan/ip.git completed! +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aexolate/ip.git completed! +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ncmathan/ip.git... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/iyioon/ip.git... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ncmathan/ip.git to complete... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/iyioon/ip.git to complete... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sheeepen/ip.git completed! +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kiwibang/ip.git... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kiwibang/ip.git to complete... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shuyangk/ip.git completed! +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/mingyu-wan/ip.git... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mingyu-wan/ip.git to complete... +Sep 16, 2023 1:56:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/vijay-shankaranand/ip.git (master)... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ncmathan/ip.git completed! +Sep 16, 2023 1:56:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/vijay-shankaranand/ip.git (master)... +Sep 16, 2023 1:56:28 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/vijay-shankaranand/ip.git (master) completed! +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LuoZYi/ip.git... +Sep 16, 2023 1:56:28 PM reposense.report.ReportGenerator analyzeRepos +INFO: [38/480] Analyzing https://github.com/jeffrey-jian/ip.git (master)... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LuoZYi/ip.git to complete... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/iyioon/ip.git completed! +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/asdfghjkxd/ip.git... +Sep 16, 2023 1:56:28 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jeffrey-jian/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jeffrey-jian/ip.git (master)... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/asdfghjkxd/ip.git to complete... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kiwibang/ip.git completed! +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sushiyade/ip.git... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sushiyade/ip.git to complete... +Sep 16, 2023 1:56:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SelwynAng/ip.git (master)... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LuoZYi/ip.git completed! +Sep 16, 2023 1:56:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SelwynAng/ip.git (master)... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Nid21cs/ip.git... +Sep 16, 2023 1:56:28 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SelwynAng/ip.git (master) completed! +Sep 16, 2023 1:56:28 PM reposense.report.ReportGenerator analyzeRepos +INFO: [39/480] Analyzing https://github.com/tanyyyming/ip.git (master)... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Nid21cs/ip.git to complete... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/asdfghjkxd/ip.git completed! +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/McNaBry/ip.git... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/McNaBry/ip.git to complete... +Sep 16, 2023 1:56:28 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanyyyming/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanyyyming/ip.git (master)... +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sushiyade/ip.git completed! +Sep 16, 2023 1:56:28 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/miljyy/ip.git... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/miljyy/ip.git to complete... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Nid21cs/ip.git completed! +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ncduy0303/ip.git... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ncduy0303/ip.git to complete... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/McNaBry/ip.git completed! +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/eyelessrhyme7/ip.git... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/eyelessrhyme7/ip.git to complete... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/miljyy/ip.git completed! +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruishanteo/ip.git... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ncduy0303/ip.git completed! +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/m1oojv/ip.git... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ruishanteo/ip.git to complete... +Sep 16, 2023 1:56:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jeffrey-jian/ip.git (master)... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/m1oojv/ip.git to complete... +Sep 16, 2023 1:56:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jeffrey-jian/ip.git (master)... +Sep 16, 2023 1:56:29 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jeffrey-jian/ip.git (master) completed! +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mingyu-wan/ip.git completed! +Sep 16, 2023 1:56:29 PM reposense.report.ReportGenerator analyzeRepos +INFO: [40/480] Analyzing https://github.com/JCSnap/ip.git (master)... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/eyelessrhyme7/ip.git completed! +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Nixx162/ip.git... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Nixx162/ip.git to complete... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Gabriel4357/ip.git... +Sep 16, 2023 1:56:29 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/JCSnap/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/JCSnap/ip.git (master)... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Gabriel4357/ip.git to complete... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ruishanteo/ip.git completed! +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/mfjkri/ip.git... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mfjkri/ip.git to complete... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/m1oojv/ip.git completed! +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/junhonglow/ip.git... +Sep 16, 2023 1:56:29 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/junhonglow/ip.git to complete... +Sep 16, 2023 1:56:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanyyyming/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanyyyming/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanyyyming/ip.git (master) completed! +Sep 16, 2023 1:56:30 PM reposense.report.ReportGenerator analyzeRepos +INFO: [41/480] Analyzing https://github.com/AprupKale/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Nixx162/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/RoeReRe/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Gabriel4357/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Badatprogrammiing/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/RoeReRe/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Badatprogrammiing/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AprupKale/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AprupKale/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mfjkri/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/junhonglow/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nknguyenhc/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/winson8222/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nknguyenhc/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/winson8222/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JCSnap/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/JCSnap/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/JCSnap/ip.git (master) completed! +Sep 16, 2023 1:56:30 PM reposense.report.ReportGenerator analyzeRepos +INFO: [42/480] Analyzing https://github.com/woojiahao/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/woojiahao/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/woojiahao/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/RoeReRe/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wujy28/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wujy28/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Badatprogrammiing/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/SimWPEric/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nknguyenhc/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/SimWPEric/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/winson8222/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/HugeNoob/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lerxuann/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lerxuann/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/HugeNoob/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wujy28/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Weiennn/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SimWPEric/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AprupKale/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Weiennn/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lerxuann/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/maj0-0/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/HugeNoob/ip.git completed! +Sep 16, 2023 1:56:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AprupKale/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AprupKale/ip.git (master) completed! +Sep 16, 2023 1:56:30 PM reposense.report.ReportGenerator analyzeRepos +INFO: [43/480] Analyzing https://github.com/syamfarh/ip.git (master)... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/qyaner/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/maj0-0/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruiyangzh/ip.git... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/qyaner/ip.git to complete... +Sep 16, 2023 1:56:30 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ruiyangzh/ip.git to complete... +Sep 16, 2023 1:56:31 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/syamfarh/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/syamfarh/ip.git (master)... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Weiennn/ip.git completed! +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/maj0-0/ip.git completed! +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Bombbird2001/ip.git... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ruiyangzh/ip.git completed! +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/hyc17003/ip.git... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/qyaner/ip.git completed! +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Bombbird2001/ip.git to complete... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/adammangzijun/ip.git... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/hyc17003/ip.git to complete... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/andytoh1/ip.git... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/adammangzijun/ip.git to complete... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/andytoh1/ip.git to complete... +Sep 16, 2023 1:56:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/woojiahao/ip.git (master)... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Bombbird2001/ip.git completed! +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Originalidk/ip.git... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Originalidk/ip.git to complete... +Sep 16, 2023 1:56:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/syamfarh/ip.git (master)... +Sep 16, 2023 1:56:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/woojiahao/ip.git (master)... +Sep 16, 2023 1:56:31 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/woojiahao/ip.git (master) completed! +Sep 16, 2023 1:56:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/syamfarh/ip.git (master)... +Sep 16, 2023 1:56:31 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/syamfarh/ip.git (master) completed! +Sep 16, 2023 1:56:31 PM reposense.report.ReportGenerator analyzeRepos +INFO: [44/480] Analyzing https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/andytoh1/ip.git completed! +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/adammangzijun/ip.git completed! +Sep 16, 2023 1:56:31 PM reposense.report.ReportGenerator analyzeRepos +INFO: [45/480] Analyzing https://github.com/D-Limiter/ip.git (master)... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/hyc17003/ip.git completed! +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/quzhetao01/ip.git... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/InfiBeyond/ip.git... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Bearypop/ip.git... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/quzhetao01/ip.git to complete... +Sep 16, 2023 1:56:31 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/D-Limiter/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/D-Limiter/ip.git (master)... +Sep 16, 2023 1:56:31 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/PetrichorPrecipice/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/InfiBeyond/ip.git to complete... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Bearypop/ip.git to complete... +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Originalidk/ip.git completed! +Sep 16, 2023 1:56:31 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sp4ce-cowboy/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sp4ce-cowboy/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Bearypop/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JasonLCY-Temp/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JasonLCY-Temp/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/InfiBeyond/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/quzhetao01/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wjayee/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wjayee/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/vivienherq/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/vivienherq/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sp4ce-cowboy/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jamesebond/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jamesebond/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JasonLCY-Temp/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jonyeokj/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jonyeokj/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wjayee/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/vivienherq/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/victorlaiyeeteng/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/victorlaiyeeteng/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lyuanww/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lyuanww/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jamesebond/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jonyeokj/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yongning0310/ip.git... +Sep 16, 2023 1:56:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/D-Limiter/ip.git (master)... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Cloud7050/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/victorlaiyeeteng/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yongning0310/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LoMaply/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Cloud7050/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LoMaply/ip.git to complete... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lyuanww/ip.git completed! +Sep 16, 2023 1:56:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/D-Limiter/ip.git (master)... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tllshan/ip.git... +Sep 16, 2023 1:56:32 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/D-Limiter/ip.git (master) completed! +Sep 16, 2023 1:56:32 PM reposense.report.ReportGenerator analyzeRepos +INFO: [46/480] Analyzing https://github.com/pra-navi/ip.git (master)... +Sep 16, 2023 1:56:32 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tllshan/ip.git to complete... +Sep 16, 2023 1:56:33 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/pra-navi/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/pra-navi/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/PetrichorPrecipice/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/PetrichorPrecipice/ip.git (master) completed! +Sep 16, 2023 1:56:33 PM reposense.report.ReportGenerator analyzeRepos +INFO: [47/480] Analyzing https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LINCHENYU2030S/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Cloud7050/ip.git completed! +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Gavino3o/ip.git... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LoMaply/ip.git completed! +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/HollaG/ip.git... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Gavino3o/ip.git to complete... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yongning0310/ip.git completed! +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/HollaG/ip.git to complete... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cheeggered/ip.git... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tllshan/ip.git completed! +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/cheeggered/ip.git to complete... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xenosf/ip.git... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xenosf/ip.git to complete... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Gavino3o/ip.git completed! +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TehOPanas/ip.git... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/HollaG/ip.git completed! +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/neyapraveen/ip.git... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TehOPanas/ip.git to complete... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cheeggered/ip.git completed! +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/richiehx/ip.git... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/neyapraveen/ip.git to complete... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/richiehx/ip.git to complete... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xenosf/ip.git completed! +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AlyssaPng/ip.git... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AlyssaPng/ip.git to complete... +Sep 16, 2023 1:56:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/pra-navi/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/pra-navi/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/pra-navi/ip.git (master) completed! +Sep 16, 2023 1:56:33 PM reposense.report.ReportGenerator analyzeRepos +INFO: [48/480] Analyzing https://github.com/coderhuang559/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TehOPanas/ip.git completed! +Sep 16, 2023 1:56:33 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/coderhuang559/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/coderhuang559/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/leezhengjing/ip.git... +Sep 16, 2023 1:56:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LINCHENYU2030S/ip.git (master)... +Sep 16, 2023 1:56:33 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LINCHENYU2030S/ip.git (master) completed! +Sep 16, 2023 1:56:33 PM reposense.report.ReportGenerator analyzeRepos +INFO: [49/480] Analyzing https://github.com/phiphi-tan/ip.git (master)... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/leezhengjing/ip.git to complete... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/neyapraveen/ip.git completed! +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/seantehds/ip.git... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/richiehx/ip.git completed! +Sep 16, 2023 1:56:34 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/phiphi-tan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/phiphi-tan/ip.git (master)... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/seantehds/ip.git to complete... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ceilingFan456/ip.git... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ceilingFan456/ip.git to complete... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlyssaPng/ip.git completed! +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lihongguang00/ip.git... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lihongguang00/ip.git to complete... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/leezhengjing/ip.git completed! +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seantehds/ip.git completed! +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ceilingFan456/ip.git completed! +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Singa-pirate/ip.git... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Singa-pirate/ip.git to complete... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/songfangyl/ip.git... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/vansh284/ip.git... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/vansh284/ip.git to complete... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/songfangyl/ip.git to complete... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lihongguang00/ip.git completed! +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/YeoBohShin/ip.git... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/YeoBohShin/ip.git to complete... +Sep 16, 2023 1:56:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/phiphi-tan/ip.git (master)... +Sep 16, 2023 1:56:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/coderhuang559/ip.git (master)... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Singa-pirate/ip.git completed! +Sep 16, 2023 1:56:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/phiphi-tan/ip.git (master)... +Sep 16, 2023 1:56:34 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/phiphi-tan/ip.git (master) completed! +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shuenj/ip.git... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/songfangyl/ip.git completed! +Sep 16, 2023 1:56:34 PM reposense.report.ReportGenerator analyzeRepos +INFO: [50/480] Analyzing https://github.com/ktzy0305/ip.git (master)... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/shuenj/ip.git to complete... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/vansh284/ip.git completed! +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lunaroddity/ip.git... +Sep 16, 2023 1:56:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/coderhuang559/ip.git (master)... +Sep 16, 2023 1:56:34 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/coderhuang559/ip.git (master) completed! +Sep 16, 2023 1:56:34 PM reposense.report.ReportGenerator analyzeRepos +INFO: [51/480] Analyzing https://github.com/LordSaumya/ip.git (master)... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lunaroddity/ip.git to complete... +Sep 16, 2023 1:56:34 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ktzy0305/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ktzy0305/ip.git (master)... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/andrechuakj/ip.git... +Sep 16, 2023 1:56:34 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LordSaumya/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LordSaumya/ip.git (master)... +Sep 16, 2023 1:56:34 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/andrechuakj/ip.git to complete... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/YeoBohShin/ip.git completed! +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WeeMingQing/ip.git... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WeeMingQing/ip.git to complete... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shuenj/ip.git completed! +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/aliciamichellew/ip.git... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lunaroddity/ip.git completed! +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/andrechuakj/ip.git completed! +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/aliciamichellew/ip.git to complete... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/samuelmui8/ip.git... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/antonTan96/ip.git... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/antonTan96/ip.git to complete... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/samuelmui8/ip.git to complete... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WeeMingQing/ip.git completed! +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/owenyeo/ip.git... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/owenyeo/ip.git to complete... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/samuelmui8/ip.git completed! +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/antonTan96/ip.git completed! +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/gongg21/ip.git... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nabonitasen/ip.git... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/gongg21/ip.git to complete... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/owenyeo/ip.git completed! +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nabonitasen/ip.git to complete... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/erohsikivar/ip.git... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/erohsikivar/ip.git to complete... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aliciamichellew/ip.git completed! +Sep 16, 2023 1:56:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LordSaumya/ip.git (master)... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/pzl111/ip.git... +Sep 16, 2023 1:56:35 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/pzl111/ip.git to complete... +Sep 16, 2023 1:56:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LordSaumya/ip.git (master)... +Sep 16, 2023 1:56:35 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LordSaumya/ip.git (master) completed! +Sep 16, 2023 1:56:35 PM reposense.report.ReportGenerator analyzeRepos +INFO: [52/480] Analyzing https://github.com/Chen1x/ip.git (master)... +Sep 16, 2023 1:56:36 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Chen1x/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Chen1x/ip.git (master)... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/gongg21/ip.git completed! +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nabonitasen/ip.git completed! +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/teozern1/ip.git... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Elijah5399/ip.git... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/teozern1/ip.git to complete... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/erohsikivar/ip.git completed! +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Elijah5399/ip.git to complete... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicleongyj/ip.git... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicleongyj/ip.git to complete... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/pzl111/ip.git completed! +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WinSheng1/ip.git... +Sep 16, 2023 1:56:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Chen1x/ip.git (master)... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WinSheng1/ip.git to complete... +Sep 16, 2023 1:56:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ktzy0305/ip.git (master)... +Sep 16, 2023 1:56:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Chen1x/ip.git (master)... +Sep 16, 2023 1:56:36 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Chen1x/ip.git (master) completed! +Sep 16, 2023 1:56:36 PM reposense.report.ReportGenerator analyzeRepos +INFO: [53/480] Analyzing https://github.com/yanghengtang/ip.git (master)... +Sep 16, 2023 1:56:36 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yanghengtang/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yanghengtang/ip.git (master)... +Sep 16, 2023 1:56:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ktzy0305/ip.git (master)... +Sep 16, 2023 1:56:36 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ktzy0305/ip.git (master) completed! +Sep 16, 2023 1:56:36 PM reposense.report.ReportGenerator analyzeRepos +INFO: [54/480] Analyzing https://github.com/johnnythesnake12/ip.git (master)... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Elijah5399/ip.git completed! +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/teozern1/ip.git completed! +Sep 16, 2023 1:56:36 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/johnnythesnake12/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/johnnythesnake12/ip.git (master)... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ryamgoh/ip.git... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yucongkoo/ip.git... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ryamgoh/ip.git to complete... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicleongyj/ip.git completed! +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Chen-Kuei/ip.git... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yucongkoo/ip.git to complete... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Chen-Kuei/ip.git to complete... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WinSheng1/ip.git completed! +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/conradsoon/ip.git... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/conradsoon/ip.git to complete... +Sep 16, 2023 1:56:36 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chen-Kuei/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/GSgiansen/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ryamgoh/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yucongkoo/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/GSgiansen/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/et-irl/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/conradsoon/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/et-irl/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/marioalvaro/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/marioalvaro/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Seonlo99/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Seonlo99/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/johnnythesnake12/ip.git (master)... +Sep 16, 2023 1:56:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/johnnythesnake12/ip.git (master)... +Sep 16, 2023 1:56:37 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/johnnythesnake12/ip.git (master) completed! +Sep 16, 2023 1:56:37 PM reposense.report.ReportGenerator analyzeRepos +INFO: [55/480] Analyzing https://github.com/oeggy03/ip.git (master)... +Sep 16, 2023 1:56:37 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/oeggy03/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/oeggy03/ip.git (master)... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/GSgiansen/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/joel-foo/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Seonlo99/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/marioalvaro/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/joel-foo/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yanghengtang/ip.git (master)... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tim-pipi/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/et-irl/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/marcellaantania/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/brendanneojw/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tim-pipi/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/brendanneojw/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/marcellaantania/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yanghengtang/ip.git (master)... +Sep 16, 2023 1:56:37 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yanghengtang/ip.git (master) completed! +Sep 16, 2023 1:56:37 PM reposense.report.ReportGenerator analyzeRepos +INFO: [56/480] Analyzing https://github.com/p-xp/ip.git (master)... +Sep 16, 2023 1:56:37 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/p-xp/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/p-xp/ip.git (master)... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tim-pipi/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/li-rongzhi/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/li-rongzhi/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/brendanneojw/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/joel-foo/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/KamiliArsyad/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/marcellaantania/ip.git completed! +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/seraphimstreets/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/seraphimstreets/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/trgao/ip.git... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/KamiliArsyad/ip.git to complete... +Sep 16, 2023 1:56:37 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/trgao/ip.git to complete... +Sep 16, 2023 1:56:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/oeggy03/ip.git (master)... +Sep 16, 2023 1:56:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/oeggy03/ip.git (master)... +Sep 16, 2023 1:56:38 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/oeggy03/ip.git (master) completed! +Sep 16, 2023 1:56:38 PM reposense.report.ReportGenerator analyzeRepos +INFO: [57/480] Analyzing https://github.com/matochichap/ip.git (master)... +Sep 16, 2023 1:56:38 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/matochichap/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/matochichap/ip.git (master)... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/li-rongzhi/ip.git completed! +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lilozz2/ip.git... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seraphimstreets/ip.git completed! +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lilozz2/ip.git to complete... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jean-cq/ip.git... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jean-cq/ip.git to complete... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/KamiliArsyad/ip.git completed! +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jedkohjk/ip.git... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/trgao/ip.git completed! +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jedkohjk/ip.git to complete... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yytan25/ip.git... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yytan25/ip.git to complete... +Sep 16, 2023 1:56:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/p-xp/ip.git (master)... +Sep 16, 2023 1:56:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/p-xp/ip.git (master)... +Sep 16, 2023 1:56:38 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/p-xp/ip.git (master) completed! +Sep 16, 2023 1:56:38 PM reposense.report.ReportGenerator analyzeRepos +INFO: [58/480] Analyzing https://github.com/applepiofmyeye/ip.git (master)... +Sep 16, 2023 1:56:38 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/applepiofmyeye/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/applepiofmyeye/ip.git (master)... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lilozz2/ip.git completed! +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ryantzr1/ip.git... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ryantzr1/ip.git to complete... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jean-cq/ip.git completed! +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/maypfv/ip.git... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/maypfv/ip.git to complete... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jedkohjk/ip.git completed! +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TohLiYuan/ip.git... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yytan25/ip.git completed! +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TohLiYuan/ip.git to complete... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JizhuoChen/ip.git... +Sep 16, 2023 1:56:38 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JizhuoChen/ip.git to complete... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ryantzr1/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/maypfv/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ChongWeiJie29/ip.git... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Goh-Li-Ting/ip.git... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Goh-Li-Ting/ip.git to complete... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ChongWeiJie29/ip.git to complete... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TohLiYuan/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JizhuoChen/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kristayeo/ip.git... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/derekjxtan/ip.git... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/derekjxtan/ip.git to complete... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kristayeo/ip.git to complete... +Sep 16, 2023 1:56:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/matochichap/ip.git (master)... +Sep 16, 2023 1:56:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/matochichap/ip.git (master)... +Sep 16, 2023 1:56:39 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/matochichap/ip.git (master) completed! +Sep 16, 2023 1:56:39 PM reposense.report.ReportGenerator analyzeRepos +INFO: [59/480] Analyzing https://github.com/TiwKangXu/ip.git (master)... +Sep 16, 2023 1:56:39 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TiwKangXu/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TiwKangXu/ip.git (master)... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ChongWeiJie29/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Goh-Li-Ting/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shashahchk/ip.git... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/shashahchk/ip.git to complete... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Chandan8186/ip.git... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kristayeo/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Chandan8186/ip.git to complete... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/alyssaongyx/ip.git... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/alyssaongyx/ip.git to complete... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/derekjxtan/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AndrewJanong/ip.git... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AndrewJanong/ip.git to complete... +Sep 16, 2023 1:56:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/applepiofmyeye/ip.git (master)... +Sep 16, 2023 1:56:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/applepiofmyeye/ip.git (master)... +Sep 16, 2023 1:56:39 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/applepiofmyeye/ip.git (master) completed! +Sep 16, 2023 1:56:39 PM reposense.report.ReportGenerator analyzeRepos +INFO: [60/480] Analyzing https://github.com/ScarletBlanks/ip.git (master)... +Sep 16, 2023 1:56:39 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ScarletBlanks/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ScarletBlanks/ip.git (master)... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chandan8186/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Kailash201/ip.git... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shashahchk/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/alyssaongyx/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AndrewJanong/ip.git completed! +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kailash201/ip.git to complete... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/laurenlim2112/ip.git... +Sep 16, 2023 1:56:39 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lambraydon/ip.git... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sk2001git/ip.git... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lambraydon/ip.git to complete... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/laurenlim2112/ip.git to complete... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sk2001git/ip.git to complete... +Sep 16, 2023 1:56:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TiwKangXu/ip.git (master)... +Sep 16, 2023 1:56:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TiwKangXu/ip.git (master)... +Sep 16, 2023 1:56:40 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TiwKangXu/ip.git (master) completed! +Sep 16, 2023 1:56:40 PM reposense.report.ReportGenerator analyzeRepos +INFO: [61/480] Analyzing https://github.com/chiayunrong/ip.git (master)... +Sep 16, 2023 1:56:40 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chiayunrong/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chiayunrong/ip.git (master)... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kailash201/ip.git completed! +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/laurenlim2112/ip.git completed! +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chonguschonguschongus/ip.git... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lshaoqin/ip.git... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chonguschonguschongus/ip.git to complete... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lshaoqin/ip.git to complete... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sk2001git/ip.git completed! +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lambraydon/ip.git completed! +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/peasantbird/ip.git... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/peasantbird/ip.git to complete... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WangCheng0116/ip.git... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WangCheng0116/ip.git to complete... +Sep 16, 2023 1:56:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ScarletBlanks/ip.git (master)... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lshaoqin/ip.git completed! +Sep 16, 2023 1:56:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ScarletBlanks/ip.git (master)... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/teozhengyang/ip.git... +Sep 16, 2023 1:56:40 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ScarletBlanks/ip.git (master) completed! +Sep 16, 2023 1:56:40 PM reposense.report.ReportGenerator analyzeRepos +INFO: [62/480] Analyzing https://github.com/jx124/ip.git (master)... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/teozhengyang/ip.git to complete... +Sep 16, 2023 1:56:40 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jx124/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jx124/ip.git (master)... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/chonguschonguschongus/ip.git completed! +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chewjh1234/ip.git... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/peasantbird/ip.git completed! +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chewjh1234/ip.git to complete... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/elaineshijie/ip.git... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/elaineshijie/ip.git to complete... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WangCheng0116/ip.git completed! +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lynnlow175/ip.git... +Sep 16, 2023 1:56:40 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lynnlow175/ip.git to complete... +Sep 16, 2023 1:56:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chiayunrong/ip.git (master)... +Sep 16, 2023 1:56:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/chiayunrong/ip.git (master)... +Sep 16, 2023 1:56:41 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/chiayunrong/ip.git (master) completed! +Sep 16, 2023 1:56:41 PM reposense.report.ReportGenerator analyzeRepos +INFO: [63/480] Analyzing https://github.com/devanshubisht/ip.git (master)... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/elaineshijie/ip.git completed! +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lordidiot/ip.git... +Sep 16, 2023 1:56:41 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/devanshubisht/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/devanshubisht/ip.git (master)... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lynnlow175/ip.git completed! +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lordidiot/ip.git to complete... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/chew01/ip.git... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/chewjh1234/ip.git completed! +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/chew01/ip.git to complete... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/RSXIX/ip.git... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/RSXIX/ip.git to complete... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lordidiot/ip.git completed! +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/juliusgambe/ip.git... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/chew01/ip.git completed! +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/juliusgambe/ip.git to complete... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zhonghan721/ip.git... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zhonghan721/ip.git to complete... +Sep 16, 2023 1:56:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jx124/ip.git (master)... +Sep 16, 2023 1:56:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jx124/ip.git (master)... +Sep 16, 2023 1:56:41 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jx124/ip.git (master) completed! +Sep 16, 2023 1:56:41 PM reposense.report.ReportGenerator analyzeRepos +INFO: [64/480] Analyzing https://github.com/AryanG01/ip.git (master)... +Sep 16, 2023 1:56:41 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AryanG01/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AryanG01/ip.git (master)... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/RSXIX/ip.git completed! +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WZWren/ip.git... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WZWren/ip.git to complete... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/teozhengyang/ip.git completed! +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/juliusgambe/ip.git completed! +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/inezkok/ip.git... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wasjoe1/ip.git... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wasjoe1/ip.git to complete... +Sep 16, 2023 1:56:41 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/inezkok/ip.git to complete... +Sep 16, 2023 1:56:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/devanshubisht/ip.git (master)... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhonghan721/ip.git completed! +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kokrui/ip.git... +Sep 16, 2023 1:56:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/devanshubisht/ip.git (master)... +Sep 16, 2023 1:56:42 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/devanshubisht/ip.git (master) completed! +Sep 16, 2023 1:56:42 PM reposense.report.ReportGenerator analyzeRepos +INFO: [65/480] Analyzing https://github.com/Clin-lyx/ip.git (master)... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kokrui/ip.git to complete... +Sep 16, 2023 1:56:42 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Clin-lyx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Clin-lyx/ip.git (master)... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WZWren/ip.git completed! +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jinyang628/ip.git... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jinyang628/ip.git to complete... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/inezkok/ip.git completed! +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wasjoe1/ip.git completed! +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nananakx-x/ip.git... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ylyma/ip.git... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nananakx-x/ip.git to complete... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ylyma/ip.git to complete... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kokrui/ip.git completed! +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AnnabelTing/ip.git... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AnnabelTing/ip.git to complete... +Sep 16, 2023 1:56:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AryanG01/ip.git (master)... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jinyang628/ip.git completed! +Sep 16, 2023 1:56:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AryanG01/ip.git (master)... +Sep 16, 2023 1:56:42 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AryanG01/ip.git (master) completed! +Sep 16, 2023 1:56:42 PM reposense.report.ReportGenerator analyzeRepos +INFO: [66/480] Analyzing https://github.com/kayabuttertoastt/ip.git (master)... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/timetraveller-123/ip.git... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/timetraveller-123/ip.git to complete... +Sep 16, 2023 1:56:42 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kayabuttertoastt/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kayabuttertoastt/ip.git (master)... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nananakx-x/ip.git completed! +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AnnabelTing/ip.git completed! +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LicongHuang/ip.git... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Jweng88/ip.git... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Jweng88/ip.git to complete... +Sep 16, 2023 1:56:42 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LicongHuang/ip.git to complete... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/timetraveller-123/ip.git completed! +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/EricXiong420/ip.git... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/EricXiong420/ip.git to complete... +Sep 16, 2023 1:56:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Clin-lyx/ip.git (master)... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Jweng88/ip.git completed! +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LicongHuang/ip.git completed! +Sep 16, 2023 1:56:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Clin-lyx/ip.git (master)... +Sep 16, 2023 1:56:43 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Clin-lyx/ip.git (master) completed! +Sep 16, 2023 1:56:43 PM reposense.report.ReportGenerator analyzeRepos +INFO: [67/480] Analyzing https://github.com/jonasongg/ip.git (master)... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jovkusuma/ip.git... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/bhnuka/ip.git... +Sep 16, 2023 1:56:43 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jonasongg/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jonasongg/ip.git (master)... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jovkusuma/ip.git to complete... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/bhnuka/ip.git to complete... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ylyma/ip.git completed! +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/J-hta-n/ip.git... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/J-hta-n/ip.git to complete... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bhnuka/ip.git completed! +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Tim-Siu/ip.git... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jovkusuma/ip.git completed! +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Tim-Siu/ip.git to complete... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yarnmengnus/ip.git... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yarnmengnus/ip.git to complete... +Sep 16, 2023 1:56:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kayabuttertoastt/ip.git (master)... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/EricXiong420/ip.git completed! +Sep 16, 2023 1:56:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kayabuttertoastt/ip.git (master)... +Sep 16, 2023 1:56:43 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kayabuttertoastt/ip.git (master) completed! +Sep 16, 2023 1:56:43 PM reposense.report.ReportGenerator analyzeRepos +INFO: [68/480] Analyzing https://github.com/sheryew/ip.git (master)... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sopa301/ip.git... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sopa301/ip.git to complete... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/J-hta-n/ip.git completed! +Sep 16, 2023 1:56:43 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/sheryew/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/sheryew/ip.git (master)... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ngeeyonglim/ip.git... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ngeeyonglim/ip.git to complete... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yarnmengnus/ip.git completed! +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/flexibo/ip.git... +Sep 16, 2023 1:56:43 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Tim-Siu/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/flexibo/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ItsTYtan/ip.git... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ItsTYtan/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sopa301/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/javinchua/ip.git... +Sep 16, 2023 1:56:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jonasongg/ip.git (master)... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ngeeyonglim/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/javinchua/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/amosting/ip.git... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/amosting/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jonasongg/ip.git (master)... +Sep 16, 2023 1:56:44 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jonasongg/ip.git (master) completed! +Sep 16, 2023 1:56:44 PM reposense.report.ReportGenerator analyzeRepos +INFO: [69/480] Analyzing https://github.com/yiwen101/ip.git (master)... +Sep 16, 2023 1:56:44 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yiwen101/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yiwen101/ip.git (master)... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/flexibo/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Cleon2/ip.git... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Cleon2/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ItsTYtan/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ketweeen/ip.git... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ketweeen/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/javinchua/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/amosting/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sudarshan2401/ip.git... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wui-hong/ip.git... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sudarshan2401/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wui-hong/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/sheryew/ip.git (master)... +Sep 16, 2023 1:56:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/sheryew/ip.git (master)... +Sep 16, 2023 1:56:44 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/sheryew/ip.git (master) completed! +Sep 16, 2023 1:56:44 PM reposense.report.ReportGenerator analyzeRepos +INFO: [70/480] Analyzing https://github.com/tiongMax/ip.git (master)... +Sep 16, 2023 1:56:44 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tiongMax/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tiongMax/ip.git (master)... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Cleon2/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Respirayson/ip.git... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wui-hong/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Respirayson/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Chrainx/ip.git... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sudarshan2401/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Chrainx/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ketweeen/ip.git completed! +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/shishirbychapur/ip.git... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/shishirbychapur/ip.git to complete... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/sunzihan23/ip.git... +Sep 16, 2023 1:56:44 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/sunzihan23/ip.git to complete... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Respirayson/ip.git completed! +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wj331/ip.git... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wj331/ip.git to complete... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/shishirbychapur/ip.git completed! +Sep 16, 2023 1:56:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yiwen101/ip.git (master)... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tjch-o/ip.git... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/sunzihan23/ip.git completed! +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tjch-o/ip.git to complete... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/licongshen12/ip.git... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/licongshen12/ip.git to complete... +Sep 16, 2023 1:56:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yiwen101/ip.git (master)... +Sep 16, 2023 1:56:45 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yiwen101/ip.git (master) completed! +Sep 16, 2023 1:56:45 PM reposense.report.ReportGenerator analyzeRepos +INFO: [71/480] Analyzing https://github.com/chuababyy/ip.git (master)... +Sep 16, 2023 1:56:45 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chuababyy/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chuababyy/ip.git (master)... +Sep 16, 2023 1:56:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiongMax/ip.git (master)... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wj331/ip.git completed! +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/mamayuan/ip.git... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Chrainx/ip.git completed! +Sep 16, 2023 1:56:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiongMax/ip.git (master)... +Sep 16, 2023 1:56:45 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiongMax/ip.git (master) completed! +Sep 16, 2023 1:56:45 PM reposense.report.ReportGenerator analyzeRepos +INFO: [72/480] Analyzing https://github.com/supermii2/ip.git (master)... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mamayuan/ip.git to complete... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ong-wei-hong/ip.git... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ong-wei-hong/ip.git to complete... +Sep 16, 2023 1:56:45 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/supermii2/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/supermii2/ip.git (master)... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tjch-o/ip.git completed! +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/licongshen12/ip.git completed! +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tanboonkhong/ip.git... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tanboonkhong/ip.git to complete... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cbj252/ip.git... +Sep 16, 2023 1:56:45 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/cbj252/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mamayuan/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AlfredBeNoel/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AlfredBeNoel/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ong-wei-hong/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/keaganpzh/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tanboonkhong/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/keaganpzh/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ElginTZM/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ElginTZM/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chuababyy/ip.git (master)... +Sep 16, 2023 1:56:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/chuababyy/ip.git (master)... +Sep 16, 2023 1:56:46 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/chuababyy/ip.git (master) completed! +Sep 16, 2023 1:56:46 PM reposense.report.ReportGenerator analyzeRepos +INFO: [73/480] Analyzing https://github.com/remuslum/ip.git (master)... +Sep 16, 2023 1:56:46 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/remuslum/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/remuslum/ip.git (master)... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlfredBeNoel/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cbj252/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/supermii2/ip.git (master)... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LimJH2002/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LimJH2002/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cmHuang777/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/keaganpzh/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/cmHuang777/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/WeeeHung/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/WeeeHung/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/supermii2/ip.git (master)... +Sep 16, 2023 1:56:46 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/supermii2/ip.git (master) completed! +Sep 16, 2023 1:56:46 PM reposense.report.ReportGenerator analyzeRepos +INFO: [74/480] Analyzing https://github.com/nicolengk/ip.git (master)... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ElginTZM/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xxiaoweii/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xxiaoweii/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nicolengk/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nicolengk/ip.git (master)... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/WeeeHung/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/rayyan35p/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rayyan35p/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cmHuang777/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LimJH2002/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dhruvir29/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dhruvir29/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/LinWanLeii/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xxiaoweii/ip.git completed! +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/LinWanLeii/ip.git to complete... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Song-Mengfei/ip.git... +Sep 16, 2023 1:56:46 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Song-Mengfei/ip.git to complete... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rayyan35p/ip.git completed! +Sep 16, 2023 1:56:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nicolengk/ip.git (master)... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jinyuan0425/ip.git... +Sep 16, 2023 1:56:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nicolengk/ip.git (master)... +Sep 16, 2023 1:56:47 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nicolengk/ip.git (master) completed! +Sep 16, 2023 1:56:47 PM reposense.report.ReportGenerator analyzeRepos +INFO: [75/480] Analyzing https://github.com/newway1814/ip.git (master)... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jinyuan0425/ip.git to complete... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/LinWanLeii/ip.git completed! +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dhruvir29/ip.git completed! +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tiif/ip.git... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Song-Mengfei/ip.git completed! +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tiif/ip.git to complete... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicholascher/ip.git... +Sep 16, 2023 1:56:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/remuslum/ip.git (master)... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicholascher/ip.git to complete... +Sep 16, 2023 1:56:47 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/newway1814/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/newway1814/ip.git (master)... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/hcs1203/ip.git... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/hcs1203/ip.git to complete... +Sep 16, 2023 1:56:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/remuslum/ip.git (master)... +Sep 16, 2023 1:56:47 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/remuslum/ip.git (master) completed! +Sep 16, 2023 1:56:47 PM reposense.report.ReportGenerator analyzeRepos +INFO: [76/480] Analyzing https://github.com/glenngnng/ip.git (master)... +Sep 16, 2023 1:56:47 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/glenngnng/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/glenngnng/ip.git (master)... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jinyuan0425/ip.git completed! +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/papataco14/ip.git... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/papataco14/ip.git to complete... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicholascher/ip.git completed! +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/KamJiaYue/ip.git... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/hcs1203/ip.git completed! +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tiif/ip.git completed! +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/KamJiaYue/ip.git to complete... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/NereusWB922/ip.git... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/PohSayKeong/ip.git... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/NereusWB922/ip.git to complete... +Sep 16, 2023 1:56:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/PohSayKeong/ip.git to complete... +Sep 16, 2023 1:56:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/newway1814/ip.git (master)... +Sep 16, 2023 1:56:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/newway1814/ip.git (master)... +Sep 16, 2023 1:56:47 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/newway1814/ip.git (master) completed! +Sep 16, 2023 1:56:47 PM reposense.report.ReportGenerator analyzeRepos +INFO: [77/480] Analyzing https://github.com/zsh-eng/ip.git (master)... +Sep 16, 2023 1:56:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/glenngnng/ip.git (master)... +Sep 16, 2023 1:56:48 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zsh-eng/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zsh-eng/ip.git (master)... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/papataco14/ip.git completed! +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/PohSayKeong/ip.git completed! +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ivyy-poison/ip.git... +Sep 16, 2023 1:56:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/glenngnng/ip.git (master)... +Sep 16, 2023 1:56:48 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/glenngnng/ip.git (master) completed! +Sep 16, 2023 1:56:48 PM reposense.report.ReportGenerator analyzeRepos +INFO: [78/480] Analyzing https://github.com/mingyuanc/ip.git (master)... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ivyy-poison/ip.git to complete... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jacobcuison/ip.git... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jacobcuison/ip.git to complete... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/NereusWB922/ip.git completed! +Sep 16, 2023 1:56:48 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mingyuanc/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mingyuanc/ip.git (master)... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ji-just-ji/ip.git... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ji-just-ji/ip.git to complete... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/KamJiaYue/ip.git completed! +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kohkaijie/ip.git... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kohkaijie/ip.git to complete... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ivyy-poison/ip.git completed! +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/rocketninja7/ip.git... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jacobcuison/ip.git completed! +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rocketninja7/ip.git to complete... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zekone/ip.git... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zekone/ip.git to complete... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ji-just-ji/ip.git completed! +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/markgcera/ip.git... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/markgcera/ip.git to complete... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rocketninja7/ip.git completed! +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/PearlynnT/ip.git... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/PearlynnT/ip.git to complete... +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zekone/ip.git completed! +Sep 16, 2023 1:56:48 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/StevenLiudw/ip.git... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/StevenLiudw/ip.git to complete... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/markgcera/ip.git completed! +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kohkaijie/ip.git completed! +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TeeRenJing/ip.git... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/mounilsankar/ip.git... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/TeeRenJing/ip.git to complete... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/mounilsankar/ip.git to complete... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/PearlynnT/ip.git completed! +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dloh2236/ip.git... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dloh2236/ip.git to complete... +Sep 16, 2023 1:56:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mingyuanc/ip.git (master)... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/StevenLiudw/ip.git completed! +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zannloo/ip.git... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zannloo/ip.git to complete... +Sep 16, 2023 1:56:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mingyuanc/ip.git (master)... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/mounilsankar/ip.git completed! +Sep 16, 2023 1:56:49 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mingyuanc/ip.git (master) completed! +Sep 16, 2023 1:56:49 PM reposense.report.ReportGenerator analyzeRepos +INFO: [79/480] Analyzing https://github.com/LamJiuFong/ip.git (master)... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/junnengsoo/ip.git... +Sep 16, 2023 1:56:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zsh-eng/ip.git (master)... +Sep 16, 2023 1:56:49 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LamJiuFong/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LamJiuFong/ip.git (master)... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/junnengsoo/ip.git to complete... +Sep 16, 2023 1:56:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zsh-eng/ip.git (master)... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/TeeRenJing/ip.git completed! +Sep 16, 2023 1:56:49 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zsh-eng/ip.git (master) completed! +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/freshcabbage123/ip.git... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/freshcabbage123/ip.git to complete... +Sep 16, 2023 1:56:49 PM reposense.report.ReportGenerator analyzeRepos +INFO: [80/480] Analyzing https://github.com/kanna-1/ip.git (master)... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dloh2236/ip.git completed! +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Kokseng1/ip.git... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kokseng1/ip.git to complete... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zannloo/ip.git completed! +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/itsNatTan/ip.git... +Sep 16, 2023 1:56:49 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kanna-1/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kanna-1/ip.git (master)... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/itsNatTan/ip.git to complete... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/junnengsoo/ip.git completed! +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tjingsheng/ip.git... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tjingsheng/ip.git to complete... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/freshcabbage123/ip.git completed! +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ZD292/ip.git... +Sep 16, 2023 1:56:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ZD292/ip.git to complete... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kokseng1/ip.git completed! +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/alientian/ip.git... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/itsNatTan/ip.git completed! +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/alientian/ip.git to complete... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/frrrrry/ip.git... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/frrrrry/ip.git to complete... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ZD292/ip.git completed! +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tjingsheng/ip.git completed! +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wanghejin/ip.git... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/MagnificentCreature/ip.git... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wanghejin/ip.git to complete... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/MagnificentCreature/ip.git to complete... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/alientian/ip.git completed! +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/SungMatt/ip.git... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/frrrrry/ip.git completed! +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/SungMatt/ip.git to complete... +Sep 16, 2023 1:56:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LamJiuFong/ip.git (master)... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/andrefoo/ip.git... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/andrefoo/ip.git to complete... +Sep 16, 2023 1:56:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LamJiuFong/ip.git (master)... +Sep 16, 2023 1:56:50 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LamJiuFong/ip.git (master) completed! +Sep 16, 2023 1:56:50 PM reposense.report.ReportGenerator analyzeRepos +INFO: [81/480] Analyzing https://github.com/starrylight99/ip.git (master)... +Sep 16, 2023 1:56:50 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/starrylight99/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/starrylight99/ip.git (master)... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/MagnificentCreature/ip.git completed! +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tohpinren/ip.git... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/SungMatt/ip.git completed! +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tohpinren/ip.git to complete... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wanghejin/ip.git completed! +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/XihuaZ/ip.git... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xavierpok/ip.git... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/XihuaZ/ip.git to complete... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/andrefoo/ip.git completed! +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xavierpok/ip.git to complete... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/bkjwjason/ip.git... +Sep 16, 2023 1:56:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/bkjwjason/ip.git to complete... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tohpinren/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Choonyan02/ip.git... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Choonyan02/ip.git to complete... +Sep 16, 2023 1:56:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kanna-1/ip.git (master)... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xavierpok/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/XihuaZ/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/aarontxz/ip.git... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jianyangg/ip.git... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/aarontxz/ip.git to complete... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jianyangg/ip.git to complete... +Sep 16, 2023 1:56:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/starrylight99/ip.git (master)... +Sep 16, 2023 1:56:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kanna-1/ip.git (master)... +Sep 16, 2023 1:56:51 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kanna-1/ip.git (master) completed! +Sep 16, 2023 1:56:51 PM reposense.report.ReportGenerator analyzeRepos +INFO: [82/480] Analyzing https://github.com/GlendaChong/ip.git (master)... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/bkjwjason/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/starrylight99/ip.git (master)... +Sep 16, 2023 1:56:51 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/starrylight99/ip.git (master) completed! +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tayian/ip.git... +Sep 16, 2023 1:56:51 PM reposense.report.ReportGenerator analyzeRepos +INFO: [83/480] Analyzing https://github.com/AustinHuang1203/ip.git (master)... +Sep 16, 2023 1:56:51 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/GlendaChong/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/GlendaChong/ip.git (master)... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tayian/ip.git to complete... +Sep 16, 2023 1:56:51 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AustinHuang1203/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AustinHuang1203/ip.git (master)... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Choonyan02/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wnchan/ip.git... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wnchan/ip.git to complete... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jianyangg/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/aarontxz/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Jweewee/ip.git... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/cyaoxuan/ip.git... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Jweewee/ip.git to complete... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tayian/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/cyaoxuan/ip.git to complete... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/anthonytamzil/ip.git... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/anthonytamzil/ip.git to complete... +Sep 16, 2023 1:56:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AustinHuang1203/ip.git (master)... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Jweewee/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wnchan/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/CelestineTan03/ip.git... +Sep 16, 2023 1:56:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/cyaoxuan/ip.git completed! +Sep 16, 2023 1:56:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AustinHuang1203/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AustinHuang1203/ip.git (master) completed! +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/CelestineTan03/ip.git to complete... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/saltedfishxx/ip.git... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/euchangxian/ip.git... +Sep 16, 2023 1:56:52 PM reposense.report.ReportGenerator analyzeRepos +INFO: [84/480] Analyzing https://github.com/seewhyjay/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/saltedfishxx/ip.git to complete... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/anthonytamzil/ip.git completed! +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/euchangxian/ip.git to complete... +Sep 16, 2023 1:56:52 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/seewhyjay/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/seewhyjay/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AlagappanRa/ip.git... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AlagappanRa/ip.git to complete... +Sep 16, 2023 1:56:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/GlendaChong/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/GlendaChong/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/GlendaChong/ip.git (master) completed! +Sep 16, 2023 1:56:52 PM reposense.report.ReportGenerator analyzeRepos +INFO: [85/480] Analyzing https://github.com/xCOLOURx/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/xCOLOURx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/xCOLOURx/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/CelestineTan03/ip.git completed! +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Ken-Lai/ip.git... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/saltedfishxx/ip.git completed! +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Ken-Lai/ip.git to complete... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AlagappanRa/ip.git completed! +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/felibunnyy/ip.git... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/itssisi/ip.git... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/felibunnyy/ip.git to complete... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/itssisi/ip.git to complete... +Sep 16, 2023 1:56:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/seewhyjay/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/seewhyjay/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/seewhyjay/ip.git (master) completed! +Sep 16, 2023 1:56:52 PM reposense.report.ReportGenerator analyzeRepos +INFO: [86/480] Analyzing https://github.com/ruth-lim/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/euchangxian/ip.git completed! +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Ken-Lai/ip.git completed! +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jamz903/ip.git... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jamz903/ip.git to complete... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Kevin-Liusx/ip.git... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/felibunnyy/ip.git completed! +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Kevin-Liusx/ip.git to complete... +Sep 16, 2023 1:56:52 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruth-lim/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruth-lim/ip.git (master)... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Propene-Dan/ip.git... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/itssisi/ip.git completed! +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Propene-Dan/ip.git to complete... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ChuanXinNg/ip.git... +Sep 16, 2023 1:56:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ChuanXinNg/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jamz903/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/xCOLOURx/ip.git (master)... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Kevin-Liusx/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kenvynKwek/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Propene-Dan/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kenvynKwek/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ChuanXinNg/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Ruizhi2001/ip.git... +Sep 16, 2023 1:56:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/xCOLOURx/ip.git (master)... +Sep 16, 2023 1:56:53 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/xCOLOURx/ip.git (master) completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/prawnzyy/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.ReportGenerator analyzeRepos +INFO: [87/480] Analyzing https://github.com/limzhenwy/ip.git (master)... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Ruizhi2001/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/saraozn/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/prawnzyy/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/saraozn/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/limzhenwy/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/limzhenwy/ip.git (master)... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Ruizhi2001/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kenvynKwek/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicholastng010601/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicholastng010601/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/prawnzyy/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/DistractedCat/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DistractedCat/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yezkez10/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/saraozn/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yezkez10/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/revdrag/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/revdrag/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/limzhenwy/ip.git (master)... +Sep 16, 2023 1:56:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/limzhenwy/ip.git (master)... +Sep 16, 2023 1:56:53 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/limzhenwy/ip.git (master) completed! +Sep 16, 2023 1:56:53 PM reposense.report.ReportGenerator analyzeRepos +INFO: [88/480] Analyzing https://github.com/zacwong2151/ip.git (master)... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicholastng010601/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yezkez10/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/alvinlim277/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/JasonRay168/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/zacwong2151/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/zacwong2151/ip.git (master)... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/alvinlim277/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/JasonRay168/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/DistractedCat/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/revdrag/ip.git completed! +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/billieboy7/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jannnice/ip.git... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/billieboy7/ip.git to complete... +Sep 16, 2023 1:56:53 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jannnice/ip.git to complete... +Sep 16, 2023 1:56:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ruth-lim/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ruth-lim/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ruth-lim/ip.git (master) completed! +Sep 16, 2023 1:56:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [89/480] Analyzing https://github.com/teoks0199/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/teoks0199/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/teoks0199/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/JasonRay168/ip.git completed! +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/billieboy7/ip.git completed! +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/evanyan13/ip.git... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/alvinlim277/ip.git completed! +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/samuelim01/ip.git... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/evanyan13/ip.git to complete... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dinde2004/ip.git... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/samuelim01/ip.git to complete... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jannnice/ip.git completed! +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dinde2004/ip.git to complete... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/seanpzk/ip.git... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/seanpzk/ip.git to complete... +Sep 16, 2023 1:56:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zacwong2151/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zacwong2151/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zacwong2151/ip.git (master) completed! +Sep 16, 2023 1:56:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [90/480] Analyzing https://github.com/awhb/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/samuelim01/ip.git completed! +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/KumChaiYin/ip.git... +Sep 16, 2023 1:56:54 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/awhb/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/awhb/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/KumChaiYin/ip.git to complete... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dinde2004/ip.git completed! +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/evanyan13/ip.git completed! +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lsyurea/ip.git... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/seanpzk/ip.git completed! +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Sasmik23/ip.git... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lsyurea/ip.git to complete... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Sasmik23/ip.git to complete... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/geraldngjx/ip.git... +Sep 16, 2023 1:56:54 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/geraldngjx/ip.git to complete... +Sep 16, 2023 1:56:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/teoks0199/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/teoks0199/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/teoks0199/ip.git (master) completed! +Sep 16, 2023 1:56:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [91/480] Analyzing https://github.com/Zjinnnn/ip.git (master)... +Sep 16, 2023 1:56:54 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Zjinnnn/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Zjinnnn/ip.git (master)... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/KumChaiYin/ip.git completed! +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lululwtv/ip.git... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/geraldngjx/ip.git completed! +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lululwtv/ip.git to complete... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/garylow2001/ip.git... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lsyurea/ip.git completed! +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/garylow2001/ip.git to complete... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sasmik23/ip.git completed! +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/leontan2/ip.git... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/leontan2/ip.git to complete... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wamps-jp/ip.git... +Sep 16, 2023 1:56:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/awhb/ip.git (master)... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wamps-jp/ip.git to complete... +Sep 16, 2023 1:56:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/awhb/ip.git (master)... +Sep 16, 2023 1:56:55 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/awhb/ip.git (master) completed! +Sep 16, 2023 1:56:55 PM reposense.report.ReportGenerator analyzeRepos +INFO: [92/480] Analyzing https://github.com/qz1004/ip.git (master)... +Sep 16, 2023 1:56:55 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/qz1004/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/qz1004/ip.git (master)... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/garylow2001/ip.git completed! +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dickongwd/ip.git... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dickongwd/ip.git to complete... +Sep 16, 2023 1:56:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Zjinnnn/ip.git (master)... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wamps-jp/ip.git completed! +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/leontan2/ip.git completed! +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jacksonyuan256/ip.git... +Sep 16, 2023 1:56:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Zjinnnn/ip.git (master)... +Sep 16, 2023 1:56:55 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Zjinnnn/ip.git (master) completed! +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/suryanshkushwaha/ip.git... +Sep 16, 2023 1:56:55 PM reposense.report.ReportGenerator analyzeRepos +INFO: [93/480] Analyzing https://github.com/Mahidharah/ip.git (master)... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jacksonyuan256/ip.git to complete... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/suryanshkushwaha/ip.git to complete... +Sep 16, 2023 1:56:55 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Mahidharah/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Mahidharah/ip.git (master)... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lululwtv/ip.git completed! +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wr1159/ip.git... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wr1159/ip.git to complete... +Sep 16, 2023 1:56:55 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dickongwd/ip.git completed! +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Nauxe/ip.git... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Nauxe/ip.git to complete... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jacksonyuan256/ip.git completed! +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/yyyaohhh/ip.git... +Sep 16, 2023 1:56:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/qz1004/ip.git (master)... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/yyyaohhh/ip.git to complete... +Sep 16, 2023 1:56:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/qz1004/ip.git (master)... +Sep 16, 2023 1:56:56 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/qz1004/ip.git (master) completed! +Sep 16, 2023 1:56:56 PM reposense.report.ReportGenerator analyzeRepos +INFO: [94/480] Analyzing https://github.com/pangyyen/ip.git (master)... +Sep 16, 2023 1:56:56 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/pangyyen/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/pangyyen/ip.git (master)... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wr1159/ip.git completed! +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/zhanyang01/ip.git... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/zhanyang01/ip.git to complete... +Sep 16, 2023 1:56:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Mahidharah/ip.git (master)... +Sep 16, 2023 1:56:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Mahidharah/ip.git (master)... +Sep 16, 2023 1:56:56 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Mahidharah/ip.git (master) completed! +Sep 16, 2023 1:56:56 PM reposense.report.ReportGenerator analyzeRepos +INFO: [95/480] Analyzing https://github.com/ravern/ip.git (master)... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/suryanshkushwaha/ip.git completed! +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/czhiruo/ip.git... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/czhiruo/ip.git to complete... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Nauxe/ip.git completed! +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/yyyaohhh/ip.git completed! +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/victorpengmx/ip.git... +Sep 16, 2023 1:56:56 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ravern/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ravern/ip.git (master)... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/longnguyentan/ip.git... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/victorpengmx/ip.git to complete... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/longnguyentan/ip.git to complete... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/zhanyang01/ip.git completed! +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Cikguseven/ip.git... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Cikguseven/ip.git to complete... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/czhiruo/ip.git completed! +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Eola-Z/ip.git... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Eola-Z/ip.git to complete... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/victorpengmx/ip.git completed! +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/longnguyentan/ip.git completed! +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jibtaf/ip.git... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/lipwei1808/ip.git... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/lipwei1808/ip.git to complete... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jibtaf/ip.git to complete... +Sep 16, 2023 1:56:56 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Cikguseven/ip.git completed! +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Mohammed-Faizzzz/ip.git... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Mohammed-Faizzzz/ip.git to complete... +Sep 16, 2023 1:56:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/pangyyen/ip.git (master)... +Sep 16, 2023 1:56:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/pangyyen/ip.git (master)... +Sep 16, 2023 1:56:57 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/pangyyen/ip.git (master) completed! +Sep 16, 2023 1:56:57 PM reposense.report.ReportGenerator analyzeRepos +INFO: [96/480] Analyzing https://github.com/jason-raiin/ip.git (master)... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Eola-Z/ip.git completed! +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/dylkaw/ip.git... +Sep 16, 2023 1:56:57 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jason-raiin/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jason-raiin/ip.git (master)... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/dylkaw/ip.git to complete... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/lipwei1808/ip.git completed! +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nikele2001/ip.git... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jibtaf/ip.git completed! +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nikele2001/ip.git to complete... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/DeltonCheng/ip.git... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DeltonCheng/ip.git to complete... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Mohammed-Faizzzz/ip.git completed! +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ChangruHenryQian/ip.git... +Sep 16, 2023 1:56:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ravern/ip.git (master)... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ChangruHenryQian/ip.git to complete... +Sep 16, 2023 1:56:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ravern/ip.git (master)... +Sep 16, 2023 1:56:57 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ravern/ip.git (master) completed! +Sep 16, 2023 1:56:57 PM reposense.report.ReportGenerator analyzeRepos +INFO: [97/480] Analyzing https://github.com/bobscodedump/ip.git (master)... +Sep 16, 2023 1:56:57 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bobscodedump/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bobscodedump/ip.git (master)... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nikele2001/ip.git completed! +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/craigtonlian/ip.git... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/craigtonlian/ip.git to complete... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/DeltonCheng/ip.git completed! +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/dylkaw/ip.git completed! +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/ruo-x/ip.git... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/iantsaii/ip.git... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/iantsaii/ip.git to complete... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/ruo-x/ip.git to complete... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ChangruHenryQian/ip.git completed! +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/wjacobw/ip.git... +Sep 16, 2023 1:56:57 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/wjacobw/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/ruo-x/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/craigtonlian/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/iantsaii/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/angkyakdifp/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/brein62/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/brein62/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/angkyakdifp/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nicrandomlee/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nicrandomlee/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/wjacobw/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Bryan-Goh/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Bryan-Goh/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jason-raiin/ip.git (master)... +Sep 16, 2023 1:56:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jason-raiin/ip.git (master)... +Sep 16, 2023 1:56:58 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jason-raiin/ip.git (master) completed! +Sep 16, 2023 1:56:58 PM reposense.report.ReportGenerator analyzeRepos +INFO: [98/480] Analyzing https://github.com/nixonwidjaja/ip.git (master)... +Sep 16, 2023 1:56:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/bobscodedump/ip.git (master)... +Sep 16, 2023 1:56:58 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/nixonwidjaja/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/nixonwidjaja/ip.git (master)... +Sep 16, 2023 1:56:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/bobscodedump/ip.git (master)... +Sep 16, 2023 1:56:58 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/bobscodedump/ip.git (master) completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/angkyakdifp/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.ReportGenerator analyzeRepos +INFO: [99/480] Analyzing https://github.com/ryanozx/ip.git (master)... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/brein62/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/kiatkat/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nicrandomlee/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/MadLamprey/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/xyT-T/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/kiatkat/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/MadLamprey/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryanozx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryanozx/ip.git (master)... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/xyT-T/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Bryan-Goh/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jiakai-17/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jiakai-17/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/kiatkat/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nreHieW/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nreHieW/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/MadLamprey/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/nathanielcalimag/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/xyT-T/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/nathanielcalimag/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jiakai-17/ip.git completed! +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Saezenn/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/jellywaiyan/ip.git... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Saezenn/ip.git to complete... +Sep 16, 2023 1:56:58 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/jellywaiyan/ip.git to complete... +Sep 16, 2023 1:56:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nixonwidjaja/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nreHieW/ip.git completed! +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/marquestye/ip.git... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/marquestye/ip.git to complete... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/nathanielcalimag/ip.git completed! +Sep 16, 2023 1:56:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nixonwidjaja/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nixonwidjaja/ip.git (master) completed! +Sep 16, 2023 1:56:59 PM reposense.report.ReportGenerator analyzeRepos +INFO: [100/480] Analyzing https://github.com/techjay-c/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Tang-Moyan/ip.git... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Tang-Moyan/ip.git to complete... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/jellywaiyan/ip.git completed! +Sep 16, 2023 1:56:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryanozx/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/techjay-c/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/techjay-c/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/DonovanJJ/ip.git... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Saezenn/ip.git completed! +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Sebtey/ip.git... +Sep 16, 2023 1:56:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryanozx/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/DonovanJJ/ip.git to complete... +Sep 16, 2023 1:56:59 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryanozx/ip.git (master) completed! +Sep 16, 2023 1:56:59 PM reposense.report.ReportGenerator analyzeRepos +INFO: [101/480] Analyzing https://github.com/LuahJunYang/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Sebtey/ip.git to complete... +Sep 16, 2023 1:56:59 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LuahJunYang/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LuahJunYang/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/marquestye/ip.git completed! +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/rionshocker/ip.git... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/rionshocker/ip.git to complete... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Tang-Moyan/ip.git completed! +Sep 16, 2023 1:56:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LuahJunYang/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/tyouwei/ip.git... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/DonovanJJ/ip.git completed! +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/tyouwei/ip.git to complete... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/Blizzeracz/ip.git... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/Blizzeracz/ip.git to complete... +Sep 16, 2023 1:56:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LuahJunYang/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LuahJunYang/ip.git (master) completed! +Sep 16, 2023 1:56:59 PM reposense.report.ReportGenerator analyzeRepos +INFO: [102/480] Analyzing https://github.com/HEEaZ/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Sebtey/ip.git completed! +Sep 16, 2023 1:56:59 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/HEEaZ/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:56:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/HEEaZ/ip.git (master)... +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/rionshocker/ip.git completed! +Sep 16, 2023 1:56:59 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/tyouwei/ip.git completed! +Sep 16, 2023 1:57:00 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/Blizzeracz/ip.git completed! +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/HEEaZ/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/techjay-c/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/HEEaZ/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/HEEaZ/ip.git (master) completed! +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepos +INFO: [103/480] Analyzing https://github.com/dom-buri/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/techjay-c/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/techjay-c/ip.git (master) completed! +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepos +INFO: [104/480] Analyzing https://github.com/tiongjjyi/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dom-buri/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dom-buri/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tiongjjyi/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tiongjjyi/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiongjjyi/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiongjjyi/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiongjjyi/ip.git (master) completed! +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepos +INFO: [105/480] Analyzing https://github.com/Vanessamae23/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Vanessamae23/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Vanessamae23/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dom-buri/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dom-buri/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dom-buri/ip.git (master) completed! +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepos +INFO: [106/480] Analyzing https://github.com/fuyiqiao/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/fuyiqiao/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/fuyiqiao/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Vanessamae23/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/fuyiqiao/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Vanessamae23/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/fuyiqiao/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/fuyiqiao/ip.git (master) completed! +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Vanessamae23/ip.git (master) completed! +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepos +INFO: [107/480] Analyzing https://github.com/spatuly/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepos +INFO: [108/480] Analyzing https://github.com/tanshiyu1999/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/spatuly/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/spatuly/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanshiyu1999/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanshiyu1999/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanshiyu1999/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanshiyu1999/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanshiyu1999/ip.git (master) completed! +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator analyzeRepos +INFO: [109/480] Analyzing https://github.com/Kb-Tay/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/spatuly/ip.git (master)... +Sep 16, 2023 1:57:00 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Kb-Tay/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Kb-Tay/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/spatuly/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/spatuly/ip.git (master) completed! +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [110/480] Analyzing https://github.com/beatricecst/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/beatricecst/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/beatricecst/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Kb-Tay/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Kb-Tay/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Kb-Tay/ip.git (master) completed! +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [111/480] Analyzing https://github.com/tanveersingh10/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tanveersingh10/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tanveersingh10/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/beatricecst/ip.git (master)... -Sep 16, 2023 3:08:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/beatricecst/ip.git (master)... -Sep 16, 2023 3:08:47 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/beatricecst/ip.git (master) completed! -Sep 16, 2023 3:08:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [112/480] Analyzing https://github.com/tanveersingh10/ip.git (master)... -Sep 16, 2023 3:08:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tanveersingh10/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tanveersingh10/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tanveersingh10/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tanveersingh10/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tanveersingh10/ip.git (master) completed! -Sep 16, 2023 3:08:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [113/480] Analyzing https://github.com/s0ngyang/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [112/480] Analyzing https://github.com/s0ngyang/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/s0ngyang/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/s0ngyang/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Leb14/ip.git completed! -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/B-enguin/ip.git completed! -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yihfei/ip.git... -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/s-kybound/ip.git completed! -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AaronJT1/ip.git... -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AaronJT1/ip.git to complete... -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dlathyun/ip.git... -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yihfei/ip.git to complete... -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dlathyun/ip.git to complete... -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wesho1107/ip.git completed! -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ricketytoc/ip.git... -Sep 16, 2023 3:08:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ricketytoc/ip.git to complete... -Sep 16, 2023 3:08:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/s0ngyang/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tanveersingh10/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/s0ngyang/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/s0ngyang/ip.git (master) completed! -Sep 16, 2023 3:08:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [114/480] Analyzing https://github.com/thienmy0/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tanveersingh10/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [113/480] Analyzing https://github.com/thienmy0/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tanveersingh10/ip.git (master) completed! +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [114/480] Analyzing https://github.com/ldinghan/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/thienmy0/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/thienmy0/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ldinghan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ldinghan/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/thienmy0/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/thienmy0/ip.git (master)... -Sep 16, 2023 3:08:48 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/thienmy0/ip.git (master) completed! -Sep 16, 2023 3:08:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [115/480] Analyzing https://github.com/ldinghan/ip.git (master)... -Sep 16, 2023 3:08:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ldinghan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ldinghan/ip.git (master)... -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yihfei/ip.git completed! -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Angelyxx/ip.git... -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Angelyxx/ip.git to complete... -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dlathyun/ip.git completed! -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jingting1412/ip.git... -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ricketytoc/ip.git completed! -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/SinhaVedant/ip.git... -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jingting1412/ip.git to complete... -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AaronJT1/ip.git completed! -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/SinhaVedant/ip.git to complete... -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/freddychenyouren2/ip.git... -Sep 16, 2023 3:08:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/freddychenyouren2/ip.git to complete... -Sep 16, 2023 3:08:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [115/480] Analyzing https://github.com/feifeiraindrops/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/feifeiraindrops/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/feifeiraindrops/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ldinghan/ip.git (master)... -Sep 16, 2023 3:08:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ldinghan/ip.git (master)... -Sep 16, 2023 3:08:49 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ldinghan/ip.git (master) completed! -Sep 16, 2023 3:08:49 AM reposense.report.ReportGenerator analyzeRepos -INFO: [116/480] Analyzing https://github.com/feifeiraindrops/ip.git (master)... -Sep 16, 2023 3:08:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/feifeiraindrops/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/feifeiraindrops/ip.git (master)... -Sep 16, 2023 3:08:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AlainS87/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/feifeiraindrops/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AlainS87/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AlainS87/ip.git (master) completed! -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Angelyxx/ip.git completed! -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [117/480] Analyzing https://github.com/ryanongwx/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jordankanghm/ip.git... -Sep 16, 2023 3:08:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/feifeiraindrops/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/feifeiraindrops/ip.git (master) completed! -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jordankanghm/ip.git to complete... -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [118/480] Analyzing https://github.com/kwangthiag/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jingting1412/ip.git completed! -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SinhaVedant/ip.git completed! -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [116/480] Analyzing https://github.com/ryanongwx/ip.git (master)... +Sep 16, 2023 1:57:01 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ryanongwx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ryanongwx/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kwangthiag/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kwangthiag/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/adhigop13/ip.git... -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/waseemingly/ip.git... -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/adhigop13/ip.git to complete... -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/waseemingly/ip.git to complete... -Sep 16, 2023 3:08:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ryanongwx/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ryanongwx/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ryanongwx/ip.git (master) completed! -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [119/480] Analyzing https://github.com/elhy1999/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator analyzeRepos +INFO: [117/480] Analyzing https://github.com/kwangthiag/ip.git (master)... +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kwangthiag/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kwangthiag/ip.git (master)... +Sep 16, 2023 1:57:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/feifeiraindrops/ip.git (master)... +Sep 16, 2023 1:57:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/feifeiraindrops/ip.git (master)... +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/feifeiraindrops/ip.git (master) completed! +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator analyzeRepos +INFO: [118/480] Analyzing https://github.com/elhy1999/ip.git (master)... +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/elhy1999/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/elhy1999/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kwangthiag/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kwangthiag/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kwangthiag/ip.git (master) completed! -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [120/480] Analyzing https://github.com/songgthu/ip.git (master)... -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/freddychenyouren2/ip.git completed! -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/raydenlim/ip.git... -Sep 16, 2023 3:08:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/raydenlim/ip.git to complete... -Sep 16, 2023 3:08:50 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator analyzeRepos +INFO: [119/480] Analyzing https://github.com/songgthu/ip.git (master)... +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/songgthu/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/songgthu/ip.git (master)... -Sep 16, 2023 3:08:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/adhigop13/ip.git completed! -Sep 16, 2023 3:08:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jordankanghm/ip.git completed! -Sep 16, 2023 3:08:51 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jingyu987/ip.git... -Sep 16, 2023 3:08:51 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/FerdiHS/ip.git... -Sep 16, 2023 3:08:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/FerdiHS/ip.git to complete... -Sep 16, 2023 3:08:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jingyu987/ip.git to complete... -Sep 16, 2023 3:08:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/songgthu/ip.git (master)... -Sep 16, 2023 3:08:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/songgthu/ip.git (master)... -Sep 16, 2023 3:08:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/songgthu/ip.git (master) completed! -Sep 16, 2023 3:08:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [121/480] Analyzing https://github.com/simbayippy/ip.git (master)... -Sep 16, 2023 3:08:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/simbayippy/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/simbayippy/ip.git (master)... -Sep 16, 2023 3:08:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/elhy1999/ip.git (master)... -Sep 16, 2023 3:08:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/elhy1999/ip.git (master)... -Sep 16, 2023 3:08:51 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/elhy1999/ip.git (master) completed! -Sep 16, 2023 3:08:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [122/480] Analyzing https://github.com/GohTengFong/ip.git (master)... -Sep 16, 2023 3:08:51 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator analyzeRepos +INFO: [120/480] Analyzing https://github.com/AlainS87/ip.git (master)... +Sep 16, 2023 1:57:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/songgthu/ip.git (master)... +Sep 16, 2023 1:57:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/songgthu/ip.git (master)... +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/songgthu/ip.git (master) completed! +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator analyzeRepos +INFO: [121/480] Analyzing https://github.com/GohTengFong/ip.git (master)... +Sep 16, 2023 1:57:02 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/GohTengFong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/GohTengFong/ip.git (master)... -Sep 16, 2023 3:08:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/raydenlim/ip.git completed! -Sep 16, 2023 3:08:51 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jrchoo/ip.git... -Sep 16, 2023 3:08:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jrchoo/ip.git to complete... -Sep 16, 2023 3:08:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/GohTengFong/ip.git (master)... +Sep 16, 2023 1:57:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/GohTengFong/ip.git (master)... +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AlainS87/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AlainS87/ip.git (master)... +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/GohTengFong/ip.git (master) completed! +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator analyzeRepos +INFO: [122/480] Analyzing https://github.com/simbayippy/ip.git (master)... +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/simbayippy/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/simbayippy/ip.git (master)... +Sep 16, 2023 1:57:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/simbayippy/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/simbayippy/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/simbayippy/ip.git (master) completed! -Sep 16, 2023 3:08:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jingyu987/ip.git completed! -Sep 16, 2023 3:08:52 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator analyzeRepos INFO: [123/480] Analyzing https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/FerdiHS/ip.git completed! -Sep 16, 2023 3:08:52 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/RiyaMehta2211/ip.git... -Sep 16, 2023 3:08:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/RiyaMehta2211/ip.git to complete... -Sep 16, 2023 3:08:52 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/leezhanpeng/ip.git... -Sep 16, 2023 3:08:52 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Khaleelur-Rahman/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/leezhanpeng/ip.git to complete... -Sep 16, 2023 3:08:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/GohTengFong/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/GohTengFong/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/GohTengFong/ip.git (master) completed! -Sep 16, 2023 3:08:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [124/480] Analyzing https://github.com/proto-aiken-13/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/proto-aiken-13/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/proto-aiken-13/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jrchoo/ip.git completed! -Sep 16, 2023 3:08:52 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/juzzztinsoong/ip.git... -Sep 16, 2023 3:08:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/juzzztinsoong/ip.git to complete... -Sep 16, 2023 3:08:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Khaleelur-Rahman/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Khaleelur-Rahman/ip.git (master) completed! -Sep 16, 2023 3:08:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [125/480] Analyzing https://github.com/weeweh/ip.git (master)... -Sep 16, 2023 3:08:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/weeweh/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/weeweh/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/leezhanpeng/ip.git completed! -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/darrentfy/ip.git... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/RiyaMehta2211/ip.git completed! -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/redtailedfox/ip.git... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/darrentfy/ip.git to complete... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/redtailedfox/ip.git to complete... -Sep 16, 2023 3:08:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator analyzeRepos +INFO: [124/480] Analyzing https://github.com/proto-aiken-13/ip.git (master)... +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/proto-aiken-13/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/proto-aiken-13/ip.git (master)... +Sep 16, 2023 1:57:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AlainS87/ip.git (master)... +Sep 16, 2023 1:57:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AlainS87/ip.git (master)... +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AlainS87/ip.git (master) completed! +Sep 16, 2023 1:57:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/proto-aiken-13/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:03 PM reposense.report.ReportGenerator analyzeRepos +INFO: [125/480] Analyzing https://github.com/bwangpj/ip.git (master)... +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/proto-aiken-13/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/proto-aiken-13/ip.git (master) completed! -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [126/480] Analyzing https://github.com/bwangpj/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/waseemingly/ip.git completed! -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/bwangpj/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/bwangpj/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Fallman2/ip.git... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Fallman2/ip.git to complete... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/juzzztinsoong/ip.git completed! -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Heran9/ip.git... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Heran9/ip.git to complete... -Sep 16, 2023 3:08:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/weeweh/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/weeweh/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/weeweh/ip.git (master) completed! -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [127/480] Analyzing https://github.com/s-peiran/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/s-peiran/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/s-peiran/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepos +INFO: [126/480] Analyzing https://github.com/weeweh/ip.git (master)... +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/weeweh/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/weeweh/ip.git (master)... +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/bwangpj/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/bwangpj/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/bwangpj/ip.git (master) completed! -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepos +INFO: [127/480] Analyzing https://github.com/s-peiran/ip.git (master)... +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/s-peiran/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/s-peiran/ip.git (master)... +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/weeweh/ip.git (master)... +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/weeweh/ip.git (master)... +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/weeweh/ip.git (master) completed! +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepos INFO: [128/480] Analyzing https://github.com/jylow/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jylow/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jylow/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/redtailedfox/ip.git completed! -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/VN-Hao/ip.git... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/VN-Hao/ip.git to complete... -Sep 16, 2023 3:08:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/s-peiran/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/darrentfy/ip.git completed! -Sep 16, 2023 3:08:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/s-peiran/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jingjie88/ip.git... -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/s-peiran/ip.git (master) completed! -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepos INFO: [129/480] Analyzing https://github.com/lawruixi/ip.git (master)... -Sep 16, 2023 3:08:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jingjie88/ip.git to complete... -Sep 16, 2023 3:08:53 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lawruixi/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lawruixi/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jylow/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jylow/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jylow/ip.git (master) completed! -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepos INFO: [130/480] Analyzing https://github.com/JeremyYong128/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Fallman2/ip.git completed! -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JeremyYong128/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JeremyYong128/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/H1410101/ip.git... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/H1410101/ip.git to complete... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Heran9/ip.git completed! -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kimshitong/ip.git... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kimshitong/ip.git to complete... -Sep 16, 2023 3:08:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lawruixi/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lawruixi/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lawruixi/ip.git (master) completed! -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepos INFO: [131/480] Analyzing https://github.com/brandon-nam/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/brandon-nam/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/brandon-nam/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/JeremyYong128/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/JeremyYong128/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/JeremyYong128/ip.git (master) completed! -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:04 PM reposense.report.ReportGenerator analyzeRepos INFO: [132/480] Analyzing https://github.com/LHeng1/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LHeng1/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LHeng1/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/VN-Hao/ip.git completed! -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ivanleekk/ip.git... -Sep 16, 2023 3:08:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/brandon-nam/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ivanleekk/ip.git to complete... -Sep 16, 2023 3:08:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/brandon-nam/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/brandon-nam/ip.git (master) completed! -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator analyzeRepos INFO: [133/480] Analyzing https://github.com/Leb14/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/LHeng1/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Leb14/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Leb14/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/LHeng1/ip.git (master)... +Sep 16, 2023 1:57:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LHeng1/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LHeng1/ip.git (master) completed! -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jingjie88/ip.git completed! -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [134/480] Analyzing https://github.com/B-enguin/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lamchenghou/ip.git... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lamchenghou/ip.git to complete... -Sep 16, 2023 3:08:54 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/B-enguin/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/B-enguin/ip.git (master)... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/H1410101/ip.git completed! -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tayruxin/ip.git... -Sep 16, 2023 3:08:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tayruxin/ip.git to complete... -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kimshitong/ip.git completed! -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/raynertjx/ip.git... -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/raynertjx/ip.git to complete... -Sep 16, 2023 3:08:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/B-enguin/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/B-enguin/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Leb14/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/B-enguin/ip.git (master) completed! -Sep 16, 2023 3:08:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [135/480] Analyzing https://github.com/s-kybound/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator analyzeRepos +INFO: [134/480] Analyzing https://github.com/s-kybound/ip.git (master)... +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/s-kybound/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/s-kybound/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/s-kybound/ip.git (master)... +Sep 16, 2023 1:57:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/s-kybound/ip.git (master)... +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/s-kybound/ip.git (master) completed! +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator analyzeRepos +INFO: [135/480] Analyzing https://github.com/B-enguin/ip.git (master)... +Sep 16, 2023 1:57:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Leb14/ip.git (master)... +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/B-enguin/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/B-enguin/ip.git (master)... +Sep 16, 2023 1:57:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Leb14/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Leb14/ip.git (master) completed! -Sep 16, 2023 3:08:55 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator analyzeRepos INFO: [136/480] Analyzing https://github.com/wesho1107/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:05 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wesho1107/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wesho1107/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ivanleekk/ip.git completed! -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zhengyup/ip.git... -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zhengyup/ip.git to complete... -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lamchenghou/ip.git completed! -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/larrywang0701/ip.git... -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tayruxin/ip.git completed! -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/larrywang0701/ip.git to complete... -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Carlintyj/ip.git... -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Carlintyj/ip.git to complete... -Sep 16, 2023 3:08:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/s-kybound/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/s-kybound/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/s-kybound/ip.git (master) completed! -Sep 16, 2023 3:08:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [137/480] Analyzing https://github.com/yihfei/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yihfei/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yihfei/ip.git (master)... -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/raynertjx/ip.git completed! -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wxwern/ip.git... -Sep 16, 2023 3:08:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wxwern/ip.git to complete... -Sep 16, 2023 3:08:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/B-enguin/ip.git (master)... +Sep 16, 2023 1:57:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wesho1107/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wesho1107/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/B-enguin/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wesho1107/ip.git (master) completed! -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [138/480] Analyzing https://github.com/dlathyun/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/B-enguin/ip.git (master) completed! +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepos +INFO: [137/480] Analyzing https://github.com/dlathyun/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepos +INFO: [138/480] Analyzing https://github.com/yihfei/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dlathyun/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dlathyun/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yihfei/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yihfei/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yihfei/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dlathyun/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yihfei/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dlathyun/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yihfei/ip.git (master) completed! -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [139/480] Analyzing https://github.com/ricketytoc/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dlathyun/ip.git (master) completed! +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepos +INFO: [139/480] Analyzing https://github.com/AaronJT1/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepos +INFO: [140/480] Analyzing https://github.com/ricketytoc/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ricketytoc/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ricketytoc/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dlathyun/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dlathyun/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dlathyun/ip.git (master) completed! -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [140/480] Analyzing https://github.com/AaronJT1/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AaronJT1/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AaronJT1/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhengyup/ip.git completed! -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nubnubyas/ip.git... -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nubnubyas/ip.git to complete... -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Carlintyj/ip.git completed! -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/larrywang0701/ip.git completed! -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/aslam341/ip.git... -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LWZ19/ip.git... -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/aslam341/ip.git to complete... -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LWZ19/ip.git to complete... -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wxwern/ip.git completed! -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/timleow/ip.git... -Sep 16, 2023 3:08:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/timleow/ip.git to complete... -Sep 16, 2023 3:08:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ricketytoc/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AaronJT1/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ricketytoc/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ricketytoc/ip.git (master) completed! -Sep 16, 2023 3:08:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AaronJT1/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [141/480] Analyzing https://github.com/Angelyxx/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AaronJT1/ip.git (master) completed! -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [142/480] Analyzing https://github.com/SinhaVedant/ip.git (master)... -Sep 16, 2023 3:08:56 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepos +INFO: [141/480] Analyzing https://github.com/Angelyxx/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ricketytoc/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Angelyxx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Angelyxx/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/SinhaVedant/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/SinhaVedant/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SinhaVedant/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SinhaVedant/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SinhaVedant/ip.git (master) completed! -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [143/480] Analyzing https://github.com/jingting1412/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jingting1412/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jingting1412/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Angelyxx/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Angelyxx/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Angelyxx/ip.git (master) completed! -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [144/480] Analyzing https://github.com/freddychenyouren2/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nubnubyas/ip.git completed! -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/rayshawntan/ip.git... -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rayshawntan/ip.git to complete... -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/freddychenyouren2/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/freddychenyouren2/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aslam341/ip.git completed! -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LWZ19/ip.git completed! -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/aexolate/ip.git... -Sep 16, 2023 3:08:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ricketytoc/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ricketytoc/ip.git (master) completed! +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepos +INFO: [142/480] Analyzing https://github.com/jingting1412/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jingting1412/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jingting1412/ip.git (master)... +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jingting1412/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/aexolate/ip.git to complete... -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Sheeepen/ip.git... -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Sheeepen/ip.git to complete... -Sep 16, 2023 3:08:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jingting1412/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jingting1412/ip.git (master) completed! -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [145/480] Analyzing https://github.com/adhigop13/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:06 PM reposense.report.ReportGenerator analyzeRepos +INFO: [143/480] Analyzing https://github.com/SinhaVedant/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Angelyxx/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/SinhaVedant/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/SinhaVedant/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Angelyxx/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Angelyxx/ip.git (master) completed! +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator analyzeRepos +INFO: [144/480] Analyzing https://github.com/adhigop13/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/adhigop13/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/adhigop13/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/timleow/ip.git completed! -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shuyangk/ip.git... -Sep 16, 2023 3:08:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/shuyangk/ip.git to complete... -Sep 16, 2023 3:08:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SinhaVedant/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SinhaVedant/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SinhaVedant/ip.git (master) completed! +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator analyzeRepos +INFO: [145/480] Analyzing https://github.com/jordankanghm/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jordankanghm/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jordankanghm/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/adhigop13/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/adhigop13/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/adhigop13/ip.git (master) completed! -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [146/480] Analyzing https://github.com/jordankanghm/ip.git (master)... -Sep 16, 2023 3:08:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jordankanghm/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jordankanghm/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rayshawntan/ip.git completed! -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ncmathan/ip.git... -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ncmathan/ip.git to complete... -Sep 16, 2023 3:08:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator analyzeRepos +INFO: [146/480] Analyzing https://github.com/freddychenyouren2/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/freddychenyouren2/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/freddychenyouren2/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jordankanghm/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/freddychenyouren2/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jordankanghm/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jordankanghm/ip.git (master) completed! -Sep 16, 2023 3:08:58 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator analyzeRepos INFO: [147/480] Analyzing https://github.com/raydenlim/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aexolate/ip.git completed! -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/iyioon/ip.git... -Sep 16, 2023 3:08:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:07 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/raydenlim/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/raydenlim/ip.git (master)... +Sep 16, 2023 1:57:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/freddychenyouren2/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/freddychenyouren2/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/freddychenyouren2/ip.git (master) completed! -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/iyioon/ip.git to complete... -Sep 16, 2023 3:08:58 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepos INFO: [148/480] Analyzing https://github.com/jingyu987/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/raydenlim/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/raydenlim/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sheeepen/ip.git completed! -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kiwibang/ip.git... -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kiwibang/ip.git to complete... -Sep 16, 2023 3:08:58 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jingyu987/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jingyu987/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shuyangk/ip.git completed! -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/mingyu-wan/ip.git... -Sep 16, 2023 3:08:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mingyu-wan/ip.git to complete... -Sep 16, 2023 3:08:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingyu987/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jingyu987/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jingyu987/ip.git (master) completed! -Sep 16, 2023 3:08:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [149/480] Analyzing https://github.com/FerdiHS/ip.git (master)... -Sep 16, 2023 3:08:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/FerdiHS/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/FerdiHS/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ncmathan/ip.git completed! -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LuoZYi/ip.git... -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LuoZYi/ip.git to complete... -Sep 16, 2023 3:08:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/raydenlim/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/iyioon/ip.git completed! -Sep 16, 2023 3:08:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/raydenlim/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/asdfghjkxd/ip.git... -Sep 16, 2023 3:08:59 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/raydenlim/ip.git (master) completed! -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/asdfghjkxd/ip.git to complete... -Sep 16, 2023 3:08:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [150/480] Analyzing https://github.com/jrchoo/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jrchoo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jrchoo/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kiwibang/ip.git completed! -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sushiyade/ip.git... -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sushiyade/ip.git to complete... -Sep 16, 2023 3:08:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepos +INFO: [149/480] Analyzing https://github.com/FerdiHS/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/FerdiHS/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/FerdiHS/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingyu987/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jingyu987/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jingyu987/ip.git (master) completed! +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepos +INFO: [150/480] Analyzing https://github.com/RiyaMehta2211/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RiyaMehta2211/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RiyaMehta2211/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/FerdiHS/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/FerdiHS/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/FerdiHS/ip.git (master) completed! -Sep 16, 2023 3:08:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [151/480] Analyzing https://github.com/leezhanpeng/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepos +INFO: [151/480] Analyzing https://github.com/jrchoo/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jrchoo/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jrchoo/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RiyaMehta2211/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RiyaMehta2211/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RiyaMehta2211/ip.git (master) completed! +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepos +INFO: [152/480] Analyzing https://github.com/leezhanpeng/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/leezhanpeng/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/leezhanpeng/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jrchoo/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jrchoo/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jrchoo/ip.git (master) completed! -Sep 16, 2023 3:08:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [152/480] Analyzing https://github.com/RiyaMehta2211/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RiyaMehta2211/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:08:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RiyaMehta2211/ip.git (master)... -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LuoZYi/ip.git completed! -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Nid21cs/ip.git... -Sep 16, 2023 3:08:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Nid21cs/ip.git to complete... -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/asdfghjkxd/ip.git completed! -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/McNaBry/ip.git... -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/McNaBry/ip.git to complete... -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sushiyade/ip.git completed! -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/miljyy/ip.git... -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/miljyy/ip.git to complete... -Sep 16, 2023 3:09:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator analyzeRepos +INFO: [153/480] Analyzing https://github.com/juzzztinsoong/ip.git (master)... +Sep 16, 2023 1:57:08 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/juzzztinsoong/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/juzzztinsoong/ip.git (master)... +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/leezhanpeng/ip.git (master)... -Sep 16, 2023 3:09:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/leezhanpeng/ip.git (master)... -Sep 16, 2023 3:09:00 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/leezhanpeng/ip.git (master) completed! -Sep 16, 2023 3:09:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [153/480] Analyzing https://github.com/waseemingly/ip.git (master)... -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mingyu-wan/ip.git completed! -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ncduy0303/ip.git... -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ncduy0303/ip.git to complete... -Sep 16, 2023 3:09:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RiyaMehta2211/ip.git (master)... -Sep 16, 2023 3:09:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RiyaMehta2211/ip.git (master)... -Sep 16, 2023 3:09:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RiyaMehta2211/ip.git (master) completed! -Sep 16, 2023 3:09:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [154/480] Analyzing https://github.com/juzzztinsoong/ip.git (master)... -Sep 16, 2023 3:09:00 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/juzzztinsoong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/juzzztinsoong/ip.git (master)... -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Nid21cs/ip.git completed! -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/eyelessrhyme7/ip.git... -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/eyelessrhyme7/ip.git to complete... -Sep 16, 2023 3:09:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepos +INFO: [154/480] Analyzing https://github.com/darrentfy/ip.git (master)... +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/darrentfy/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/darrentfy/ip.git (master)... +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/juzzztinsoong/ip.git (master)... -Sep 16, 2023 3:09:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/juzzztinsoong/ip.git (master)... -Sep 16, 2023 3:09:00 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/juzzztinsoong/ip.git (master) completed! -Sep 16, 2023 3:09:00 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepos INFO: [155/480] Analyzing https://github.com/redtailedfox/ip.git (master)... -Sep 16, 2023 3:09:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/McNaBry/ip.git completed! -Sep 16, 2023 3:09:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/waseemingly/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/waseemingly/ip.git (master)... -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruishanteo/ip.git... -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ruishanteo/ip.git to complete... -Sep 16, 2023 3:09:01 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/redtailedfox/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/redtailedfox/ip.git (master)... -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/miljyy/ip.git completed! -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/m1oojv/ip.git... -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/m1oojv/ip.git to complete... -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ncduy0303/ip.git completed! -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Nixx162/ip.git... -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Nixx162/ip.git to complete... -Sep 16, 2023 3:09:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/redtailedfox/ip.git (master)... -Sep 16, 2023 3:09:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/darrentfy/ip.git (master)... +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/redtailedfox/ip.git (master)... -Sep 16, 2023 3:09:01 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/redtailedfox/ip.git (master) completed! -Sep 16, 2023 3:09:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [156/480] Analyzing https://github.com/darrentfy/ip.git (master)... -Sep 16, 2023 3:09:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/darrentfy/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/darrentfy/ip.git (master)... -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/eyelessrhyme7/ip.git completed! -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Gabriel4357/ip.git... -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Gabriel4357/ip.git to complete... -Sep 16, 2023 3:09:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/darrentfy/ip.git (master)... -Sep 16, 2023 3:09:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepos +INFO: [156/480] Analyzing https://github.com/Fallman2/ip.git (master)... +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/darrentfy/ip.git (master)... -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ruishanteo/ip.git completed! -Sep 16, 2023 3:09:01 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/darrentfy/ip.git (master) completed! -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/mfjkri/ip.git... -Sep 16, 2023 3:09:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mfjkri/ip.git to complete... -Sep 16, 2023 3:09:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [157/480] Analyzing https://github.com/Fallman2/ip.git (master)... -Sep 16, 2023 3:09:01 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepos +INFO: [157/480] Analyzing https://github.com/Heran9/ip.git (master)... +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Fallman2/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Fallman2/ip.git (master)... -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/m1oojv/ip.git completed! -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/junhonglow/ip.git... -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/junhonglow/ip.git to complete... -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Nixx162/ip.git completed! -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/RoeReRe/ip.git... -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/RoeReRe/ip.git to complete... -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Gabriel4357/ip.git completed! -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Badatprogrammiing/ip.git... -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Badatprogrammiing/ip.git to complete... -Sep 16, 2023 3:09:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Fallman2/ip.git (master)... -Sep 16, 2023 3:09:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Fallman2/ip.git (master)... -Sep 16, 2023 3:09:02 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Fallman2/ip.git (master) completed! -Sep 16, 2023 3:09:02 AM reposense.report.ReportGenerator analyzeRepos -INFO: [158/480] Analyzing https://github.com/Heran9/ip.git (master)... -Sep 16, 2023 3:09:02 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Heran9/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Heran9/ip.git (master)... -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mfjkri/ip.git completed! -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nknguyenhc/ip.git... -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nknguyenhc/ip.git to complete... -Sep 16, 2023 3:09:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Heran9/ip.git (master)... -Sep 16, 2023 3:09:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Heran9/ip.git (master)... -Sep 16, 2023 3:09:02 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Heran9/ip.git (master) completed! -Sep 16, 2023 3:09:02 AM reposense.report.ReportGenerator analyzeRepos -INFO: [159/480] Analyzing https://github.com/VN-Hao/ip.git (master)... -Sep 16, 2023 3:09:02 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepos +INFO: [158/480] Analyzing https://github.com/VN-Hao/ip.git (master)... +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/VN-Hao/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/VN-Hao/ip.git (master)... -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/RoeReRe/ip.git completed! -Sep 16, 2023 3:09:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/winson8222/ip.git... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/winson8222/ip.git to complete... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/junhonglow/ip.git completed! -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wujy28/ip.git... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wujy28/ip.git to complete... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Badatprogrammiing/ip.git completed! -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/SimWPEric/ip.git... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/SimWPEric/ip.git to complete... -Sep 16, 2023 3:09:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/VN-Hao/ip.git (master)... -Sep 16, 2023 3:09:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/VN-Hao/ip.git (master)... -Sep 16, 2023 3:09:03 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/VN-Hao/ip.git (master) completed! -Sep 16, 2023 3:09:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [160/480] Analyzing https://github.com/jingjie88/ip.git (master)... -Sep 16, 2023 3:09:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jingjie88/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jingjie88/ip.git (master)... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nknguyenhc/ip.git completed! -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/HugeNoob/ip.git... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/HugeNoob/ip.git to complete... -Sep 16, 2023 3:09:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jingjie88/ip.git (master)... -Sep 16, 2023 3:09:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jingjie88/ip.git (master)... -Sep 16, 2023 3:09:03 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jingjie88/ip.git (master) completed! -Sep 16, 2023 3:09:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [161/480] Analyzing https://github.com/H1410101/ip.git (master)... -Sep 16, 2023 3:09:03 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Fallman2/ip.git (master)... +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Fallman2/ip.git (master)... +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Fallman2/ip.git (master) completed! +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator analyzeRepos +INFO: [159/480] Analyzing https://github.com/H1410101/ip.git (master)... +Sep 16, 2023 1:57:09 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/H1410101/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/H1410101/ip.git (master)... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/winson8222/ip.git completed! -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lerxuann/ip.git... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lerxuann/ip.git to complete... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wujy28/ip.git completed! -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Weiennn/ip.git... -Sep 16, 2023 3:09:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Weiennn/ip.git to complete... -Sep 16, 2023 3:09:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/H1410101/ip.git (master)... -Sep 16, 2023 3:09:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/H1410101/ip.git (master)... -Sep 16, 2023 3:09:04 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/H1410101/ip.git (master) completed! -Sep 16, 2023 3:09:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [162/480] Analyzing https://github.com/kimshitong/ip.git (master)... -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SimWPEric/ip.git completed! -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/maj0-0/ip.git... -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/maj0-0/ip.git to complete... -Sep 16, 2023 3:09:04 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator analyzeRepos +INFO: [160/480] Analyzing https://github.com/jingjie88/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jingjie88/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jingjie88/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/VN-Hao/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/VN-Hao/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/VN-Hao/ip.git (master) completed! +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator analyzeRepos +INFO: [161/480] Analyzing https://github.com/kimshitong/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kimshitong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kimshitong/ip.git (master)... -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/HugeNoob/ip.git completed! -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/qyaner/ip.git... -Sep 16, 2023 3:09:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jingjie88/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jingjie88/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jingjie88/ip.git (master) completed! +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator analyzeRepos +INFO: [162/480] Analyzing https://github.com/ivanleekk/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ivanleekk/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ivanleekk/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kimshitong/ip.git (master)... -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/qyaner/ip.git to complete... -Sep 16, 2023 3:09:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kimshitong/ip.git (master)... -Sep 16, 2023 3:09:04 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kimshitong/ip.git (master) completed! -Sep 16, 2023 3:09:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [163/480] Analyzing https://github.com/ivanleekk/ip.git (master)... -Sep 16, 2023 3:09:04 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ivanleekk/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ivanleekk/ip.git (master)... -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lerxuann/ip.git completed! -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruiyangzh/ip.git... -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ruiyangzh/ip.git to complete... -Sep 16, 2023 3:09:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/waseemingly/ip.git (master)... -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Weiennn/ip.git completed! -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Bombbird2001/ip.git... -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Bombbird2001/ip.git to complete... -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/maj0-0/ip.git completed! -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/hyc17003/ip.git... -Sep 16, 2023 3:09:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/hyc17003/ip.git to complete... -Sep 16, 2023 3:09:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator analyzeRepos +INFO: [163/480] Analyzing https://github.com/waseemingly/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ivanleekk/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ivanleekk/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ivanleekk/ip.git (master) completed! -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator analyzeRepos INFO: [164/480] Analyzing https://github.com/lamchenghou/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lamchenghou/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lamchenghou/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/waseemingly/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/waseemingly/ip.git (master) completed! -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:10 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/waseemingly/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/waseemingly/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lamchenghou/ip.git (master)... +Sep 16, 2023 1:57:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lamchenghou/ip.git (master)... +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lamchenghou/ip.git (master) completed! +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator analyzeRepos INFO: [165/480] Analyzing https://github.com/tayruxin/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tayruxin/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tayruxin/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/qyaner/ip.git completed! -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/adammangzijun/ip.git... -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/adammangzijun/ip.git to complete... -Sep 16, 2023 3:09:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tayruxin/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tayruxin/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tayruxin/ip.git (master) completed! -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [166/480] Analyzing https://github.com/raynertjx/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/raynertjx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/raynertjx/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ruiyangzh/ip.git completed! -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/andytoh1/ip.git... -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/andytoh1/ip.git to complete... -Sep 16, 2023 3:09:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lamchenghou/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lamchenghou/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lamchenghou/ip.git (master) completed! -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [167/480] Analyzing https://github.com/zhengyup/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator analyzeRepos +INFO: [166/480] Analyzing https://github.com/zhengyup/ip.git (master)... +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zhengyup/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zhengyup/ip.git (master)... -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Bombbird2001/ip.git completed! -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Originalidk/ip.git... -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Originalidk/ip.git to complete... -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/hyc17003/ip.git completed! -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/quzhetao01/ip.git... -Sep 16, 2023 3:09:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/quzhetao01/ip.git to complete... -Sep 16, 2023 3:09:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/raynertjx/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/raynertjx/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/raynertjx/ip.git (master) completed! -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [168/480] Analyzing https://github.com/Carlintyj/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Carlintyj/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Carlintyj/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zhengyup/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zhengyup/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zhengyup/ip.git (master) completed! -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [169/480] Analyzing https://github.com/larrywang0701/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator analyzeRepos +INFO: [167/480] Analyzing https://github.com/raynertjx/ip.git (master)... +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/raynertjx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/raynertjx/ip.git (master)... +Sep 16, 2023 1:57:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/raynertjx/ip.git (master)... +Sep 16, 2023 1:57:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/raynertjx/ip.git (master)... +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/raynertjx/ip.git (master) completed! +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator analyzeRepos +INFO: [168/480] Analyzing https://github.com/larrywang0701/ip.git (master)... +Sep 16, 2023 1:57:11 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/larrywang0701/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/larrywang0701/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/adammangzijun/ip.git completed! -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/InfiBeyond/ip.git... -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/InfiBeyond/ip.git to complete... -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/andytoh1/ip.git completed! -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Bearypop/ip.git... -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Bearypop/ip.git to complete... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Carlintyj/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Carlintyj/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Carlintyj/ip.git (master) completed! -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [170/480] Analyzing https://github.com/wxwern/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/larrywang0701/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wxwern/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wxwern/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Originalidk/ip.git completed! -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sp4ce-cowboy/ip.git... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/larrywang0701/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/larrywang0701/ip.git (master) completed! -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sp4ce-cowboy/ip.git to complete... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator analyzeRepos +INFO: [169/480] Analyzing https://github.com/Carlintyj/ip.git (master)... +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Carlintyj/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Carlintyj/ip.git (master)... +Sep 16, 2023 1:57:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/waseemingly/ip.git (master)... +Sep 16, 2023 1:57:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/waseemingly/ip.git (master)... +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/waseemingly/ip.git (master) completed! +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator analyzeRepos +INFO: [170/480] Analyzing https://github.com/wxwern/ip.git (master)... +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wxwern/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wxwern/ip.git (master)... +Sep 16, 2023 1:57:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Carlintyj/ip.git (master)... +Sep 16, 2023 1:57:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Carlintyj/ip.git (master)... +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Carlintyj/ip.git (master) completed! +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator analyzeRepos INFO: [171/480] Analyzing https://github.com/nubnubyas/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/quzhetao01/ip.git completed! -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JasonLCY-Temp/ip.git... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nubnubyas/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nubnubyas/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JasonLCY-Temp/ip.git to complete... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nubnubyas/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nubnubyas/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nubnubyas/ip.git (master) completed! -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator analyzeRepos INFO: [172/480] Analyzing https://github.com/aslam341/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wxwern/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/aslam341/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/aslam341/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wxwern/ip.git (master)... +Sep 16, 2023 1:57:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wxwern/ip.git (master)... -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wxwern/ip.git (master) completed! -Sep 16, 2023 3:09:06 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator analyzeRepos INFO: [173/480] Analyzing https://github.com/LWZ19/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:12 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LWZ19/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LWZ19/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/InfiBeyond/ip.git completed! -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wjayee/ip.git... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wjayee/ip.git to complete... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Bearypop/ip.git completed! -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/vivienherq/ip.git... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/vivienherq/ip.git to complete... -Sep 16, 2023 3:09:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/aslam341/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/aslam341/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/aslam341/ip.git (master) completed! -Sep 16, 2023 3:09:07 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator analyzeRepos INFO: [174/480] Analyzing https://github.com/timleow/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sp4ce-cowboy/ip.git completed! -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JasonLCY-Temp/ip.git completed! -Sep 16, 2023 3:09:07 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/timleow/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/timleow/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jamesebond/ip.git... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jamesebond/ip.git to complete... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jonyeokj/ip.git... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jonyeokj/ip.git to complete... -Sep 16, 2023 3:09:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LWZ19/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LWZ19/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LWZ19/ip.git (master) completed! -Sep 16, 2023 3:09:07 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator analyzeRepos INFO: [175/480] Analyzing https://github.com/rayshawntan/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/rayshawntan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/rayshawntan/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/timleow/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/timleow/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/timleow/ip.git (master) completed! -Sep 16, 2023 3:09:07 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator analyzeRepos INFO: [176/480] Analyzing https://github.com/aexolate/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wjayee/ip.git completed! -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/victorlaiyeeteng/ip.git... -Sep 16, 2023 3:09:07 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/aexolate/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/aexolate/ip.git (master)... -Sep 16, 2023 3:09:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/victorlaiyeeteng/ip.git to complete... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/vivienherq/ip.git completed! -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lyuanww/ip.git... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lyuanww/ip.git to complete... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jonyeokj/ip.git completed! -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yongning0310/ip.git... -Sep 16, 2023 3:09:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rayshawntan/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yongning0310/ip.git to complete... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jamesebond/ip.git completed! -Sep 16, 2023 3:09:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rayshawntan/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rayshawntan/ip.git (master) completed! -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator analyzeRepos INFO: [177/480] Analyzing https://github.com/Sheeepen/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Cloud7050/ip.git... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Cloud7050/ip.git to complete... -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Sheeepen/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Sheeepen/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/aexolate/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/aexolate/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/aexolate/ip.git (master) completed! -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:13 PM reposense.report.ReportGenerator analyzeRepos INFO: [178/480] Analyzing https://github.com/shuyangk/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/shuyangk/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/shuyangk/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Sheeepen/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Sheeepen/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Sheeepen/ip.git (master) completed! -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepos INFO: [179/480] Analyzing https://github.com/ncmathan/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shuyangk/ip.git (master)... +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ncmathan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ncmathan/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shuyangk/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/shuyangk/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/shuyangk/ip.git (master) completed! -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepos INFO: [180/480] Analyzing https://github.com/iyioon/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/iyioon/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/iyioon/ip.git (master)... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/victorlaiyeeteng/ip.git completed! -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LoMaply/ip.git... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LoMaply/ip.git to complete... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lyuanww/ip.git completed! -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tllshan/ip.git... -Sep 16, 2023 3:09:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tllshan/ip.git to complete... -Sep 16, 2023 3:09:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ncmathan/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Cloud7050/ip.git completed! -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yongning0310/ip.git completed! -Sep 16, 2023 3:09:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ncmathan/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ncmathan/ip.git (master) completed! -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepos INFO: [181/480] Analyzing https://github.com/kiwibang/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Gavino3o/ip.git... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/HollaG/ip.git... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/HollaG/ip.git to complete... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Gavino3o/ip.git to complete... -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kiwibang/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kiwibang/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/iyioon/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/iyioon/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/iyioon/ip.git (master) completed! -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepos INFO: [182/480] Analyzing https://github.com/LuoZYi/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LuoZYi/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LuoZYi/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LuoZYi/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LuoZYi/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LuoZYi/ip.git (master) completed! -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepos INFO: [183/480] Analyzing https://github.com/asdfghjkxd/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/asdfghjkxd/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/asdfghjkxd/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/kiwibang/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kiwibang/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kiwibang/ip.git (master) completed! -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator analyzeRepos INFO: [184/480] Analyzing https://github.com/sushiyade/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:14 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sushiyade/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sushiyade/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LoMaply/ip.git completed! -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cheeggered/ip.git... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/cheeggered/ip.git to complete... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tllshan/ip.git completed! -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xenosf/ip.git... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xenosf/ip.git to complete... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Gavino3o/ip.git completed! -Sep 16, 2023 3:09:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sushiyade/ip.git (master)... -Sep 16, 2023 3:09:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TehOPanas/ip.git... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TehOPanas/ip.git to complete... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/HollaG/ip.git completed! -Sep 16, 2023 3:09:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sushiyade/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sushiyade/ip.git (master) completed! -Sep 16, 2023 3:09:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [185/480] Analyzing https://github.com/mingyu-wan/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/neyapraveen/ip.git... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/neyapraveen/ip.git to complete... -Sep 16, 2023 3:09:10 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mingyu-wan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mingyu-wan/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/asdfghjkxd/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/asdfghjkxd/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/asdfghjkxd/ip.git (master) completed! -Sep 16, 2023 3:09:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [186/480] Analyzing https://github.com/Nid21cs/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepos +INFO: [185/480] Analyzing https://github.com/Nid21cs/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Nid21cs/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Nid21cs/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cheeggered/ip.git completed! -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/richiehx/ip.git... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/richiehx/ip.git to complete... -Sep 16, 2023 3:09:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/asdfghjkxd/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Nid21cs/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Nid21cs/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Nid21cs/ip.git (master) completed! -Sep 16, 2023 3:09:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [187/480] Analyzing https://github.com/McNaBry/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepos +INFO: [186/480] Analyzing https://github.com/McNaBry/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/McNaBry/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/McNaBry/ip.git (master)... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xenosf/ip.git completed! -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AlyssaPng/ip.git... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AlyssaPng/ip.git to complete... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/neyapraveen/ip.git completed! -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/leezhengjing/ip.git... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/leezhengjing/ip.git to complete... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TehOPanas/ip.git completed! -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/seantehds/ip.git... -Sep 16, 2023 3:09:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/seantehds/ip.git to complete... -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/richiehx/ip.git completed! -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ceilingFan456/ip.git... -Sep 16, 2023 3:09:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/McNaBry/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ceilingFan456/ip.git to complete... -Sep 16, 2023 3:09:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/McNaBry/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/McNaBry/ip.git (master) completed! -Sep 16, 2023 3:09:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [188/480] Analyzing https://github.com/miljyy/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/asdfghjkxd/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/asdfghjkxd/ip.git (master) completed! +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepos +INFO: [187/480] Analyzing https://github.com/miljyy/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/miljyy/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/miljyy/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mingyu-wan/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mingyu-wan/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mingyu-wan/ip.git (master) completed! -Sep 16, 2023 3:09:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [189/480] Analyzing https://github.com/ncduy0303/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ncduy0303/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ncduy0303/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlyssaPng/ip.git completed! -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lihongguang00/ip.git... -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lihongguang00/ip.git to complete... -Sep 16, 2023 3:09:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/McNaBry/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/miljyy/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/McNaBry/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/miljyy/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/McNaBry/ip.git (master) completed! +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/miljyy/ip.git (master) completed! -Sep 16, 2023 3:09:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [190/480] Analyzing https://github.com/eyelessrhyme7/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/eyelessrhyme7/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/eyelessrhyme7/ip.git (master)... -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seantehds/ip.git completed! -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Singa-pirate/ip.git... -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Singa-pirate/ip.git to complete... -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/leezhengjing/ip.git completed! -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/songfangyl/ip.git... -Sep 16, 2023 3:09:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/songfangyl/ip.git to complete... -Sep 16, 2023 3:09:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepos +INFO: [188/480] Analyzing https://github.com/ncduy0303/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepos +INFO: [189/480] Analyzing https://github.com/mingyu-wan/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ncduy0303/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ncduy0303/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mingyu-wan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mingyu-wan/ip.git (master)... +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ncduy0303/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ceilingFan456/ip.git completed! -Sep 16, 2023 3:09:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ncduy0303/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/vansh284/ip.git... -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ncduy0303/ip.git (master) completed! -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/vansh284/ip.git to complete... -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator analyzeRepos -INFO: [191/480] Analyzing https://github.com/ruishanteo/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruishanteo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruishanteo/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:15 PM reposense.report.ReportGenerator analyzeRepos +INFO: [190/480] Analyzing https://github.com/eyelessrhyme7/ip.git (master)... +Sep 16, 2023 1:57:16 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/eyelessrhyme7/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/eyelessrhyme7/ip.git (master)... +Sep 16, 2023 1:57:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/eyelessrhyme7/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/eyelessrhyme7/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:16 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/eyelessrhyme7/ip.git (master) completed! -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator analyzeRepos -INFO: [192/480] Analyzing https://github.com/m1oojv/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/m1oojv/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/m1oojv/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:16 PM reposense.report.ReportGenerator analyzeRepos +INFO: [191/480] Analyzing https://github.com/ruishanteo/ip.git (master)... +Sep 16, 2023 1:57:16 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruishanteo/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruishanteo/ip.git (master)... +Sep 16, 2023 1:57:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ruishanteo/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ruishanteo/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:16 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ruishanteo/ip.git (master) completed! -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mingyu-wan/ip.git (master)... +Sep 16, 2023 1:57:16 PM reposense.report.ReportGenerator analyzeRepos +INFO: [192/480] Analyzing https://github.com/m1oojv/ip.git (master)... +Sep 16, 2023 1:57:16 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/m1oojv/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/m1oojv/ip.git (master)... +Sep 16, 2023 1:57:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mingyu-wan/ip.git (master)... +Sep 16, 2023 1:57:16 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mingyu-wan/ip.git (master) completed! +Sep 16, 2023 1:57:16 PM reposense.report.ReportGenerator analyzeRepos INFO: [193/480] Analyzing https://github.com/Nixx162/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:16 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Nixx162/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Nixx162/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/m1oojv/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/songfangyl/ip.git completed! -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/YeoBohShin/ip.git... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Singa-pirate/ip.git completed! -Sep 16, 2023 3:09:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/m1oojv/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/m1oojv/ip.git (master) completed! -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/YeoBohShin/ip.git to complete... -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator analyzeRepos -INFO: [194/480] Analyzing https://github.com/Gabriel4357/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shuenj/ip.git... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/shuenj/ip.git to complete... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lihongguang00/ip.git completed! -Sep 16, 2023 3:09:12 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Gabriel4357/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Gabriel4357/ip.git (master)... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lunaroddity/ip.git... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lunaroddity/ip.git to complete... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/vansh284/ip.git completed! -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/andrechuakj/ip.git... -Sep 16, 2023 3:09:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/andrechuakj/ip.git to complete... -Sep 16, 2023 3:09:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Nixx162/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/m1oojv/ip.git (master) completed! +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Nixx162/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Nixx162/ip.git (master) completed! -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepos +INFO: [194/480] Analyzing https://github.com/Gabriel4357/ip.git (master)... +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepos INFO: [195/480] Analyzing https://github.com/mfjkri/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Gabriel4357/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Gabriel4357/ip.git (master)... +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/mfjkri/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/mfjkri/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Gabriel4357/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Gabriel4357/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mfjkri/ip.git (master)... +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Gabriel4357/ip.git (master) completed! -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [196/480] Analyzing https://github.com/RoeReRe/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepos +INFO: [196/480] Analyzing https://github.com/junhonglow/ip.git (master)... +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mfjkri/ip.git (master)... +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/junhonglow/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/junhonglow/ip.git (master)... +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mfjkri/ip.git (master) completed! +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepos +INFO: [197/480] Analyzing https://github.com/RoeReRe/ip.git (master)... +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/RoeReRe/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/RoeReRe/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/RoeReRe/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/RoeReRe/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/RoeReRe/ip.git (master) completed! -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [197/480] Analyzing https://github.com/junhonglow/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mfjkri/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/junhonglow/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/junhonglow/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mfjkri/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/YeoBohShin/ip.git completed! -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mfjkri/ip.git (master) completed! -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepos INFO: [198/480] Analyzing https://github.com/Badatprogrammiing/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WeeMingQing/ip.git... -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WeeMingQing/ip.git to complete... -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/junhonglow/ip.git (master)... +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Badatprogrammiing/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Badatprogrammiing/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lunaroddity/ip.git completed! -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/aliciamichellew/ip.git... -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shuenj/ip.git completed! -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/andrechuakj/ip.git completed! -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/aliciamichellew/ip.git to complete... -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/samuelmui8/ip.git... -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/samuelmui8/ip.git to complete... -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/antonTan96/ip.git... -Sep 16, 2023 3:09:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/antonTan96/ip.git to complete... -Sep 16, 2023 3:09:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/junhonglow/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/junhonglow/ip.git (master)... -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/junhonglow/ip.git (master) completed! -Sep 16, 2023 3:09:13 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepos INFO: [199/480] Analyzing https://github.com/nknguyenhc/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Badatprogrammiing/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nknguyenhc/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nknguyenhc/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Badatprogrammiing/ip.git (master)... +Sep 16, 2023 1:57:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Badatprogrammiing/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Badatprogrammiing/ip.git (master) completed! -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator analyzeRepos INFO: [200/480] Analyzing https://github.com/winson8222/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:17 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/winson8222/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/winson8222/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/winson8222/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/winson8222/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/winson8222/ip.git (master) completed! -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [201/480] Analyzing https://github.com/wujy28/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wujy28/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wujy28/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WeeMingQing/ip.git completed! -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/owenyeo/ip.git... -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/owenyeo/ip.git to complete... -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/antonTan96/ip.git completed! -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/samuelmui8/ip.git completed! -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/gongg21/ip.git... -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nabonitasen/ip.git... -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/gongg21/ip.git to complete... -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nabonitasen/ip.git to complete... -Sep 16, 2023 3:09:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nknguyenhc/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aliciamichellew/ip.git completed! -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/erohsikivar/ip.git... -Sep 16, 2023 3:09:14 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/erohsikivar/ip.git to complete... -Sep 16, 2023 3:09:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nknguyenhc/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nknguyenhc/ip.git (master) completed! -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepos +INFO: [201/480] Analyzing https://github.com/wujy28/ip.git (master)... +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wujy28/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wujy28/ip.git (master)... +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/winson8222/ip.git (master)... +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/winson8222/ip.git (master)... +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/winson8222/ip.git (master) completed! +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepos INFO: [202/480] Analyzing https://github.com/SimWPEric/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/SimWPEric/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/SimWPEric/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wujy28/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wujy28/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wujy28/ip.git (master) completed! -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepos INFO: [203/480] Analyzing https://github.com/HugeNoob/ip.git (master)... -Sep 16, 2023 3:09:14 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/HugeNoob/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/HugeNoob/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/SimWPEric/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/SimWPEric/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/SimWPEric/ip.git (master) completed! -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepos INFO: [204/480] Analyzing https://github.com/lerxuann/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lerxuann/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lerxuann/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/HugeNoob/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/HugeNoob/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/HugeNoob/ip.git (master) completed! -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepos INFO: [205/480] Analyzing https://github.com/Weiennn/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/owenyeo/ip.git completed! -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/pzl111/ip.git... -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Weiennn/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Weiennn/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/pzl111/ip.git to complete... -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/gongg21/ip.git completed! -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/teozern1/ip.git... -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/teozern1/ip.git to complete... -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nabonitasen/ip.git completed! -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Elijah5399/ip.git... -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Elijah5399/ip.git to complete... -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/erohsikivar/ip.git completed! -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicleongyj/ip.git... -Sep 16, 2023 3:09:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicleongyj/ip.git to complete... -Sep 16, 2023 3:09:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lerxuann/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lerxuann/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lerxuann/ip.git (master) completed! -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator analyzeRepos INFO: [206/480] Analyzing https://github.com/maj0-0/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:18 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/maj0-0/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/maj0-0/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Weiennn/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Weiennn/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Weiennn/ip.git (master) completed! -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepos INFO: [207/480] Analyzing https://github.com/qyaner/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/qyaner/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/qyaner/ip.git (master)... -Sep 16, 2023 3:09:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/maj0-0/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/maj0-0/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/maj0-0/ip.git (master) completed! -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/qyaner/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/qyaner/ip.git (master)... +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepos INFO: [208/480] Analyzing https://github.com/ruiyangzh/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ruiyangzh/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ruiyangzh/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/qyaner/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/pzl111/ip.git completed! -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WinSheng1/ip.git... -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/teozern1/ip.git completed! -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WinSheng1/ip.git to complete... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/qyaner/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/qyaner/ip.git (master) completed! -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ryamgoh/ip.git... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepos INFO: [209/480] Analyzing https://github.com/Bombbird2001/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ryamgoh/ip.git to complete... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Bombbird2001/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Bombbird2001/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Elijah5399/ip.git completed! -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicleongyj/ip.git completed! -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yucongkoo/ip.git... -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Chen-Kuei/ip.git... -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yucongkoo/ip.git to complete... -Sep 16, 2023 3:09:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Chen-Kuei/ip.git to complete... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ruiyangzh/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ruiyangzh/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ruiyangzh/ip.git (master) completed! -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [210/480] Analyzing https://github.com/hyc17003/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/hyc17003/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/hyc17003/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/hyc17003/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/hyc17003/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/hyc17003/ip.git (master) completed! -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [211/480] Analyzing https://github.com/adammangzijun/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Bombbird2001/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepos +INFO: [210/480] Analyzing https://github.com/adammangzijun/ip.git (master)... +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/adammangzijun/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/adammangzijun/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Bombbird2001/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Bombbird2001/ip.git (master) completed! -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [212/480] Analyzing https://github.com/andytoh1/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/adammangzijun/ip.git (master)... +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/adammangzijun/ip.git (master)... +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/adammangzijun/ip.git (master) completed! +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepos +INFO: [211/480] Analyzing https://github.com/andytoh1/ip.git (master)... +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/andytoh1/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/andytoh1/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Bombbird2001/ip.git (master)... +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Bombbird2001/ip.git (master)... +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Bombbird2001/ip.git (master) completed! +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepos +INFO: [212/480] Analyzing https://github.com/hyc17003/ip.git (master)... +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/hyc17003/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/hyc17003/ip.git (master)... +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/andytoh1/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/andytoh1/ip.git (master)... -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/andytoh1/ip.git (master) completed! -Sep 16, 2023 3:09:16 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator analyzeRepos INFO: [213/480] Analyzing https://github.com/Originalidk/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Originalidk/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Originalidk/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ryamgoh/ip.git completed! -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/conradsoon/ip.git... -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/conradsoon/ip.git to complete... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/adammangzijun/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/adammangzijun/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/adammangzijun/ip.git (master) completed! -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator analyzeRepos -INFO: [214/480] Analyzing https://github.com/quzhetao01/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WinSheng1/ip.git completed! -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/GSgiansen/ip.git... -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/quzhetao01/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/quzhetao01/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/GSgiansen/ip.git to complete... -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chen-Kuei/ip.git completed! -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/et-irl/ip.git... -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/et-irl/ip.git to complete... -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yucongkoo/ip.git completed! -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/marioalvaro/ip.git... -Sep 16, 2023 3:09:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/marioalvaro/ip.git to complete... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:19 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Originalidk/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Originalidk/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/hyc17003/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/hyc17003/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/hyc17003/ip.git (master) completed! +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepos +INFO: [214/480] Analyzing https://github.com/Bearypop/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Bearypop/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Bearypop/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Originalidk/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Originalidk/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Originalidk/ip.git (master) completed! -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepos INFO: [215/480] Analyzing https://github.com/InfiBeyond/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/InfiBeyond/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/InfiBeyond/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/quzhetao01/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/quzhetao01/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/quzhetao01/ip.git (master) completed! -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator analyzeRepos -INFO: [216/480] Analyzing https://github.com/Bearypop/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Bearypop/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Bearypop/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Bearypop/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/InfiBeyond/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Bearypop/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Bearypop/ip.git (master) completed! +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepos +INFO: [216/480] Analyzing https://github.com/quzhetao01/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/InfiBeyond/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/InfiBeyond/ip.git (master) completed! -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepos INFO: [217/480] Analyzing https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/quzhetao01/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/quzhetao01/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sp4ce-cowboy/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Bearypop/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sp4ce-cowboy/ip.git (master)... -Sep 16, 2023 3:09:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Bearypop/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Bearypop/ip.git (master) completed! -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sp4ce-cowboy/ip.git (master) completed! -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepos INFO: [218/480] Analyzing https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [219/480] Analyzing https://github.com/wjayee/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/conradsoon/ip.git completed! -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/et-irl/ip.git completed! -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/GSgiansen/ip.git completed! -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Seonlo99/ip.git... -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Seonlo99/ip.git to complete... -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tim-pipi/ip.git... -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/joel-foo/ip.git... -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JasonLCY-Temp/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/marioalvaro/ip.git completed! -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tim-pipi/ip.git to complete... -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/joel-foo/ip.git to complete... -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/quzhetao01/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/quzhetao01/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/quzhetao01/ip.git (master) completed! +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepos +INFO: [219/480] Analyzing https://github.com/wjayee/ip.git (master)... +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wjayee/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wjayee/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/marcellaantania/ip.git... -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/marcellaantania/ip.git to complete... -Sep 16, 2023 3:09:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/JasonLCY-Temp/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/JasonLCY-Temp/ip.git (master) completed! -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator analyzeRepos INFO: [220/480] Analyzing https://github.com/vivienherq/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:20 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/vivienherq/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/vivienherq/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wjayee/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wjayee/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wjayee/ip.git (master) completed! -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator analyzeRepos INFO: [221/480] Analyzing https://github.com/jonyeokj/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jonyeokj/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jonyeokj/ip.git (master)... -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Seonlo99/ip.git completed! -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tim-pipi/ip.git completed! -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/brendanneojw/ip.git... -Sep 16, 2023 3:09:18 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/li-rongzhi/ip.git... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/li-rongzhi/ip.git to complete... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/brendanneojw/ip.git to complete... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/joel-foo/ip.git completed! -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/marcellaantania/ip.git completed! -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/KamiliArsyad/ip.git... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/seraphimstreets/ip.git... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/KamiliArsyad/ip.git to complete... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/seraphimstreets/ip.git to complete... -Sep 16, 2023 3:09:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/vivienherq/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jonyeokj/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/vivienherq/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/vivienherq/ip.git (master) completed! -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator analyzeRepos INFO: [222/480] Analyzing https://github.com/jamesebond/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jamesebond/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jamesebond/ip.git (master)... +Sep 16, 2023 1:57:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jonyeokj/ip.git (master)... +Sep 16, 2023 1:57:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jonyeokj/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jonyeokj/ip.git (master) completed! -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator analyzeRepos INFO: [223/480] Analyzing https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/victorlaiyeeteng/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jamesebond/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jamesebond/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jamesebond/ip.git (master)... +Sep 16, 2023 1:57:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/victorlaiyeeteng/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/victorlaiyeeteng/ip.git (master) completed! -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator analyzeRepos INFO: [224/480] Analyzing https://github.com/lyuanww/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lyuanww/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lyuanww/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jamesebond/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jamesebond/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jamesebond/ip.git (master) completed! -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lyuanww/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lyuanww/ip.git (master)... +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator analyzeRepos INFO: [225/480] Analyzing https://github.com/Cloud7050/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:21 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Cloud7050/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Cloud7050/ip.git (master)... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/brendanneojw/ip.git completed! -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/li-rongzhi/ip.git completed! -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/trgao/ip.git... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/trgao/ip.git to complete... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lilozz2/ip.git... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seraphimstreets/ip.git completed! -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lilozz2/ip.git to complete... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/KamiliArsyad/ip.git completed! -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jean-cq/ip.git... -Sep 16, 2023 3:09:19 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jedkohjk/ip.git... -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jedkohjk/ip.git to complete... -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jean-cq/ip.git to complete... -Sep 16, 2023 3:09:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lyuanww/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lyuanww/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lyuanww/ip.git (master) completed! -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [226/480] Analyzing https://github.com/yongning0310/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yongning0310/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yongning0310/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator analyzeRepos +INFO: [226/480] Analyzing https://github.com/LoMaply/ip.git (master)... +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LoMaply/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LoMaply/ip.git (master)... +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Cloud7050/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Cloud7050/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Cloud7050/ip.git (master) completed! -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [227/480] Analyzing https://github.com/LoMaply/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LoMaply/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LoMaply/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yongning0310/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yongning0310/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yongning0310/ip.git (master) completed! -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [228/480] Analyzing https://github.com/tllshan/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tllshan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tllshan/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator analyzeRepos +INFO: [227/480] Analyzing https://github.com/yongning0310/ip.git (master)... +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yongning0310/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yongning0310/ip.git (master)... +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LoMaply/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LoMaply/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LoMaply/ip.git (master) completed! -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [229/480] Analyzing https://github.com/Gavino3o/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/trgao/ip.git completed! -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lilozz2/ip.git completed! -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yytan25/ip.git... -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ryantzr1/ip.git... -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Gavino3o/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Gavino3o/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yytan25/ip.git to complete... -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ryantzr1/ip.git to complete... -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jedkohjk/ip.git completed! -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jean-cq/ip.git completed! -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/maypfv/ip.git... -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TohLiYuan/ip.git... -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TohLiYuan/ip.git to complete... -Sep 16, 2023 3:09:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/maypfv/ip.git to complete... -Sep 16, 2023 3:09:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator analyzeRepos +INFO: [228/480] Analyzing https://github.com/tllshan/ip.git (master)... +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tllshan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tllshan/ip.git (master)... +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yongning0310/ip.git (master)... +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yongning0310/ip.git (master)... +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yongning0310/ip.git (master) completed! +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tllshan/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator analyzeRepos +INFO: [229/480] Analyzing https://github.com/Gavino3o/ip.git (master)... +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tllshan/ip.git (master)... -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tllshan/ip.git (master) completed! -Sep 16, 2023 3:09:20 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator analyzeRepos INFO: [230/480] Analyzing https://github.com/HollaG/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Gavino3o/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Gavino3o/ip.git (master)... +Sep 16, 2023 1:57:22 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/HollaG/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:22 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/HollaG/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:22 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/HollaG/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Gavino3o/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/HollaG/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/HollaG/ip.git (master) completed! +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepos +INFO: [231/480] Analyzing https://github.com/cheeggered/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Gavino3o/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Gavino3o/ip.git (master) completed! -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [231/480] Analyzing https://github.com/cheeggered/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cheeggered/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cheeggered/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/HollaG/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/HollaG/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/HollaG/ip.git (master) completed! -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepos INFO: [232/480] Analyzing https://github.com/xenosf/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xenosf/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xenosf/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ryantzr1/ip.git completed! -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JizhuoChen/ip.git... -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JizhuoChen/ip.git to complete... -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yytan25/ip.git completed! -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ChongWeiJie29/ip.git... -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ChongWeiJie29/ip.git to complete... -Sep 16, 2023 3:09:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cheeggered/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cheeggered/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cheeggered/ip.git (master) completed! -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [233/480] Analyzing https://github.com/neyapraveen/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/maypfv/ip.git completed! -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Goh-Li-Ting/ip.git... -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepos +INFO: [233/480] Analyzing https://github.com/TehOPanas/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TehOPanas/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TehOPanas/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/xenosf/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/xenosf/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/xenosf/ip.git (master) completed! +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepos +INFO: [234/480] Analyzing https://github.com/neyapraveen/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/neyapraveen/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/neyapraveen/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TohLiYuan/ip.git completed! -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kristayeo/ip.git... -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Goh-Li-Ting/ip.git to complete... -Sep 16, 2023 3:09:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kristayeo/ip.git to complete... -Sep 16, 2023 3:09:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/neyapraveen/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/xenosf/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TehOPanas/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/neyapraveen/ip.git (master)... -Sep 16, 2023 3:09:21 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/neyapraveen/ip.git (master) completed! -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [234/480] Analyzing https://github.com/TehOPanas/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/xenosf/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/xenosf/ip.git (master) completed! -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TehOPanas/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TehOPanas/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepos INFO: [235/480] Analyzing https://github.com/richiehx/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TehOPanas/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TehOPanas/ip.git (master) completed! +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepos +INFO: [236/480] Analyzing https://github.com/AlyssaPng/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/richiehx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/richiehx/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/richiehx/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/richiehx/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/richiehx/ip.git (master) completed! -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [236/480] Analyzing https://github.com/AlyssaPng/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AlyssaPng/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AlyssaPng/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JizhuoChen/ip.git completed! -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/derekjxtan/ip.git... -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ChongWeiJie29/ip.git completed! -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shashahchk/ip.git... -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/derekjxtan/ip.git to complete... -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/shashahchk/ip.git to complete... -Sep 16, 2023 3:09:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TehOPanas/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TehOPanas/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TehOPanas/ip.git (master) completed! -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [237/480] Analyzing https://github.com/seantehds/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kristayeo/ip.git completed! -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Chandan8186/ip.git... -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Chandan8186/ip.git to complete... -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/seantehds/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/seantehds/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Goh-Li-Ting/ip.git completed! -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/alyssaongyx/ip.git... -Sep 16, 2023 3:09:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/alyssaongyx/ip.git to complete... -Sep 16, 2023 3:09:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/richiehx/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/richiehx/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AlyssaPng/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/richiehx/ip.git (master) completed! +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepos +INFO: [237/480] Analyzing https://github.com/leezhengjing/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AlyssaPng/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AlyssaPng/ip.git (master) completed! -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [238/480] Analyzing https://github.com/leezhengjing/ip.git (master)... -Sep 16, 2023 3:09:22 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator analyzeRepos +INFO: [238/480] Analyzing https://github.com/ceilingFan456/ip.git (master)... +Sep 16, 2023 1:57:23 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/leezhengjing/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/leezhengjing/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/seantehds/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/seantehds/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/seantehds/ip.git (master) completed! -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [239/480] Analyzing https://github.com/ceilingFan456/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ceilingFan456/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ceilingFan456/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/leezhengjing/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/leezhengjing/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/leezhengjing/ip.git (master) completed! -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [240/480] Analyzing https://github.com/songfangyl/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/songfangyl/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/songfangyl/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ceilingFan456/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/derekjxtan/ip.git completed! -Sep 16, 2023 3:09:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ceilingFan456/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ceilingFan456/ip.git (master) completed! -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator analyzeRepos +INFO: [239/480] Analyzing https://github.com/seantehds/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/seantehds/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/seantehds/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/leezhengjing/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/leezhengjing/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/leezhengjing/ip.git (master) completed! +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator analyzeRepos +INFO: [240/480] Analyzing https://github.com/lihongguang00/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lihongguang00/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lihongguang00/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/seantehds/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/seantehds/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/seantehds/ip.git (master) completed! +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator analyzeRepos INFO: [241/480] Analyzing https://github.com/Singa-pirate/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AndrewJanong/ip.git... -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AndrewJanong/ip.git to complete... -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Singa-pirate/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Singa-pirate/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/alyssaongyx/ip.git completed! -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shashahchk/ip.git completed! -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Kailash201/ip.git... -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chandan8186/ip.git completed! -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/laurenlim2112/ip.git... -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lambraydon/ip.git... -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/laurenlim2112/ip.git to complete... -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kailash201/ip.git to complete... -Sep 16, 2023 3:09:23 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lambraydon/ip.git to complete... -Sep 16, 2023 3:09:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lihongguang00/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lihongguang00/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lihongguang00/ip.git (master) completed! +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator analyzeRepos +INFO: [242/480] Analyzing https://github.com/songfangyl/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/songfangyl/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/songfangyl/ip.git (master)... +Sep 16, 2023 1:57:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Singa-pirate/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Singa-pirate/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/songfangyl/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Singa-pirate/ip.git (master) completed! -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator analyzeRepos -INFO: [242/480] Analyzing https://github.com/lihongguang00/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/songfangyl/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/songfangyl/ip.git (master) completed! -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator analyzeRepos INFO: [243/480] Analyzing https://github.com/vansh284/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lihongguang00/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lihongguang00/ip.git (master)... -Sep 16, 2023 3:09:23 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:24 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/vansh284/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/vansh284/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AndrewJanong/ip.git completed! -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sk2001git/ip.git... -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sk2001git/ip.git to complete... -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/laurenlim2112/ip.git completed! -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chonguschonguschongus/ip.git... -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kailash201/ip.git completed! -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chonguschonguschongus/ip.git to complete... -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lambraydon/ip.git completed! -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lshaoqin/ip.git... -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/peasantbird/ip.git... -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lshaoqin/ip.git to complete... -Sep 16, 2023 3:09:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/peasantbird/ip.git to complete... -Sep 16, 2023 3:09:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/vansh284/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/vansh284/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/vansh284/ip.git (master) completed! -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [244/480] Analyzing https://github.com/YeoBohShin/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/YeoBohShin/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/YeoBohShin/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lihongguang00/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lihongguang00/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lihongguang00/ip.git (master) completed! -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [245/480] Analyzing https://github.com/lunaroddity/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lunaroddity/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lunaroddity/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/YeoBohShin/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/YeoBohShin/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/YeoBohShin/ip.git (master) completed! -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [246/480] Analyzing https://github.com/shuenj/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shuenj/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shuenj/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lunaroddity/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lunaroddity/ip.git (master)... -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lunaroddity/ip.git (master) completed! -Sep 16, 2023 3:09:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [247/480] Analyzing https://github.com/andrechuakj/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/andrechuakj/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/andrechuakj/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sk2001git/ip.git completed! -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/peasantbird/ip.git completed! -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/chonguschonguschongus/ip.git completed! -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WangCheng0116/ip.git... -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/teozhengyang/ip.git... -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lshaoqin/ip.git completed! -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WangCheng0116/ip.git to complete... -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chewjh1234/ip.git... -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/elaineshijie/ip.git... -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/teozhengyang/ip.git to complete... -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/elaineshijie/ip.git to complete... -Sep 16, 2023 3:09:25 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chewjh1234/ip.git to complete... -Sep 16, 2023 3:09:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/songfangyl/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/songfangyl/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/songfangyl/ip.git (master) completed! +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepos +INFO: [244/480] Analyzing https://github.com/YeoBohShin/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/YeoBohShin/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/YeoBohShin/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/vansh284/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/vansh284/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/vansh284/ip.git (master) completed! +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepos +INFO: [245/480] Analyzing https://github.com/shuenj/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shuenj/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shuenj/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/YeoBohShin/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/YeoBohShin/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/YeoBohShin/ip.git (master) completed! +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepos +INFO: [246/480] Analyzing https://github.com/lunaroddity/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lunaroddity/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lunaroddity/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/shuenj/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/shuenj/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/shuenj/ip.git (master) completed! -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepos +INFO: [247/480] Analyzing https://github.com/andrechuakj/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/andrechuakj/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/andrechuakj/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lunaroddity/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lunaroddity/ip.git (master)... +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lunaroddity/ip.git (master) completed! +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepos INFO: [248/480] Analyzing https://github.com/WeeMingQing/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/WeeMingQing/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/WeeMingQing/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/andrechuakj/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/andrechuakj/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/andrechuakj/ip.git (master) completed! -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:25 PM reposense.report.ReportGenerator analyzeRepos INFO: [249/480] Analyzing https://github.com/antonTan96/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/antonTan96/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/antonTan96/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WeeMingQing/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/antonTan96/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WeeMingQing/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/antonTan96/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/antonTan96/ip.git (master) completed! -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WeeMingQing/ip.git (master) completed! -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepos INFO: [250/480] Analyzing https://github.com/samuelmui8/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [251/480] Analyzing https://github.com/aliciamichellew/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/samuelmui8/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/samuelmui8/ip.git (master)... -Sep 16, 2023 3:09:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/aliciamichellew/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/aliciamichellew/ip.git (master)... -Sep 16, 2023 3:09:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/elaineshijie/ip.git completed! -Sep 16, 2023 3:09:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WangCheng0116/ip.git completed! -Sep 16, 2023 3:09:26 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lynnlow175/ip.git... -Sep 16, 2023 3:09:26 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lordidiot/ip.git... -Sep 16, 2023 3:09:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lynnlow175/ip.git to complete... -Sep 16, 2023 3:09:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lordidiot/ip.git to complete... -Sep 16, 2023 3:09:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/antonTan96/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/antonTan96/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/antonTan96/ip.git (master) completed! +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepos +INFO: [251/480] Analyzing https://github.com/owenyeo/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/owenyeo/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/owenyeo/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/samuelmui8/ip.git (master)... -Sep 16, 2023 3:09:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/chewjh1234/ip.git completed! -Sep 16, 2023 3:09:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/samuelmui8/ip.git (master)... -Sep 16, 2023 3:09:26 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/samuelmui8/ip.git (master) completed! -Sep 16, 2023 3:09:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [252/480] Analyzing https://github.com/owenyeo/ip.git (master)... -Sep 16, 2023 3:09:26 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/chew01/ip.git... -Sep 16, 2023 3:09:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/chew01/ip.git to complete... -Sep 16, 2023 3:09:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/owenyeo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/owenyeo/ip.git (master)... -Sep 16, 2023 3:09:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/aliciamichellew/ip.git (master)... -Sep 16, 2023 3:09:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/aliciamichellew/ip.git (master)... -Sep 16, 2023 3:09:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/aliciamichellew/ip.git (master) completed! -Sep 16, 2023 3:09:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [253/480] Analyzing https://github.com/gongg21/ip.git (master)... -Sep 16, 2023 3:09:26 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lynnlow175/ip.git completed! -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/RSXIX/ip.git... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lordidiot/ip.git completed! -Sep 16, 2023 3:09:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepos +INFO: [252/480] Analyzing https://github.com/aliciamichellew/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/aliciamichellew/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/aliciamichellew/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/owenyeo/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/RSXIX/ip.git to complete... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/juliusgambe/ip.git... -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/gongg21/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/gongg21/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/juliusgambe/ip.git to complete... -Sep 16, 2023 3:09:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/owenyeo/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/owenyeo/ip.git (master) completed! -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [254/480] Analyzing https://github.com/nabonitasen/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/teozhengyang/ip.git completed! -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepos +INFO: [253/480] Analyzing https://github.com/nabonitasen/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nabonitasen/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nabonitasen/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zhonghan721/ip.git... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zhonghan721/ip.git to complete... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/chew01/ip.git completed! -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WZWren/ip.git... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WZWren/ip.git to complete... -Sep 16, 2023 3:09:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/gongg21/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/gongg21/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/gongg21/ip.git (master) completed! -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [255/480] Analyzing https://github.com/erohsikivar/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/erohsikivar/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/erohsikivar/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/aliciamichellew/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nabonitasen/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nabonitasen/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nabonitasen/ip.git (master) completed! -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [256/480] Analyzing https://github.com/pzl111/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/pzl111/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/pzl111/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepos +INFO: [254/480] Analyzing https://github.com/gongg21/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/aliciamichellew/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/aliciamichellew/ip.git (master) completed! +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator analyzeRepos +INFO: [255/480] Analyzing https://github.com/erohsikivar/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/gongg21/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/gongg21/ip.git (master)... +Sep 16, 2023 1:57:26 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/erohsikivar/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/erohsikivar/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/erohsikivar/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/gongg21/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/erohsikivar/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/erohsikivar/ip.git (master) completed! -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [257/480] Analyzing https://github.com/teozern1/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepos +INFO: [256/480] Analyzing https://github.com/pzl111/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/gongg21/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/gongg21/ip.git (master) completed! +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepos +INFO: [257/480] Analyzing https://github.com/Elijah5399/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/pzl111/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/pzl111/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Elijah5399/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Elijah5399/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Elijah5399/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Elijah5399/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Elijah5399/ip.git (master) completed! +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepos +INFO: [258/480] Analyzing https://github.com/teozern1/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/teozern1/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/teozern1/ip.git (master)... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/juliusgambe/ip.git completed! -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/inezkok/ip.git... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/RSXIX/ip.git completed! -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wasjoe1/ip.git... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/inezkok/ip.git to complete... -Sep 16, 2023 3:09:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wasjoe1/ip.git to complete... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhonghan721/ip.git completed! -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kokrui/ip.git... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kokrui/ip.git to complete... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WZWren/ip.git completed! -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jinyang628/ip.git... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jinyang628/ip.git to complete... -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/pzl111/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/pzl111/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/pzl111/ip.git (master) completed! -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [258/480] Analyzing https://github.com/nicleongyj/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepos +INFO: [259/480] Analyzing https://github.com/nicleongyj/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicleongyj/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicleongyj/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/teozern1/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/teozern1/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/teozern1/ip.git (master) completed! -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [259/480] Analyzing https://github.com/Elijah5399/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Elijah5399/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Elijah5399/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepos +INFO: [260/480] Analyzing https://github.com/WinSheng1/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WinSheng1/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WinSheng1/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicleongyj/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicleongyj/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicleongyj/ip.git (master) completed! -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [260/480] Analyzing https://github.com/ryamgoh/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryamgoh/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryamgoh/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Elijah5399/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Elijah5399/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Elijah5399/ip.git (master) completed! -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [261/480] Analyzing https://github.com/WinSheng1/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WinSheng1/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WinSheng1/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/inezkok/ip.git completed! -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nananakx-x/ip.git... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wasjoe1/ip.git completed! -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nananakx-x/ip.git to complete... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ylyma/ip.git... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kokrui/ip.git completed! -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryamgoh/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AnnabelTing/ip.git... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ylyma/ip.git to complete... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AnnabelTing/ip.git to complete... -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryamgoh/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryamgoh/ip.git (master) completed! -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepos +INFO: [261/480] Analyzing https://github.com/Chen-Kuei/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WinSheng1/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [262/480] Analyzing https://github.com/Chen-Kuei/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jinyang628/ip.git completed! -Sep 16, 2023 3:09:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/WinSheng1/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/WinSheng1/ip.git (master) completed! -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [263/480] Analyzing https://github.com/yucongkoo/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/timetraveller-123/ip.git... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Chen-Kuei/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Chen-Kuei/ip.git (master)... -Sep 16, 2023 3:09:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/timetraveller-123/ip.git to complete... -Sep 16, 2023 3:09:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yucongkoo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yucongkoo/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/WinSheng1/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/WinSheng1/ip.git (master) completed! +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator analyzeRepos +INFO: [262/480] Analyzing https://github.com/ryamgoh/ip.git (master)... +Sep 16, 2023 1:57:27 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryamgoh/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryamgoh/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Chen-Kuei/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Chen-Kuei/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Chen-Kuei/ip.git (master) completed! -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepos +INFO: [263/480] Analyzing https://github.com/yucongkoo/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yucongkoo/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yucongkoo/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryamgoh/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryamgoh/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryamgoh/ip.git (master) completed! +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepos INFO: [264/480] Analyzing https://github.com/conradsoon/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/conradsoon/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/conradsoon/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yucongkoo/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yucongkoo/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yucongkoo/ip.git (master) completed! -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [265/480] Analyzing https://github.com/et-irl/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/et-irl/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/et-irl/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/conradsoon/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yucongkoo/ip.git (master) completed! +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepos +INFO: [265/480] Analyzing https://github.com/GSgiansen/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/conradsoon/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/conradsoon/ip.git (master) completed! -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [266/480] Analyzing https://github.com/GSgiansen/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/GSgiansen/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/GSgiansen/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AnnabelTing/ip.git completed! -Sep 16, 2023 3:09:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nananakx-x/ip.git completed! -Sep 16, 2023 3:09:29 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LicongHuang/ip.git... -Sep 16, 2023 3:09:29 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Jweng88/ip.git... -Sep 16, 2023 3:09:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Jweng88/ip.git to complete... -Sep 16, 2023 3:09:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LicongHuang/ip.git to complete... -Sep 16, 2023 3:09:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/timetraveller-123/ip.git completed! -Sep 16, 2023 3:09:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/et-irl/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/EricXiong420/ip.git... -Sep 16, 2023 3:09:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/EricXiong420/ip.git to complete... -Sep 16, 2023 3:09:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/et-irl/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/et-irl/ip.git (master) completed! -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [267/480] Analyzing https://github.com/marioalvaro/ip.git (master)... -Sep 16, 2023 3:09:29 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepos +INFO: [266/480] Analyzing https://github.com/marioalvaro/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/marioalvaro/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/marioalvaro/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/GSgiansen/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/marioalvaro/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/marioalvaro/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/GSgiansen/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/marioalvaro/ip.git (master) completed! +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/GSgiansen/ip.git (master) completed! -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [268/480] Analyzing https://github.com/Seonlo99/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ylyma/ip.git completed! -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jovkusuma/ip.git... -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepos +INFO: [267/480] Analyzing https://github.com/Seonlo99/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator analyzeRepos +INFO: [268/480] Analyzing https://github.com/et-irl/ip.git (master)... +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Seonlo99/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Seonlo99/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jovkusuma/ip.git to complete... -Sep 16, 2023 3:09:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/marioalvaro/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/marioalvaro/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/marioalvaro/ip.git (master) completed! -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [269/480] Analyzing https://github.com/tim-pipi/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tim-pipi/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tim-pipi/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LicongHuang/ip.git completed! -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/bhnuka/ip.git... -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/bhnuka/ip.git to complete... -Sep 16, 2023 3:09:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:28 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/et-irl/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:28 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/et-irl/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Seonlo99/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Jweng88/ip.git completed! -Sep 16, 2023 3:09:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/et-irl/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Seonlo99/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Seonlo99/ip.git (master) completed! -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [270/480] Analyzing https://github.com/marcellaantania/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/J-hta-n/ip.git... -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/J-hta-n/ip.git to complete... -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/marcellaantania/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/marcellaantania/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepos +INFO: [269/480] Analyzing https://github.com/tim-pipi/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/et-irl/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/et-irl/ip.git (master) completed! +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepos +INFO: [270/480] Analyzing https://github.com/brendanneojw/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tim-pipi/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tim-pipi/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/brendanneojw/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/brendanneojw/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/brendanneojw/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/brendanneojw/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/brendanneojw/ip.git (master) completed! +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tim-pipi/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tim-pipi/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tim-pipi/ip.git (master) completed! -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepos INFO: [271/480] Analyzing https://github.com/joel-foo/ip.git (master)... -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/EricXiong420/ip.git completed! -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Tim-Siu/ip.git... -Sep 16, 2023 3:09:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Tim-Siu/ip.git to complete... -Sep 16, 2023 3:09:30 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tim-pipi/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/joel-foo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/joel-foo/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jovkusuma/ip.git completed! -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yarnmengnus/ip.git... -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yarnmengnus/ip.git to complete... -Sep 16, 2023 3:09:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tim-pipi/ip.git (master) completed! +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepos +INFO: [272/480] Analyzing https://github.com/marcellaantania/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/marcellaantania/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/marcellaantania/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/marcellaantania/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/joel-foo/ip.git (master)... +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/marcellaantania/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/marcellaantania/ip.git (master) completed! -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator analyzeRepos -INFO: [272/480] Analyzing https://github.com/brendanneojw/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/brendanneojw/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/brendanneojw/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bhnuka/ip.git completed! -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sopa301/ip.git... -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sopa301/ip.git to complete... -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/J-hta-n/ip.git completed! -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ngeeyonglim/ip.git... -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ngeeyonglim/ip.git to complete... -Sep 16, 2023 3:09:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/joel-foo/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/brendanneojw/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/brendanneojw/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/brendanneojw/ip.git (master) completed! -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepos INFO: [273/480] Analyzing https://github.com/li-rongzhi/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/joel-foo/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/joel-foo/ip.git (master) completed! -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepos INFO: [274/480] Analyzing https://github.com/seraphimstreets/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/li-rongzhi/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/li-rongzhi/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/seraphimstreets/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/seraphimstreets/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Tim-Siu/ip.git completed! -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/flexibo/ip.git... -Sep 16, 2023 3:09:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/seraphimstreets/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/flexibo/ip.git to complete... -Sep 16, 2023 3:09:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:29 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/seraphimstreets/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/seraphimstreets/ip.git (master) completed! -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator analyzeRepos INFO: [275/480] Analyzing https://github.com/KamiliArsyad/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:29 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/KamiliArsyad/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:29 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/KamiliArsyad/ip.git (master)... -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yarnmengnus/ip.git completed! -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ItsTYtan/ip.git... -Sep 16, 2023 3:09:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ItsTYtan/ip.git to complete... -Sep 16, 2023 3:09:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/li-rongzhi/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/li-rongzhi/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/li-rongzhi/ip.git (master) completed! -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator analyzeRepos INFO: [276/480] Analyzing https://github.com/trgao/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/trgao/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/trgao/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sopa301/ip.git completed! -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/javinchua/ip.git... -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/javinchua/ip.git to complete... -Sep 16, 2023 3:09:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/KamiliArsyad/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ngeeyonglim/ip.git completed! -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/amosting/ip.git... -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/amosting/ip.git to complete... -Sep 16, 2023 3:09:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/KamiliArsyad/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/KamiliArsyad/ip.git (master) completed! -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator analyzeRepos INFO: [277/480] Analyzing https://github.com/lilozz2/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lilozz2/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lilozz2/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/trgao/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/trgao/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/trgao/ip.git (master) completed! -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator analyzeRepos INFO: [278/480] Analyzing https://github.com/jean-cq/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/flexibo/ip.git completed! -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Cleon2/ip.git... -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Cleon2/ip.git to complete... -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jean-cq/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jean-cq/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lilozz2/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lilozz2/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lilozz2/ip.git (master) completed! -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator analyzeRepos INFO: [279/480] Analyzing https://github.com/jedkohjk/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jedkohjk/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jedkohjk/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ItsTYtan/ip.git completed! -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ketweeen/ip.git... -Sep 16, 2023 3:09:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ketweeen/ip.git to complete... -Sep 16, 2023 3:09:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:30 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jean-cq/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:30 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jean-cq/ip.git (master)... -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jean-cq/ip.git (master) completed! -Sep 16, 2023 3:09:32 AM reposense.report.ReportGenerator analyzeRepos -INFO: [280/480] Analyzing https://github.com/ryantzr1/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/javinchua/ip.git completed! -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ryantzr1/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ryantzr1/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sudarshan2401/ip.git... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sudarshan2401/ip.git to complete... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/amosting/ip.git completed! -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wui-hong/ip.git... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wui-hong/ip.git to complete... -Sep 16, 2023 3:09:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jedkohjk/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jedkohjk/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jedkohjk/ip.git (master) completed! -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator analyzeRepos -INFO: [281/480] Analyzing https://github.com/yytan25/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator analyzeRepos +INFO: [280/480] Analyzing https://github.com/yytan25/ip.git (master)... +Sep 16, 2023 1:57:30 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yytan25/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yytan25/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ryantzr1/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Cleon2/ip.git completed! -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Respirayson/ip.git... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Respirayson/ip.git to complete... -Sep 16, 2023 3:09:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ryantzr1/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ryantzr1/ip.git (master) completed! -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator analyzeRepos -INFO: [282/480] Analyzing https://github.com/maypfv/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/maypfv/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/maypfv/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ketweeen/ip.git completed! -Sep 16, 2023 3:09:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:30 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yytan25/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jedkohjk/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yytan25/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Chrainx/ip.git... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Chrainx/ip.git to complete... -Sep 16, 2023 3:09:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jedkohjk/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jedkohjk/ip.git (master) completed! +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepos +INFO: [281/480] Analyzing https://github.com/ryantzr1/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yytan25/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yytan25/ip.git (master) completed! -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepos +INFO: [282/480] Analyzing https://github.com/maypfv/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ryantzr1/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ryantzr1/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/maypfv/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/maypfv/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ryantzr1/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ryantzr1/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ryantzr1/ip.git (master) completed! +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepos INFO: [283/480] Analyzing https://github.com/TohLiYuan/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/TohLiYuan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/TohLiYuan/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/maypfv/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/maypfv/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/maypfv/ip.git (master) completed! -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepos INFO: [284/480] Analyzing https://github.com/JizhuoChen/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sudarshan2401/ip.git completed! -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/shishirbychapur/ip.git... -Sep 16, 2023 3:09:33 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JizhuoChen/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JizhuoChen/ip.git (master)... -Sep 16, 2023 3:09:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/shishirbychapur/ip.git to complete... -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wui-hong/ip.git completed! -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/sunzihan23/ip.git... -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/sunzihan23/ip.git to complete... -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Respirayson/ip.git completed! -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wj331/ip.git... -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wj331/ip.git to complete... -Sep 16, 2023 3:09:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/TohLiYuan/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/JizhuoChen/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/TohLiYuan/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:31 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/JizhuoChen/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/TohLiYuan/ip.git (master) completed! -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/JizhuoChen/ip.git (master) completed! +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepos INFO: [285/480] Analyzing https://github.com/ChongWeiJie29/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator analyzeRepos +INFO: [286/480] Analyzing https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ChongWeiJie29/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ChongWeiJie29/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/JizhuoChen/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/JizhuoChen/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/JizhuoChen/ip.git (master) completed! -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [286/480] Analyzing https://github.com/kristayeo/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kristayeo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kristayeo/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Chrainx/ip.git completed! -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tjch-o/ip.git... -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tjch-o/ip.git to complete... -Sep 16, 2023 3:09:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:31 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Goh-Li-Ting/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:31 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Goh-Li-Ting/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ChongWeiJie29/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ChongWeiJie29/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ChongWeiJie29/ip.git (master) completed! -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [287/480] Analyzing https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kristayeo/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Goh-Li-Ting/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kristayeo/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kristayeo/ip.git (master) completed! -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [288/480] Analyzing https://github.com/derekjxtan/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/derekjxtan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/derekjxtan/ip.git (master)... -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/shishirbychapur/ip.git completed! -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/licongshen12/ip.git... -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/licongshen12/ip.git to complete... -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/sunzihan23/ip.git completed! -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/mamayuan/ip.git... -Sep 16, 2023 3:09:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mamayuan/ip.git to complete... -Sep 16, 2023 3:09:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepos +INFO: [287/480] Analyzing https://github.com/kristayeo/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kristayeo/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kristayeo/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Goh-Li-Ting/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wj331/ip.git completed! -Sep 16, 2023 3:09:35 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Goh-Li-Ting/ip.git (master) completed! -Sep 16, 2023 3:09:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [289/480] Analyzing https://github.com/shashahchk/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ong-wei-hong/ip.git... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ong-wei-hong/ip.git to complete... -Sep 16, 2023 3:09:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/shashahchk/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/shashahchk/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepos +INFO: [288/480] Analyzing https://github.com/derekjxtan/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/derekjxtan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/derekjxtan/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kristayeo/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kristayeo/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kristayeo/ip.git (master) completed! +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepos +INFO: [289/480] Analyzing https://github.com/Chandan8186/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Chandan8186/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Chandan8186/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/derekjxtan/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/derekjxtan/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/derekjxtan/ip.git (master) completed! -Sep 16, 2023 3:09:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [290/480] Analyzing https://github.com/alyssaongyx/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/alyssaongyx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/alyssaongyx/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tjch-o/ip.git completed! -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tanboonkhong/ip.git... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tanboonkhong/ip.git to complete... -Sep 16, 2023 3:09:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/alyssaongyx/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/alyssaongyx/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/alyssaongyx/ip.git (master) completed! -Sep 16, 2023 3:09:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [291/480] Analyzing https://github.com/Chandan8186/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mamayuan/ip.git completed! -Sep 16, 2023 3:09:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Chandan8186/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Chandan8186/ip.git (master)... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cbj252/ip.git... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/cbj252/ip.git to complete... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/licongshen12/ip.git completed! -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AlfredBeNoel/ip.git... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AlfredBeNoel/ip.git to complete... -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ong-wei-hong/ip.git completed! -Sep 16, 2023 3:09:35 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/keaganpzh/ip.git... -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/keaganpzh/ip.git to complete... -Sep 16, 2023 3:09:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Chandan8186/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tanboonkhong/ip.git completed! -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ElginTZM/ip.git... -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ElginTZM/ip.git to complete... -Sep 16, 2023 3:09:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Chandan8186/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Chandan8186/ip.git (master) completed! -Sep 16, 2023 3:09:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [292/480] Analyzing https://github.com/AndrewJanong/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepos +INFO: [290/480] Analyzing https://github.com/AndrewJanong/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AndrewJanong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AndrewJanong/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shashahchk/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shashahchk/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shashahchk/ip.git (master) completed! -Sep 16, 2023 3:09:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [293/480] Analyzing https://github.com/laurenlim2112/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/laurenlim2112/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/laurenlim2112/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlfredBeNoel/ip.git completed! -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LimJH2002/ip.git... -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cbj252/ip.git completed! -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LimJH2002/ip.git to complete... -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cmHuang777/ip.git... -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/cmHuang777/ip.git to complete... -Sep 16, 2023 3:09:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Chandan8186/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Chandan8186/ip.git (master) completed! +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepos +INFO: [291/480] Analyzing https://github.com/alyssaongyx/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/alyssaongyx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/alyssaongyx/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AndrewJanong/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AndrewJanong/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AndrewJanong/ip.git (master) completed! -Sep 16, 2023 3:09:36 AM reposense.report.ReportGenerator analyzeRepos -INFO: [294/480] Analyzing https://github.com/Kailash201/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/keaganpzh/ip.git completed! -Sep 16, 2023 3:09:36 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepos +INFO: [292/480] Analyzing https://github.com/shashahchk/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/shashahchk/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/shashahchk/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/alyssaongyx/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/alyssaongyx/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/alyssaongyx/ip.git (master) completed! +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator analyzeRepos +INFO: [293/480] Analyzing https://github.com/Kailash201/ip.git (master)... +Sep 16, 2023 1:57:32 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Kailash201/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:32 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Kailash201/ip.git (master)... -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/WeeeHung/ip.git... -Sep 16, 2023 3:09:36 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/WeeeHung/ip.git to complete... -Sep 16, 2023 3:09:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/laurenlim2112/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/laurenlim2112/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/laurenlim2112/ip.git (master) completed! -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [295/480] Analyzing https://github.com/lambraydon/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ElginTZM/ip.git completed! -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lambraydon/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lambraydon/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xxiaoweii/ip.git... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xxiaoweii/ip.git to complete... -Sep 16, 2023 3:09:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Kailash201/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Kailash201/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Kailash201/ip.git (master) completed! -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [296/480] Analyzing https://github.com/sk2001git/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator analyzeRepos +INFO: [294/480] Analyzing https://github.com/laurenlim2112/ip.git (master)... +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/laurenlim2112/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/laurenlim2112/ip.git (master)... +Sep 16, 2023 1:57:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/laurenlim2112/ip.git (master)... +Sep 16, 2023 1:57:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/laurenlim2112/ip.git (master)... +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/laurenlim2112/ip.git (master) completed! +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator analyzeRepos +INFO: [295/480] Analyzing https://github.com/sk2001git/ip.git (master)... +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sk2001git/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sk2001git/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lambraydon/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lambraydon/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lambraydon/ip.git (master) completed! -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [297/480] Analyzing https://github.com/peasantbird/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/peasantbird/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/peasantbird/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cmHuang777/ip.git completed! -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/rayyan35p/ip.git... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rayyan35p/ip.git to complete... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LimJH2002/ip.git completed! -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dhruvir29/ip.git... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dhruvir29/ip.git to complete... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/WeeeHung/ip.git completed! -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/LinWanLeii/ip.git... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/LinWanLeii/ip.git to complete... -Sep 16, 2023 3:09:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shashahchk/ip.git (master)... +Sep 16, 2023 1:57:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shashahchk/ip.git (master)... +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shashahchk/ip.git (master) completed! +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator analyzeRepos +INFO: [296/480] Analyzing https://github.com/lambraydon/ip.git (master)... +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lambraydon/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lambraydon/ip.git (master)... +Sep 16, 2023 1:57:33 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sk2001git/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:33 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sk2001git/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sk2001git/ip.git (master) completed! -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator analyzeRepos +INFO: [297/480] Analyzing https://github.com/lshaoqin/ip.git (master)... +Sep 16, 2023 1:57:33 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lshaoqin/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:33 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lshaoqin/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lambraydon/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lambraydon/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lambraydon/ip.git (master) completed! +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepos INFO: [298/480] Analyzing https://github.com/chonguschonguschongus/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/chonguschonguschongus/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/chonguschonguschongus/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/peasantbird/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/peasantbird/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/peasantbird/ip.git (master) completed! -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator analyzeRepos -INFO: [299/480] Analyzing https://github.com/lshaoqin/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xxiaoweii/ip.git completed! -Sep 16, 2023 3:09:37 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lshaoqin/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lshaoqin/ip.git (master)... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Song-Mengfei/ip.git... -Sep 16, 2023 3:09:37 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Song-Mengfei/ip.git to complete... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lshaoqin/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lshaoqin/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chonguschonguschongus/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lshaoqin/ip.git (master) completed! -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [300/480] Analyzing https://github.com/elaineshijie/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepos +INFO: [299/480] Analyzing https://github.com/peasantbird/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/peasantbird/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/peasantbird/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chonguschonguschongus/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/peasantbird/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/peasantbird/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chonguschonguschongus/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/chonguschonguschongus/ip.git (master) completed! +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/peasantbird/ip.git (master) completed! +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepos +INFO: [300/480] Analyzing https://github.com/WangCheng0116/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepos +INFO: [301/480] Analyzing https://github.com/elaineshijie/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/elaineshijie/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/elaineshijie/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/chonguschonguschongus/ip.git (master) completed! -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [301/480] Analyzing https://github.com/WangCheng0116/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/WangCheng0116/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/WangCheng0116/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rayyan35p/ip.git completed! -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jinyuan0425/ip.git... -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jinyuan0425/ip.git to complete... -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dhruvir29/ip.git completed! -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tiif/ip.git... -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tiif/ip.git to complete... -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/LinWanLeii/ip.git completed! -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicholascher/ip.git... -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicholascher/ip.git to complete... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/elaineshijie/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/elaineshijie/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/elaineshijie/ip.git (master) completed! -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [302/480] Analyzing https://github.com/chewjh1234/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chewjh1234/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chewjh1234/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepos +INFO: [302/480] Analyzing https://github.com/lynnlow175/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/lynnlow175/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/lynnlow175/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WangCheng0116/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Song-Mengfei/ip.git completed! -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/hcs1203/ip.git... -Sep 16, 2023 3:09:38 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/hcs1203/ip.git to complete... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WangCheng0116/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WangCheng0116/ip.git (master) completed! -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [303/480] Analyzing https://github.com/lynnlow175/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/lynnlow175/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/lynnlow175/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/chewjh1234/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/chewjh1234/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator analyzeRepos +INFO: [303/480] Analyzing https://github.com/chewjh1234/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chewjh1234/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:34 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chewjh1234/ip.git (master)... +Sep 16, 2023 1:57:34 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lynnlow175/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/chewjh1234/ip.git (master) completed! -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [304/480] Analyzing https://github.com/lordidiot/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lynnlow175/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lynnlow175/ip.git (master) completed! +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepos +INFO: [304/480] Analyzing https://github.com/lordidiot/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lordidiot/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lordidiot/ip.git (master)... -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lynnlow175/ip.git (master) completed! -Sep 16, 2023 3:09:38 AM reposense.report.ReportGenerator analyzeRepos -INFO: [305/480] Analyzing https://github.com/teozhengyang/ip.git (master)... -Sep 16, 2023 3:09:39 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/teozhengyang/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/teozhengyang/ip.git (master)... -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tiif/ip.git completed! -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/papataco14/ip.git... -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jinyuan0425/ip.git completed! -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/papataco14/ip.git to complete... -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/KamJiaYue/ip.git... -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/KamJiaYue/ip.git to complete... -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicholascher/ip.git completed! -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/NereusWB922/ip.git... -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/NereusWB922/ip.git to complete... -Sep 16, 2023 3:09:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/chewjh1234/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/chewjh1234/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/chewjh1234/ip.git (master) completed! +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepos +INFO: [305/480] Analyzing https://github.com/chew01/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/chew01/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/chew01/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/lordidiot/ip.git (master)... -Sep 16, 2023 3:09:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lordidiot/ip.git (master)... -Sep 16, 2023 3:09:39 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lordidiot/ip.git (master) completed! -Sep 16, 2023 3:09:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [306/480] Analyzing https://github.com/chew01/ip.git (master)... -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/hcs1203/ip.git completed! -Sep 16, 2023 3:09:39 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/chew01/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/chew01/ip.git (master)... -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/PohSayKeong/ip.git... -Sep 16, 2023 3:09:39 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/PohSayKeong/ip.git to complete... -Sep 16, 2023 3:09:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepos +INFO: [306/480] Analyzing https://github.com/RSXIX/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/RSXIX/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/RSXIX/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/chew01/ip.git (master)... -Sep 16, 2023 3:09:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/chew01/ip.git (master)... -Sep 16, 2023 3:09:39 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/RSXIX/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/chew01/ip.git (master) completed! -Sep 16, 2023 3:09:39 AM reposense.report.ReportGenerator analyzeRepos -INFO: [307/480] Analyzing https://github.com/juliusgambe/ip.git (master)... -Sep 16, 2023 3:09:39 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepos +INFO: [307/480] Analyzing https://github.com/teozhengyang/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/RSXIX/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/RSXIX/ip.git (master) completed! +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepos +INFO: [308/480] Analyzing https://github.com/juliusgambe/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/juliusgambe/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/juliusgambe/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/teozhengyang/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/papataco14/ip.git completed! -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ivyy-poison/ip.git... -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ivyy-poison/ip.git to complete... -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/NereusWB922/ip.git completed! -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jacobcuison/ip.git... -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jacobcuison/ip.git to complete... -Sep 16, 2023 3:09:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/teozhengyang/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/teozhengyang/ip.git (master) completed! -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [308/480] Analyzing https://github.com/RSXIX/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/KamJiaYue/ip.git completed! -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/PohSayKeong/ip.git completed! -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ji-just-ji/ip.git... -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/RSXIX/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/RSXIX/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ji-just-ji/ip.git to complete... -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kohkaijie/ip.git... -Sep 16, 2023 3:09:40 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kohkaijie/ip.git to complete... -Sep 16, 2023 3:09:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/teozhengyang/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/teozhengyang/ip.git (master)... +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/juliusgambe/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:35 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/juliusgambe/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/juliusgambe/ip.git (master) completed! -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator analyzeRepos INFO: [309/480] Analyzing https://github.com/zhonghan721/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:35 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zhonghan721/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:35 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zhonghan721/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/RSXIX/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/RSXIX/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/RSXIX/ip.git (master) completed! -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [310/480] Analyzing https://github.com/WZWren/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WZWren/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WZWren/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zhonghan721/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zhonghan721/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zhonghan721/ip.git (master) completed! -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator analyzeRepos -INFO: [311/480] Analyzing https://github.com/inezkok/ip.git (master)... -Sep 16, 2023 3:09:40 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/inezkok/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/inezkok/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ivyy-poison/ip.git completed! -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/rocketninja7/ip.git... -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rocketninja7/ip.git to complete... -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jacobcuison/ip.git completed! -Sep 16, 2023 3:09:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator analyzeRepos +INFO: [310/480] Analyzing https://github.com/WZWren/ip.git (master)... +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WZWren/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WZWren/ip.git (master)... +Sep 16, 2023 1:57:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/teozhengyang/ip.git (master)... +Sep 16, 2023 1:57:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/teozhengyang/ip.git (master)... +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/teozhengyang/ip.git (master) completed! +Sep 16, 2023 1:57:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/WZWren/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zekone/ip.git... -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zekone/ip.git to complete... -Sep 16, 2023 3:09:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator analyzeRepos +INFO: [311/480] Analyzing https://github.com/wasjoe1/ip.git (master)... +Sep 16, 2023 1:57:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/WZWren/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/WZWren/ip.git (master) completed! -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [312/480] Analyzing https://github.com/wasjoe1/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ji-just-ji/ip.git completed! -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/markgcera/ip.git... -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/markgcera/ip.git to complete... -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator analyzeRepos +INFO: [312/480] Analyzing https://github.com/inezkok/ip.git (master)... +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wasjoe1/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wasjoe1/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/inezkok/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/inezkok/ip.git (master)... +Sep 16, 2023 1:57:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/inezkok/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kohkaijie/ip.git completed! -Sep 16, 2023 3:09:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:36 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/inezkok/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/PearlynnT/ip.git... -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/inezkok/ip.git (master) completed! -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/PearlynnT/ip.git to complete... -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator analyzeRepos INFO: [313/480] Analyzing https://github.com/kokrui/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:36 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kokrui/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:36 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kokrui/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kokrui/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kokrui/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kokrui/ip.git (master) completed! -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator analyzeRepos -INFO: [314/480] Analyzing https://github.com/jinyang628/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:36 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wasjoe1/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jinyang628/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jinyang628/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wasjoe1/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wasjoe1/ip.git (master) completed! -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepos +INFO: [314/480] Analyzing https://github.com/jinyang628/ip.git (master)... +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jinyang628/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jinyang628/ip.git (master)... +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kokrui/ip.git (master)... +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kokrui/ip.git (master)... +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kokrui/ip.git (master) completed! +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepos INFO: [315/480] Analyzing https://github.com/AnnabelTing/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AnnabelTing/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AnnabelTing/ip.git (master)... -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rocketninja7/ip.git completed! -Sep 16, 2023 3:09:41 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/StevenLiudw/ip.git... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zekone/ip.git completed! -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/StevenLiudw/ip.git to complete... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TeeRenJing/ip.git... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/TeeRenJing/ip.git to complete... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/markgcera/ip.git completed! -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/mounilsankar/ip.git... -Sep 16, 2023 3:09:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jinyang628/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/mounilsankar/ip.git to complete... -Sep 16, 2023 3:09:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jinyang628/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jinyang628/ip.git (master) completed! -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepos INFO: [316/480] Analyzing https://github.com/nananakx-x/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nananakx-x/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nananakx-x/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AnnabelTing/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AnnabelTing/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AnnabelTing/ip.git (master) completed! -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepos INFO: [317/480] Analyzing https://github.com/timetraveller-123/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/timetraveller-123/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/timetraveller-123/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/PearlynnT/ip.git completed! -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dloh2236/ip.git... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dloh2236/ip.git to complete... -Sep 16, 2023 3:09:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nananakx-x/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nananakx-x/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nananakx-x/ip.git (master) completed! -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [318/480] Analyzing https://github.com/ylyma/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepos +INFO: [318/480] Analyzing https://github.com/Jweng88/ip.git (master)... +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Jweng88/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Jweng88/ip.git (master)... +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/timetraveller-123/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/timetraveller-123/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/timetraveller-123/ip.git (master) completed! -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepos INFO: [319/480] Analyzing https://github.com/LicongHuang/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LicongHuang/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LicongHuang/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ylyma/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ylyma/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/StevenLiudw/ip.git completed! -Sep 16, 2023 3:09:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LicongHuang/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zannloo/ip.git... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zannloo/ip.git to complete... -Sep 16, 2023 3:09:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Jweng88/ip.git (master)... +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LicongHuang/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LicongHuang/ip.git (master) completed! -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator analyzeRepos -INFO: [320/480] Analyzing https://github.com/Jweng88/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/TeeRenJing/ip.git completed! -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/junnengsoo/ip.git... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/junnengsoo/ip.git to complete... -Sep 16, 2023 3:09:42 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Jweng88/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Jweng88/ip.git (master)... -Sep 16, 2023 3:09:42 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/mounilsankar/ip.git completed! -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/freshcabbage123/ip.git... -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/freshcabbage123/ip.git to complete... -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dloh2236/ip.git completed! -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Kokseng1/ip.git... -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kokseng1/ip.git to complete... -Sep 16, 2023 3:09:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Jweng88/ip.git (master)... -Sep 16, 2023 3:09:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepos +INFO: [320/480] Analyzing https://github.com/ylyma/ip.git (master)... +Sep 16, 2023 1:57:37 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Jweng88/ip.git (master)... -Sep 16, 2023 3:09:43 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Jweng88/ip.git (master) completed! -Sep 16, 2023 3:09:43 AM reposense.report.ReportGenerator analyzeRepos -INFO: [321/480] Analyzing https://github.com/EricXiong420/ip.git (master)... -Sep 16, 2023 3:09:43 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/EricXiong420/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/EricXiong420/ip.git (master)... -Sep 16, 2023 3:09:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ylyma/ip.git (master)... -Sep 16, 2023 3:09:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ylyma/ip.git (master)... -Sep 16, 2023 3:09:43 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ylyma/ip.git (master) completed! -Sep 16, 2023 3:09:43 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator analyzeRepos +INFO: [321/480] Analyzing https://github.com/bhnuka/ip.git (master)... +Sep 16, 2023 1:57:37 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bhnuka/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:37 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bhnuka/ip.git (master)... +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ylyma/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ylyma/ip.git (master)... +Sep 16, 2023 1:57:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/bhnuka/ip.git (master)... +Sep 16, 2023 1:57:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/bhnuka/ip.git (master)... +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/bhnuka/ip.git (master) completed! +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator analyzeRepos INFO: [322/480] Analyzing https://github.com/jovkusuma/ip.git (master)... -Sep 16, 2023 3:09:43 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jovkusuma/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jovkusuma/ip.git (master)... -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zannloo/ip.git completed! -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/itsNatTan/ip.git... -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/itsNatTan/ip.git to complete... -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/junnengsoo/ip.git completed! -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tjingsheng/ip.git... -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tjingsheng/ip.git to complete... -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/freshcabbage123/ip.git completed! -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ZD292/ip.git... -Sep 16, 2023 3:09:43 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ZD292/ip.git to complete... -Sep 16, 2023 3:09:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ylyma/ip.git (master)... +Sep 16, 2023 1:57:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ylyma/ip.git (master)... +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ylyma/ip.git (master) completed! +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator analyzeRepos +INFO: [323/480] Analyzing https://github.com/EricXiong420/ip.git (master)... +Sep 16, 2023 1:57:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jovkusuma/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/EricXiong420/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/EricXiong420/ip.git (master)... +Sep 16, 2023 1:57:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jovkusuma/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jovkusuma/ip.git (master) completed! -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [323/480] Analyzing https://github.com/bhnuka/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bhnuka/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bhnuka/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kokseng1/ip.git completed! -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/alientian/ip.git... -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/alientian/ip.git to complete... -Sep 16, 2023 3:09:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/EricXiong420/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/EricXiong420/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/EricXiong420/ip.git (master) completed! -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator analyzeRepos INFO: [324/480] Analyzing https://github.com/J-hta-n/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/J-hta-n/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/J-hta-n/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/bhnuka/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/bhnuka/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/bhnuka/ip.git (master) completed! -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [325/480] Analyzing https://github.com/Tim-Siu/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Tim-Siu/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Tim-Siu/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ZD292/ip.git completed! -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/frrrrry/ip.git... -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/itsNatTan/ip.git completed! -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/frrrrry/ip.git to complete... -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wanghejin/ip.git... -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wanghejin/ip.git to complete... -Sep 16, 2023 3:09:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:38 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/J-hta-n/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:38 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/J-hta-n/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/J-hta-n/ip.git (master) completed! -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator analyzeRepos -INFO: [326/480] Analyzing https://github.com/yarnmengnus/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator analyzeRepos +INFO: [325/480] Analyzing https://github.com/yarnmengnus/ip.git (master)... +Sep 16, 2023 1:57:38 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yarnmengnus/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:38 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yarnmengnus/ip.git (master)... -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tjingsheng/ip.git completed! -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/MagnificentCreature/ip.git... -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/MagnificentCreature/ip.git to complete... -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/alientian/ip.git completed! -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/SungMatt/ip.git... -Sep 16, 2023 3:09:44 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/SungMatt/ip.git to complete... -Sep 16, 2023 3:09:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Tim-Siu/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Tim-Siu/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Tim-Siu/ip.git (master) completed! -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator analyzeRepos -INFO: [327/480] Analyzing https://github.com/sopa301/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/sopa301/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/sopa301/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/EricXiong420/ip.git (master)... +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/EricXiong420/ip.git (master)... +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/EricXiong420/ip.git (master) completed! +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepos +INFO: [326/480] Analyzing https://github.com/Tim-Siu/ip.git (master)... +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yarnmengnus/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Tim-Siu/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Tim-Siu/ip.git (master)... +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yarnmengnus/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yarnmengnus/ip.git (master) completed! -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepos +INFO: [327/480] Analyzing https://github.com/sopa301/ip.git (master)... +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/sopa301/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/sopa301/ip.git (master)... +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Tim-Siu/ip.git (master)... +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Tim-Siu/ip.git (master)... +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Tim-Siu/ip.git (master) completed! +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepos INFO: [328/480] Analyzing https://github.com/ngeeyonglim/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ngeeyonglim/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ngeeyonglim/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sopa301/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sopa301/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sopa301/ip.git (master) completed! -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepos INFO: [329/480] Analyzing https://github.com/flexibo/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/frrrrry/ip.git completed! -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/flexibo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/flexibo/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/andrefoo/ip.git... -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/andrefoo/ip.git to complete... -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wanghejin/ip.git completed! -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tohpinren/ip.git... -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/MagnificentCreature/ip.git completed! -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tohpinren/ip.git to complete... -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/XihuaZ/ip.git... -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/SungMatt/ip.git completed! -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xavierpok/ip.git... -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/XihuaZ/ip.git to complete... -Sep 16, 2023 3:09:45 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xavierpok/ip.git to complete... -Sep 16, 2023 3:09:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ngeeyonglim/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ngeeyonglim/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ngeeyonglim/ip.git (master) completed! -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepos INFO: [330/480] Analyzing https://github.com/ItsTYtan/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/flexibo/ip.git (master)... +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ItsTYtan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ItsTYtan/ip.git (master)... -Sep 16, 2023 3:09:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/flexibo/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:39 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/flexibo/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/flexibo/ip.git (master) completed! -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [331/480] Analyzing https://github.com/javinchua/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/javinchua/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/javinchua/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ItsTYtan/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ItsTYtan/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ItsTYtan/ip.git (master) completed! -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [332/480] Analyzing https://github.com/amosting/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator analyzeRepos +INFO: [331/480] Analyzing https://github.com/amosting/ip.git (master)... +Sep 16, 2023 1:57:39 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/amosting/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:39 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/amosting/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/andrefoo/ip.git completed! -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/bkjwjason/ip.git... -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/bkjwjason/ip.git to complete... -Sep 16, 2023 3:09:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ItsTYtan/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/amosting/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ItsTYtan/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ItsTYtan/ip.git (master) completed! +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/amosting/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepos +INFO: [332/480] Analyzing https://github.com/javinchua/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/amosting/ip.git (master) completed! -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepos INFO: [333/480] Analyzing https://github.com/Cleon2/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/XihuaZ/ip.git completed! -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Choonyan02/ip.git... -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tohpinren/ip.git completed! -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Choonyan02/ip.git to complete... -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xavierpok/ip.git completed! -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/javinchua/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/javinchua/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Cleon2/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Cleon2/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/aarontxz/ip.git... -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jianyangg/ip.git... -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/aarontxz/ip.git to complete... -Sep 16, 2023 3:09:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Cleon2/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Cleon2/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Cleon2/ip.git (master) completed! +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepos +INFO: [334/480] Analyzing https://github.com/wui-hong/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wui-hong/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wui-hong/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/javinchua/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jianyangg/ip.git to complete... -Sep 16, 2023 3:09:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/javinchua/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/javinchua/ip.git (master) completed! -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator analyzeRepos -INFO: [334/480] Analyzing https://github.com/ketweeen/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ketweeen/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ketweeen/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ketweeen/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ketweeen/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ketweeen/ip.git (master) completed! -Sep 16, 2023 3:09:46 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepos INFO: [335/480] Analyzing https://github.com/sudarshan2401/ip.git (master)... -Sep 16, 2023 3:09:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Cleon2/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sudarshan2401/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sudarshan2401/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Cleon2/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Cleon2/ip.git (master) completed! -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [336/480] Analyzing https://github.com/wui-hong/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wui-hong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wui-hong/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/bkjwjason/ip.git completed! -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tayian/ip.git... -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tayian/ip.git to complete... -Sep 16, 2023 3:09:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wui-hong/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wui-hong/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wui-hong/ip.git (master) completed! -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [337/480] Analyzing https://github.com/Respirayson/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepos +INFO: [336/480] Analyzing https://github.com/ketweeen/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ketweeen/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ketweeen/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sudarshan2401/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Respirayson/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Respirayson/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ketweeen/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ketweeen/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ketweeen/ip.git (master) completed! +Sep 16, 2023 1:57:40 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sudarshan2401/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepos +INFO: [337/480] Analyzing https://github.com/Respirayson/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sudarshan2401/ip.git (master) completed! -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/aarontxz/ip.git completed! -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [338/480] Analyzing https://github.com/Chrainx/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wnchan/ip.git... -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jianyangg/ip.git completed! -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Choonyan02/ip.git completed! -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Jweewee/ip.git... -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wnchan/ip.git to complete... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Chrainx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Chrainx/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Jweewee/ip.git to complete... -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/cyaoxuan/ip.git... -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/cyaoxuan/ip.git to complete... -Sep 16, 2023 3:09:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Chrainx/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Chrainx/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Chrainx/ip.git (master) completed! -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [339/480] Analyzing https://github.com/shishirbychapur/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator analyzeRepos +INFO: [338/480] Analyzing https://github.com/shishirbychapur/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Respirayson/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Respirayson/ip.git (master)... +Sep 16, 2023 1:57:40 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/shishirbychapur/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:40 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/shishirbychapur/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/shishirbychapur/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Respirayson/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/shishirbychapur/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/shishirbychapur/ip.git (master) completed! +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepos +INFO: [339/480] Analyzing https://github.com/sunzihan23/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Respirayson/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Respirayson/ip.git (master) completed! -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator analyzeRepos -INFO: [340/480] Analyzing https://github.com/sunzihan23/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/sunzihan23/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/sunzihan23/ip.git (master)... -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tayian/ip.git completed! -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/anthonytamzil/ip.git... -Sep 16, 2023 3:09:47 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/anthonytamzil/ip.git to complete... -Sep 16, 2023 3:09:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Respirayson/ip.git (master) completed! +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepos +INFO: [340/480] Analyzing https://github.com/wj331/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wj331/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wj331/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/sunzihan23/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/shishirbychapur/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/sunzihan23/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/shishirbychapur/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/shishirbychapur/ip.git (master) completed! -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/sunzihan23/ip.git (master) completed! -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/cyaoxuan/ip.git completed! -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/CelestineTan03/ip.git... -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/CelestineTan03/ip.git to complete... -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [341/480] Analyzing https://github.com/wj331/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [342/480] Analyzing https://github.com/tjch-o/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wnchan/ip.git completed! -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/saltedfishxx/ip.git... -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Jweewee/ip.git completed! -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/euchangxian/ip.git... -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/saltedfishxx/ip.git to complete... -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wj331/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wj331/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tjch-o/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tjch-o/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/euchangxian/ip.git to complete... -Sep 16, 2023 3:09:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepos +INFO: [341/480] Analyzing https://github.com/Chrainx/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Chrainx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Chrainx/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wj331/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tjch-o/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wj331/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wj331/ip.git (master) completed! -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [343/480] Analyzing https://github.com/mamayuan/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tjch-o/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/anthonytamzil/ip.git completed! -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tjch-o/ip.git (master) completed! -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AlagappanRa/ip.git... -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator analyzeRepos -INFO: [344/480] Analyzing https://github.com/licongshen12/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AlagappanRa/ip.git to complete... -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mamayuan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mamayuan/ip.git (master)... -Sep 16, 2023 3:09:48 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepos +INFO: [342/480] Analyzing https://github.com/licongshen12/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/licongshen12/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/licongshen12/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/mamayuan/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/mamayuan/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/mamayuan/ip.git (master) completed! -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator analyzeRepos -INFO: [345/480] Analyzing https://github.com/ong-wei-hong/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ong-wei-hong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ong-wei-hong/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/CelestineTan03/ip.git completed! -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Ken-Lai/ip.git... -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Ken-Lai/ip.git to complete... -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/saltedfishxx/ip.git completed! -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/felibunnyy/ip.git... -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/felibunnyy/ip.git to complete... -Sep 16, 2023 3:09:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Chrainx/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Chrainx/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Chrainx/ip.git (master) completed! +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepos +INFO: [343/480] Analyzing https://github.com/tjch-o/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tjch-o/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:41 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tjch-o/ip.git (master)... +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/licongshen12/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:41 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/licongshen12/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/licongshen12/ip.git (master) completed! -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:41 PM reposense.report.ReportGenerator analyzeRepos +INFO: [344/480] Analyzing https://github.com/mamayuan/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mamayuan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mamayuan/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tjch-o/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tjch-o/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tjch-o/ip.git (master) completed! +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepos +INFO: [345/480] Analyzing https://github.com/ong-wei-hong/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ong-wei-hong/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ong-wei-hong/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/mamayuan/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/mamayuan/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/mamayuan/ip.git (master) completed! +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepos INFO: [346/480] Analyzing https://github.com/tanboonkhong/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tanboonkhong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tanboonkhong/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/euchangxian/ip.git completed! -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/itssisi/ip.git... -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/itssisi/ip.git to complete... -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AlagappanRa/ip.git completed! -Sep 16, 2023 3:09:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ong-wei-hong/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jamz903/ip.git... -Sep 16, 2023 3:09:49 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jamz903/ip.git to complete... -Sep 16, 2023 3:09:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ong-wei-hong/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ong-wei-hong/ip.git (master) completed! -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator analyzeRepos -INFO: [347/480] Analyzing https://github.com/AlfredBeNoel/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tanboonkhong/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AlfredBeNoel/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AlfredBeNoel/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tanboonkhong/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tanboonkhong/ip.git (master) completed! -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepos +INFO: [347/480] Analyzing https://github.com/AlfredBeNoel/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AlfredBeNoel/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AlfredBeNoel/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ong-wei-hong/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ong-wei-hong/ip.git (master)... +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ong-wei-hong/ip.git (master) completed! +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepos INFO: [348/480] Analyzing https://github.com/cbj252/ip.git (master)... -Sep 16, 2023 3:09:49 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cbj252/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cbj252/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Ken-Lai/ip.git completed! -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/felibunnyy/ip.git completed! -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Kevin-Liusx/ip.git... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Propene-Dan/ip.git... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Kevin-Liusx/ip.git to complete... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Propene-Dan/ip.git to complete... -Sep 16, 2023 3:09:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AlfredBeNoel/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AlfredBeNoel/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AlfredBeNoel/ip.git (master) completed! -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepos INFO: [349/480] Analyzing https://github.com/keaganpzh/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/keaganpzh/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/keaganpzh/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cbj252/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:42 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cbj252/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cbj252/ip.git (master) completed! -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator analyzeRepos INFO: [350/480] Analyzing https://github.com/ElginTZM/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:42 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ElginTZM/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:42 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ElginTZM/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/itssisi/ip.git completed! -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ChuanXinNg/ip.git... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ChuanXinNg/ip.git to complete... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jamz903/ip.git completed! -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kenvynKwek/ip.git... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kenvynKwek/ip.git to complete... -Sep 16, 2023 3:09:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ElginTZM/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/keaganpzh/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/keaganpzh/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/keaganpzh/ip.git (master) completed! -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [351/480] Analyzing https://github.com/cmHuang777/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepos +INFO: [351/480] Analyzing https://github.com/WeeeHung/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ElginTZM/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/WeeeHung/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/WeeeHung/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ElginTZM/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ElginTZM/ip.git (master) completed! -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator analyzeRepos -INFO: [352/480] Analyzing https://github.com/LimJH2002/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepos +INFO: [352/480] Analyzing https://github.com/cmHuang777/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/cmHuang777/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/cmHuang777/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/WeeeHung/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/WeeeHung/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/WeeeHung/ip.git (master) completed! +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepos +INFO: [353/480] Analyzing https://github.com/LimJH2002/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/LimJH2002/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/LimJH2002/ip.git (master)... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Propene-Dan/ip.git completed! -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Ruizhi2001/ip.git... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Ruizhi2001/ip.git to complete... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Kevin-Liusx/ip.git completed! -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/prawnzyy/ip.git... -Sep 16, 2023 3:09:50 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/prawnzyy/ip.git to complete... -Sep 16, 2023 3:09:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LimJH2002/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/LimJH2002/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/LimJH2002/ip.git (master) completed! -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [353/480] Analyzing https://github.com/WeeeHung/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/WeeeHung/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/WeeeHung/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/cmHuang777/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/cmHuang777/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/cmHuang777/ip.git (master) completed! -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/LimJH2002/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepos INFO: [354/480] Analyzing https://github.com/xxiaoweii/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/WeeeHung/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/LimJH2002/ip.git (master) completed! +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepos +INFO: [355/480] Analyzing https://github.com/rayyan35p/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xxiaoweii/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xxiaoweii/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/WeeeHung/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/WeeeHung/ip.git (master) completed! -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [355/480] Analyzing https://github.com/rayyan35p/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/rayyan35p/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/rayyan35p/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ChuanXinNg/ip.git completed! -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/saraozn/ip.git... -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/saraozn/ip.git to complete... -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kenvynKwek/ip.git completed! -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicholastng010601/ip.git... -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicholastng010601/ip.git to complete... -Sep 16, 2023 3:09:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rayyan35p/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rayyan35p/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/prawnzyy/ip.git completed! -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rayyan35p/ip.git (master) completed! -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [356/480] Analyzing https://github.com/dhruvir29/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/DistractedCat/ip.git... -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Ruizhi2001/ip.git completed! -Sep 16, 2023 3:09:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepos +INFO: [356/480] Analyzing https://github.com/LinWanLeii/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/LinWanLeii/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/LinWanLeii/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/xxiaoweii/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yezkez10/ip.git... -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DistractedCat/ip.git to complete... -Sep 16, 2023 3:09:51 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yezkez10/ip.git to complete... -Sep 16, 2023 3:09:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xxiaoweii/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/xxiaoweii/ip.git (master) completed! +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator analyzeRepos +INFO: [357/480] Analyzing https://github.com/dhruvir29/ip.git (master)... +Sep 16, 2023 1:57:43 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dhruvir29/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dhruvir29/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/xxiaoweii/ip.git (master) completed! -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator analyzeRepos -INFO: [357/480] Analyzing https://github.com/LinWanLeii/ip.git (master)... -Sep 16, 2023 3:09:51 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/LinWanLeii/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/LinWanLeii/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dhruvir29/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/LinWanLeii/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dhruvir29/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dhruvir29/ip.git (master) completed! -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [358/480] Analyzing https://github.com/Song-Mengfei/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/LinWanLeii/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/LinWanLeii/ip.git (master) completed! -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [359/480] Analyzing https://github.com/tiif/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepos +INFO: [358/480] Analyzing https://github.com/Song-Mengfei/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Song-Mengfei/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Song-Mengfei/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tiif/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tiif/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/saraozn/ip.git completed! -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/revdrag/ip.git... -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/revdrag/ip.git to complete... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tiif/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicholastng010601/ip.git completed! -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tiif/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tiif/ip.git (master) completed! -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [360/480] Analyzing https://github.com/jinyuan0425/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/alvinlim277/ip.git... -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/alvinlim277/ip.git to complete... -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/DistractedCat/ip.git completed! -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/JasonRay168/ip.git... -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/JasonRay168/ip.git to complete... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dhruvir29/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dhruvir29/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dhruvir29/ip.git (master) completed! +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepos +INFO: [359/480] Analyzing https://github.com/jinyuan0425/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jinyuan0425/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jinyuan0425/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yezkez10/ip.git completed! -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Song-Mengfei/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/billieboy7/ip.git... -Sep 16, 2023 3:09:52 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/billieboy7/ip.git to complete... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Song-Mengfei/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Song-Mengfei/ip.git (master) completed! -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [361/480] Analyzing https://github.com/nicholascher/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepos +INFO: [360/480] Analyzing https://github.com/nicholascher/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicholascher/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicholascher/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jinyuan0425/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jinyuan0425/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jinyuan0425/ip.git (master) completed! -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [362/480] Analyzing https://github.com/hcs1203/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nicholascher/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepos +INFO: [361/480] Analyzing https://github.com/hcs1203/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/hcs1203/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/hcs1203/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nicholascher/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nicholascher/ip.git (master) completed! -Sep 16, 2023 3:09:52 AM reposense.report.ReportGenerator analyzeRepos -INFO: [363/480] Analyzing https://github.com/papataco14/ip.git (master)... -Sep 16, 2023 3:09:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/hcs1203/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/hcs1203/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/hcs1203/ip.git (master) completed! -Sep 16, 2023 3:09:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [364/480] Analyzing https://github.com/NereusWB922/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepos +INFO: [362/480] Analyzing https://github.com/tiif/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tiif/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tiif/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nicholascher/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nicholascher/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nicholascher/ip.git (master) completed! +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepos +INFO: [363/480] Analyzing https://github.com/papataco14/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/papataco14/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/papataco14/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/NereusWB922/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/NereusWB922/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/revdrag/ip.git completed! -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jannnice/ip.git... -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jannnice/ip.git to complete... -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/alvinlim277/ip.git completed! -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/evanyan13/ip.git... -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/evanyan13/ip.git to complete... -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/JasonRay168/ip.git completed! -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/samuelim01/ip.git... -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/samuelim01/ip.git to complete... -Sep 16, 2023 3:09:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tiif/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tiif/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tiif/ip.git (master) completed! +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator analyzeRepos +INFO: [364/480] Analyzing https://github.com/PohSayKeong/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/PohSayKeong/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/PohSayKeong/ip.git (master)... +Sep 16, 2023 1:57:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/papataco14/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/papataco14/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/papataco14/ip.git (master) completed! -Sep 16, 2023 3:09:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [365/480] Analyzing https://github.com/KamJiaYue/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/billieboy7/ip.git completed! -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dinde2004/ip.git... -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dinde2004/ip.git to complete... -Sep 16, 2023 3:09:53 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator analyzeRepos +INFO: [365/480] Analyzing https://github.com/NereusWB922/ip.git (master)... +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/NereusWB922/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/NereusWB922/ip.git (master)... +Sep 16, 2023 1:57:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/PohSayKeong/ip.git (master)... +Sep 16, 2023 1:57:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/PohSayKeong/ip.git (master)... +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/PohSayKeong/ip.git (master) completed! +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator analyzeRepos +INFO: [366/480] Analyzing https://github.com/KamJiaYue/ip.git (master)... +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/KamJiaYue/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/KamJiaYue/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/NereusWB922/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/NereusWB922/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/NereusWB922/ip.git (master) completed! -Sep 16, 2023 3:09:53 AM reposense.report.ReportGenerator analyzeRepos -INFO: [366/480] Analyzing https://github.com/PohSayKeong/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/PohSayKeong/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/PohSayKeong/ip.git (master)... -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jannnice/ip.git completed! -Sep 16, 2023 3:09:53 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/seanpzk/ip.git... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/seanpzk/ip.git to complete... -Sep 16, 2023 3:09:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/PohSayKeong/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/evanyan13/ip.git completed! -Sep 16, 2023 3:09:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/PohSayKeong/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/PohSayKeong/ip.git (master) completed! -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator analyzeRepos INFO: [367/480] Analyzing https://github.com/ivyy-poison/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/samuelim01/ip.git completed! -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/KumChaiYin/ip.git... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lsyurea/ip.git... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/KumChaiYin/ip.git to complete... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lsyurea/ip.git to complete... -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ivyy-poison/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ivyy-poison/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dinde2004/ip.git completed! -Sep 16, 2023 3:09:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/KamJiaYue/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Sasmik23/ip.git... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Sasmik23/ip.git to complete... -Sep 16, 2023 3:09:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/KamJiaYue/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/KamJiaYue/ip.git (master) completed! -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator analyzeRepos INFO: [368/480] Analyzing https://github.com/jacobcuison/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jacobcuison/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jacobcuison/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ivyy-poison/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ivyy-poison/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ivyy-poison/ip.git (master) completed! -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator analyzeRepos INFO: [369/480] Analyzing https://github.com/ji-just-ji/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:45 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ji-just-ji/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:45 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ji-just-ji/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jacobcuison/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jacobcuison/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jacobcuison/ip.git (master) completed! -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator analyzeRepos -INFO: [370/480] Analyzing https://github.com/kohkaijie/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kohkaijie/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kohkaijie/ip.git (master)... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/seanpzk/ip.git completed! -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/geraldngjx/ip.git... -Sep 16, 2023 3:09:54 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/geraldngjx/ip.git to complete... -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/KumChaiYin/ip.git completed! -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lululwtv/ip.git... -Sep 16, 2023 3:09:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ji-just-ji/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lsyurea/ip.git completed! -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lululwtv/ip.git to complete... -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/garylow2001/ip.git... -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/garylow2001/ip.git to complete... -Sep 16, 2023 3:09:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ji-just-ji/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ji-just-ji/ip.git (master) completed! -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [371/480] Analyzing https://github.com/rocketninja7/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sasmik23/ip.git completed! -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/leontan2/ip.git... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepos +INFO: [370/480] Analyzing https://github.com/rocketninja7/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/rocketninja7/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/rocketninja7/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/leontan2/ip.git to complete... -Sep 16, 2023 3:09:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kohkaijie/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kohkaijie/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kohkaijie/ip.git (master) completed! -Sep 16, 2023 3:09:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ji-just-ji/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rocketninja7/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator analyzeRepos -INFO: [372/480] Analyzing https://github.com/zekone/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rocketninja7/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/rocketninja7/ip.git (master) completed! +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepos +INFO: [371/480] Analyzing https://github.com/zekone/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ji-just-ji/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ji-just-ji/ip.git (master) completed! +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zekone/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zekone/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/rocketninja7/ip.git (master) completed! -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepos +INFO: [372/480] Analyzing https://github.com/kohkaijie/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kohkaijie/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kohkaijie/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/zekone/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/zekone/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zekone/ip.git (master) completed! +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepos INFO: [373/480] Analyzing https://github.com/markgcera/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/markgcera/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/markgcera/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/geraldngjx/ip.git completed! -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wamps-jp/ip.git... -Sep 16, 2023 3:09:55 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wamps-jp/ip.git to complete... -Sep 16, 2023 3:09:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/markgcera/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/markgcera/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/markgcera/ip.git (master) completed! -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kohkaijie/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kohkaijie/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kohkaijie/ip.git (master) completed! +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepos INFO: [374/480] Analyzing https://github.com/PearlynnT/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/PearlynnT/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/PearlynnT/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/zekone/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/zekone/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zekone/ip.git (master) completed! -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/markgcera/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/markgcera/ip.git (master)... +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/markgcera/ip.git (master) completed! +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator analyzeRepos INFO: [375/480] Analyzing https://github.com/StevenLiudw/ip.git (master)... -Sep 16, 2023 3:09:55 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:46 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/StevenLiudw/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/StevenLiudw/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/garylow2001/ip.git completed! -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dickongwd/ip.git... -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/leontan2/ip.git completed! -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dickongwd/ip.git to complete... -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jacksonyuan256/ip.git... -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jacksonyuan256/ip.git to complete... -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lululwtv/ip.git completed! -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/suryanshkushwaha/ip.git... -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/suryanshkushwaha/ip.git to complete... -Sep 16, 2023 3:09:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/PearlynnT/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/PearlynnT/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/PearlynnT/ip.git (master) completed! -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wamps-jp/ip.git completed! -Sep 16, 2023 3:09:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [376/480] Analyzing https://github.com/TeeRenJing/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wr1159/ip.git... -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wr1159/ip.git to complete... -Sep 16, 2023 3:09:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/TeeRenJing/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/TeeRenJing/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepos +INFO: [376/480] Analyzing https://github.com/mounilsankar/ip.git (master)... +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/mounilsankar/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/mounilsankar/ip.git (master)... +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/StevenLiudw/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/StevenLiudw/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/StevenLiudw/ip.git (master) completed! -Sep 16, 2023 3:09:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [377/480] Analyzing https://github.com/mounilsankar/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/mounilsankar/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/mounilsankar/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/TeeRenJing/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/TeeRenJing/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/TeeRenJing/ip.git (master) completed! -Sep 16, 2023 3:09:56 AM reposense.report.ReportGenerator analyzeRepos -INFO: [378/480] Analyzing https://github.com/dloh2236/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dloh2236/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dloh2236/ip.git (master)... -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dickongwd/ip.git completed! -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jacksonyuan256/ip.git completed! -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Nauxe/ip.git... -Sep 16, 2023 3:09:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/yyyaohhh/ip.git... -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/yyyaohhh/ip.git to complete... -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Nauxe/ip.git to complete... -Sep 16, 2023 3:09:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepos +INFO: [377/480] Analyzing https://github.com/TeeRenJing/ip.git (master)... +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/TeeRenJing/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/TeeRenJing/ip.git (master)... +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/mounilsankar/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/mounilsankar/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/mounilsankar/ip.git (master) completed! -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepos +INFO: [378/480] Analyzing https://github.com/dloh2236/ip.git (master)... +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dloh2236/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dloh2236/ip.git (master)... +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/TeeRenJing/ip.git (master)... +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/TeeRenJing/ip.git (master)... +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/TeeRenJing/ip.git (master) completed! +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepos INFO: [379/480] Analyzing https://github.com/zannloo/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zannloo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zannloo/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wr1159/ip.git completed! -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/zhanyang01/ip.git... -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/zhanyang01/ip.git to complete... -Sep 16, 2023 3:09:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dloh2236/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/suryanshkushwaha/ip.git completed! -Sep 16, 2023 3:09:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dloh2236/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/czhiruo/ip.git... -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dloh2236/ip.git (master) completed! -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/czhiruo/ip.git to complete... -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepos INFO: [380/480] Analyzing https://github.com/junnengsoo/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/junnengsoo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/junnengsoo/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zannloo/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zannloo/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/zannloo/ip.git (master) completed! -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator analyzeRepos -INFO: [381/480] Analyzing https://github.com/freshcabbage123/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/freshcabbage123/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/freshcabbage123/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Nauxe/ip.git completed! -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/victorpengmx/ip.git... -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/yyyaohhh/ip.git completed! -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/victorpengmx/ip.git to complete... -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/longnguyentan/ip.git... -Sep 16, 2023 3:09:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/longnguyentan/ip.git to complete... -Sep 16, 2023 3:09:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/zannloo/ip.git (master) completed! +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepos +INFO: [381/480] Analyzing https://github.com/freshcabbage123/ip.git (master)... +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/freshcabbage123/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/freshcabbage123/ip.git (master)... +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/junnengsoo/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/junnengsoo/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/junnengsoo/ip.git (master) completed! -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator analyzeRepos INFO: [382/480] Analyzing https://github.com/Kokseng1/ip.git (master)... -Sep 16, 2023 3:09:57 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:47 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Kokseng1/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Kokseng1/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/freshcabbage123/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/freshcabbage123/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/freshcabbage123/ip.git (master) completed! -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [383/480] Analyzing https://github.com/ZD292/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ZD292/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ZD292/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator analyzeRepos +INFO: [383/480] Analyzing https://github.com/itsNatTan/ip.git (master)... +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/itsNatTan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/itsNatTan/ip.git (master)... +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Kokseng1/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Kokseng1/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Kokseng1/ip.git (master) completed! -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [384/480] Analyzing https://github.com/itsNatTan/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/itsNatTan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/itsNatTan/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/zhanyang01/ip.git completed! -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Cikguseven/ip.git... -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Cikguseven/ip.git to complete... -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/czhiruo/ip.git completed! -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Eola-Z/ip.git... -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Eola-Z/ip.git to complete... -Sep 16, 2023 3:09:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ZD292/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ZD292/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ZD292/ip.git (master) completed! -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [385/480] Analyzing https://github.com/tjingsheng/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator analyzeRepos +INFO: [384/480] Analyzing https://github.com/ZD292/ip.git (master)... +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ZD292/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ZD292/ip.git (master)... +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/itsNatTan/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/itsNatTan/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/itsNatTan/ip.git (master) completed! -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [386/480] Analyzing https://github.com/alientian/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator analyzeRepos +INFO: [385/480] Analyzing https://github.com/tjingsheng/ip.git (master)... +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tjingsheng/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tjingsheng/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/longnguyentan/ip.git completed! -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/victorpengmx/ip.git completed! -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ZD292/ip.git (master)... +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ZD292/ip.git (master)... +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ZD292/ip.git (master) completed! +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator analyzeRepos +INFO: [386/480] Analyzing https://github.com/alientian/ip.git (master)... +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/alientian/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/alientian/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jibtaf/ip.git... -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/lipwei1808/ip.git... -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jibtaf/ip.git to complete... -Sep 16, 2023 3:09:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/lipwei1808/ip.git to complete... -Sep 16, 2023 3:09:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/alientian/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/alientian/ip.git (master)... -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/alientian/ip.git (master) completed! -Sep 16, 2023 3:09:58 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator analyzeRepos INFO: [387/480] Analyzing https://github.com/frrrrry/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:48 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/frrrrry/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/frrrrry/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Cikguseven/ip.git completed! -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Mohammed-Faizzzz/ip.git... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Mohammed-Faizzzz/ip.git to complete... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Eola-Z/ip.git completed! -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/dylkaw/ip.git... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/dylkaw/ip.git to complete... -Sep 16, 2023 3:09:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tjingsheng/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tjingsheng/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/lipwei1808/ip.git completed! -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jibtaf/ip.git completed! -Sep 16, 2023 3:09:59 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tjingsheng/ip.git (master) completed! -Sep 16, 2023 3:09:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [388/480] Analyzing https://github.com/wanghejin/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nikele2001/ip.git... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/DeltonCheng/ip.git... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nikele2001/ip.git to complete... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DeltonCheng/ip.git to complete... -Sep 16, 2023 3:09:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepos +INFO: [388/480] Analyzing https://github.com/MagnificentCreature/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/MagnificentCreature/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/MagnificentCreature/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/frrrrry/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wanghejin/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wanghejin/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/frrrrry/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/frrrrry/ip.git (master) completed! -Sep 16, 2023 3:09:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [389/480] Analyzing https://github.com/MagnificentCreature/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/MagnificentCreature/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/MagnificentCreature/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wanghejin/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wanghejin/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wanghejin/ip.git (master) completed! -Sep 16, 2023 3:09:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [390/480] Analyzing https://github.com/SungMatt/ip.git (master)... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Mohammed-Faizzzz/ip.git completed! -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ChangruHenryQian/ip.git... -Sep 16, 2023 3:09:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ChangruHenryQian/ip.git to complete... -Sep 16, 2023 3:09:59 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepos +INFO: [389/480] Analyzing https://github.com/SungMatt/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/SungMatt/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:09:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/SungMatt/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/MagnificentCreature/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/SungMatt/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/MagnificentCreature/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/MagnificentCreature/ip.git (master) completed! -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepos +INFO: [390/480] Analyzing https://github.com/wanghejin/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/SungMatt/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/SungMatt/ip.git (master) completed! +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepos INFO: [391/480] Analyzing https://github.com/andrefoo/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/dylkaw/ip.git completed! -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wanghejin/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wanghejin/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/andrefoo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/andrefoo/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/craigtonlian/ip.git... -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/craigtonlian/ip.git to complete... -Sep 16, 2023 3:10:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/SungMatt/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/SungMatt/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/SungMatt/ip.git (master) completed! -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [392/480] Analyzing https://github.com/XihuaZ/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/XihuaZ/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/XihuaZ/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nikele2001/ip.git completed! -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/ruo-x/ip.git... -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/ruo-x/ip.git to complete... -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/DeltonCheng/ip.git completed! -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/iantsaii/ip.git... -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/iantsaii/ip.git to complete... -Sep 16, 2023 3:10:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/XihuaZ/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/XihuaZ/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/XihuaZ/ip.git (master) completed! -Sep 16, 2023 3:10:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wanghejin/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wanghejin/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wanghejin/ip.git (master) completed! +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepos +INFO: [392/480] Analyzing https://github.com/tohpinren/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/andrefoo/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [393/480] Analyzing https://github.com/tohpinren/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/andrefoo/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/andrefoo/ip.git (master) completed! -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [394/480] Analyzing https://github.com/xavierpok/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tohpinren/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tohpinren/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/andrefoo/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/andrefoo/ip.git (master) completed! +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator analyzeRepos +INFO: [393/480] Analyzing https://github.com/xavierpok/ip.git (master)... +Sep 16, 2023 1:57:49 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xavierpok/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xavierpok/ip.git (master)... -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ChangruHenryQian/ip.git completed! -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/wjacobw/ip.git... -Sep 16, 2023 3:10:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/wjacobw/ip.git to complete... -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tohpinren/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/craigtonlian/ip.git completed! -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tohpinren/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/angkyakdifp/ip.git... -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tohpinren/ip.git (master) completed! -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [395/480] Analyzing https://github.com/bkjwjason/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/angkyakdifp/ip.git to complete... -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/bkjwjason/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/bkjwjason/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/ruo-x/ip.git completed! -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/brein62/ip.git... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/brein62/ip.git to complete... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/iantsaii/ip.git completed! -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nicrandomlee/ip.git... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nicrandomlee/ip.git to complete... -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepos +INFO: [394/480] Analyzing https://github.com/XihuaZ/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/XihuaZ/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/XihuaZ/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/xavierpok/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xavierpok/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/xavierpok/ip.git (master) completed! -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [396/480] Analyzing https://github.com/aarontxz/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/aarontxz/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/aarontxz/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepos +INFO: [395/480] Analyzing https://github.com/bkjwjason/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/bkjwjason/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/bkjwjason/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/XihuaZ/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/XihuaZ/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/XihuaZ/ip.git (master) completed! +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepos +INFO: [396/480] Analyzing https://github.com/Choonyan02/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Choonyan02/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Choonyan02/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/bkjwjason/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/bkjwjason/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/bkjwjason/ip.git (master) completed! -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepos INFO: [397/480] Analyzing https://github.com/jianyangg/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jianyangg/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jianyangg/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/aarontxz/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/aarontxz/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/aarontxz/ip.git (master) completed! -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [398/480] Analyzing https://github.com/Choonyan02/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Choonyan02/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Choonyan02/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Choonyan02/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Choonyan02/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Choonyan02/ip.git (master) completed! +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepos +INFO: [398/480] Analyzing https://github.com/aarontxz/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/aarontxz/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/aarontxz/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jianyangg/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jianyangg/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/wjacobw/ip.git completed! -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jianyangg/ip.git (master) completed! -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepos INFO: [399/480] Analyzing https://github.com/tayian/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Bryan-Goh/ip.git... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Bryan-Goh/ip.git to complete... -Sep 16, 2023 3:10:01 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/tayian/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/tayian/ip.git (master)... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/angkyakdifp/ip.git completed! -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/kiatkat/ip.git... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/kiatkat/ip.git to complete... -Sep 16, 2023 3:10:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/brein62/ip.git completed! -Sep 16, 2023 3:10:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Choonyan02/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/MadLamprey/ip.git... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/MadLamprey/ip.git to complete... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nicrandomlee/ip.git completed! -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/xyT-T/ip.git... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/xyT-T/ip.git to complete... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Choonyan02/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Choonyan02/ip.git (master) completed! -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepos -INFO: [400/480] Analyzing https://github.com/cyaoxuan/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/aarontxz/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/aarontxz/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/aarontxz/ip.git (master) completed! +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepos +INFO: [400/480] Analyzing https://github.com/Jweewee/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Jweewee/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Jweewee/ip.git (master)... +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/tayian/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/cyaoxuan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/cyaoxuan/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/tayian/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/tayian/ip.git (master) completed! -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator analyzeRepos INFO: [401/480] Analyzing https://github.com/wnchan/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:50 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wnchan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wnchan/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/cyaoxuan/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Jweewee/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Jweewee/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Jweewee/ip.git (master) completed! +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepos +INFO: [402/480] Analyzing https://github.com/cyaoxuan/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/cyaoxuan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/cyaoxuan/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wnchan/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/cyaoxuan/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wnchan/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wnchan/ip.git (master) completed! -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/cyaoxuan/ip.git (master) completed! -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepos -INFO: [402/480] Analyzing https://github.com/Jweewee/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepos INFO: [403/480] Analyzing https://github.com/anthonytamzil/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Jweewee/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Jweewee/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/anthonytamzil/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/anthonytamzil/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Jweewee/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Jweewee/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Jweewee/ip.git (master) completed! -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/cyaoxuan/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/cyaoxuan/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/cyaoxuan/ip.git (master) completed! +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepos INFO: [404/480] Analyzing https://github.com/CelestineTan03/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/CelestineTan03/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/CelestineTan03/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Bryan-Goh/ip.git completed! -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/anthonytamzil/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jiakai-17/ip.git... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jiakai-17/ip.git to complete... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/anthonytamzil/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/CelestineTan03/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/anthonytamzil/ip.git (master) completed! -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepos INFO: [405/480] Analyzing https://github.com/saltedfishxx/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/saltedfishxx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/saltedfishxx/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/kiatkat/ip.git completed! -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nreHieW/ip.git... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nreHieW/ip.git to complete... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/MadLamprey/ip.git completed! -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/xyT-T/ip.git completed! -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/nathanielcalimag/ip.git... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Saezenn/ip.git... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Saezenn/ip.git to complete... -Sep 16, 2023 3:10:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/nathanielcalimag/ip.git to complete... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/CelestineTan03/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/CelestineTan03/ip.git (master)... -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/CelestineTan03/ip.git (master) completed! -Sep 16, 2023 3:10:02 AM reposense.report.ReportGenerator analyzeRepos -INFO: [406/480] Analyzing https://github.com/euchangxian/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/euchangxian/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/euchangxian/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/saltedfishxx/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/saltedfishxx/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/saltedfishxx/ip.git (master) completed! -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [407/480] Analyzing https://github.com/AlagappanRa/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/saltedfishxx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/saltedfishxx/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepos +INFO: [406/480] Analyzing https://github.com/AlagappanRa/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AlagappanRa/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AlagappanRa/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jiakai-17/ip.git completed! -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/jellywaiyan/ip.git... -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/jellywaiyan/ip.git to complete... -Sep 16, 2023 3:10:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/saltedfishxx/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AlagappanRa/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/saltedfishxx/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/saltedfishxx/ip.git (master) completed! +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepos +INFO: [407/480] Analyzing https://github.com/euchangxian/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AlagappanRa/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AlagappanRa/ip.git (master) completed! -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [408/480] Analyzing https://github.com/felibunnyy/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator analyzeRepos +INFO: [408/480] Analyzing https://github.com/Ken-Lai/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Ken-Lai/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Ken-Lai/ip.git (master)... +Sep 16, 2023 1:57:51 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/euchangxian/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/euchangxian/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Ken-Lai/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Ken-Lai/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Ken-Lai/ip.git (master) completed! +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepos +INFO: [409/480] Analyzing https://github.com/felibunnyy/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/felibunnyy/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/felibunnyy/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nreHieW/ip.git completed! -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/marquestye/ip.git... -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/marquestye/ip.git to complete... -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/nathanielcalimag/ip.git completed! -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Tang-Moyan/ip.git... -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Tang-Moyan/ip.git to complete... -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Saezenn/ip.git completed! -Sep 16, 2023 3:10:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/euchangxian/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/DonovanJJ/ip.git... -Sep 16, 2023 3:10:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/DonovanJJ/ip.git to complete... -Sep 16, 2023 3:10:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/felibunnyy/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/felibunnyy/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/felibunnyy/ip.git (master) completed! -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [409/480] Analyzing https://github.com/Ken-Lai/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/euchangxian/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/euchangxian/ip.git (master) completed! -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepos INFO: [410/480] Analyzing https://github.com/itssisi/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Ken-Lai/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Ken-Lai/ip.git (master)... -Sep 16, 2023 3:10:03 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/itssisi/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/itssisi/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/euchangxian/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/itssisi/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/itssisi/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/itssisi/ip.git (master) completed! -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [411/480] Analyzing https://github.com/jamz903/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Ken-Lai/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jamz903/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jamz903/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Ken-Lai/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Ken-Lai/ip.git (master) completed! -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepos +INFO: [411/480] Analyzing https://github.com/Kevin-Liusx/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Kevin-Liusx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Kevin-Liusx/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/euchangxian/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/euchangxian/ip.git (master) completed! +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepos INFO: [412/480] Analyzing https://github.com/Propene-Dan/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Propene-Dan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Propene-Dan/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/jellywaiyan/ip.git completed! -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Sebtey/ip.git... -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Sebtey/ip.git to complete... -Sep 16, 2023 3:10:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Propene-Dan/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jamz903/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jamz903/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jamz903/ip.git (master) completed! -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [413/480] Analyzing https://github.com/Kevin-Liusx/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Propene-Dan/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Propene-Dan/ip.git (master) completed! -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [414/480] Analyzing https://github.com/ChuanXinNg/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Kevin-Liusx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Kevin-Liusx/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ChuanXinNg/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ChuanXinNg/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/marquestye/ip.git completed! -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/rionshocker/ip.git... -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/DonovanJJ/ip.git completed! -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/rionshocker/ip.git to complete... -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/tyouwei/ip.git... -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Tang-Moyan/ip.git completed! -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/tyouwei/ip.git to complete... -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/Blizzeracz/ip.git... -Sep 16, 2023 3:10:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/Blizzeracz/ip.git to complete... -Sep 16, 2023 3:10:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Kevin-Liusx/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Kevin-Liusx/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Kevin-Liusx/ip.git (master) completed! -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [415/480] Analyzing https://github.com/kenvynKwek/ip.git (master)... -Sep 16, 2023 3:10:04 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/kenvynKwek/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/kenvynKwek/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/ChuanXinNg/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kenvynKwek/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/kenvynKwek/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/ChuanXinNg/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/kenvynKwek/ip.git (master) completed! -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/ChuanXinNg/ip.git (master) completed! -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [416/480] Analyzing https://github.com/prawnzyy/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [417/480] Analyzing https://github.com/Ruizhi2001/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/prawnzyy/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/prawnzyy/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepos +INFO: [413/480] Analyzing https://github.com/jamz903/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jamz903/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jamz903/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Propene-Dan/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Propene-Dan/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Propene-Dan/ip.git (master) completed! +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepos +INFO: [414/480] Analyzing https://github.com/ChuanXinNg/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ChuanXinNg/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ChuanXinNg/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jamz903/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jamz903/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jamz903/ip.git (master) completed! +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator analyzeRepos +INFO: [415/480] Analyzing https://github.com/Ruizhi2001/ip.git (master)... +Sep 16, 2023 1:57:52 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Ruizhi2001/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Ruizhi2001/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Sebtey/ip.git completed! -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/ChuanXinNg/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Ruizhi2001/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/ChuanXinNg/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/ChuanXinNg/ip.git (master) completed! +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Ruizhi2001/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepos +INFO: [416/480] Analyzing https://github.com/kenvynKwek/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Ruizhi2001/ip.git (master) completed! -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepos +INFO: [417/480] Analyzing https://github.com/prawnzyy/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/kenvynKwek/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/kenvynKwek/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/prawnzyy/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/prawnzyy/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kenvynKwek/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/kenvynKwek/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/kenvynKwek/ip.git (master) completed! +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepos INFO: [418/480] Analyzing https://github.com/saraozn/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/saraozn/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/saraozn/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/prawnzyy/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/prawnzyy/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/prawnzyy/ip.git (master) completed! -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepos INFO: [419/480] Analyzing https://github.com/nicholastng010601/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicholastng010601/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicholastng010601/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/tyouwei/ip.git completed! -Sep 16, 2023 3:10:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/rionshocker/ip.git completed! -Sep 16, 2023 3:10:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/Blizzeracz/ip.git completed! -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/saraozn/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/saraozn/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/saraozn/ip.git (master) completed! -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [420/480] Analyzing https://github.com/DistractedCat/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/DistractedCat/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/DistractedCat/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepos +INFO: [420/480] Analyzing https://github.com/yezkez10/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/yezkez10/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/yezkez10/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nicholastng010601/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicholastng010601/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/yezkez10/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicholastng010601/ip.git (master) completed! -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [421/480] Analyzing https://github.com/yezkez10/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/yezkez10/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/yezkez10/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/DistractedCat/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/DistractedCat/ip.git (master)... -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/DistractedCat/ip.git (master) completed! -Sep 16, 2023 3:10:05 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepos +INFO: [421/480] Analyzing https://github.com/DistractedCat/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/yezkez10/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/yezkez10/ip.git (master) completed! +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator analyzeRepos INFO: [422/480] Analyzing https://github.com/revdrag/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/DistractedCat/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/DistractedCat/ip.git (master)... +Sep 16, 2023 1:57:53 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/revdrag/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/revdrag/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/yezkez10/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/yezkez10/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/yezkez10/ip.git (master) completed! -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [423/480] Analyzing https://github.com/alvinlim277/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/alvinlim277/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/alvinlim277/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/revdrag/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/revdrag/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/revdrag/ip.git (master) completed! -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [424/480] Analyzing https://github.com/JasonRay168/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [423/480] Analyzing https://github.com/JasonRay168/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/DistractedCat/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/JasonRay168/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/JasonRay168/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/alvinlim277/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/alvinlim277/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/alvinlim277/ip.git (master) completed! -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [425/480] Analyzing https://github.com/billieboy7/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/DistractedCat/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/DistractedCat/ip.git (master) completed! +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [424/480] Analyzing https://github.com/billieboy7/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/billieboy7/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/billieboy7/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/JasonRay168/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/JasonRay168/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/JasonRay168/ip.git (master) completed! -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [426/480] Analyzing https://github.com/jannnice/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/jannnice/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/jannnice/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [425/480] Analyzing https://github.com/alvinlim277/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/billieboy7/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/alvinlim277/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/alvinlim277/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/billieboy7/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/billieboy7/ip.git (master) completed! -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [427/480] Analyzing https://github.com/evanyan13/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/evanyan13/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/evanyan13/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [426/480] Analyzing https://github.com/jannnice/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/jannnice/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/jannnice/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jannnice/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jannnice/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jannnice/ip.git (master) completed! -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [428/480] Analyzing https://github.com/samuelim01/ip.git (master)... -Sep 16, 2023 3:10:06 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [427/480] Analyzing https://github.com/samuelim01/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/samuelim01/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/samuelim01/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/evanyan13/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/alvinlim277/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/alvinlim277/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/alvinlim277/ip.git (master) completed! +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [428/480] Analyzing https://github.com/dinde2004/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dinde2004/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dinde2004/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dinde2004/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dinde2004/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dinde2004/ip.git (master) completed! +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [429/480] Analyzing https://github.com/evanyan13/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/evanyan13/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/evanyan13/ip.git (master)... +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/samuelim01/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/evanyan13/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/evanyan13/ip.git (master) completed! -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [429/480] Analyzing https://github.com/dinde2004/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/samuelim01/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:54 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/samuelim01/ip.git (master) completed! -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepos INFO: [430/480] Analyzing https://github.com/seanpzk/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dinde2004/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dinde2004/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/seanpzk/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/seanpzk/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dinde2004/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dinde2004/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dinde2004/ip.git (master) completed! -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [431/480] Analyzing https://github.com/KumChaiYin/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/KumChaiYin/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/KumChaiYin/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/evanyan13/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/seanpzk/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/evanyan13/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/seanpzk/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/evanyan13/ip.git (master) completed! +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/seanpzk/ip.git (master) completed! -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [432/480] Analyzing https://github.com/lsyurea/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepos +INFO: [431/480] Analyzing https://github.com/KumChaiYin/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepos +INFO: [432/480] Analyzing https://github.com/geraldngjx/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/geraldngjx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/geraldngjx/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/KumChaiYin/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/KumChaiYin/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/geraldngjx/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/geraldngjx/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/geraldngjx/ip.git (master) completed! +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/KumChaiYin/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepos +INFO: [433/480] Analyzing https://github.com/lsyurea/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lsyurea/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lsyurea/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/KumChaiYin/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lsyurea/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/KumChaiYin/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lsyurea/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lsyurea/ip.git (master) completed! -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/KumChaiYin/ip.git (master) completed! -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [433/480] Analyzing https://github.com/Sasmik23/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [434/480] Analyzing https://github.com/geraldngjx/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepos +INFO: [434/480] Analyzing https://github.com/Sasmik23/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Sasmik23/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Sasmik23/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/geraldngjx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/geraldngjx/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Sasmik23/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lsyurea/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Sasmik23/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Sasmik23/ip.git (master) completed! -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepos INFO: [435/480] Analyzing https://github.com/garylow2001/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lsyurea/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lsyurea/ip.git (master) completed! +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepos +INFO: [436/480] Analyzing https://github.com/wamps-jp/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/garylow2001/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/garylow2001/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/geraldngjx/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/geraldngjx/ip.git (master)... -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/geraldngjx/ip.git (master) completed! -Sep 16, 2023 3:10:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [436/480] Analyzing https://github.com/leontan2/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/wamps-jp/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/wamps-jp/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/wamps-jp/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/wamps-jp/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/wamps-jp/ip.git (master) completed! +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator analyzeRepos +INFO: [437/480] Analyzing https://github.com/leontan2/ip.git (master)... +Sep 16, 2023 1:57:55 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/leontan2/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/leontan2/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/garylow2001/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/garylow2001/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/garylow2001/ip.git (master) completed! -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [437/480] Analyzing https://github.com/lululwtv/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepos +INFO: [438/480] Analyzing https://github.com/lululwtv/ip.git (master)... +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lululwtv/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lululwtv/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/leontan2/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/leontan2/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/leontan2/ip.git (master) completed! -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [438/480] Analyzing https://github.com/wamps-jp/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/wamps-jp/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/wamps-jp/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/wamps-jp/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/wamps-jp/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/wamps-jp/ip.git (master) completed! -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepos INFO: [439/480] Analyzing https://github.com/dickongwd/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/dickongwd/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/dickongwd/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/dickongwd/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lululwtv/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/dickongwd/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/dickongwd/ip.git (master) completed! -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepos INFO: [440/480] Analyzing https://github.com/jacksonyuan256/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jacksonyuan256/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jacksonyuan256/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lululwtv/ip.git (master)... +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/lululwtv/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/lululwtv/ip.git (master) completed! -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepos INFO: [441/480] Analyzing https://github.com/wr1159/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wr1159/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wr1159/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jacksonyuan256/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jacksonyuan256/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jacksonyuan256/ip.git (master) completed! -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepos INFO: [442/480] Analyzing https://github.com/suryanshkushwaha/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/suryanshkushwaha/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/suryanshkushwaha/ip.git (master)... +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wr1159/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wr1159/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wr1159/ip.git (master) completed! -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator analyzeRepos INFO: [443/480] Analyzing https://github.com/Nauxe/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/suryanshkushwaha/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/suryanshkushwaha/ip.git (master)... -Sep 16, 2023 3:10:08 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:56 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Nauxe/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Nauxe/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Nauxe/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Nauxe/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Nauxe/ip.git (master) completed! -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepos INFO: [444/480] Analyzing https://github.com/yyyaohhh/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/yyyaohhh/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/yyyaohhh/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/yyyaohhh/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/yyyaohhh/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/yyyaohhh/ip.git (master) completed! -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepos INFO: [445/480] Analyzing https://github.com/zhanyang01/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/suryanshkushwaha/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/zhanyang01/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/zhanyang01/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/suryanshkushwaha/ip.git (master)... +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/suryanshkushwaha/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/suryanshkushwaha/ip.git (master) completed! -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepos INFO: [446/480] Analyzing https://github.com/czhiruo/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/czhiruo/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/czhiruo/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/czhiruo/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/czhiruo/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/czhiruo/ip.git (master) completed! -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepos -INFO: [447/480] Analyzing https://github.com/longnguyentan/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/longnguyentan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/longnguyentan/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepos +INFO: [447/480] Analyzing https://github.com/victorpengmx/ip.git (master)... +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/victorpengmx/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/victorpengmx/ip.git (master)... +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/zhanyang01/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/zhanyang01/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/zhanyang01/ip.git (master) completed! -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepos -INFO: [448/480] Analyzing https://github.com/victorpengmx/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/victorpengmx/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/victorpengmx/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/longnguyentan/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/longnguyentan/ip.git (master)... -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/longnguyentan/ip.git (master) completed! -Sep 16, 2023 3:10:09 AM reposense.report.ReportGenerator analyzeRepos -INFO: [449/480] Analyzing https://github.com/Cikguseven/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Cikguseven/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Cikguseven/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepos +INFO: [448/480] Analyzing https://github.com/longnguyentan/ip.git (master)... +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/longnguyentan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/longnguyentan/ip.git (master)... +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/victorpengmx/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/victorpengmx/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/victorpengmx/ip.git (master) completed! -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepos +INFO: [449/480] Analyzing https://github.com/Cikguseven/ip.git (master)... +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Cikguseven/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Cikguseven/ip.git (master)... +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/longnguyentan/ip.git (master)... +Sep 16, 2023 1:57:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/longnguyentan/ip.git (master)... +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/longnguyentan/ip.git (master) completed! +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator analyzeRepos INFO: [450/480] Analyzing https://github.com/Eola-Z/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:57 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Eola-Z/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Eola-Z/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Eola-Z/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Eola-Z/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Eola-Z/ip.git (master) completed! -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepos INFO: [451/480] Analyzing https://github.com/lipwei1808/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Cikguseven/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/lipwei1808/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/lipwei1808/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Cikguseven/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Cikguseven/ip.git (master) completed! -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepos INFO: [452/480] Analyzing https://github.com/jibtaf/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jibtaf/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jibtaf/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/lipwei1808/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jibtaf/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/lipwei1808/ip.git (master)... +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jibtaf/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/lipwei1808/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jibtaf/ip.git (master) completed! -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/lipwei1808/ip.git (master) completed! -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepos INFO: [453/480] Analyzing https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [454/480] Analyzing https://github.com/dylkaw/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/lipwei1808/ip.git (master)... +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/lipwei1808/ip.git (master) completed! +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/Mohammed-Faizzzz/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/dylkaw/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/dylkaw/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/dylkaw/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/dylkaw/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/dylkaw/ip.git (master) completed! -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [455/480] Analyzing https://github.com/nikele2001/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepos +INFO: [454/480] Analyzing https://github.com/nikele2001/ip.git (master)... +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nikele2001/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nikele2001/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Mohammed-Faizzzz/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Mohammed-Faizzzz/ip.git (master) completed! -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [456/480] Analyzing https://github.com/DeltonCheng/ip.git (master)... -Sep 16, 2023 3:10:10 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepos +INFO: [455/480] Analyzing https://github.com/DeltonCheng/ip.git (master)... +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/DeltonCheng/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/DeltonCheng/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nikele2001/ip.git (master)... +Sep 16, 2023 1:57:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/nikele2001/ip.git (master)... +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/nikele2001/ip.git (master) completed! +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator analyzeRepos +INFO: [456/480] Analyzing https://github.com/dylkaw/ip.git (master)... +Sep 16, 2023 1:57:58 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/dylkaw/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/dylkaw/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/DeltonCheng/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/DeltonCheng/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/DeltonCheng/ip.git (master) completed! -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepos INFO: [457/480] Analyzing https://github.com/ChangruHenryQian/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/ChangruHenryQian/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/ChangruHenryQian/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nikele2001/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/nikele2001/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/nikele2001/ip.git (master) completed! -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [458/480] Analyzing https://github.com/craigtonlian/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/craigtonlian/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/craigtonlian/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/dylkaw/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/dylkaw/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/dylkaw/ip.git (master) completed! +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepos +INFO: [458/480] Analyzing https://github.com/ruo-x/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/ruo-x/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/ruo-x/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ChangruHenryQian/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ChangruHenryQian/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ChangruHenryQian/ip.git (master) completed! -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [459/480] Analyzing https://github.com/ruo-x/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/ruo-x/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/ruo-x/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/craigtonlian/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/craigtonlian/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/craigtonlian/ip.git (master) completed! -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [460/480] Analyzing https://github.com/iantsaii/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/iantsaii/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/iantsaii/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepos +INFO: [459/480] Analyzing https://github.com/craigtonlian/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/craigtonlian/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/craigtonlian/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/ruo-x/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/ruo-x/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/ruo-x/ip.git (master) completed! -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepos +INFO: [460/480] Analyzing https://github.com/iantsaii/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/iantsaii/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:57:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/iantsaii/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/craigtonlian/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/craigtonlian/ip.git (master)... +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/craigtonlian/ip.git (master) completed! +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepos INFO: [461/480] Analyzing https://github.com/wjacobw/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/wjacobw/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/wjacobw/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/iantsaii/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/iantsaii/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/iantsaii/ip.git (master) completed! -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepos INFO: [462/480] Analyzing https://github.com/angkyakdifp/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/angkyakdifp/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/angkyakdifp/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/wjacobw/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:57:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/wjacobw/ip.git (master)... -Sep 16, 2023 3:10:11 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/wjacobw/ip.git (master) completed! -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator analyzeRepos INFO: [463/480] Analyzing https://github.com/brein62/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:57:59 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/brein62/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:57:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/brein62/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/angkyakdifp/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/angkyakdifp/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/angkyakdifp/ip.git (master) completed! -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator analyzeRepos INFO: [464/480] Analyzing https://github.com/nicrandomlee/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nicrandomlee/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:58:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nicrandomlee/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/brein62/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/nicrandomlee/ip.git (master)... +Sep 16, 2023 1:58:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/brein62/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/brein62/ip.git (master) completed! -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator analyzeRepos INFO: [465/480] Analyzing https://github.com/Bryan-Goh/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/nicrandomlee/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Bryan-Goh/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Bryan-Goh/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nicrandomlee/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nicrandomlee/ip.git (master) completed! -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator analyzeRepos INFO: [466/480] Analyzing https://github.com/kiatkat/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Bryan-Goh/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:58:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Bryan-Goh/ip.git (master)... +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/kiatkat/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:58:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/kiatkat/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Bryan-Goh/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Bryan-Goh/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Bryan-Goh/ip.git (master) completed! -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator analyzeRepos INFO: [467/480] Analyzing https://github.com/MadLamprey/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:58:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/kiatkat/ip.git (master)... +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/MadLamprey/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:58:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/MadLamprey/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/kiatkat/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/kiatkat/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/kiatkat/ip.git (master) completed! -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator analyzeRepos INFO: [468/480] Analyzing https://github.com/xyT-T/ip.git (master)... -Sep 16, 2023 3:10:12 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:58:00 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/xyT-T/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:58:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/xyT-T/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/MadLamprey/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/MadLamprey/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/MadLamprey/ip.git (master) completed! -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepos INFO: [469/480] Analyzing https://github.com/jiakai-17/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/xyT-T/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jiakai-17/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:58:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jiakai-17/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/xyT-T/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/xyT-T/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/xyT-T/ip.git (master) completed! -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepos INFO: [470/480] Analyzing https://github.com/nreHieW/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nreHieW/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:58:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nreHieW/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nreHieW/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/jiakai-17/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nreHieW/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nreHieW/ip.git (master) completed! -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepos +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepos INFO: [471/480] Analyzing https://github.com/nathanielcalimag/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/jiakai-17/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/jiakai-17/ip.git (master) completed! -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [472/480] Analyzing https://github.com/Saezenn/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/jiakai-17/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/nathanielcalimag/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:58:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/nathanielcalimag/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Saezenn/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Saezenn/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/Saezenn/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/Saezenn/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/Saezenn/ip.git (master) completed! -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [473/480] Analyzing https://github.com/jellywaiyan/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator updateRepoConfig +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/jiakai-17/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/jiakai-17/ip.git (master) completed! +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [472/480] Analyzing https://github.com/jellywaiyan/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/jellywaiyan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Sep 16, 2023 1:58:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/jellywaiyan/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/nathanielcalimag/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/nathanielcalimag/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/nathanielcalimag/ip.git (master) completed! -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [474/480] Analyzing https://github.com/marquestye/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/marquestye/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/marquestye/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/jellywaiyan/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [473/480] Analyzing https://github.com/Saezenn/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/jellywaiyan/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Saezenn/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:58:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Saezenn/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/jellywaiyan/ip.git (master) completed! -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [475/480] Analyzing https://github.com/DonovanJJ/ip.git (master)... -Sep 16, 2023 3:10:13 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/DonovanJJ/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/DonovanJJ/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [474/480] Analyzing https://github.com/marquestye/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/marquestye/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:58:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/marquestye/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/Saezenn/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/Saezenn/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/Saezenn/ip.git (master) completed! +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator analyzeRepos +INFO: [475/480] Analyzing https://github.com/Tang-Moyan/ip.git (master)... +Sep 16, 2023 1:58:01 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Tang-Moyan/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:58:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Tang-Moyan/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/marquestye/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/marquestye/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/marquestye/ip.git (master) completed! -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [476/480] Analyzing https://github.com/Tang-Moyan/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Tang-Moyan/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Tang-Moyan/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/DonovanJJ/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/DonovanJJ/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/DonovanJJ/ip.git (master) completed! -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [477/480] Analyzing https://github.com/Sebtey/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Sebtey/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Sebtey/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepos +INFO: [476/480] Analyzing https://github.com/DonovanJJ/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/DonovanJJ/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:58:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/DonovanJJ/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Tang-Moyan/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Tang-Moyan/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Tang-Moyan/ip.git (master) completed! -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [478/480] Analyzing https://github.com/tyouwei/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/tyouwei/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/tyouwei/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepos +INFO: [477/480] Analyzing https://github.com/Sebtey/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Sebtey/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:58:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Sebtey/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/DonovanJJ/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/DonovanJJ/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/DonovanJJ/ip.git (master) completed! +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepos +INFO: [478/480] Analyzing https://github.com/rionshocker/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/rionshocker/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:58:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/rionshocker/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Sebtey/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Sebtey/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Sebtey/ip.git (master) completed! -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [479/480] Analyzing https://github.com/rionshocker/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/rionshocker/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/rionshocker/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/tyouwei/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/tyouwei/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/tyouwei/ip.git (master) completed! -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [480/480] Analyzing https://github.com/Blizzeracz/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/Blizzeracz/ip.git (master) does not contain a standalone config file. -Sep 16, 2023 3:10:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/Blizzeracz/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepos +INFO: [479/480] Analyzing https://github.com/tyouwei/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/tyouwei/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:58:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/tyouwei/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/rionshocker/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/rionshocker/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/rionshocker/ip.git (master) completed! -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepos +INFO: [480/480] Analyzing https://github.com/Blizzeracz/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/Blizzeracz/ip.git (master) does not contain a standalone config file. +Sep 16, 2023 1:58:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/Blizzeracz/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/tyouwei/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/tyouwei/ip.git (master)... +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/tyouwei/ip.git (master) completed! +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/Blizzeracz/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Sep 16, 2023 1:58:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/Blizzeracz/ip.git (master)... -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator analyzeRepo +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/Blizzeracz/ip.git (master) completed! -Sep 16, 2023 3:10:14 AM reposense.report.ReportGenerator generateReposReport +Sep 16, 2023 1:58:02 PM reposense.report.ReportGenerator generateReposReport INFO: The report is generated at /home/runner/work/ip-dashboard/ip-dashboard/reposense-report -Sep 16, 2023 3:10:16 AM reposense.RepoSense main -INFO: Elapsed processing time: 2 minute(s) 0.55 second(s) +Sep 16, 2023 1:58:04 PM reposense.RepoSense main +INFO: Elapsed processing time: 1 minute(s) 58.71 second(s) diff --git a/s-kybound_ip_master/authorship.json b/s-kybound_ip_master/authorship.json index 1091945d..0e7f489a 100644 --- a/s-kybound_ip_master/authorship.json +++ b/s-kybound_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":"s-kybound"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"s-kybound"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-12"},{"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":"s-kybound"},"content":" mainClass.set(\"crusader.Launcher\")","lastModifiedDate":"2023-09-13"},{"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":"s-kybound"},"content":" archiveBaseName \u003d \"crusader\"","lastModifiedDate":"2023-09-02"},{"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":"s-kybound"},"content":"checkstyle {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"s-kybound":21,"-":40}},{"path":"src/main/java/crusader/Crusader.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderMissingSaveFileException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * The main instance of the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class Crusader {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" /** Logo generated from https://patorjk.com/software/taag */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" private static final String LOGO \u003d","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" \" _____ _\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" + \" / ____| | |\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" + \" | | _ __ _ _ ___ __ _ __| | ___ _ __\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" + \" | | | \u0027__| | | / __|/ _` |/ _` |/ _ \\\\ \u0027__|\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" + \" | |____| | | |_| \\\\__ \\\\ (_| | (_| | __/ |\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" + \" \\\\_____|_| \\\\__,_|___/\\\\__,_|\\\\__,_|\\\\___|_|\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" * The filepath used to save data.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" private static final String SAVE_FILE \u003d \"./data/crusader.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" * The system used to manage data storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" * The set of tasks in the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" * The interface of the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" * Constructs a Crusader bot instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" * @param filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" * @param logo","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" public Crusader(String filePath, String logo) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" this.ui \u003d new Ui(logo);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" } catch (CrusaderMissingSaveFileException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" ui.say(\"Creating a new file, file does not exist!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" } catch (CrusaderException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" ui.say(\"Saved file is formatted wrongly!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":" * Constructs a Crusader bot instance.","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" public Crusader() {","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" TaskList taskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" this.ui \u003d new Ui(LOGO);","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" this.storage \u003d new Storage(SAVE_FILE);","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" } catch (CrusaderMissingSaveFileException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":" } catch (CrusaderException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"s-kybound"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"s-kybound"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"s-kybound"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"s-kybound"},"content":" return c.execute(ui, taskList, storage);","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"s-kybound"},"content":" } catch (CrusaderException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"s-kybound"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"s-kybound":85}},{"path":"src/main/java/crusader/DateUtils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * A set of tools to make date formatting in the bot standardised","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class DateUtils {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" * The date and time format used for all input in this program.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" private static final SimpleDateFormat DATE_FORMAT \u003d new SimpleDateFormat(\"dd/MM/yyyy kk\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" * THe date format used to display information in the program.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" private static final SimpleDateFormat PRESENT_FORMAT \u003d new SimpleDateFormat(\"MMM dd yyyy kk\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" * Parses dates and times entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" public static Date parseDateTime(String dateTimeString) throws ParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" return DATE_FORMAT.parse(dateTimeString);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" * Formats a date so that it can be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" * @param date A date","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" * @return A string formatted for saving","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" public static String saveFormat(Date date) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" return DATE_FORMAT.format(date);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" * Formats a date to display it","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" * @param date A date","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" * @return A string formatted for the display","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" public static String presentFormat(Date date) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" return PRESENT_FORMAT.format(date);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":45}},{"path":"src/main/java/crusader/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" private Label dialog;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" private void flip() {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" public static DialogBox getCrusaderDialog(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" db.flip();","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" return db;","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":61}},{"path":"src/main/java/crusader/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":" * A launcher class to work around classpath issues.","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"public class Launcher {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":12}},{"path":"src/main/java/crusader/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" private Crusader crusader \u003d new Crusader();","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setCrusader(crusader);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" stage.show();","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":31}},{"path":"src/main/java/crusader/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" private Crusader crusader;","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/noob.jpg\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" private Image crusaderImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/crusader.jpg\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" public void initialize() {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" public void setCrusader(Crusader c) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" crusader \u003d c;","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" String response \u003d crusader.getResponse(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" DialogBox.getCrusaderDialog(response, crusaderImage)","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" );","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" userInput.clear();","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" // check if this is a bye command","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" if (input.trim().equals(\"bye\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" Platform.exit();","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":57}},{"path":"src/main/java/crusader/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.command.AddTaskCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.command.ByeCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import crusader.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import crusader.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import crusader.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"import crusader.command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"import crusader.command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderDateFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" * A set of tools used to parse user input","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" * Takes a command given by the user and converts it into a usable command.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" * @param prompt A string representing a user command.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" * @return A Command instance","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderException Error is generated when input command is malformed.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" public static Command parse(String prompt) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" Command returnCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" switch (prompt.contains(\" \")","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" ? prompt.split(\" \")[0]","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" : prompt) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseMarking(prompt, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseMarking(prompt, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseTodo(prompt);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseEvent(prompt);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseDeadline(prompt);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseDelete(prompt);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" case \"find\":","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseFind(prompt);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"Unknown command!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" return returnCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" * Creates a mark or unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":" * @param currentPrompt User input.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"s-kybound"},"content":" * @param isMarkCommand Whether this is a mark or unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"s-kybound"},"content":" * @return Mark/Unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderException When input is malformed, for example, when no index is given.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"s-kybound"},"content":" private static Command parseMarking(String currentPrompt, boolean isMarkCommand) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"s-kybound"},"content":" String[] components \u003d currentPrompt.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"s-kybound"},"content":" if (components.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"un/mark expects 1 parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"s-kybound"},"content":" int i \u003d Integer.parseInt(currentPrompt.split(\" \")[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"s-kybound"},"content":" return new MarkCommand(i, isMarkCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"s-kybound"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"un/mark expects its 1 parameter to be a number!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"s-kybound"},"content":" * Creates an add task command, adding a todo","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"s-kybound"},"content":" * @param prompt User input","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"s-kybound"},"content":" * @return Todo command","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderException When input is malformed, in this case with no name given","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"s-kybound"},"content":" private static Command parseTodo(String prompt) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"s-kybound"},"content":" if (prompt.trim().length() \u003c 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"todo expects 1 parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"s-kybound"},"content":" String name \u003d prompt.substring(5).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"s-kybound"},"content":" Todo t \u003d new Todo(name);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"s-kybound"},"content":" return new AddTaskCommand(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"s-kybound"},"content":" * Creates an add task command, adding an event","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"s-kybound"},"content":" * @param prompt User input","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"s-kybound"},"content":" * @return Event command","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderParseException","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"s-kybound"},"content":" private static Command parseEvent(String prompt) throws CrusaderParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"s-kybound"},"content":" int fromPosition \u003d prompt.indexOf(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"s-kybound"},"content":" if (fromPosition \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"An event must have a /from parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"s-kybound"},"content":" int toPosition \u003d prompt.indexOf(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"s-kybound"},"content":" if (toPosition \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"An event must have /to parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"s-kybound"},"content":" if (toPosition \u003c\u003d fromPosition) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"/to should be in front of /from!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"s-kybound"},"content":" if (fromPosition \u003c 7) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"There should be an event name!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"s-kybound"},"content":" if (fromPosition + 6 \u003e toPosition - 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"Please specify a /from parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"s-kybound"},"content":" if (toPosition + 4 \u003e prompt.trim().length()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"Please specify a /to parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"s-kybound"},"content":" String name \u003d prompt.substring(6, fromPosition - 1).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"s-kybound"},"content":" String from \u003d prompt.substring(fromPosition + 6, toPosition - 1).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"s-kybound"},"content":" String to \u003d prompt.substring(toPosition + 4).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"s-kybound"},"content":" Event e \u003d new Event(name, DateUtils.parseDateTime(from), DateUtils.parseDateTime(to));","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"s-kybound"},"content":" return new AddTaskCommand(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"s-kybound"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderDateFormatException();","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"s-kybound"},"content":" * Creates an add task command, adding a deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"s-kybound"},"content":" * @param prompt User input","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"s-kybound"},"content":" * @return Deadline command","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderParseException","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"s-kybound"},"content":" private static Command parseDeadline(String prompt) throws CrusaderParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"s-kybound"},"content":" int byPosition \u003d prompt.indexOf(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"s-kybound"},"content":" if (byPosition \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"A deadline must have a /by parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"s-kybound"},"content":" if (byPosition + 4 \u003e prompt.trim().length()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"Please specify a /by parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"s-kybound"},"content":" String name \u003d prompt.substring(9, byPosition - 1).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"s-kybound"},"content":" String by \u003d prompt.substring(byPosition + 4).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"s-kybound"},"content":" Deadline d \u003d new Deadline(name, DateUtils.parseDateTime(by));","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"s-kybound"},"content":" return new AddTaskCommand(d);","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"s-kybound"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderDateFormatException();","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"s-kybound"},"content":" * Creates a delete command","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"s-kybound"},"content":" * @param prompt User input","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"s-kybound"},"content":" * @return Delete command","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderParseException","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"s-kybound"},"content":" private static Command parseDelete(String prompt) throws CrusaderParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"s-kybound"},"content":" String[] components \u003d prompt.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"s-kybound"},"content":" if (components.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"delete expects 1 parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"s-kybound"},"content":" int i \u003d Integer.parseInt(prompt.split(\" \")[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"s-kybound"},"content":" return new DeleteCommand(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"s-kybound"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"delete expects its 1 parameter to be a number!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"s-kybound"},"content":" private static Command parseFind(String prompt) throws CrusaderParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"s-kybound"},"content":" String[] components \u003d prompt.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"s-kybound"},"content":" if (components.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"find expects at least 1 parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"s-kybound"},"content":" String query \u003d prompt.substring(5).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"s-kybound"},"content":" return new FindCommand(query);","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":193}},{"path":"src/main/java/crusader/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderMissingSaveFileException;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Event;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Todo;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * The component of the bot responsible for loading and saving data to disk","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" * The file used to load and save data","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" private final File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" * Initializes storage","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" * @param filePath The path to the file","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" * Loads into TASKS saved tasks from a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderException thrown on erroneous input","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" // parse the line","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" Task task \u003d parseSavedTask(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" } catch (ParseException | IndexOutOfBoundsException | IllegalArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"The save file is malformed!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderMissingSaveFileException(this.file.getPath());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" * Parses a single task saved in the text file.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":" * @param taskString Line to be parsed.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" * @return A new Crusader.Task.Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" private Task parseSavedTask(String taskString) throws ParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" String[] components \u003d taskString.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" switch (components[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" task \u003d new Event(","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" components[1],","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":" DateUtils.parseDateTime(components[3]),","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"s-kybound"},"content":" DateUtils.parseDateTime(components[4]));","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"s-kybound"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"s-kybound"},"content":" task \u003d new Todo(components[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"s-kybound"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"s-kybound"},"content":" task \u003d new Deadline(","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"s-kybound"},"content":" components[1],","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"s-kybound"},"content":" DateUtils.parseDateTime(components[3]));","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"s-kybound"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"s-kybound"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"s-kybound"},"content":" if (components[2].equals(\"X\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"s-kybound"},"content":" task.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"s-kybound"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"s-kybound"},"content":" * Saves the Tasks in TASKS to a given file.","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"s-kybound"},"content":" * @param tasks The required tasks to parse","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"s-kybound"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"s-kybound"},"content":" try (PrintWriter fileWriter \u003d new PrintWriter(this.file)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"s-kybound"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"s-kybound"},"content":" fileWriter.println(task.toFormat());","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"s-kybound"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"s-kybound"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":105}},{"path":"src/main/java/crusader/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderNoSuchTaskException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" * A set of tasks to do","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" * The list of task","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * Creates an empty tasklist","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" * Initializes a tasklist with a pre-existing list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" * @param tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" * Describes the list of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" String returnString \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" for (int x \u003d 0; x \u003c tasks.size(); x++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" returnString \u003d String.format(\"%s%d. %s\\n\", returnString, x + 1, tasks.get(x).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" return returnString;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" * @param index index of the task to be marked. 1-indexed.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" * @return the updated task.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" public Task markTask(int index) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" Task task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" task.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderNoSuchTaskException(\"There is no task at that index!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" * Unmarks a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" * @param index index of the task to be unmarked. 1-indexed.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" * @return the updated task.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" public Task unmarkTask(int index) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" Task task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":" task.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"s-kybound"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"s-kybound"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderNoSuchTaskException(\"There is no task at that index!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"s-kybound"},"content":" * Deletes a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"s-kybound"},"content":" * @param index index of the task to be deleted. 1-indexed.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"s-kybound"},"content":" * @return the deleted task.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"s-kybound"},"content":" public Task deleteTask(int index) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"s-kybound"},"content":" Task task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"s-kybound"},"content":" tasks.remove(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"s-kybound"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"s-kybound"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderNoSuchTaskException(\"There is no task at that index!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"s-kybound"},"content":" * Gets the current size of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"s-kybound"},"content":" * @return the size of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"s-kybound"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"s-kybound"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"s-kybound"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"s-kybound"},"content":" * @param task task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"s-kybound"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"s-kybound"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"s-kybound"},"content":" * Gets the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"s-kybound"},"content":" * @return the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"s-kybound"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"s-kybound"},"content":" return this.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"s-kybound"},"content":" * Returns a smaller task list, comprising only of tasks matching a certain query","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"s-kybound"},"content":" * @param query Query used to filter the task list","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"s-kybound"},"content":" public TaskList filter(String query) {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"s-kybound"},"content":" return new TaskList(","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"s-kybound"},"content":" new ArrayList\u003c\u003e(","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"s-kybound"},"content":" this.tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"s-kybound"},"content":" .stream()","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"s-kybound"},"content":" .filter(","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"s-kybound"},"content":" task -\u003e task.getName().contains(query))","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"s-kybound"},"content":" .collect(Collectors.toList())));","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":133}},{"path":"src/main/java/crusader/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":" * The main interface of the bot","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" * The logo for the bot","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" private final String logo;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" private final Scanner inputScanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" * Initializes the UI of the bot","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" * @param logo","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" public Ui(String logo) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" this.logo \u003d logo;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" this.inputScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" * Generates a horizontal line to divide parts of the conversation.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" public void addDivider() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" * Makes the bot say something.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" * Formatted nicely with a divider.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" public void say(String line) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" addDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" * Displays the logo of the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" public void showLogo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" say(this.logo);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" * Greets the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" public void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" say(\"Hi, I am CRUSADER\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" * Says goodbye to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" public void farewell() {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" say(\"Bye!\\nHave a great day!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" * Prompts the user for input.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" public String promptInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" System.out.print(\"Input: \");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" String prompt \u003d inputScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" addDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" return prompt.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":71}},{"path":"src/main/java/crusader/command/AddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" * Command used to add a task of any type to the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"public class AddTaskCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" private final Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" public AddTaskCommand(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" taskList.addTask(this.task);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" \"Adding the task:\\n%s\\nNow there are %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" this.task.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" taskList.getSize());","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":27}},{"path":"src/main/java/crusader/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * Command used to exit the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" public ByeCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" // empty","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" return \"Bye!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":25}},{"path":"src/main/java/crusader/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" * A command, representing a singular action in the bot","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" * Generates a new command.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" public Command() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" // empty","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * Runs the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" * @param ui UI to generate output if required","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" * @param taskList Task list to update or access as required","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderException On malformed user input","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" public abstract String execute(Ui ui, TaskList taskList, Storage storage) throws CrusaderException;","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" * Checks whether the command is used to terminate the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" * @return Whether the command is an exit command","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":35}},{"path":"src/main/java/crusader/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" * Command used to delete tasks from the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" private final int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage) throws CrusaderException {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" Task deletedTask \u003d taskList.deleteTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" \"Deleting the task:\\n%s\\nNow there are %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" deletedTask.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" taskList.getSize());","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":27}},{"path":"src/main/java/crusader/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" * Command used to search for matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" private final String query;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" * Constructs a new find/search command.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" * @param query The query to search for.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" public FindCommand(String query) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" this.query \u003d query;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage9) throws CrusaderException {","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" \"Here are the matching tasks in the list:\\n%s\",","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" taskList.filter(query).toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":30}},{"path":"src/main/java/crusader/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * Command used to show all tasks in the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" // nothing","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" \"Here are your tasks:\\n%s\",","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" taskList.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":21}},{"path":"src/main/java/crusader/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" * Command used to mark or unmark tasks as done or not in the bot","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" private final int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" private final boolean isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" * Constructs a new marking command.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" * @param index The index of the task to mark.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * @param isMark Whether we are to mark or unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" public MarkCommand(int index, boolean isMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" this.isMark \u003d isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage) throws CrusaderException {","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" Task changedTask \u003d this.isMark ? taskList.markTask(index) : taskList.unmarkTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" \"%s:\\n%s\\n\",","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" this.isMark ? \"I have marked the following task as done\" : \"I have unmarked this task\",","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" changedTask.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":36}},{"path":"src/main/java/crusader/exception/CrusaderDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * Represents an error from wrong time formatting in the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class CrusaderDateFormatException extends CrusaderParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public CrusaderDateFormatException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(\"I only understand dates in the format dd/mm/yyyy hh(24 hours)!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":10}},{"path":"src/main/java/crusader/exception/CrusaderException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * An error in the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class CrusaderException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public CrusaderException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":10}},{"path":"src/main/java/crusader/exception/CrusaderMissingSaveFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * Represents an error due to lack of an existing save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class CrusaderMissingSaveFileException extends CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public CrusaderMissingSaveFileException(String path) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(String.format(\"No save file could be found at path %s !\", path));","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":10}},{"path":"src/main/java/crusader/exception/CrusaderNoSuchTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * Represents an error dur to accessing a nonexistent task","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class CrusaderNoSuchTaskException extends CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public CrusaderNoSuchTaskException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":10}},{"path":"src/main/java/crusader/exception/CrusaderParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * Represents an error in parsing user input","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class CrusaderParseException extends CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public CrusaderParseException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(String.format(\"There is a parsing error!\\nDetails: %s\", message));","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":10}},{"path":"src/main/java/crusader/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.DateUtils;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * A deadline task, with a time the task is due by","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" * Time the deadline is due by","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" private final Date by;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" * Constructs a new Deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" * @param name Name of the deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * @param by When the deadline is due.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" public Deadline(String name, Date by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" \"[D]%s (by: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" super.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" DateUtils.presentFormat(this.by));","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" public String toFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" \"D|%s|%s|%s\",","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" super.getName(),","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" super.isDone() ? \"X\" : \" \",","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" DateUtils.saveFormat(this.by));","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"s-kybound":43}},{"path":"src/main/java/crusader/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.DateUtils;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * An event task, with a duration of time the event occurs.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" * When the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" private final Date from;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" * When the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" private final Date to;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" * Constructs a new event.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" * @param name Name of the event.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" * @param from When the event starts.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" * @param to When the event ends.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" public Event(String name, Date from, Date to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" \"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" super.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" DateUtils.presentFormat(this.from),","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" DateUtils.presentFormat(this.to));","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" public String toFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" \"E|%s|%s|%s|%s\",","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" super.getName(),","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" super.isDone() ? \"X\" : \" \",","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" DateUtils.saveFormat(this.from),","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" DateUtils.saveFormat(this.to));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"s-kybound":52}},{"path":"src/main/java/crusader/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * A task to do in the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" /** Name of the task */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" private final String name;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" /** The completion status of the task */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" * Initializes a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" * @param name","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" * Gets the name of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" * @return Task\u0027s name","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" public String getName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" return name;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" * Generaties a string representation of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" * @return A string describing the task","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" return String.format(\"[%s] %s\", isDone() ? \"X\" : \" \", name);","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" * Generates a file representation of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" * @return A string optimized to store in file","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" public abstract String toFormat();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" * Checks wheter the task has been completed","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" * @return Task completion status","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" return isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" * Marks the task as complete","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":" * Designates a task as incomplete","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"s-kybound":66}},{"path":"src/main/java/crusader/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * A todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" public String toFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" return String.format(\"T|%s|%s\", super.getName(), super.isDone() ? \"X\" : \" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"s-kybound":20}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"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-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"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\"crusader.MainWindow\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"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-12"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"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\" textAlignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" \u003cFont name\u003d\"STIX Two Math Regular\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"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-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":23}},{"path":"src/test/java/crusader/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.command.AddTaskCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" public void parse_unknownCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" assertThrows(CrusaderParseException.class, () -\u003e Parser.parse(\"hello\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" public void parse_todoCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" assertTrue(Parser.parse(\"todo test\") instanceof AddTaskCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" public void parse_eventCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" assertTrue(","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" Parser.parse(\"event test /from 01/01/2023 00 /to 12/12/2023 23\") instanceof AddTaskCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" public void parse_deadlineCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" assertTrue(","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" Parser.parse(\"deadline test /by 12/12/2023 23\") instanceof AddTaskCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" public void parse_deleteCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" assertTrue(","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" Parser.parse(\"delete 1\") instanceof DeleteCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" public void parse_unmarkCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" assertTrue(","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" Parser.parse(\"unmark 2\") instanceof MarkCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" public void parse_markCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" assertTrue(","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" Parser.parse(\"mark 3\") instanceof MarkCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" public void parse_missingParameterEventCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" assertThrows(","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" CrusaderParseException.class,","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" () -\u003e Parser.parse(\"event this is okay /from this is not\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" public void parse_malformedTimeEventCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":" assertThrows(","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" CrusaderParseException.class,","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" () -\u003e Parser.parse(\"event this is okay /from 01-01-2023 2359 /to 12-12-2023 0000\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" public void parse_badIndexDeleteCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" assertThrows(","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" CrusaderParseException.class,","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" () -\u003e Parser.parse(\"delete a\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"s-kybound"},"content":" public void parse_tooManyParameterMarkCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"s-kybound"},"content":" assertThrows(","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"s-kybound"},"content":" CrusaderParseException.class,","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"s-kybound"},"content":" () -\u003e Parser.parse(\"mark 1 2 3 4\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":79}},{"path":"src/test/java/crusader/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" private static final String TEST_PATH \u003d \"./data/test.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" @BeforeEach","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" public void setup() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" File testFile \u003d new File(TEST_PATH);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" try (PrintWriter fileWriter \u003d new PrintWriter(testFile)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" fileWriter.println(\"E|eat water|X|01/12/2008 12|12/12/2023 14\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" fileWriter.println(\"T|CS2100| \\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" @AfterEach","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" public void setdown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" File testFile \u003d new File(TEST_PATH);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" testFile.delete();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" public void loadTasks_correctFormat_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" ArrayList\u003cTask\u003e taskList \u003d new Storage(TEST_PATH).loadTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" assertEquals(\"[E][X] eat water (from: Dec 01 2008 12 to: Dec 12 2023 14)\",taskList.get(0).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" assertEquals(\"[T][ ] CS2100\",taskList.get(1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" public void loadTasks_incorrectFormat_ExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" File testFile \u003d new File(TEST_PATH);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" try (PrintWriter fileWriter \u003d new PrintWriter(testFile)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" fileWriter.println(\"E|eat water|X|01/12/2008 12|december 12\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" fileWriter.println(\"T|CS2100| | |33\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" assertThrows(CrusaderParseException.class, () -\u003e new Storage(TEST_PATH).loadTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":58}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"todo buy water","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"event drink the water /from now /to later","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"deadline drink water /by tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"s-kybound":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"java -classpath ..\\bin crusader \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"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":{"s-kybound":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":"s-kybound"},"content":"java -classpath ../bin Crusader \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"s-kybound":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":"s-kybound"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"s-kybound"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-12"},{"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":"s-kybound"},"content":" mainClass.set(\"crusader.Launcher\")","lastModifiedDate":"2023-09-13"},{"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":"s-kybound"},"content":" archiveBaseName \u003d \"crusader\"","lastModifiedDate":"2023-09-02"},{"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":"s-kybound"},"content":"checkstyle {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"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":"s-kybound"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"s-kybound":22,"-":40}},{"path":"src/main/java/crusader/Crusader.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderMissingSaveFileException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * The main instance of the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class Crusader {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" /** Logo generated from https://patorjk.com/software/taag */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" private static final String LOGO \u003d","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" \" _____ _\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" + \" / ____| | |\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" + \" | | _ __ _ _ ___ __ _ __| | ___ _ __\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" + \" | | | \u0027__| | | / __|/ _` |/ _` |/ _ \\\\ \u0027__|\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" + \" | |____| | | |_| \\\\__ \\\\ (_| | (_| | __/ |\\n\"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" + \" \\\\_____|_| \\\\__,_|___/\\\\__,_|\\\\__,_|\\\\___|_|\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" * The filepath used to save data.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" private static final String SAVE_FILE \u003d \"./data/crusader.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" * The system used to manage data storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" * The set of tasks in the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" * The interface of the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" * Constructs a Crusader bot instance.","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" * @param filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" * @param logo","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" public Crusader(String filePath, String logo) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" this.ui \u003d new Ui(logo);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" } catch (CrusaderMissingSaveFileException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" ui.say(\"Creating a new file, file does not exist!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" } catch (CrusaderException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" ui.say(\"Saved file is formatted wrongly!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":" * Constructs a Crusader bot instance.","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" public Crusader() {","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" TaskList taskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" this.ui \u003d new Ui(LOGO);","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" this.storage \u003d new Storage(SAVE_FILE);","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" } catch (CrusaderMissingSaveFileException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":" } catch (CrusaderException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"s-kybound"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"s-kybound"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"s-kybound"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"s-kybound"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"s-kybound"},"content":" assert ui !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"s-kybound"},"content":" assert taskList !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"s-kybound"},"content":" assert storage !\u003d null;","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"s-kybound"},"content":" return c.execute(ui, taskList, storage);","lastModifiedDate":"2023-09-13"},{"lineNumber":84,"author":{"gitId":"s-kybound"},"content":" } catch (CrusaderException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"s-kybound"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"s-kybound":88}},{"path":"src/main/java/crusader/DateUtils.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * A set of tools to make date formatting in the bot standardised","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class DateUtils {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" * The date and time format used for all input in this program.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" private static final SimpleDateFormat DATE_FORMAT \u003d new SimpleDateFormat(\"dd/MM/yyyy kk\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" * THe date format used to display information in the program.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" private static final SimpleDateFormat PRESENT_FORMAT \u003d new SimpleDateFormat(\"MMM dd yyyy kk\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" * Parses dates and times entered.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" public static Date parseDateTime(String dateTimeString) throws ParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" return DATE_FORMAT.parse(dateTimeString);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" * Formats a date so that it can be saved.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" * @param date A date","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" * @return A string formatted for saving","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" public static String saveFormat(Date date) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" return DATE_FORMAT.format(date);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" * Formats a date to display it","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" * @param date A date","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" * @return A string formatted for the display","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" public static String presentFormat(Date date) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" return PRESENT_FORMAT.format(date);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":45}},{"path":"src/main/java/crusader/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" private Label dialog;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" private void flip() {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" public static DialogBox getCrusaderDialog(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" db.flip();","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" return db;","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":61}},{"path":"src/main/java/crusader/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":" * A launcher class to work around classpath issues.","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"public class Launcher {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":12}},{"path":"src/main/java/crusader/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" private Crusader crusader \u003d new Crusader();","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setCrusader(crusader);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" stage.show();","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":31}},{"path":"src/main/java/crusader/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" private Crusader crusader;","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/noob.jpg\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" private Image crusaderImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/crusader.jpg\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" public void initialize() {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" public void setCrusader(Crusader c) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" crusader \u003d c;","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" String response \u003d crusader.getResponse(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" DialogBox.getCrusaderDialog(response, crusaderImage)","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" );","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" userInput.clear();","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" // check if this is a bye command","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" if (input.trim().equals(\"bye\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" Platform.exit();","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":57}},{"path":"src/main/java/crusader/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.command.AddTaskCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.command.ByeCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import crusader.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import crusader.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import crusader.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"import crusader.command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"import crusader.command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderDateFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" * A set of tools used to parse user input","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" * Takes a command given by the user and converts it into a usable command.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" * @param prompt A string representing a user command.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" * @return A Command instance","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderException Error is generated when input command is malformed.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" public static Command parse(String prompt) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" Command returnCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" String firstWord \u003d prompt.contains(\" \")","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" ? prompt.split(\" \")[0]","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" : prompt;","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" switch (firstWord) {","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseMarking(prompt, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseMarking(prompt, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseTodo(prompt);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseEvent(prompt);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseDeadline(prompt);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseDelete(prompt);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":" case \"find\":","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" returnCommand \u003d parseFind(prompt);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"Unknown command!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" return returnCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":" * Creates a mark or unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"s-kybound"},"content":" * @param currentPrompt User input.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"s-kybound"},"content":" * @param isMarkCommand Whether this is a mark or unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"s-kybound"},"content":" * @return Mark/Unmark command.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderException When input is malformed, for example, when no index is given.","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"s-kybound"},"content":" private static Command parseMarking(String currentPrompt, boolean isMarkCommand) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"s-kybound"},"content":" String[] components \u003d currentPrompt.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"s-kybound"},"content":" if (components.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"un/mark expects 1 parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"s-kybound"},"content":" int i \u003d Integer.parseInt(currentPrompt.split(\" \")[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"s-kybound"},"content":" return new MarkCommand(i, isMarkCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"s-kybound"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"un/mark expects its 1 parameter to be a number!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"s-kybound"},"content":" * Creates an add task command, adding a todo","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"s-kybound"},"content":" * @param prompt User input","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"s-kybound"},"content":" * @return Todo command","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderException When input is malformed, in this case with no name given","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"s-kybound"},"content":" private static Command parseTodo(String prompt) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"s-kybound"},"content":" if (prompt.trim().length() \u003c 5) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"todo expects 1 parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"s-kybound"},"content":" String name \u003d prompt.substring(5).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"s-kybound"},"content":" Todo t \u003d new Todo(name);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"s-kybound"},"content":" return new AddTaskCommand(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"s-kybound"},"content":" * Creates an add task command, adding an event","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"s-kybound"},"content":" * @param prompt User input","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"s-kybound"},"content":" * @return Event command","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderParseException","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"s-kybound"},"content":" private static Command parseEvent(String prompt) throws CrusaderParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"s-kybound"},"content":" int fromPosition \u003d prompt.indexOf(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"s-kybound"},"content":" if (fromPosition \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"An event must have a /from parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"s-kybound"},"content":" int toPosition \u003d prompt.indexOf(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"s-kybound"},"content":" if (toPosition \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"An event must have /to parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"s-kybound"},"content":" if (toPosition \u003c\u003d fromPosition) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"/to should be in front of /from!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"s-kybound"},"content":" if (fromPosition \u003c 7) {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"There should be an event name!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"s-kybound"},"content":" if (fromPosition + 6 \u003e toPosition - 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"Please specify a /from parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"s-kybound"},"content":" if (toPosition + 4 \u003e prompt.trim().length()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"Please specify a /to parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"s-kybound"},"content":" String name \u003d prompt.substring(6, fromPosition - 1).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"s-kybound"},"content":" String from \u003d prompt.substring(fromPosition + 6, toPosition - 1).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"s-kybound"},"content":" String to \u003d prompt.substring(toPosition + 4).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"s-kybound"},"content":" Event e \u003d new Event(name, DateUtils.parseDateTime(from), DateUtils.parseDateTime(to));","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"s-kybound"},"content":" return new AddTaskCommand(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"s-kybound"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderDateFormatException();","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"s-kybound"},"content":" * Creates an add task command, adding a deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"s-kybound"},"content":" * @param prompt User input","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"s-kybound"},"content":" * @return Deadline command","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderParseException","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"s-kybound"},"content":" private static Command parseDeadline(String prompt) throws CrusaderParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"s-kybound"},"content":" int byPosition \u003d prompt.indexOf(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"s-kybound"},"content":" if (byPosition \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"A deadline must have a /by parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"s-kybound"},"content":" if (byPosition + 4 \u003e prompt.trim().length()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"Please specify a /by parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"s-kybound"},"content":" String name \u003d prompt.substring(9, byPosition - 1).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"s-kybound"},"content":" String by \u003d prompt.substring(byPosition + 4).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"s-kybound"},"content":" Deadline d \u003d new Deadline(name, DateUtils.parseDateTime(by));","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"s-kybound"},"content":" return new AddTaskCommand(d);","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"s-kybound"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderDateFormatException();","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"s-kybound"},"content":" * Creates a delete command","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"s-kybound"},"content":" * @param prompt User input","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"s-kybound"},"content":" * @return Delete command","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderParseException","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"s-kybound"},"content":" private static Command parseDelete(String prompt) throws CrusaderParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"s-kybound"},"content":" String[] components \u003d prompt.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"s-kybound"},"content":" if (components.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"delete expects 1 parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"s-kybound"},"content":" int i \u003d Integer.parseInt(prompt.split(\" \")[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"s-kybound"},"content":" return new DeleteCommand(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"s-kybound"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"delete expects its 1 parameter to be a number!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"s-kybound"},"content":" private static Command parseFind(String prompt) throws CrusaderParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"s-kybound"},"content":" String[] components \u003d prompt.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"s-kybound"},"content":" if (components.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"find expects at least 1 parameter!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"s-kybound"},"content":" String query \u003d prompt.substring(5).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"s-kybound"},"content":" return new FindCommand(query);","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":194}},{"path":"src/main/java/crusader/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderMissingSaveFileException;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Event;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Todo;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * The component of the bot responsible for loading and saving data to disk","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" * The file used to load and save data","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" private final File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" * Initializes storage","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" * @param filePath The path to the file","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" * Loads into TASKS saved tasks from a file.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderException thrown on erroneous input","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" // parse the line","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" Task task \u003d parseSavedTask(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" } catch (ParseException | IndexOutOfBoundsException | IllegalArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderParseException(\"The save file is malformed!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderMissingSaveFileException(this.file.getPath());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" * Parses a single task saved in the text file.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":" * @param taskString Line to be parsed.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" * @return A new Crusader.Task.Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" private Task parseSavedTask(String taskString) throws ParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" String[] components \u003d taskString.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" switch (components[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" task \u003d new Event(","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" components[1],","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":" DateUtils.parseDateTime(components[3]),","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"s-kybound"},"content":" DateUtils.parseDateTime(components[4]));","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"s-kybound"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"s-kybound"},"content":" task \u003d new Todo(components[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"s-kybound"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"s-kybound"},"content":" task \u003d new Deadline(","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"s-kybound"},"content":" components[1],","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"s-kybound"},"content":" DateUtils.parseDateTime(components[3]));","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"s-kybound"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"s-kybound"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"s-kybound"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"s-kybound"},"content":" if (components[2].equals(\"X\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"s-kybound"},"content":" task.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"s-kybound"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"s-kybound"},"content":" * Saves the Tasks in TASKS to a given file.","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"s-kybound"},"content":" * @param tasks The required tasks to parse","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"s-kybound"},"content":" public void saveTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"s-kybound"},"content":" try (PrintWriter fileWriter \u003d new PrintWriter(this.file)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"s-kybound"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"s-kybound"},"content":" fileWriter.println(task.toFormat());","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"s-kybound"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"s-kybound"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":105}},{"path":"src/main/java/crusader/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderNoSuchTaskException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" * A set of tasks to do","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" * The list of task","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * Creates an empty tasklist","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" * Initializes a tasklist with a pre-existing list of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" * @param tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" * Describes the list of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" String returnString \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" for (int x \u003d 0; x \u003c tasks.size(); x++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" returnString \u003d String.format(\"%s%d. %s\\n\", returnString, x + 1, tasks.get(x).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" return returnString;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" * @param index index of the task to be marked. 1-indexed.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" * @return the updated task.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" public Task markTask(int index) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" Task task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" task.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderNoSuchTaskException(\"There is no task at that index!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" * Unmarks a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" * @param index index of the task to be unmarked. 1-indexed.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" * @return the updated task.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" public Task unmarkTask(int index) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" Task task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":" task.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"s-kybound"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"s-kybound"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderNoSuchTaskException(\"There is no task at that index!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"s-kybound"},"content":" * Deletes a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"s-kybound"},"content":" * @param index index of the task to be deleted. 1-indexed.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"s-kybound"},"content":" * @return the deleted task.","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"s-kybound"},"content":" public Task deleteTask(int index) throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"s-kybound"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"s-kybound"},"content":" Task task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"s-kybound"},"content":" tasks.remove(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"s-kybound"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"s-kybound"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"s-kybound"},"content":" throw new CrusaderNoSuchTaskException(\"There is no task at that index!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"s-kybound"},"content":" * Gets the current size of the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"s-kybound"},"content":" * @return the size of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"s-kybound"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"s-kybound"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"s-kybound"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"s-kybound"},"content":" * @param task task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"s-kybound"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"s-kybound"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"s-kybound"},"content":" * Gets the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"s-kybound"},"content":" * @return the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"s-kybound"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"s-kybound"},"content":" return this.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"s-kybound"},"content":" * Returns a smaller task list, comprising only of tasks matching a certain query","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"s-kybound"},"content":" * @param query Query used to filter the task list","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"s-kybound"},"content":" public TaskList filter(String query) {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"s-kybound"},"content":" return new TaskList(","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"s-kybound"},"content":" new ArrayList\u003c\u003e(","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"s-kybound"},"content":" this.tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"s-kybound"},"content":" .stream()","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"s-kybound"},"content":" .filter(","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"s-kybound"},"content":" task -\u003e task.getName().contains(query))","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"s-kybound"},"content":" .collect(Collectors.toList())));","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":133}},{"path":"src/main/java/crusader/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":" * The main interface of the bot","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" * The logo for the bot","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" private final String logo;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" private final Scanner inputScanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" * Initializes the UI of the bot","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" * @param logo","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" public Ui(String logo) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" this.logo \u003d logo;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" this.inputScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" * Generates a horizontal line to divide parts of the conversation.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" public void addDivider() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" * Makes the bot say something.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" * Formatted nicely with a divider.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" public void say(String line) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" addDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" * Displays the logo of the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" public void showLogo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" say(this.logo);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" * Greets the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" public void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" say(\"Hi, I am CRUSADER\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" * Says goodbye to the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" public void farewell() {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" say(\"Bye!\\nHave a great day!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" * Prompts the user for input.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" public String promptInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" System.out.print(\"Input: \");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" String prompt \u003d inputScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" addDivider();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" return prompt.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":71}},{"path":"src/main/java/crusader/command/AddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" * Command used to add a task of any type to the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"public class AddTaskCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" private final Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" public AddTaskCommand(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" taskList.addTask(this.task);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" \"Adding the task:\\n%s\\nNow there are %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" this.task.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" taskList.getSize());","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":27}},{"path":"src/main/java/crusader/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * Command used to exit the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" public ByeCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" // empty","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" return \"Bye!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":25}},{"path":"src/main/java/crusader/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" * A command, representing a singular action in the bot","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" * Generates a new command.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" public Command() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" // empty","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * Runs the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" * @param ui UI to generate output if required","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" * @param taskList Task list to update or access as required","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" * @throws CrusaderException On malformed user input","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" public abstract String execute(Ui ui, TaskList taskList, Storage storage) throws CrusaderException;","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" * Checks whether the command is used to terminate the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" * @return Whether the command is an exit command","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":35}},{"path":"src/main/java/crusader/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" * Command used to delete tasks from the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" private final int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage) throws CrusaderException {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" Task deletedTask \u003d taskList.deleteTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" \"Deleting the task:\\n%s\\nNow there are %d tasks in the list.\",","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" deletedTask.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" taskList.getSize());","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":27}},{"path":"src/main/java/crusader/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" * Command used to search for matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" private final String query;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" * Constructs a new find/search command.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" * @param query The query to search for.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" public FindCommand(String query) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" this.query \u003d query;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage9) throws CrusaderException {","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" \"Here are the matching tasks in the list:\\n%s\",","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" taskList.filter(query).toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":30}},{"path":"src/main/java/crusader/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * Command used to show all tasks in the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" // nothing","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" \"Here are your tasks:\\n%s\",","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" taskList.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":21}},{"path":"src/main/java/crusader/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.Storage;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" * Command used to mark or unmark tasks as done or not in the bot","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" private final int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" private final boolean isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" * Constructs a new marking command.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" * @param index The index of the task to mark.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * @param isMark Whether we are to mark or unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" public MarkCommand(int index, boolean isMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" this.isMark \u003d isMark;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" public String execute(Ui ui, TaskList taskList, Storage storage) throws CrusaderException {","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" Task changedTask \u003d this.isMark ? taskList.markTask(index) : taskList.unmarkTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" storage.saveTasks(taskList.getTasks());","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" \"%s:\\n%s\\n\",","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" this.isMark ? \"I have marked the following task as done\" : \"I have unmarked this task\",","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" changedTask.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":36}},{"path":"src/main/java/crusader/exception/CrusaderDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * Represents an error from wrong time formatting in the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class CrusaderDateFormatException extends CrusaderParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public CrusaderDateFormatException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(\"I only understand dates in the format dd/mm/yyyy hh(24 hours)!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":10}},{"path":"src/main/java/crusader/exception/CrusaderException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * An error in the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class CrusaderException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public CrusaderException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":10}},{"path":"src/main/java/crusader/exception/CrusaderMissingSaveFileException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * Represents an error due to lack of an existing save file.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class CrusaderMissingSaveFileException extends CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public CrusaderMissingSaveFileException(String path) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(String.format(\"No save file could be found at path %s !\", path));","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":10}},{"path":"src/main/java/crusader/exception/CrusaderNoSuchTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * Represents an error dur to accessing a nonexistent task","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class CrusaderNoSuchTaskException extends CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public CrusaderNoSuchTaskException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":10}},{"path":"src/main/java/crusader/exception/CrusaderParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * Represents an error in parsing user input","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class CrusaderParseException extends CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public CrusaderParseException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(String.format(\"There is a parsing error!\\nDetails: %s\", message));","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":10}},{"path":"src/main/java/crusader/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.DateUtils;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * A deadline task, with a time the task is due by","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" * Time the deadline is due by","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" private final Date by;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" * Constructs a new Deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" * @param name Name of the deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" * @param by When the deadline is due.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" public Deadline(String name, Date by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" \"[D]%s (by: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" super.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" DateUtils.presentFormat(this.by));","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" public String toFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" \"D|%s|%s|%s\",","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" super.getName(),","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" super.isDone() ? \"X\" : \" \",","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" DateUtils.saveFormat(this.by));","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"s-kybound":43}},{"path":"src/main/java/crusader/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.DateUtils;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" * An event task, with a duration of time the event occurs.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" * When the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" private final Date from;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" * When the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" private final Date to;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" * Constructs a new event.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" * @param name Name of the event.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" * @param from When the event starts.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" * @param to When the event ends.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" public Event(String name, Date from, Date to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" \"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" super.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" DateUtils.presentFormat(this.from),","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" DateUtils.presentFormat(this.to));","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" public String toFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" return String.format(","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" \"E|%s|%s|%s|%s\",","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" super.getName(),","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" super.isDone() ? \"X\" : \" \",","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" DateUtils.saveFormat(this.from),","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" DateUtils.saveFormat(this.to));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"s-kybound":52}},{"path":"src/main/java/crusader/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * A task to do in the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" /** Name of the task */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" private final String name;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" /** The completion status of the task */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" * Initializes a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" * @param name","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" * Gets the name of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" * @return Task\u0027s name","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" public String getName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" return name;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" * Generaties a string representation of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" * @return A string describing the task","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" return String.format(\"[%s] %s\", isDone() ? \"X\" : \" \", name);","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" * Generates a file representation of the task","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" * @return A string optimized to store in file","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" public abstract String toFormat();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" * Checks wheter the task has been completed","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" * @return Task completion status","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" return isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" * Marks the task as complete","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":" * Designates a task as incomplete","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"s-kybound":66}},{"path":"src/main/java/crusader/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":" * A todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" public String toFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" return String.format(\"T|%s|%s\", super.getName(), super.isDone() ? \"X\" : \" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"s-kybound":20}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"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-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"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\"crusader.MainWindow\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"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-12"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"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\" textAlignment\u003d\"CENTER\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" \u003cFont name\u003d\"STIX Two Math Regular\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"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-12"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"s-kybound":23}},{"path":"src/test/java/crusader/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.command.AddTaskCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":" public void parse_unknownCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":" assertThrows(CrusaderParseException.class, () -\u003e Parser.parse(\"hello\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":" public void parse_todoCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" assertTrue(Parser.parse(\"todo test\") instanceof AddTaskCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" public void parse_eventCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" assertTrue(","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" Parser.parse(\"event test /from 01/01/2023 00 /to 12/12/2023 23\") instanceof AddTaskCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":" public void parse_deadlineCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" assertTrue(","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" Parser.parse(\"deadline test /by 12/12/2023 23\") instanceof AddTaskCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":" public void parse_deleteCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" assertTrue(","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" Parser.parse(\"delete 1\") instanceof DeleteCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" public void parse_unmarkCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" assertTrue(","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":" Parser.parse(\"unmark 2\") instanceof MarkCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" public void parse_markCommand_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" assertTrue(","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" Parser.parse(\"mark 3\") instanceof MarkCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" public void parse_missingParameterEventCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" assertThrows(","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" CrusaderParseException.class,","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" () -\u003e Parser.parse(\"event this is okay /from this is not\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"s-kybound"},"content":" public void parse_malformedTimeEventCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"s-kybound"},"content":" assertThrows(","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"s-kybound"},"content":" CrusaderParseException.class,","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"s-kybound"},"content":" () -\u003e Parser.parse(\"event this is okay /from 01-01-2023 2359 /to 12-12-2023 0000\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"s-kybound"},"content":" public void parse_badIndexDeleteCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"s-kybound"},"content":" assertThrows(","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"s-kybound"},"content":" CrusaderParseException.class,","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"s-kybound"},"content":" () -\u003e Parser.parse(\"delete a\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"s-kybound"},"content":" public void parse_tooManyParameterMarkCommand_exceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"s-kybound"},"content":" assertThrows(","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"s-kybound"},"content":" CrusaderParseException.class,","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"s-kybound"},"content":" () -\u003e Parser.parse(\"mark 1 2 3 4\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":79}},{"path":"src/test/java/crusader/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"package crusader;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"import crusader.exception.CrusaderParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"import crusader.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"s-kybound"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"s-kybound"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"s-kybound"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"s-kybound"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"s-kybound"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"s-kybound"},"content":" private static final String TEST_PATH \u003d \"./data/test.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"s-kybound"},"content":" @BeforeEach","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"s-kybound"},"content":" public void setup() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"s-kybound"},"content":" File testFile \u003d new File(TEST_PATH);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"s-kybound"},"content":" try (PrintWriter fileWriter \u003d new PrintWriter(testFile)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"s-kybound"},"content":" fileWriter.println(\"E|eat water|X|01/12/2008 12|12/12/2023 14\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"s-kybound"},"content":" fileWriter.println(\"T|CS2100| \\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"s-kybound"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"s-kybound"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"s-kybound"},"content":" @AfterEach","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"s-kybound"},"content":" public void setdown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"s-kybound"},"content":" File testFile \u003d new File(TEST_PATH);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"s-kybound"},"content":" testFile.delete();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"s-kybound"},"content":" public void loadTasks_correctFormat_success() throws CrusaderException {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"s-kybound"},"content":" ArrayList\u003cTask\u003e taskList \u003d new Storage(TEST_PATH).loadTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"s-kybound"},"content":" assertEquals(\"[E][X] eat water (from: Dec 01 2008 12 to: Dec 12 2023 14)\",taskList.get(0).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"s-kybound"},"content":" assertEquals(\"[T][ ] CS2100\",taskList.get(1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"s-kybound"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"s-kybound"},"content":" public void loadTasks_incorrectFormat_ExceptionThrown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"s-kybound"},"content":" File testFile \u003d new File(TEST_PATH);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"s-kybound"},"content":" try (PrintWriter fileWriter \u003d new PrintWriter(testFile)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"s-kybound"},"content":" fileWriter.println(\"E|eat water|X|01/12/2008 12|december 12\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"s-kybound"},"content":" fileWriter.println(\"T|CS2100| | |33\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"s-kybound"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"s-kybound"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"s-kybound"},"content":" assertThrows(CrusaderParseException.class, () -\u003e new Storage(TEST_PATH).loadTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"s-kybound"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"s-kybound"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"s-kybound"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"s-kybound":58}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"s-kybound"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"s-kybound"},"content":"todo buy water","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"s-kybound"},"content":"event drink the water /from now /to later","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"s-kybound"},"content":"deadline drink water /by tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"s-kybound"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"s-kybound"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"s-kybound"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"s-kybound"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"s-kybound"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"s-kybound"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"s-kybound"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"s-kybound"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"s-kybound":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"s-kybound"},"content":"java -classpath ..\\bin crusader \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"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":{"s-kybound":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":"s-kybound"},"content":"java -classpath ../bin Crusader \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"s-kybound":1,"-":37}}] diff --git a/s-kybound_ip_master/commits.json b/s-kybound_ip_master/commits.json index 6559fbeb..9f1b10a9 100644 --- a/s-kybound_ip_master/commits.json +++ b/s-kybound_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"s-kybound":[{"date":"2023-08-23","commitResults":[{"hash":"254a81bcd9b6a590f8ad1236ebaf2dbeb7df4312","isMergeCommit":false,"messageTitle":"Personalise chatbot with new name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":10}}}]},{"date":"2023-08-24","commitResults":[{"hash":"c1bb6cbe20101ce3cd053a4a87afc95ad55257fd","isMergeCommit":false,"messageTitle":"Add horizontal divider","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"e635b63f30086ee72d4780a097661ab59746e9ad","isMergeCommit":false,"messageTitle":"Add greeter and goodbye to bot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":3}}},{"hash":"3350b80aebc8c19e00f3b53f323748ab4de046a6","isMergeCommit":false,"messageTitle":"Add echo to bot","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":4}}},{"hash":"bbe66ec048a0ed17d7a3e0bb141154fb87f69807","isMergeCommit":false,"messageTitle":"Add list to bot","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":5}}},{"hash":"ddbc0fc510fbe3df28b16c084b702daf6902a2ac","isMergeCommit":false,"messageTitle":"Add task class to bot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"4ee1a1248294a1712ffb6391b8091c45f07fdbf6","isMergeCommit":false,"messageTitle":"Add todo, marking and unmarking","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":4}}},{"hash":"c49b974abf790c0bc4e3dd67295a4b4ef9db4d61","isMergeCommit":false,"messageTitle":"Add feedback to commands","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":2}}},{"hash":"1c254e566b2aae6d818f0c8f1b9387827e3e023a","isMergeCommit":false,"messageTitle":"Initialize Task subclasses","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":0}}},{"hash":"abc03abb42d2b15c23056643e933e77fe09511a8","isMergeCommit":false,"messageTitle":"Integrate Task Subclasses into Crusader.java","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":0}}},{"hash":"819ea20e3984036cd80f69eb7c8e35816be12e08","isMergeCommit":false,"messageTitle":"Updated testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"ad0e05151b2298a82c1b107be4ce7914886d4471","isMergeCommit":false,"messageTitle":"Implement basic error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":9}}},{"hash":"ef903cd37c1a99f2a06ff76087c05dec54474e55","isMergeCommit":false,"messageTitle":"Implement deletion of tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"433424402f5e75e238b3f64c720d4b95a5eae314","isMergeCommit":false,"messageTitle":"Implement skeleton load and save functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":16}}}]},{"date":"2023-09-01","commitResults":[{"hash":"00563c6ffeea0119dfd2fb2bbf872e63d2497692","isMergeCommit":false,"messageTitle":"Implement load and save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":84}}}]},{"date":"2023-09-02","commitResults":[{"hash":"bb9ca69b90a9d6b96ced3858388f307ce91952b1","isMergeCommit":false,"messageTitle":"Implement proper date and time representation","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":17}}},{"hash":"82cdfe441ca772fe31379385d79acfb969db758a","isMergeCommit":false,"messageTitle":"Rename variables to conform to convention","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"c0a7bd563ca4cbc560cdfb22ef935f0be94422f1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6dcc385b4724ef36d33a57bdff121a8f579e8277","isMergeCommit":false,"messageTitle":"Rename variables to follow convention","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"d3f4bcc9c5145b1b4573292412f69ac8e3452401","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b3ccd7f235f288fd6346c12ecf84adbb93864ba1","isMergeCommit":false,"messageTitle":"Implement TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":0}}},{"hash":"742ccc79814505e9450d4be5bd0f3c8684442a5e","isMergeCommit":false,"messageTitle":"Implement UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":0}}},{"hash":"c11cb6fe9ed3dc103efa116180a7fe82ecce1e7c","isMergeCommit":false,"messageTitle":"Implement prompting in UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"d880ec9c11d13fd10f59c8adb5110542fd86eebc","isMergeCommit":false,"messageTitle":"Implement date utilites","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"0c29f0c7aa3c06b38700d1bacbae12dda5500285","isMergeCommit":false,"messageTitle":"Implement storage utlilties","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":0}}},{"hash":"52cc2e28a09079d8521d86c3ed83a5f747060976","isMergeCommit":false,"messageTitle":"Add constructor to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":9}}},{"hash":"6aef837304d15b77a6e5e3f077a60aa511710e15","isMergeCommit":false,"messageTitle":"Implement Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"b901636ddf5e9dac6ad9a372dc5bd792b5faca7a","isMergeCommit":false,"messageTitle":"Integrate Date utilities into Tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":14}}},{"hash":"dcdce47b49661c93509646d32c0a26218a349719","isMergeCommit":false,"messageTitle":"Implement alternative TaskList constructor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"0f7614369ec8f395f52200b6915a0d16d82a25f8","isMergeCommit":false,"messageTitle":"Implement Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":0}}},{"hash":"ba53551bb4b29402ef741b6d0efe23744e84ab8f","isMergeCommit":false,"messageTitle":"Implement Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":0}}},{"hash":"175dce3b7afdc371a5114f72b42d6bbe37d2e0be","isMergeCommit":false,"messageTitle":"Clean up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":24}}},{"hash":"159ed21d4ae1dcb6f515b7bbbba252371413b0a6","isMergeCommit":false,"messageTitle":"Integrate OOP classes into Crusader","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":336}}},{"hash":"04f43e5bbf7b726597920cfce15aaf2123628db1","isMergeCommit":false,"messageTitle":"Implement index range checks for array access","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":15}}},{"hash":"e0494fc4ad9151c4ef7369ea5a128a6a85d5b161","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3c83b3108cb17d3b034a3d819ddaf13ea2208bd5","isMergeCommit":false,"messageTitle":"Reorganise code into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":15},"bat":{"insertions":1,"deletions":1}}},{"hash":"edd679703cb93eb88d531df15495baab3666dafc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"7dfac4bdc5a7d00b704e93f2debdc6413401bf4a","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f54a1e525d8a7bae3bb089578815394b489a057a","isMergeCommit":false,"messageTitle":"Add Gradle support for Crusader","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"530716809ee56bc88bca8e4395f99b0cae4e5acc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"53e7fecdc09f89a98aff58bee2bcede5c39da16c","isMergeCommit":false,"messageTitle":"Implement JUnit testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":1}}},{"hash":"54346afb224a10c7772451efe327f01bcf0796c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["v0.1","A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"dbabb789a0cceafa367393b73e72e77469490a44","isMergeCommit":false,"messageTitle":"Implement find command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"d5d2a7708273ea603fdfc0afc7431042299da2a5","isMergeCommit":false,"messageTitle":"Add preliminary Javadocs to all files","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":1}}},{"hash":"80e05cf7c40ef0a38510872b683533d9343f6f9f","isMergeCommit":false,"messageTitle":"Enforce CS2013T style convention","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":27}}},{"hash":"15840e38b4e560385dfb8f27309013137dabf70d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5a14e07ed96d4ee03092b59e10b1b68588db05ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0c1df624cc4b85cb17d36e856fa43dca7f3548c6","isMergeCommit":true,"messageTitle":"Resolve merge conflict in Parser","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"51f2ff94eef96cb590ec802cb953a513f07309dc","isMergeCommit":false,"messageTitle":"Rename variable in Crusader","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"eaee7a549958a842574b215132aef24e30a00b2f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"519321ae5b83bb835d2393b84bcf7335fa06b8c6","isMergeCommit":false,"messageTitle":"Implement checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"5b211979ca1d5edd5e5e2f0f491eb47c01884332","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues","messageBody":"","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":32}}},{"hash":"59813ea73762c85fd62344bd37631b761850ae62","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Checkstyle\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"c169f76824b932659fccca3e94853ad1112b1204","isMergeCommit":false,"messageTitle":"Implement first UI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":39,"deletions":0},"java":{"insertions":199,"deletions":31}}}]},{"date":"2023-09-13","commitResults":[{"hash":"5be8662dfae433c2dadcc02499ea2de66bf960e0","isMergeCommit":false,"messageTitle":"Clean up UI code","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":28,"deletions":24}}},{"hash":"cf0a3a19a78dda17654d377c0218010c034fa0c7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"s-kybound":{"java":1362,"md":0,"fxml":39,"sh":1,"bat":1,"gradle":21,"txt":12}},"authorContributionVariance":{"s-kybound":105236.29},"authorDisplayNameMap":{"s-kybound":"CS2103T-W17-1 KYRI..ABAD"}} +{"authorDailyContributionsMap":{"s-kybound":[{"date":"2023-08-23","commitResults":[{"hash":"254a81bcd9b6a590f8ad1236ebaf2dbeb7df4312","isMergeCommit":false,"messageTitle":"Personalise chatbot with new name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":10}}}]},{"date":"2023-08-24","commitResults":[{"hash":"c1bb6cbe20101ce3cd053a4a87afc95ad55257fd","isMergeCommit":false,"messageTitle":"Add horizontal divider","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"e635b63f30086ee72d4780a097661ab59746e9ad","isMergeCommit":false,"messageTitle":"Add greeter and goodbye to bot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":3}}},{"hash":"3350b80aebc8c19e00f3b53f323748ab4de046a6","isMergeCommit":false,"messageTitle":"Add echo to bot","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":4}}},{"hash":"bbe66ec048a0ed17d7a3e0bb141154fb87f69807","isMergeCommit":false,"messageTitle":"Add list to bot","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":5}}},{"hash":"ddbc0fc510fbe3df28b16c084b702daf6902a2ac","isMergeCommit":false,"messageTitle":"Add task class to bot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"4ee1a1248294a1712ffb6391b8091c45f07fdbf6","isMergeCommit":false,"messageTitle":"Add todo, marking and unmarking","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":4}}},{"hash":"c49b974abf790c0bc4e3dd67295a4b4ef9db4d61","isMergeCommit":false,"messageTitle":"Add feedback to commands","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":2}}},{"hash":"1c254e566b2aae6d818f0c8f1b9387827e3e023a","isMergeCommit":false,"messageTitle":"Initialize Task subclasses","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":0}}},{"hash":"abc03abb42d2b15c23056643e933e77fe09511a8","isMergeCommit":false,"messageTitle":"Integrate Task Subclasses into Crusader.java","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":0}}},{"hash":"819ea20e3984036cd80f69eb7c8e35816be12e08","isMergeCommit":false,"messageTitle":"Updated testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"ad0e05151b2298a82c1b107be4ce7914886d4471","isMergeCommit":false,"messageTitle":"Implement basic error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":9}}},{"hash":"ef903cd37c1a99f2a06ff76087c05dec54474e55","isMergeCommit":false,"messageTitle":"Implement deletion of tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"433424402f5e75e238b3f64c720d4b95a5eae314","isMergeCommit":false,"messageTitle":"Implement skeleton load and save functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":16}}}]},{"date":"2023-09-01","commitResults":[{"hash":"00563c6ffeea0119dfd2fb2bbf872e63d2497692","isMergeCommit":false,"messageTitle":"Implement load and save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":84}}}]},{"date":"2023-09-02","commitResults":[{"hash":"bb9ca69b90a9d6b96ced3858388f307ce91952b1","isMergeCommit":false,"messageTitle":"Implement proper date and time representation","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":17}}},{"hash":"82cdfe441ca772fe31379385d79acfb969db758a","isMergeCommit":false,"messageTitle":"Rename variables to conform to convention","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"c0a7bd563ca4cbc560cdfb22ef935f0be94422f1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6dcc385b4724ef36d33a57bdff121a8f579e8277","isMergeCommit":false,"messageTitle":"Rename variables to follow convention","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"d3f4bcc9c5145b1b4573292412f69ac8e3452401","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b3ccd7f235f288fd6346c12ecf84adbb93864ba1","isMergeCommit":false,"messageTitle":"Implement TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":0}}},{"hash":"742ccc79814505e9450d4be5bd0f3c8684442a5e","isMergeCommit":false,"messageTitle":"Implement UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":0}}},{"hash":"c11cb6fe9ed3dc103efa116180a7fe82ecce1e7c","isMergeCommit":false,"messageTitle":"Implement prompting in UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"d880ec9c11d13fd10f59c8adb5110542fd86eebc","isMergeCommit":false,"messageTitle":"Implement date utilites","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"0c29f0c7aa3c06b38700d1bacbae12dda5500285","isMergeCommit":false,"messageTitle":"Implement storage utlilties","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":0}}},{"hash":"52cc2e28a09079d8521d86c3ed83a5f747060976","isMergeCommit":false,"messageTitle":"Add constructor to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":9}}},{"hash":"6aef837304d15b77a6e5e3f077a60aa511710e15","isMergeCommit":false,"messageTitle":"Implement Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"b901636ddf5e9dac6ad9a372dc5bd792b5faca7a","isMergeCommit":false,"messageTitle":"Integrate Date utilities into Tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":14}}},{"hash":"dcdce47b49661c93509646d32c0a26218a349719","isMergeCommit":false,"messageTitle":"Implement alternative TaskList constructor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"0f7614369ec8f395f52200b6915a0d16d82a25f8","isMergeCommit":false,"messageTitle":"Implement Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":0}}},{"hash":"ba53551bb4b29402ef741b6d0efe23744e84ab8f","isMergeCommit":false,"messageTitle":"Implement Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":0}}},{"hash":"175dce3b7afdc371a5114f72b42d6bbe37d2e0be","isMergeCommit":false,"messageTitle":"Clean up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":24}}},{"hash":"159ed21d4ae1dcb6f515b7bbbba252371413b0a6","isMergeCommit":false,"messageTitle":"Integrate OOP classes into Crusader","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":336}}},{"hash":"04f43e5bbf7b726597920cfce15aaf2123628db1","isMergeCommit":false,"messageTitle":"Implement index range checks for array access","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":15}}},{"hash":"e0494fc4ad9151c4ef7369ea5a128a6a85d5b161","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"3c83b3108cb17d3b034a3d819ddaf13ea2208bd5","isMergeCommit":false,"messageTitle":"Reorganise code into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":15},"bat":{"insertions":1,"deletions":1}}},{"hash":"edd679703cb93eb88d531df15495baab3666dafc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"7dfac4bdc5a7d00b704e93f2debdc6413401bf4a","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f54a1e525d8a7bae3bb089578815394b489a057a","isMergeCommit":false,"messageTitle":"Add Gradle support for Crusader","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"530716809ee56bc88bca8e4395f99b0cae4e5acc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"53e7fecdc09f89a98aff58bee2bcede5c39da16c","isMergeCommit":false,"messageTitle":"Implement JUnit testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":1}}},{"hash":"54346afb224a10c7772451efe327f01bcf0796c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["v0.1","A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"dbabb789a0cceafa367393b73e72e77469490a44","isMergeCommit":false,"messageTitle":"Implement find command","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"d5d2a7708273ea603fdfc0afc7431042299da2a5","isMergeCommit":false,"messageTitle":"Add preliminary Javadocs to all files","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":1}}},{"hash":"80e05cf7c40ef0a38510872b683533d9343f6f9f","isMergeCommit":false,"messageTitle":"Enforce CS2013T style convention","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":27}}},{"hash":"15840e38b4e560385dfb8f27309013137dabf70d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5a14e07ed96d4ee03092b59e10b1b68588db05ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0c1df624cc4b85cb17d36e856fa43dca7f3548c6","isMergeCommit":true,"messageTitle":"Resolve merge conflict in Parser","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"51f2ff94eef96cb590ec802cb953a513f07309dc","isMergeCommit":false,"messageTitle":"Rename variable in Crusader","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"eaee7a549958a842574b215132aef24e30a00b2f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"519321ae5b83bb835d2393b84bcf7335fa06b8c6","isMergeCommit":false,"messageTitle":"Implement checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"5b211979ca1d5edd5e5e2f0f491eb47c01884332","isMergeCommit":false,"messageTitle":"Resolve checkstyle issues","messageBody":"","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":32}}},{"hash":"59813ea73762c85fd62344bd37631b761850ae62","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Checkstyle\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"c169f76824b932659fccca3e94853ad1112b1204","isMergeCommit":false,"messageTitle":"Implement first UI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":39,"deletions":0},"java":{"insertions":199,"deletions":31}}}]},{"date":"2023-09-13","commitResults":[{"hash":"5be8662dfae433c2dadcc02499ea2de66bf960e0","isMergeCommit":false,"messageTitle":"Clean up UI code","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":28,"deletions":24}}},{"hash":"cf0a3a19a78dda17654d377c0218010c034fa0c7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"8a532c53a58f913ede0e4e61e481c4071900af36","isMergeCommit":false,"messageTitle":"Implement assertions in Crusader","messageBody":"Many parts of Crusader code make implicit assumptions about\nconditions that are required to let them execute properly.\nThis is unsafe as these conditions may no longer be true as\nthe project evolves.\n\nUsing assertions allows us to make such assumptions explicit, so that\ncontributors are better aware of the required conditions for our project\nto behave as expected.\n\nLet\u0027s allow for the use of assertions in the code, as well as begin to\nuse assertions throughout the project.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":3,"deletions":0}}},{"hash":"5351cdbb976f835c806485d76f7ec7dabf546828","isMergeCommit":false,"messageTitle":"Improve code quality by simplifying expresssions","messageBody":"Code in the Crusader project uses many non-trivial expressions.\n\nThis makes code less readable for contributors.\n\nBy explicitly elaborating on these expressions by using variables, it\nwill help make code more readable.\n\nLet\u0027s simplify complex expressions by giving them names to code clearer.\n","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"c04d3646d0e630ac51c52c5a24bc54c2f0a4fb2b","isMergeCommit":true,"messageTitle":"Merge pull request #3 from s-kybound/branch-A-CodeQuality","messageBody":"Improve code quality by simplifying expresssions","fileTypesAndContributionMap":{}},{"hash":"e174733da17d176c477cbd7c499be981429e1969","isMergeCommit":true,"messageTitle":"Merge pull request #2 from s-kybound/branch-A-Assertions","messageBody":"Implement assertions in Crusader","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"s-kybound":{"java":1366,"md":0,"fxml":39,"sh":1,"bat":1,"gradle":22,"txt":12}},"authorContributionVariance":{"s-kybound":95630.0},"authorDisplayNameMap":{"s-kybound":"CS2103T-W17-1 KYRI..ABAD"}} diff --git a/samuelmui8_ip_master/commits.json b/samuelmui8_ip_master/commits.json index 8664309c..de95ebd5 100644 --- a/samuelmui8_ip_master/commits.json +++ b/samuelmui8_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"samuelmui8":[{"date":"2023-08-22","commitResults":[{"hash":"26afd22b358566bdb4d806a59543066b3aca45b2","isMergeCommit":false,"messageTitle":"changed Duke to Brobot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"ba6ba95781cc9aa0edfbd44932f3c74ae65ab64e","isMergeCommit":false,"messageTitle":"added echo and exit behaviour","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"d6cc28cb1eeac3dead773f0f1da59a7d4d564947","isMergeCommit":false,"messageTitle":"added list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9e1829228c4f38f7f93531cef7baefe35e114de6","isMergeCommit":false,"messageTitle":"added ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":3}}},{"hash":"069bb9ecad2380fd3eebe181b6b28b347866466f","isMergeCommit":false,"messageTitle":"added todos, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":8}}},{"hash":"0833a6374cd0d0fb62a998c5199fcebbefea0952","isMergeCommit":false,"messageTitle":"added automated text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"9dfb3cab7d39f9f244577e15f7170a0bce27d5b0","isMergeCommit":false,"messageTitle":"added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":82,"deletions":70}}},{"hash":"5c8bbd1d3c75025a71ceb1ff490f9ab03e35aeff","isMergeCommit":false,"messageTitle":"added support for deleting tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":114,"deletions":6}}},{"hash":"edfb1504f6ffa236e0b3316e8a7a56742ec28ad2","isMergeCommit":false,"messageTitle":"added enums and used switch","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":118}}}]},{"date":"2023-08-29","commitResults":[{"hash":"ef63f676b1372e540a127f5b63bd9301a171618a","isMergeCommit":false,"messageTitle":"add method for each bot command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":247,"deletions":178}}},{"hash":"78da862ec89ee9331569d901dcf293452627dbce","isMergeCommit":false,"messageTitle":"add support to save list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":6}}},{"hash":"7739902bd0a0d82fd99903a1c68b484adaa95260","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"9eba0bac7f8545546baea60c8244be7f5a525f82","isMergeCommit":false,"messageTitle":"Change date fields in Tasks from String to LocalDate","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":73,"deletions":31}}},{"hash":"89a6f7bdf192b649923b58401c2e60c234d10d32","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"c74e76e62e70c454f04e512eab6dfee59544d8a2","isMergeCommit":false,"messageTitle":"Extract closely related code as classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":466,"deletions":385}}},{"hash":"aeacb00db3cb8d7f410873fb620deb109136f733","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"c501cc9e7dddf43e392b88cfb10b9acbb687a099","isMergeCommit":false,"messageTitle":"divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"74ab0693643ead087b6e6af773ae3a52c7c3aa60","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"860bce1150e7e73783e42a6cd3f2968f13c23fe3","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"e5858ff52c8ae3723d457db41d4007eb17be4a72","isMergeCommit":false,"messageTitle":"Add junit tests for Deadline, Parser and TaskList","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":306,"deletions":7}}},{"hash":"3e672dbd92f44c1362aff979fb5a28143b21ee4f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["v0.1-Duke.jar","A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"71055c99d865a2551f919da68277e342107a3201","isMergeCommit":false,"messageTitle":"Add javadocs for remaining methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"629208590532e9e067bd1ae2424a6ecbefc73d7d","isMergeCommit":false,"messageTitle":"Add finding tasks by searching for keywords","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":1}}},{"hash":"ba8a43cc13dac1ebc8d5c654b708380d54f699b9","isMergeCommit":false,"messageTitle":"Refactor code to adhere to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":13}}},{"hash":"4966beb8ba6cd05cb32347607439d3e4936de2cd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"3c13fb4e309fea8cd295550f15e439d009c0ad30","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ed52f13ec4afcfcf24d459a6d1198ac2574556cd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"0d51c83529eb85c41621521501517a8ef1728293","isMergeCommit":false,"messageTitle":"Add checkstyle, fix style violations and minor bugs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":57,"deletions":41}}},{"hash":"c2096d3d4d28b9b4f06d93222015166d162eea0c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"645fea2aba769023ebbae9d537dd6869c062d645","isMergeCommit":false,"messageTitle":"Add JavaFX as a GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":282,"deletions":135}}},{"hash":"f8a19bdfa54dfb35bf19c01249cd8d473eb59e7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"cffc8314ecae0f55727fc2abfefdf271d5c26ed4","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"There are no checks to ensure certain assumptions in the code holds.\n\nAssertions have been added to document important assumptions that should\nhold at various points in the code.\n\nAssertions are used to define assumptions about the program state so\nthat the runtime can verify them.\n","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0},"java":{"insertions":5,"deletions":2}}},{"hash":"21acef660d80bf420563d6ee6934562c4aac8844","isMergeCommit":false,"messageTitle":"Make the happy path prominent","messageBody":"Several methods have nested happy paths.\n\nUse guard clauses to reduce nesting of happy paths.\n\nHappy path is clearer and code is more readable.\n","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":22}}},{"hash":"8c9c3daa71661cef64f1aaf0b4863396d6877e35","isMergeCommit":false,"messageTitle":"Shorten a long method","messageBody":"The stringToTask method exceeds 30 LoC.\n\nIts functionality is abstracted to 3 separate methods.\n\nThe method is shorter and is more easily processed by the reader.\n","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":12}}},{"hash":"99aaf2d5709cef313776970350d9d367d71e6b90","isMergeCommit":true,"messageTitle":"Merge pull request #2 from samuelmui8/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"0ba7326cdec11b440630196b2284e9741f645d9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/samuelmui8/ip","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"d7fc353e40b9833084413365aebd678e6e9faaa6","isMergeCommit":true,"messageTitle":"Merge pull request #1 from samuelmui8/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}},{"hash":"9d170b80aeed1f3a53ed46361221f402216816c5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/samuelmui8/ip","messageBody":"","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"a30f28dedec7073651a65cac4d406aa1aff3a42c","isMergeCommit":false,"messageTitle":"Add ability to sort deadlines and events","messageBody":"When there are many different types of tasks in the main list, it is\ndifficult to see which deadlines and events are coming up.\n\nAllow users to sort deadlines and events by date so that they can see\nwhich ones are approaching.\n\nThis helps to improve the usability of the bot.\n","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":5}}},{"hash":"2f13ce01357693bcf7379861d23610a6b795df88","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Sort\u0027","messageBody":"","tags":["C-Sort","A-Streams"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"samuelmui8":{"java":1403,"md":0,"fxml":38,"sh":0,"bat":1,"gradle":24,"txt":25}},"authorContributionVariance":{"samuelmui8":63677.383},"authorDisplayNameMap":{"samuelmui8":"CS2103T-W10-4 MUI ..MUEL"}} +{"authorDailyContributionsMap":{"samuelmui8":[{"date":"2023-08-22","commitResults":[{"hash":"26afd22b358566bdb4d806a59543066b3aca45b2","isMergeCommit":false,"messageTitle":"changed Duke to Brobot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"ba6ba95781cc9aa0edfbd44932f3c74ae65ab64e","isMergeCommit":false,"messageTitle":"added echo and exit behaviour","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"d6cc28cb1eeac3dead773f0f1da59a7d4d564947","isMergeCommit":false,"messageTitle":"added list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9e1829228c4f38f7f93531cef7baefe35e114de6","isMergeCommit":false,"messageTitle":"added ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":3}}},{"hash":"069bb9ecad2380fd3eebe181b6b28b347866466f","isMergeCommit":false,"messageTitle":"added todos, events, deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":8}}},{"hash":"0833a6374cd0d0fb62a998c5199fcebbefea0952","isMergeCommit":false,"messageTitle":"added automated text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"9dfb3cab7d39f9f244577e15f7170a0bce27d5b0","isMergeCommit":false,"messageTitle":"added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":82,"deletions":70}}},{"hash":"5c8bbd1d3c75025a71ceb1ff490f9ab03e35aeff","isMergeCommit":false,"messageTitle":"added support for deleting tasks","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":114,"deletions":6}}},{"hash":"edfb1504f6ffa236e0b3316e8a7a56742ec28ad2","isMergeCommit":false,"messageTitle":"added enums and used switch","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":172,"deletions":118}}}]},{"date":"2023-08-29","commitResults":[{"hash":"ef63f676b1372e540a127f5b63bd9301a171618a","isMergeCommit":false,"messageTitle":"add method for each bot command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":247,"deletions":178}}},{"hash":"78da862ec89ee9331569d901dcf293452627dbce","isMergeCommit":false,"messageTitle":"add support to save list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":6}}},{"hash":"7739902bd0a0d82fd99903a1c68b484adaa95260","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"9eba0bac7f8545546baea60c8244be7f5a525f82","isMergeCommit":false,"messageTitle":"Change date fields in Tasks from String to LocalDate","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2},"java":{"insertions":73,"deletions":31}}},{"hash":"89a6f7bdf192b649923b58401c2e60c234d10d32","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"c74e76e62e70c454f04e512eab6dfee59544d8a2","isMergeCommit":false,"messageTitle":"Extract closely related code as classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":466,"deletions":385}}},{"hash":"aeacb00db3cb8d7f410873fb620deb109136f733","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"c501cc9e7dddf43e392b88cfb10b9acbb687a099","isMergeCommit":false,"messageTitle":"divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"74ab0693643ead087b6e6af773ae3a52c7c3aa60","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"860bce1150e7e73783e42a6cd3f2968f13c23fe3","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"e5858ff52c8ae3723d457db41d4007eb17be4a72","isMergeCommit":false,"messageTitle":"Add junit tests for Deadline, Parser and TaskList","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":306,"deletions":7}}},{"hash":"3e672dbd92f44c1362aff979fb5a28143b21ee4f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["v0.1-Duke.jar","A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"71055c99d865a2551f919da68277e342107a3201","isMergeCommit":false,"messageTitle":"Add javadocs for remaining methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"629208590532e9e067bd1ae2424a6ecbefc73d7d","isMergeCommit":false,"messageTitle":"Add finding tasks by searching for keywords","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":1}}},{"hash":"ba8a43cc13dac1ebc8d5c654b708380d54f699b9","isMergeCommit":false,"messageTitle":"Refactor code to adhere to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":13}}},{"hash":"4966beb8ba6cd05cb32347607439d3e4936de2cd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"3c13fb4e309fea8cd295550f15e439d009c0ad30","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ed52f13ec4afcfcf24d459a6d1198ac2574556cd","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"0d51c83529eb85c41621521501517a8ef1728293","isMergeCommit":false,"messageTitle":"Add checkstyle, fix style violations and minor bugs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":57,"deletions":41}}},{"hash":"c2096d3d4d28b9b4f06d93222015166d162eea0c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"645fea2aba769023ebbae9d537dd6869c062d645","isMergeCommit":false,"messageTitle":"Add JavaFX as a GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":38,"deletions":0},"java":{"insertions":282,"deletions":135}}},{"hash":"f8a19bdfa54dfb35bf19c01249cd8d473eb59e7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-15","commitResults":[{"hash":"cffc8314ecae0f55727fc2abfefdf271d5c26ed4","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"There are no checks to ensure certain assumptions in the code holds.\n\nAssertions have been added to document important assumptions that should\nhold at various points in the code.\n\nAssertions are used to define assumptions about the program state so\nthat the runtime can verify them.\n","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0},"java":{"insertions":5,"deletions":2}}},{"hash":"21acef660d80bf420563d6ee6934562c4aac8844","isMergeCommit":false,"messageTitle":"Make the happy path prominent","messageBody":"Several methods have nested happy paths.\n\nUse guard clauses to reduce nesting of happy paths.\n\nHappy path is clearer and code is more readable.\n","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":22}}},{"hash":"8c9c3daa71661cef64f1aaf0b4863396d6877e35","isMergeCommit":false,"messageTitle":"Shorten a long method","messageBody":"The stringToTask method exceeds 30 LoC.\n\nIts functionality is abstracted to 3 separate methods.\n\nThe method is shorter and is more easily processed by the reader.\n","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":12}}},{"hash":"99aaf2d5709cef313776970350d9d367d71e6b90","isMergeCommit":true,"messageTitle":"Merge pull request #2 from samuelmui8/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"0ba7326cdec11b440630196b2284e9741f645d9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/samuelmui8/ip","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"d7fc353e40b9833084413365aebd678e6e9faaa6","isMergeCommit":true,"messageTitle":"Merge pull request #1 from samuelmui8/branch-A-CodeQuality","messageBody":"Branch a code quality","fileTypesAndContributionMap":{}},{"hash":"9d170b80aeed1f3a53ed46361221f402216816c5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/samuelmui8/ip","messageBody":"","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"a30f28dedec7073651a65cac4d406aa1aff3a42c","isMergeCommit":false,"messageTitle":"Add ability to sort deadlines and events","messageBody":"When there are many different types of tasks in the main list, it is\ndifficult to see which deadlines and events are coming up.\n\nAllow users to sort deadlines and events by date so that they can see\nwhich ones are approaching.\n\nThis helps to improve the usability of the bot.\n","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":5}}},{"hash":"2f13ce01357693bcf7379861d23610a6b795df88","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Sort\u0027","messageBody":"","tags":["BCD-Extension","A-Streams"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"samuelmui8":{"java":1403,"md":0,"fxml":38,"sh":0,"bat":1,"gradle":24,"txt":25}},"authorContributionVariance":{"samuelmui8":63677.383},"authorDisplayNameMap":{"samuelmui8":"CS2103T-W10-4 MUI ..MUEL"}} diff --git a/seanpzk_ip_master/authorship.json b/seanpzk_ip_master/authorship.json index 75593bf8..26e08c28 100644 --- a/seanpzk_ip_master/authorship.json +++ b/seanpzk_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"# duke.duke project template","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"1. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"seanpzk":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":"seanpzk"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"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":"seanpzk"},"content":"javafx {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.base\u0027, \u0027javafx.fxml\u0027, \u0027javafx.graphics\u0027 ]","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":"checkstyle {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"seanpzk":12,"-":41}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":60}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.filemanagement.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import duke.userio.InvalidUserInputException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import duke.userio.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import duke.userio.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" * Chatbot of the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" private final Parser parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" private boolean botInUse \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" private Scene scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" public Duke() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" this(\"src/main/data/duke.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" * Constructor of Duke.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" * @param filepath Task file to be loaded into Duke.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" public Duke(String filepath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" this.storage \u003d new Storage(filepath);","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" this.parser \u003d new Parser(ui, taskList, botInUse, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" storage.loadFileToTaskManager(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"seanpzk"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"seanpzk"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"seanpzk"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"seanpzk"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"seanpzk"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":" return textToAdd;","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":" * Returns response based on user\u0027s input and also check if input invokes bot to shut down afterwards.","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":" * @param input Represents user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"seanpzk"},"content":" * @return A String response for the chatbot to reply to user.","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"seanpzk"},"content":" String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"seanpzk"},"content":" String response \u003d parser.listen(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"seanpzk"},"content":" botInUse \u003d parser.updateBotUsage();","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"seanpzk"},"content":" return response;","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"seanpzk"},"content":" } catch (InvalidUserInputException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"seanpzk"},"content":" return ui.invalidInputRes();","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"seanpzk"},"content":" * Returns if the bot is in use.","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"seanpzk"},"content":" * @return Boolean to represent if bot is in use.","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"seanpzk"},"content":" public boolean isBotInUse() {","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"seanpzk"},"content":" return botInUse;","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"seanpzk":157,"-":1}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":31}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/youngeren.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/adulteren.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" private void handleUserInput() throws InterruptedException {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" if (!duke.isBotInUse()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(1));","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" delay.setOnFinished(event -\u003e Platform.exit());","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" delay.play();","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":62}},{"path":"src/main/java/duke/filemanagement/DateTimeDetector.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.filemanagement;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"public class DateTimeDetector {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" // List of formats","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t112h \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd hh:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t212h \u003d DateTimeFormatter.ofPattern(\"dd-MMM-yyyy hh:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t124h \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t224h \u003d DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HHmm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t312h \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy hh:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t324h \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter d1 \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter d2 \u003d DateTimeFormatter.ofPattern(\"dd-MMM-yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter d3 \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" * Constructor of DateTimeDetector.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" public DateTimeDetector() {}","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" * Checks if date includes time.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be checked.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" * @return Boolean that represents if date includes time.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" boolean includeTime(String date) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" return date.contains(\" \");","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" * Checks if time is in 12h format.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" * @param date Date with time to be checked.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" * @return Boolean that represents if time is in 12h format.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" boolean is12hFormat(String date) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" return date.contains(\":\");","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" * Checks if date is split with dash.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be checked.","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" * @return Boolean that represents if date is split with dash.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" boolean isDateSplitWithDash(String date) {","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" return date.contains(\"-\");","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" * Checks if date starts with year.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be checked.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" * @return Boolean that represents if date starts with year.","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" boolean doesDateStartWithYear(String date) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" int len \u003d date.split(\"-\")[0].length();","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" return len \u003d\u003d 4;","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" * Parses a date that includes time.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be parsed.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" * @return LocalDate that represents parsed date.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" * @throws DateTimeParseException The date given does not follow any of the formats.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":" public LocalDate parseDateWithTime(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" if (is12hFormat(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" if (isDateSplitWithDash(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" if (doesDateStartWithYear(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" // date is yyyy-MM-dd hh:mm","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, t112h);","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" // date is dd-MMM-yyyy hh:mm","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, t212h);","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" // date is dd/MM/yyyy hh:mm","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, t312h);","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":" if (isDateSplitWithDash(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":" if (doesDateStartWithYear(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"seanpzk"},"content":" // date is yyyy-MM-dd HHmm","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, t124h);","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"seanpzk"},"content":" // date is dd-MMM-yyyy HHmm","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, t224h);","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"seanpzk"},"content":" // date is dd/MM/yyyy HHmm","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, t324h);","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":" * Parses a date that does not have time.","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be parsed.","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":" * @return LocalDate that represents parsed date.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":" * @throws DateTimeParseException The date given does not follow any of the formats.","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":" public LocalDate parseDateOnly(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":" if (isDateSplitWithDash(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":" if (doesDateStartWithYear(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":" // Case 1: Date is in yyyy-MM-dd","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, d1);","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":" // Case 2: Date is dd-MMM-yyyy","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, d2);","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":" // Case 3: Date is dd/MM/yyyy","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, d3);","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":" * Format the input date.","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be formatted.","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":" * @return Formatted date.","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":" public String format(String date) {","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":" LocalDate d;","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":" if (includeTime(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":" d \u003d parseDateWithTime(date);","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":" d \u003d parseDateOnly(date);","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":" assert d !\u003d null : \"d be updated with parsed input date and not null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":" return d.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"seanpzk"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"seanpzk"},"content":" return date;","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"seanpzk":137}},{"path":"src/main/java/duke/filemanagement/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.filemanagement;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" * Represents a storage to store the task file content that can perform different operations to the content.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" private String filepath;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" * Constructor of storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" * @param filepath Filepath that leads to the task file to be loaded into bot.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" * Writes the content into the task file provided in the filepath during construction of Storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" * @param content Content to be written into task file.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" public void saveFile(String content) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" FileWriter myWriter \u003d new FileWriter(filepath, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" myWriter.write(content);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" myWriter.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" File f \u003d new File(\"src/main/data\");","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" if (f.mkdir()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" saveFile(content);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" System.out.println(\"An error occurred. File is not written.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" System.out.println(\"An error occurred. File is not written.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" * Returns content inside the task file in filepath used during construction of Storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" * @return Content of task file.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" * @throws FileNotFoundException File is not found in the filepath.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" public String readFile() throws FileNotFoundException {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" File myObj \u003d new File(filepath);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" Scanner myReader \u003d new Scanner(myObj);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" data.append(myReader.nextLine()).append(\"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" myReader.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" return data.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":" return \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" * Gets type of task from a line extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" * @param line Line containing task details.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" * @return Type of the task represented by line.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" public String getTaskType(String line) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" String[] lineSplit \u003d line.split(\"\\\\[\");","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" return lineSplit[1].substring(0, 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":" * Gets mark status of task from a line extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":" * @param line Line containing task details.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"seanpzk"},"content":" * @return Boolean representing whether the task is marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"seanpzk"},"content":" public boolean getMarkStatus(String line) {","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"seanpzk"},"content":" String[] lineSplit \u003d line.split(\"\\\\[\");","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":" return lineSplit[2].charAt(0) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"seanpzk"},"content":" * Gets task details of task from a line extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"seanpzk"},"content":" * @param line Line containing task details.","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":" * @return Details of the tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":" public String getTaskDetails(String line) {","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":" String[] lineSplit \u003d line.split(\"\\\\[\");","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":" return lineSplit[2].split(\"] \")[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":" * Produces a deadline task based on the taskDetails and mark status input.","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":" * @param taskDetails Details of task extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":" * @param markStatus Mark status of task extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":" * @return A deadline task aligned with taskDetails and mark status.","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":" public Deadline produceDeadlineTask(String taskDetails, boolean markStatus) {","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":" String[] taskDetailsSplit \u003d taskDetails.split(\" \\\\(by: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":" String description \u003d taskDetailsSplit[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":" String by \u003d taskDetailsSplit[1].substring(0, taskDetailsSplit[1].length() - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":" return new Deadline(description, markStatus, by);","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":" * Produces an event task based on the taskDetails and mark status input.","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":" * @param taskDetails Details of task extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":" * @param markStatus Mark status of task extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":" * @return An event task aligned with taskDetails and mark status.","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":" public Event produceEventTask(String taskDetails, boolean markStatus) {","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":" // Extract description from task details","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":" String[] taskDetailsSplit \u003d taskDetails.split(\" \\\\(from: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":" String description \u003d taskDetailsSplit[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":" // Split details into from and to","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":" String[] taskDetailsSplit2 \u003d taskDetailsSplit[1].split(\" to: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":" String from \u003d taskDetailsSplit2[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":" String to \u003d taskDetailsSplit2[1]","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":" .substring(0, taskDetailsSplit[1].split(\" to: \")[1].length() - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":" return new Event(description, markStatus, from, to);","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"seanpzk"},"content":" * Load content of task file into TaskList. This will populate the TaskList with the necessary Task objects.","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList to store the tasks in the task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":" public void loadFileToTaskManager(TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"seanpzk"},"content":" String savedText \u003d readFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"seanpzk"},"content":" Scanner scanner \u003d new Scanner(savedText);","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"seanpzk"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"seanpzk"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"seanpzk"},"content":" // line is represented as: \"A. [B][C] Details\" where A is index of task, B is type of task, C is mark status","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"seanpzk"},"content":" String taskType \u003d getTaskType(line);","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"seanpzk"},"content":" boolean markStatus \u003d getMarkStatus(line);","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"seanpzk"},"content":" String taskDetails \u003d getTaskDetails(line);","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"seanpzk"},"content":" Task taskToAdd \u003d null;","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"seanpzk"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"seanpzk"},"content":" case \"T\":","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"seanpzk"},"content":" taskToAdd \u003d new ToDo(taskDetails, markStatus);","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"seanpzk"},"content":" case \"D\":","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"seanpzk"},"content":" taskToAdd \u003d produceDeadlineTask(taskDetails, markStatus);","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"seanpzk"},"content":" case \"E\":","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"seanpzk"},"content":" taskToAdd \u003d produceEventTask(taskDetails, markStatus);","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"seanpzk"},"content":" assert taskToAdd !\u003d null : \"taskToAdd should be updated to a Task from null if a line is scanned in \" +","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"seanpzk"},"content":" \"task file\";","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"seanpzk"},"content":" taskList.addTask(taskToAdd);","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"seanpzk"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"seanpzk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"seanpzk":170}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.filemanagement.DateTimeDetector;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.userio.InvalidUserInputException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" * Represents a task with deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" protected String by;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" private final DateTimeDetector detector \u003d new DateTimeDetector();","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description as input.","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" this(description, false, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description and isDone as input.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" * Updates attribute with input content if it has the input attribute.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" * @param attributeToUpdate Attribute to be updated.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" * @param contentToUpdate Content to overwrite current attribute\u0027s value.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" * @throws InvalidUserInputException If attributeToUpdate is any of attributes of a Deadline task.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" public void update(String attributeToUpdate, String contentToUpdate) throws InvalidUserInputException {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" switch (attributeToUpdate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" case \"description\":","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" this.description \u003d contentToUpdate;","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" case \"by\":","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" this.by \u003d contentToUpdate;","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" throw new InvalidUserInputException();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" * Prints out the description of the task and its status.","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" * @return A string that shows the task\u0027s description and status.","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" String d \u003d detector.format(by);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" return \"[D]\" + super.toString() + \" (by: \" + d + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":59}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.filemanagement.DateTimeDetector;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.userio.InvalidUserInputException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" * Represents a task that is an Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" protected String from;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" protected String to;","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" private final DateTimeDetector detector \u003d new DateTimeDetector();","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description as input.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" this(description, false, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description as input.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" * Updates attribute with input content if it has the input attribute.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" * @param attributeToUpdate Attribute to be updated.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" * @param contentToUpdate Content to overwrite current attribute\u0027s value.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" * @throws InvalidUserInputException If attributeToUpdate is any of attributes of an Event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" public void update(String attributeToUpdate, String contentToUpdate) throws InvalidUserInputException {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" switch (attributeToUpdate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" case \"description\":","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" this.description \u003d contentToUpdate;","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" case \"from\":","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" this.from \u003d contentToUpdate;","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" case \"to\":","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" this.to \u003d contentToUpdate;","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" throw new InvalidUserInputException();","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" * Prints out the description of the task and its status.","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" * @return A string that shows the task\u0027s description and status.","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" String f \u003d detector.format(from);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" String t \u003d detector.format(to);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" return \"[E]\" + super.toString() + \" (from: \" + f + \" to: \" + t + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":63}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.userio.InvalidUserInputException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" * A general task that has description and status whether it is completed.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description as input.","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" this(description, false);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description and isDone as input.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" * It gets the status icon of whether the task is done or not.","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" * @return \"X\" to indicate it is done and \" \" to indicate it is not done.","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" * Marks the current task as done.","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" * Marks the current task as not done.","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" * Tells if task\u0027s description contains input string","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" * @param string String to be looked for in task\u0027s description","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" * @return Boolean to indicate if the task\u0027s description contains input string","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" public boolean containsString(String string) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" return this.description.contains(string);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" * Updates attribute with input content if it has the input attribute.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" * @param attributeToUpdate Attribute to be updated.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" * @param contentToUpdate Content to overwrite current attribute\u0027s value.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" * @throws InvalidUserInputException If attributeToUpdate is not description.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":" public void update(String attributeToUpdate, String contentToUpdate) throws InvalidUserInputException {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" if (Objects.equals(attributeToUpdate, \"description\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" this.description \u003d contentToUpdate ;","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" throw new InvalidUserInputException();","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" * Prints out the description of the task and its status.","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" * @return A string that shows the task\u0027s description and status.","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":" return \"[\" + getStatusIcon() + \"]\" + \" \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":82}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.userio.InvalidUserInputException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import java.util.LinkedList;","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" * A list of task that handles the tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" protected LinkedList\u003cTask\u003e storage;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" this.storage \u003d new LinkedList\u003cTask\u003e();","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" * Adds a task into the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" * @param task Task to be added into TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" this.storage.add(task);","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" * Retrieves task from the TaskList based on its index.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" * @param taskIndex Index of task to be retrieved.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" * @return Task of given index in TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" return this.storage.get(taskIndex);","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" * Deletes task with given index.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" * @param taskIndex Index of task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" public void deleteTask(int taskIndex) {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" this.storage.remove(taskIndex);","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" * Returns the number of tasks in TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" * @return Number of tasks in TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" public int getSize() {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" return this.storage.size();","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" * Return a String that represents the numbered list of tasks in the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" * @return String that represents the numbered list of tasks in the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" public String outputNumberedList() {","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" for (int i \u003d 0; i \u003c this.storage.size(); i++) {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" Task currTask \u003d this.storage.get(i);","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" str.append(i + 1).append(\".\")","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" .append(currTask.toString())","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" return str.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" * Updates the task based on the given inputs.","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" * @param taskIndex Index of task to be updated.","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" * @param attributeToUpdate Attribute of task to update.","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" * @param contentToUpdate Content to update the attribute of task with.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" * @throws InvalidUserInputException If the attributeToUpdate does not match any of the task\u0027s attribute.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" public void updateTask(int taskIndex, String attributeToUpdate, String contentToUpdate) throws InvalidUserInputException {","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" Task taskToUpdate \u003d this.getTask(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" taskToUpdate.update(attributeToUpdate, contentToUpdate);","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":79}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":" * A task that has no additional properties.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description as input.","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" this(description, false);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description and isDone status.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" * @param isDone Status of whether task is completed.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" * Prints out the description of the task and its status.","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" * @return A string that shows the task\u0027s description and status.","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":32}},{"path":"src/main/java/duke/userio/InvalidUserInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.userio;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":" * Custom exception created to raise invalid user input problem.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"public class InvalidUserInputException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" public InvalidUserInputException() {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" super(\"Invalid user input is detected\");","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":10}},{"path":"src/main/java/duke/userio/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.userio;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.filemanagement.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" * Deals with making sense of user command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" private boolean botInUse;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * Deals with making sense of user command.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" * @param ui Helps generate appropriate responses.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList that the bot uses.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" * @param botInUse Status of bot.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" * @param storage Storage that the bot uses.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" public Parser(Ui ui, TaskList taskList, boolean botInUse, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" this.botInUse \u003d botInUse;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" * Update task content from task list into the task file.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" private void updateSaveFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" storage.saveFile(taskList.outputNumberedList());","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" * Takes in user input and generate responses accordingly.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" * @param input User input.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" * @throws InvalidUserInputException User input does not generate any specific response.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" public String listen(String input) throws InvalidUserInputException {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" String response;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" int taskIndexHolder;","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" String keyword \u003d extractKeyword(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" switch (keyword) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" case \"bye\":","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" botInUse \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.bye();","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" case \"list\":","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" String outputList \u003d taskList.outputNumberedList();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.list(outputList);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" taskIndexHolder \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" Task taskToBeUnmarked \u003d taskList.getTask(taskIndexHolder - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" taskToBeUnmarked.markAsUndone();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.unmarkTask(taskToBeUnmarked);","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" case \"mark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" taskIndexHolder \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" Task taskToBeMarked \u003d taskList.getTask(taskIndexHolder - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" taskToBeMarked.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.markTask(taskToBeMarked);","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" String toDoDescription \u003d input.split(\"todo \")[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" ToDo toDoTask \u003d new ToDo(toDoDescription);","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" taskList.addTask(toDoTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.toDoAdded(toDoTask, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.toDoMissingContent();","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":" String by \u003d input.split(\"/by \")[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":" String deadlineDescription \u003d input.split(\"deadline \")[1].split(\" /by\")[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"seanpzk"},"content":" Deadline deadlineTask \u003d new Deadline(deadlineDescription, by);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"seanpzk"},"content":" taskList.addTask(deadlineTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.deadlineAdded(deadlineTask, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.deadlineMissingContent();","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"seanpzk"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":" String from \u003d input.split(\"/from \")[1].split(\" /to\")[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":" String to \u003d input.split(\"/to \")[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":" String eventDescription \u003d input.split(\"event \")[1].split(\" /from\")[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":" Event eventTask \u003d new Event(eventDescription, from, to);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":" taskList.addTask(eventTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.eventAdded(eventTask, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.eventMissingContent();","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":" case \"delete\":","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":" taskIndexHolder \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":" Task toBeRemoved \u003d taskList.getTask(taskIndexHolder - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":" taskList.deleteTask(taskIndexHolder - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.taskDeleted(toBeRemoved, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":" case \"find\":","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":" String inputToFind \u003d input.substring(5);","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":" System.out.println(inputToFind);","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":" TaskList tempTl \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":" Task t \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":" if (t.containsString(inputToFind)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":" tempTl.addTask(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.findResponse(tempTl.outputNumberedList());","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":" case \"update\":","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":" String substringAfterUpdate \u003d input.substring(7);","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":" int taskIndex \u003d Integer.parseInt(substringAfterUpdate.split(\" \")[0]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":" String componentToUpdate \u003d substringAfterUpdate.split(\" \")[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":" String contentForUpdate \u003d substringAfterUpdate.split(\" \")[2];","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":" taskList.updateTask(taskIndex, componentToUpdate, contentForUpdate);","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":" String updatedList \u003d taskList.outputNumberedList();","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.updateResponse(updatedList);","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"seanpzk"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.updateFailedResponse();","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"seanpzk"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"seanpzk"},"content":" throw new InvalidUserInputException();","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":141,"author":{"gitId":"seanpzk"},"content":" assert response !\u003d null : \"There should be responses produced no matter what input given\";","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"seanpzk"},"content":" return response;","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"seanpzk"},"content":" * Returns the keyword of user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"seanpzk"},"content":" * @param input user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"seanpzk"},"content":" * @return Keyword of user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"seanpzk"},"content":" private String extractKeyword(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"seanpzk"},"content":" return input.split(\" \")[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"seanpzk"},"content":" * Updates bot usage.","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"seanpzk"},"content":" * @return A boolean to state whether bot is in use.","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"seanpzk"},"content":" public boolean updateBotUsage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"seanpzk"},"content":" return botInUse;","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"seanpzk":161}},{"path":"src/main/java/duke/userio/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.userio;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" * Class to generate appropriate responses.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" public Ui() {}","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * Greets the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" public String greetings() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" return (\"Hello! I\u0027m ChadBob.\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" + \"What can I do for you?\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" * Say bye to user and exit the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" public String bye() {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" return (\"Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" * Lists out the tasks in list.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" * @param taskList List of tasks, usually obtained from TaskList class.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" public String list(String taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" return (\"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" + taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" * Unmarks a task and can be seen in output of list method.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" * @param task Target task to be unmarked.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" public String unmarkTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" return (\"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" * Marks a task and can be seen in output of list method.","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" * @param task Target task to be marked.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" public String markTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" return (\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" * Informs that a ToDo task has been added and the total number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" * @param toDoTask ToDo task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList that contains the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" public String toDoAdded(ToDo toDoTask, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" return (\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" + toDoTask + \"\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" + \"Now you have \" + taskList.getSize() + ((taskList.getSize() \u003e 1) ? \" tasks \" : \" task \")","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" + \"in the list.\" + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" * Informs that there is missing content in the todo task that user tried to create.","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" public String toDoMissingContent() {","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" return (\"☹ OOPS!!! The description of a todo cannot be empty.\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" * Informs that a Deadline task has been added and the total number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" * @param deadlineTask Deadline task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList containing the Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" public String deadlineAdded(Deadline deadlineTask, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":" return (\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":" + deadlineTask + \"\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"seanpzk"},"content":" + \"Now you have \" + taskList.getSize() + ((taskList.getSize() \u003e 1) ? \" tasks \" : \" task \")","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"seanpzk"},"content":" + \"in the list.\" + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"seanpzk"},"content":" * Informs user that there is missing content in the Deadline task that user tried to create.","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"seanpzk"},"content":" public String deadlineMissingContent() {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"seanpzk"},"content":" return (\"☹ OOPS!!! The deadline needs to have a task description and /by .\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":" * Informs that an Event task has been added and the total number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":" * @param eventTask Event task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList containing Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":" public String eventAdded(Event eventTask, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":" return (\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":" + eventTask + \"\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":" + \"Now you have \" + taskList.getSize() + ((taskList.getSize() \u003e 1) ? \" tasks \" : \" task \")","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":" + \"in the list.\" + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":" * Informs user that there is missing content in the Event task that user tried to create.","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":" public String eventMissingContent() {","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":" return (\"☹ OOPS!!! The event needs to have a task description, /from and /to.\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":" * Informs the user that the task has been successfully deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":" * @param deletedTask Task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList that contains the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":" public String taskDeleted(Task deletedTask, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":" return (\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":" + deletedTask + \"\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":" + \"Now you have \" + taskList.getSize() + ((taskList.getSize() \u003e 1) ? \" tasks \" : \" task \")","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":" + \"in the list.\" + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":" * Informs user the tasks found based on the Find functionality.","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":" * @param tasks Matching tasks gathered from Find functionality.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":" public String findResponse(String tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":" return (\"Here are the matching tasks in your list:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":" + tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":" * Informs user update is successful and show the updated task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":" * @param taskList Updated task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"seanpzk"},"content":" * @return String to notify update success and updated task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"seanpzk"},"content":" public String updateResponse(String taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"seanpzk"},"content":" return (\"Update successful! This is the updated task list:\\n\" + taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"seanpzk"},"content":" public String updateFailedResponse() {","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"seanpzk"},"content":" return (\"Update was unsuccessful :( Please return in this format:\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"seanpzk"},"content":" \"update {task index in task list} {attribute of task} {content to update with} while ensuring the task\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"seanpzk"},"content":" \" has the necessary attribute (See end of message) \\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"seanpzk"},"content":" \"For example: update 1 from 10/10/2023 , update 3 description Wash dishes\\n\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"seanpzk"},"content":" \"ToDo: description\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"seanpzk"},"content":" \"Deadline: description, by\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"seanpzk"},"content":" \"Event: description, from, to\");","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"seanpzk"},"content":" * Informs user the given input does not work.","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"seanpzk"},"content":" public String invalidInputRes() {","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"seanpzk"},"content":" return (\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"seanpzk":159}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"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.0.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"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.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutX\u003d\"4.0\" layoutY\u003d\"561.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"35.0\" prefWidth\u003d\"313.0\" AnchorPane.bottomAnchor\u003d\"4.0\" AnchorPane.leftAnchor\u003d\"4.0\" AnchorPane.rightAnchor\u003d\"83.0\" AnchorPane.topAnchor\u003d\"561.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" \u003cFont name\u003d\"Calibri\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"327.0\" layoutY\u003d\"561.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"35.0\" prefWidth\u003d\"67.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":23}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.filemanagement.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.userio.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import duke.userio.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" public void loadFileToTaskList(){","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" Storage storage \u003d new Storage(\"src/main/data/test.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" storage.loadFileToTaskManager(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" assertEquals(\"1.[T][ ] Borrow Book\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" \"2.[E][ ] Read Book (from: today to: next Sunday)\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" \"3.[T][ ] Test\\n\", taskList.outputNumberedList());","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"seanpzk":19}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" public void testStringOutput(){","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" ToDo toDo \u003d new ToDo(\"This is a test ToDo.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" assertEquals(toDo.toString(), \"[T][ ] This is a test ToDo.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" public void testConstructor(){","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" ToDo toDo \u003d new ToDo(\"This is a test ToDo.\", true);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" assertEquals(toDo.toString(), \"[T][X] This is a test ToDo.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"seanpzk":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"todo Borrow Book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"event Read Book /from today /to next Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"deadline Buy bread /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"delete 1","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"list","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"seanpzk":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":"seanpzk"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-28"},{"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":"seanpzk"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"seanpzk":2,"-":19}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"# duke.duke project template","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"1. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"seanpzk":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":"seanpzk"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"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":"seanpzk"},"content":"javafx {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.base\u0027, \u0027javafx.fxml\u0027, \u0027javafx.graphics\u0027 ]","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":"checkstyle {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"seanpzk":13,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"# ChadBob User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"ChadBob is a **desktop app for managing tasks, optimized for use via a Command Line Interface** (CLI)","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"while still having the benefits of a Graphical User Interface (GUI). If you can type fast, ChadBob can ","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"help you manage your tasks efficiently and save you time! Start using it and you will be a chad in no time!","lastModifiedDate":"2023-09-16"},{"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":"seanpzk"},"content":"### Adding task: `todo`,`deadline`,`event`","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"Adds a type of task into task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"Format: ","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"- `todo TODO_NAME`, ","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":"- `deadline DEADLINE_NAME /by BY_DATE`, ","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"- `event EVENT_NAME /from FROM /to TO` ","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":"- `todo Wash dishes`","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":"- `deadline CS2100 Tutorial /by 17/09/2023`","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":"- `event Zoom Meeting /from 17/09/2023 1800 /to 17/09/2023 2000`","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":"### Updating a task: `update`","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":"Updates a task based on its index, attribute with given content. ","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":"Attributes of task types:","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":"- ToDo: description","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":"- Deadline: description, by","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":"- Event: description, from, to","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":"Format: `update TASK_INDEX TASK_ATTRIBUTE CONTENT` ","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":"Examples:","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":"- `update 1 description Buy groceries`","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":"- `update 2 from 10/10/2023` ","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":"### Finding a task: `find`","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":"Finds a task based on given input","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":"Format: `find KEYWORD_TO_FIND`","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":"Examples:`find Submit` finds all the task with \u0027Submit\u0027 in its description","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":"### Listing all the tasks: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":"Lists all tasks stored in task list","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":"### Deleting a task: `delete`","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":"Deletes a task based on task index","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":"Format: `delete TASK_INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":"Examples:`list` followed by`delete 1` will delete the first task in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":"### Marking a task as done: `mark`","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":"Marks a task as done based on task index","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":"Format: `mark TASK_INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":"Examples:`list` followed by `mark 1` marks the first task as done in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":"### Marking a task as undone: `unmark`","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":"Marks a task as undone based on task index","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":"Format: `unmark TASK_INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":"Examples:`list` followed by `unmark 1` marks the first task as undone in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":"### Exiting the program: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":"Exits the program","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":"Format: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":86,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":"### `todo` - Add ToDo task","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":"Adds a ToDo task into task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":"`todo Wash Dishes`","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":"Task list has ToDo task Wash Dishes. ","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":"Task is labelled as T to represent ToDo task type.","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":"[T][] Wash Dishes","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":"Now you have 1 task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":"### `deadline` - Add Deadline task","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":"Adds a Deadline task into task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":"`deadline CS2100 Tutorial /by 17/09/23`","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":"Task list has CS2100 Tutorial and its deadline . ","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":"Task is labelled as D to represent Deadline task type.","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":"[D][] CS2100 Tutorial (by: Sep 17 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":"Now you have 1 task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":"### `event` - Add Event task","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":"Adds an Event task into task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":"`event Zoom Meeting /from 17/09/2023 1800 /to 17/09/2023 2000`","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":"Task list has Zoom Meeting and its duration. ","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":"Task is labelled as E to represent Event task type.","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"seanpzk"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"seanpzk"},"content":"[E][] Zoom Meeting (from: Sep 17 2023 1800 to: Sep 17 2023 2000)","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"seanpzk"},"content":"Now you have 1 task in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"seanpzk"},"content":"### `mark` - Mark a task as done","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"seanpzk"},"content":"Marks a task based on index in task list as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"seanpzk"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"seanpzk"},"content":"`mark 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"seanpzk"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"seanpzk"},"content":"Second task in task list is marked. ","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"seanpzk"},"content":"The task is marked as done with an \u0027X\u0027 in the second box.","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"seanpzk"},"content":"Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"seanpzk"},"content":"[T][X] Task 2","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"seanpzk"},"content":"### `unmark` - Mark a task as undone","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"seanpzk"},"content":"Marks a task based on index in task list as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"seanpzk"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"seanpzk"},"content":"`unmark 2`","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"seanpzk"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"seanpzk"},"content":"Second task in task list is unmarked. ","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"seanpzk"},"content":"The task is marked as undone by leaving the second box empty.","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"seanpzk"},"content":"OK, I\u0027ve marked this task as not done yet:","lastModifiedDate":"2023-09-16"},{"lineNumber":177,"author":{"gitId":"seanpzk"},"content":"[T][] Task 2","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":180,"author":{"gitId":"seanpzk"},"content":"### `delete` - Delete a task ","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":182,"author":{"gitId":"seanpzk"},"content":"Deletes a task based on index in task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":183,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"seanpzk"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":185,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"seanpzk"},"content":"`delete 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"seanpzk"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"seanpzk"},"content":"First task in task list is deleted. ","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"seanpzk"},"content":"Task list informs remaining number of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":193,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"seanpzk"},"content":"Noted. I\u0027ve removed this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":195,"author":{"gitId":"seanpzk"},"content":"[T][] Task 1","lastModifiedDate":"2023-09-16"},{"lineNumber":196,"author":{"gitId":"seanpzk"},"content":"Now you have 0 task left in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":198,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":199,"author":{"gitId":"seanpzk"},"content":"### `update` - Update a task","lastModifiedDate":"2023-09-16"},{"lineNumber":200,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":201,"author":{"gitId":"seanpzk"},"content":"Updates a task based on index in task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":202,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":203,"author":{"gitId":"seanpzk"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":204,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":205,"author":{"gitId":"seanpzk"},"content":"`update 2 description Wash dishes`","lastModifiedDate":"2023-09-16"},{"lineNumber":206,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":207,"author":{"gitId":"seanpzk"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":208,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":209,"author":{"gitId":"seanpzk"},"content":"Second task in task list is updated. ","lastModifiedDate":"2023-09-16"},{"lineNumber":210,"author":{"gitId":"seanpzk"},"content":"Updated task list is shown.","lastModifiedDate":"2023-09-16"},{"lineNumber":211,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":212,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":213,"author":{"gitId":"seanpzk"},"content":"Update successful! This is the updated task list:","lastModifiedDate":"2023-09-16"},{"lineNumber":214,"author":{"gitId":"seanpzk"},"content":"1.[T][] Task 1","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"seanpzk"},"content":"2.[T][] Wash dishes","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":218,"author":{"gitId":"seanpzk"},"content":"### `find` - Find tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":219,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":220,"author":{"gitId":"seanpzk"},"content":"Finds all tasks based on given string.","lastModifiedDate":"2023-09-16"},{"lineNumber":221,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":222,"author":{"gitId":"seanpzk"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":223,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":224,"author":{"gitId":"seanpzk"},"content":"`find Help`","lastModifiedDate":"2023-09-16"},{"lineNumber":225,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":226,"author":{"gitId":"seanpzk"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":227,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":228,"author":{"gitId":"seanpzk"},"content":"All tasks with \u0027Help\u0027 in its description is returned back.","lastModifiedDate":"2023-09-16"},{"lineNumber":229,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":230,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":231,"author":{"gitId":"seanpzk"},"content":"Here are the matching tasks in your list:","lastModifiedDate":"2023-09-16"},{"lineNumber":232,"author":{"gitId":"seanpzk"},"content":"1.[T][] Help wash dishes","lastModifiedDate":"2023-09-16"},{"lineNumber":233,"author":{"gitId":"seanpzk"},"content":"2.[T][] Help fold clothes","lastModifiedDate":"2023-09-16"},{"lineNumber":234,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":235,"author":{"gitId":"seanpzk"},"content":"### `list` - List all tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":236,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":237,"author":{"gitId":"seanpzk"},"content":"List all tasks in task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":238,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":239,"author":{"gitId":"seanpzk"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":240,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":241,"author":{"gitId":"seanpzk"},"content":"`list`","lastModifiedDate":"2023-09-16"},{"lineNumber":242,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":243,"author":{"gitId":"seanpzk"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":244,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":245,"author":{"gitId":"seanpzk"},"content":"All tasks in the task list are listed out.","lastModifiedDate":"2023-09-16"},{"lineNumber":246,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":247,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":248,"author":{"gitId":"seanpzk"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-16"},{"lineNumber":249,"author":{"gitId":"seanpzk"},"content":"1.[T][] Task 1","lastModifiedDate":"2023-09-16"},{"lineNumber":250,"author":{"gitId":"seanpzk"},"content":"2.[T][X] Task 2","lastModifiedDate":"2023-09-16"},{"lineNumber":251,"author":{"gitId":"seanpzk"},"content":"3.[T][] Task 3","lastModifiedDate":"2023-09-16"},{"lineNumber":252,"author":{"gitId":"seanpzk"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":253,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":254,"author":{"gitId":"seanpzk"},"content":"### `bye` - Exit program","lastModifiedDate":"2023-09-16"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":256,"author":{"gitId":"seanpzk"},"content":"Exits the program.","lastModifiedDate":"2023-09-16"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":258,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":259,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":260,"author":{"gitId":"seanpzk"},"content":"`bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":261,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":262,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":263,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":264,"author":{"gitId":"seanpzk"},"content":"Program exits after 1 second.","lastModifiedDate":"2023-09-16"},{"lineNumber":265,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":266,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":267,"author":{"gitId":"seanpzk"},"content":"Bye. Hope to see you again!","lastModifiedDate":"2023-09-16"},{"lineNumber":268,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"seanpzk":240,"-":28}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":60}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.filemanagement.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import duke.userio.InvalidUserInputException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import duke.userio.Parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import duke.userio.Ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" * Chatbot of the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" private final Parser parser;","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" private boolean botInUse \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" private Scene scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":"// public Duke() {","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":"// this(\"./src/main/data/duke.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":"// }","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" public Duke() {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" this(\"../duke.txt\");","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" * Constructor of Duke.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" * @param filepath Task file to be loaded into Duke.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" public Duke(String filepath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" this.storage \u003d new Storage(filepath);","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" this.parser \u003d new Parser(ui, taskList, botInUse, storage);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" storage.loadFileToTaskManager(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"seanpzk"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"seanpzk"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"seanpzk"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"seanpzk"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"seanpzk"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":" });","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":" * Iteration 1:","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":" return textToAdd;","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"seanpzk"},"content":" * Returns response based on user\u0027s input and also check if input invokes bot to shut down afterwards.","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"seanpzk"},"content":" * @param input Represents user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"seanpzk"},"content":" * @return A String response for the chatbot to reply to user.","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":" String getResponse(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"seanpzk"},"content":" String response \u003d parser.listen(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"seanpzk"},"content":" botInUse \u003d parser.updateBotUsage();","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"seanpzk"},"content":" return response;","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"seanpzk"},"content":" } catch (InvalidUserInputException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"seanpzk"},"content":" return ui.invalidInputRes();","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"seanpzk"},"content":" * Returns if the bot is in use.","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"seanpzk"},"content":" * @return Boolean to represent if bot is in use.","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"seanpzk"},"content":" public boolean isBotInUse() {","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"seanpzk"},"content":" return botInUse;","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"seanpzk":154,"-":1}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" WindowTitle title \u003d new WindowTitle();","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" title.start(stage);","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":33}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/youngeren.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/adulteren.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" private void handleUserInput() throws InterruptedException {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" if (!duke.isBotInUse()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(1));","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" delay.setOnFinished(event -\u003e Platform.exit());","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" delay.play();","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":62}},{"path":"src/main/java/duke/WindowTitle.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" * Controller for WindowTitle.","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"public class WindowTitle extends Application {","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" public void start(Stage primaryStage) {","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" primaryStage.setTitle(\"ChadBob\");","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" primaryStage.show();","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" launch(args);","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"seanpzk":21}},{"path":"src/main/java/duke/filemanagement/DateTimeDetector.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.filemanagement;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" * Handles checking for date and time in a String and formatting them accordingly","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"public class DateTimeDetector {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" // List of formats","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t112h \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd hh:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t212h \u003d DateTimeFormatter.ofPattern(\"dd-MMM-yyyy hh:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t124h \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t224h \u003d DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HHmm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t312h \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy hh:mm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter t324h \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\");","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter d1 \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter d2 \u003d DateTimeFormatter.ofPattern(\"dd-MMM-yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" private final DateTimeFormatter d3 \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" * Constructor of DateTimeDetector.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" public DateTimeDetector() {}","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" * Checks if date includes time.","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be checked.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" * @return Boolean that represents if date includes time.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" boolean includeTime(String date) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" return date.contains(\" \");","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" * Checks if time is in 12h format.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" * @param date Date with time to be checked.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" * @return Boolean that represents if time is in 12h format.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" boolean is12hFormat(String date) {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" return date.contains(\":\");","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" * Checks if date is split with dash.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be checked.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" * @return Boolean that represents if date is split with dash.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" boolean isDateSplitWithDash(String date) {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" return date.contains(\"-\");","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" * Checks if date starts with year.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be checked.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" * @return Boolean that represents if date starts with year.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" boolean doesDateStartWithYear(String date) {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" int len \u003d date.split(\"-\")[0].length();","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" return len \u003d\u003d 4;","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" * Parses a date that includes time.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be parsed.","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" * @return LocalDate that represents parsed date.","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" * @throws DateTimeParseException The date given does not follow any of the formats.","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" public LocalDateTime parseDateWithTime(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" if (is12hFormat(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" if (isDateSplitWithDash(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" if (doesDateStartWithYear(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" // date is yyyy-MM-dd hh:mm","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" return LocalDateTime.parse(date, t112h);","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" // date is dd-MMM-yyyy hh:mm","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" return LocalDateTime.parse(date, t212h);","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":" // date is dd/MM/yyyy hh:mm","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":" return LocalDateTime.parse(date, t312h);","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"seanpzk"},"content":" if (isDateSplitWithDash(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"seanpzk"},"content":" if (doesDateStartWithYear(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":" // date is yyyy-MM-dd HHmm","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"seanpzk"},"content":" return LocalDateTime.parse(date, t124h);","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"seanpzk"},"content":" // date is dd-MMM-yyyy HHmm","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"seanpzk"},"content":" return LocalDateTime.parse(date, t224h);","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":" // date is dd/MM/yyyy HHmm","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":" return LocalDateTime.parse(date, t324h);","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":" * Parses a date that does not have time.","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be parsed.","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":" * @return LocalDate that represents parsed date.","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":" * @throws DateTimeParseException The date given does not follow any of the formats.","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":" public LocalDate parseDateOnly(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":" if (isDateSplitWithDash(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":" if (doesDateStartWithYear(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":" // Case 1: Date is in yyyy-MM-dd","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, d1);","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":" // Case 2: Date is dd-MMM-yyyy","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, d2);","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":" // Case 3: Date is dd/MM/yyyy","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":" return LocalDate.parse(date, d3);","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":" * Format the input date.","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":" * @param date Date to be formatted.","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":" * @return Formatted date.","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":" public String format(String date) {","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":" LocalDate d;","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":" LocalDateTime dt;","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":" if (includeTime(date)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":" dt \u003d parseDateWithTime(date);","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"seanpzk"},"content":" assert dt !\u003d null : \"d be updated with parsed input date and not null\";","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"seanpzk"},"content":" return dt.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":" d \u003d parseDateOnly(date);","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":" assert d !\u003d null : \"d be updated with parsed input date and not null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"seanpzk"},"content":" return d.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"seanpzk"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":142,"author":{"gitId":"seanpzk"},"content":" System.out.println(\"DateTime not formatted as input\u0027s format does not match\");","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"seanpzk"},"content":" return date;","lastModifiedDate":"2023-08-28"},{"lineNumber":144,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"seanpzk":146}},{"path":"src/main/java/duke/filemanagement/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.filemanagement;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * Represents a storage to store the task file content that can perform different operations to the content.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":"public class Storage {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" private String filepath;","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" * Constructor of storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" * @param filepath Filepath that leads to the task file to be loaded into bot.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" * Writes the content into the task file provided in the filepath during construction of Storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" * @param content Content to be written into task file.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" public void saveFile(String content) {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" FileWriter myWriter \u003d new FileWriter(filepath, false);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" myWriter.write(content);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" myWriter.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" File f \u003d new File(\"./src/main/data\");","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" if (f.mkdir()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" saveFile(content);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" System.out.println(\"An error occurred. File is not written.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" System.out.println(\"An error occurred. File is not written.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" * Returns content inside the task file in filepath used during construction of Storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" * @return Content of task file.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" * @throws FileNotFoundException File is not found in the filepath.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" public String readFile() throws FileNotFoundException {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" File myObj \u003d new File(filepath);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" Scanner myReader \u003d new Scanner(myObj);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" StringBuilder data \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" data.append(myReader.nextLine()).append(\"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" myReader.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" return data.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" System.out.println(\"There is no file found, likely to be first-time user.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" return \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" * Gets type of task from a line extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" * @param line Line containing task details.","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" * @return Type of the task represented by line.","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" public String getTaskType(String line) {","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" String[] lineSplit \u003d line.split(\"\\\\[\");","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":" return lineSplit[1].substring(0, 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"seanpzk"},"content":" * Gets mark status of task from a line extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"seanpzk"},"content":" * @param line Line containing task details.","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"seanpzk"},"content":" * @return Boolean representing whether the task is marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":" public boolean getMarkStatus(String line) {","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"seanpzk"},"content":" String[] lineSplit \u003d line.split(\"\\\\[\");","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":" return lineSplit[2].charAt(0) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":" * Gets task details of task from a line extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":" * @param line Line containing task details.","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":" * @return Details of the tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":" public String getTaskDetails(String line) {","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":" String[] lineSplit \u003d line.split(\"\\\\[\");","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":" return lineSplit[2].split(\"] \")[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":" * Produces a deadline task based on the taskDetails and mark status input.","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":" * @param taskDetails Details of task extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":" * @param markStatus Mark status of task extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":" * @return A deadline task aligned with taskDetails and mark status.","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":" public Deadline produceDeadlineTask(String taskDetails, boolean markStatus) {","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":" String[] taskDetailsSplit \u003d taskDetails.split(\" \\\\(by: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":" String description \u003d taskDetailsSplit[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":" String by \u003d taskDetailsSplit[1].substring(0, taskDetailsSplit[1].length() - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":" return new Deadline(description, markStatus, by);","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":" * Produces an event task based on the taskDetails and mark status input.","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":" * @param taskDetails Details of task extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":" * @param markStatus Mark status of task extracted from task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":" * @return An event task aligned with taskDetails and mark status.","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":" public Event produceEventTask(String taskDetails, boolean markStatus) {","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":" // Extract description from task details","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":" String[] taskDetailsSplit \u003d taskDetails.split(\" \\\\(from: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":" String description \u003d taskDetailsSplit[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":" // Split details into from and to","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":" String[] taskDetailsSplit2 \u003d taskDetailsSplit[1].split(\" to: \");","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":" String from \u003d taskDetailsSplit2[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":" String to \u003d taskDetailsSplit2[1]","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":" .substring(0, taskDetailsSplit[1].split(\" to: \")[1].length() - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":" return new Event(description, markStatus, from, to);","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":" * Load content of task file into TaskList. This will populate the TaskList with the necessary Task objects.","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList to store the tasks in the task file.","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"seanpzk"},"content":" public void loadFileToTaskManager(TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"seanpzk"},"content":" String savedText \u003d readFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"seanpzk"},"content":" Scanner scanner \u003d new Scanner(savedText);","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"seanpzk"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"seanpzk"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"seanpzk"},"content":" // line is represented as:","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"seanpzk"},"content":" // \"A. [B][C] Details\" where A is index of task, B is type of task, C is mark status","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"seanpzk"},"content":" String taskType \u003d getTaskType(line);","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"seanpzk"},"content":" boolean markStatus \u003d getMarkStatus(line);","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"seanpzk"},"content":" String taskDetails \u003d getTaskDetails(line);","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"seanpzk"},"content":" Task taskToAdd \u003d null;","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"seanpzk"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"seanpzk"},"content":" case \"T\":","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"seanpzk"},"content":" taskToAdd \u003d new ToDo(taskDetails, markStatus);","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"seanpzk"},"content":" case \"D\":","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"seanpzk"},"content":" taskToAdd \u003d produceDeadlineTask(taskDetails, markStatus);","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"seanpzk"},"content":" case \"E\":","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"seanpzk"},"content":" taskToAdd \u003d produceEventTask(taskDetails, markStatus);","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"seanpzk"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"seanpzk"},"content":" System.out.println(\"There is an invalid taskType, task will not be added\");","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"seanpzk"},"content":" assert taskToAdd !\u003d null : \"taskToAdd should be updated to a Task from null if a line is scanned in \"","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"seanpzk"},"content":" + \"task file\";","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"seanpzk"},"content":" taskList.addTask(taskToAdd);","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"seanpzk"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"seanpzk"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"seanpzk":175}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.filemanagement.DateTimeDetector;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.userio.InvalidUserInputException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" * Represents a task with deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" protected String by;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" private final DateTimeDetector detector \u003d new DateTimeDetector();","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description as input.","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" this(description, false, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description and isDone as input.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" * Updates attribute with input content if it has the input attribute.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" * @param attributeToUpdate Attribute to be updated.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" * @param contentToUpdate Content to overwrite current attribute\u0027s value.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" * @throws InvalidUserInputException If attributeToUpdate is any of attributes of a Deadline task.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" public void update(String attributeToUpdate, String contentToUpdate) throws InvalidUserInputException {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" switch (attributeToUpdate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" case \"description\":","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" this.description \u003d contentToUpdate;","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" case \"by\":","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" this.by \u003d contentToUpdate;","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" throw new InvalidUserInputException();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" * Prints out the description of the task and its status.","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" * @return A string that shows the task\u0027s description and status.","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" String d \u003d detector.format(by);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" return \"[D]\" + super.toString() + \" (by: \" + d + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":59}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.filemanagement.DateTimeDetector;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.userio.InvalidUserInputException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" * Represents a task that is an Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" protected String from;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" protected String to;","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" private final DateTimeDetector detector \u003d new DateTimeDetector();","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description as input.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" this(description, false, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description as input.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" * Updates attribute with input content if it has the input attribute.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" * @param attributeToUpdate Attribute to be updated.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" * @param contentToUpdate Content to overwrite current attribute\u0027s value.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" * @throws InvalidUserInputException If attributeToUpdate is any of attributes of an Event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" public void update(String attributeToUpdate, String contentToUpdate) throws InvalidUserInputException {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" switch (attributeToUpdate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" case \"description\":","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" this.description \u003d contentToUpdate;","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" case \"from\":","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" this.from \u003d contentToUpdate;","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" case \"to\":","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" this.to \u003d contentToUpdate;","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" throw new InvalidUserInputException();","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" * Prints out the description of the task and its status.","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" * @return A string that shows the task\u0027s description and status.","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" String f \u003d detector.format(from);","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" String t \u003d detector.format(to);","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" return \"[E]\" + super.toString() + \" (from: \" + f + \" to: \" + t + \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":63}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.userio.InvalidUserInputException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" * A general task that has description and status whether it is completed.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description as input.","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" this(description, false);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description and isDone as input.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" * It gets the status icon of whether the task is done or not.","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" * @return \"X\" to indicate it is done and \" \" to indicate it is not done.","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" * Marks the current task as done.","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" * Marks the current task as not done.","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" * Tells if task\u0027s description contains input string","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" * @param string String to be looked for in task\u0027s description","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" * @return Boolean to indicate if the task\u0027s description contains input string","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" public boolean containsString(String string) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" return this.description.contains(string);","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" * Updates attribute with input content if it has the input attribute.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" * @param attributeToUpdate Attribute to be updated.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" * @param contentToUpdate Content to overwrite current attribute\u0027s value.","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" * @throws InvalidUserInputException If attributeToUpdate is not description.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":" public void update(String attributeToUpdate, String contentToUpdate) throws InvalidUserInputException {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" if (Objects.equals(attributeToUpdate, \"description\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" this.description \u003d contentToUpdate ;","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" throw new InvalidUserInputException();","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" * Prints out the description of the task and its status.","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" * @return A string that shows the task\u0027s description and status.","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":" return \"[\" + getStatusIcon() + \"]\" + \" \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":82}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.userio.InvalidUserInputException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import java.util.LinkedList;","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" * A list of task that handles the tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" protected LinkedList\u003cTask\u003e storage;","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" this.storage \u003d new LinkedList\u003cTask\u003e();","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" * Adds a task into the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" * @param task Task to be added into TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" this.storage.add(task);","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" * Retrieves task from the TaskList based on its index.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" * @param taskIndex Index of task to be retrieved.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" * @return Task of given index in TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" return this.storage.get(taskIndex);","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" * Deletes task with given index.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" * @param taskIndex Index of task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" public void deleteTask(int taskIndex) {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" this.storage.remove(taskIndex);","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" * Returns the number of tasks in TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" * @return Number of tasks in TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" public int getSize() {","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" return this.storage.size();","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" * Return a String that represents the numbered list of tasks in the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" * @return String that represents the numbered list of tasks in the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" public String outputNumberedList() {","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" for (int i \u003d 0; i \u003c this.storage.size(); i++) {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" Task currTask \u003d this.storage.get(i);","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" str.append(i + 1).append(\".\")","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" .append(currTask.toString())","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" return str.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" * Updates the task based on the given inputs.","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" * @param taskIndex Index of task to be updated.","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" * @param attributeToUpdate Attribute of task to update.","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" * @param contentToUpdate Content to update the attribute of task with.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" * @throws InvalidUserInputException If the attributeToUpdate does not match any of the task\u0027s attribute.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" public void updateTask(int taskIndex, String attributeToUpdate, String contentToUpdate) throws InvalidUserInputException {","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" Task taskToUpdate \u003d this.getTask(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" taskToUpdate.update(attributeToUpdate, contentToUpdate);","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":79}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":" * A task that has no additional properties.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description as input.","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" this(description, false);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * Constructor to build a task with description and isDone status.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" * @param description Describes the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" * @param isDone Status of whether task is completed.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" * Prints out the description of the task and its status.","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" * @return A string that shows the task\u0027s description and status.","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":32}},{"path":"src/main/java/duke/userio/InvalidUserInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.userio;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":" * Custom exception created to raise invalid user input problem.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"public class InvalidUserInputException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" public InvalidUserInputException() {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" super(\"Invalid user input is detected\");","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"seanpzk":10}},{"path":"src/main/java/duke/userio/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.userio;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.filemanagement.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.task.*;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" * Deals with making sense of user command.","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" private Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" private boolean botInUse;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" private Storage storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" * Deals with making sense of user command.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" * @param ui Helps generate appropriate responses.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList that the bot uses.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" * @param botInUse Status of bot.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" * @param storage Storage that the bot uses.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" public Parser(Ui ui, TaskList taskList, boolean botInUse, Storage storage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" this.botInUse \u003d botInUse;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":" * Update task content from task list into the task file.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" private void updateSaveFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" storage.saveFile(taskList.outputNumberedList());","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" * Takes in user input and generate responses accordingly.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" * @param input User input.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":" * @throws InvalidUserInputException User input does not generate any specific response.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" public String listen(String input) throws InvalidUserInputException {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" String response;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" int taskIndexHolder;","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" String keyword \u003d extractKeyword(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" switch (keyword) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" case \"bye\":","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":" botInUse \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.bye();","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" case \"list\":","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" String outputList \u003d taskList.outputNumberedList();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.list(outputList);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" taskIndexHolder \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":" Task taskToBeUnmarked \u003d taskList.getTask(taskIndexHolder - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" taskToBeUnmarked.markAsUndone();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.unmarkTask(taskToBeUnmarked);","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" case \"mark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" taskIndexHolder \u003d Integer.parseInt(input.substring(5));","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" Task taskToBeMarked \u003d taskList.getTask(taskIndexHolder - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" taskToBeMarked.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.markTask(taskToBeMarked);","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" String toDoDescription \u003d input.split(\"todo \")[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" ToDo toDoTask \u003d new ToDo(toDoDescription);","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" taskList.addTask(toDoTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.toDoAdded(toDoTask, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.toDoMissingContent();","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":" String by \u003d input.split(\"/by \")[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":" String deadlineDescription \u003d input.split(\"deadline \")[1].split(\" /by\")[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"seanpzk"},"content":" Deadline deadlineTask \u003d new Deadline(deadlineDescription, by);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"seanpzk"},"content":" taskList.addTask(deadlineTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.deadlineAdded(deadlineTask, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.deadlineMissingContent();","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"seanpzk"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":" String from \u003d input.split(\"/from \")[1].split(\" /to\")[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":" String to \u003d input.split(\"/to \")[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":" String eventDescription \u003d input.split(\"event \")[1].split(\" /from\")[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":" Event eventTask \u003d new Event(eventDescription, from, to);","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":" taskList.addTask(eventTask);","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.eventAdded(eventTask, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.eventMissingContent();","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":" case \"delete\":","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":" taskIndexHolder \u003d Integer.parseInt(input.substring(7));","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":" Task toBeRemoved \u003d taskList.getTask(taskIndexHolder - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":" taskList.deleteTask(taskIndexHolder - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":" updateSaveFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.taskDeleted(toBeRemoved, taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":" case \"find\":","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":" String inputToFind \u003d input.substring(5);","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":" TaskList tempTl \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":" Task t \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":" if (t.containsString(inputToFind)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":" tempTl.addTask(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.findResponse(tempTl.outputNumberedList());","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":" case \"update\":","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":" String substringAfterUpdate \u003d input.substring(7);","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":" int taskIndex \u003d Integer.parseInt(substringAfterUpdate.split(\" \")[0]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":" String componentToUpdate \u003d substringAfterUpdate.split(\" \")[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":" String contentForUpdate \u003d substringAfterUpdate.split(\" \", 3)[2];","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":" taskList.updateTask(taskIndex, componentToUpdate, contentForUpdate);","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":" String updatedList \u003d taskList.outputNumberedList();","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.updateResponse(updatedList);","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"seanpzk"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"seanpzk"},"content":" response \u003d ui.updateFailedResponse();","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"seanpzk"},"content":" throw new InvalidUserInputException();","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":140,"author":{"gitId":"seanpzk"},"content":" assert response !\u003d null : \"There should be responses produced no matter what input given\";","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"seanpzk"},"content":" return response;","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"seanpzk"},"content":" * Returns the keyword of user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"seanpzk"},"content":" * @param input user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"seanpzk"},"content":" * @return Keyword of user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"seanpzk"},"content":" private String extractKeyword(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"seanpzk"},"content":" return input.split(\" \")[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":154,"author":{"gitId":"seanpzk"},"content":" * Updates bot usage.","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"seanpzk"},"content":" * @return A boolean to state whether bot is in use.","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"seanpzk"},"content":" public boolean updateBotUsage() {","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"seanpzk"},"content":" return botInUse;","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"seanpzk":160}},{"path":"src/main/java/duke/userio/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.userio;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" * Class to generate appropriate responses.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" public Ui() {}","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" * Greets the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" public String greetings() {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" return (\"Hello! I\u0027m ChadBob.\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" + \"What can I do for you?\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"seanpzk"},"content":" * Say bye to user and exit the program.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"seanpzk"},"content":" public String bye() {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"seanpzk"},"content":" return (\"Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"seanpzk"},"content":" * Lists out the tasks in list.","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"seanpzk"},"content":" * @param taskList List of tasks, usually obtained from TaskList class.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"seanpzk"},"content":" public String list(String taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"seanpzk"},"content":" return (\"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"seanpzk"},"content":" + taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"seanpzk"},"content":" * Unmarks a task and can be seen in output of list method.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"seanpzk"},"content":" * @param task Target task to be unmarked.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"seanpzk"},"content":" public String unmarkTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"seanpzk"},"content":" return (\"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"seanpzk"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"seanpzk"},"content":" * Marks a task and can be seen in output of list method.","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"seanpzk"},"content":" * @param task Target task to be marked.","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"seanpzk"},"content":" public String markTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"seanpzk"},"content":" return (\"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"seanpzk"},"content":" + task + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"seanpzk"},"content":" * Informs that a ToDo task has been added and the total number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"seanpzk"},"content":" * @param toDoTask ToDo task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList that contains the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"seanpzk"},"content":" public String toDoAdded(ToDo toDoTask, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"seanpzk"},"content":" return (\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"seanpzk"},"content":" + toDoTask + \"\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"seanpzk"},"content":" + \"Now you have \" + taskList.getSize() + ((taskList.getSize() \u003e 1) ? \" tasks \" : \" task \")","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"seanpzk"},"content":" + \"in the list.\" + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"seanpzk"},"content":" * Informs that there is missing content in the todo task that user tried to create.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"seanpzk"},"content":" public String toDoMissingContent() {","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"seanpzk"},"content":" return (\"☹ OOPS!!! The description of a todo cannot be empty.\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"seanpzk"},"content":" * Informs that a Deadline task has been added and the total number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"seanpzk"},"content":" * @param deadlineTask Deadline task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList containing the Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"seanpzk"},"content":" public String deadlineAdded(Deadline deadlineTask, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"seanpzk"},"content":" return (\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"seanpzk"},"content":" + deadlineTask + \"\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"seanpzk"},"content":" + \"Now you have \" + taskList.getSize() + ((taskList.getSize() \u003e 1) ? \" tasks \" : \" task \")","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"seanpzk"},"content":" + \"in the list.\" + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"seanpzk"},"content":" * Informs user that there is missing content in the Deadline task that user tried to create.","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"seanpzk"},"content":" public String deadlineMissingContent() {","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"seanpzk"},"content":" return (\"☹ OOPS!!! The deadline needs to have a task description and /by .\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"seanpzk"},"content":" * Informs that an Event task has been added and the total number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"seanpzk"},"content":" * @param eventTask Event task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList containing Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"seanpzk"},"content":" public String eventAdded(Event eventTask, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"seanpzk"},"content":" return (\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"seanpzk"},"content":" + eventTask + \"\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"seanpzk"},"content":" + \"Now you have \" + taskList.getSize() + ((taskList.getSize() \u003e 1) ? \" tasks \" : \" task \")","lastModifiedDate":"2023-08-28"},{"lineNumber":105,"author":{"gitId":"seanpzk"},"content":" + \"in the list.\" + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"seanpzk"},"content":" * Informs user that there is missing content in the Event task that user tried to create.","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"seanpzk"},"content":" public String eventMissingContent() {","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"seanpzk"},"content":" return (\"☹ OOPS!!! The event needs to have a task description, /from and /to.\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"seanpzk"},"content":" * Informs the user that the task has been successfully deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"seanpzk"},"content":" * @param deletedTask Task to be deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"seanpzk"},"content":" * @param taskList TaskList that contains the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"seanpzk"},"content":" public String taskDeleted(Task deletedTask, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"seanpzk"},"content":" return (\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"seanpzk"},"content":" + deletedTask + \"\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"seanpzk"},"content":" + \"Now you have \" + taskList.getSize() + ((taskList.getSize() \u003e 1) ? \" tasks \" : \" task \")","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"seanpzk"},"content":" + \"in the list.\" + \"\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"seanpzk"},"content":" * Informs user the tasks found based on the Find functionality.","lastModifiedDate":"2023-08-28"},{"lineNumber":129,"author":{"gitId":"seanpzk"},"content":" * @param tasks Matching tasks gathered from Find functionality.","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"seanpzk"},"content":" public String findResponse(String tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"seanpzk"},"content":" return (\"Here are the matching tasks in your list:\\n\"","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"seanpzk"},"content":" + tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"seanpzk"},"content":" * Informs user update is successful and show the updated task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"seanpzk"},"content":" * @param taskList Updated task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"seanpzk"},"content":" * @return String to notify update success and updated task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"seanpzk"},"content":" public String updateResponse(String taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"seanpzk"},"content":" return (\"Update successful! This is the updated task list:\\n\" + taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"seanpzk"},"content":" * Informs user update failed and tells what is the right format for updating a task.","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"seanpzk"},"content":" * @return String to notify failure and right format of updating task.","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"seanpzk"},"content":" public String updateFailedResponse() {","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"seanpzk"},"content":" return (\"Update was unsuccessful :( Please return in this format:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"seanpzk"},"content":" + \"update {task index in task list} {attribute of task} {content to update with} \"","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"seanpzk"},"content":" + \"while ensuring the task has the necessary attribute (See end of message) \\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"seanpzk"},"content":" + \"For example: update 1 from 10/10/2023 , update 3 description Wash dishes\\n\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"seanpzk"},"content":" + \"ToDo: description\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"seanpzk"},"content":" + \"Deadline: description, by\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"seanpzk"},"content":" + \"Event: description, from, to\");","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"seanpzk"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"seanpzk"},"content":" * Informs user the given input does not work.","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"seanpzk"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"seanpzk"},"content":" public String invalidInputRes() {","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"seanpzk"},"content":" return (\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\");","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"seanpzk":164}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"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.0.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"664.0\" prefWidth\u003d\"895.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-16"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutX\u003d\"11.0\" layoutY\u003d\"604.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"167.0\" prefWidth\u003d\"895.0\" AnchorPane.bottomAnchor\u003d\"12.0\" AnchorPane.leftAnchor\u003d\"11.0\" AnchorPane.rightAnchor\u003d\"76.0\" AnchorPane.topAnchor\u003d\"604.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" \u003cFont name\u003d\"Calibri\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" \u003c/TextField\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"830.0\" layoutY\u003d\"611.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"35.0\" prefWidth\u003d\"54.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" layoutX\u003d\"11.0\" layoutY\u003d\"14.0\" prefHeight\u003d\"572.0\" prefWidth\u003d\"873.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"572.0\" prefWidth\u003d\"857.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"seanpzk"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"seanpzk"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"seanpzk":24}},{"path":"src/test/java/duke/filemanagement/DateTimeDetectorTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.filemanagement;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"public class DateTimeDetectorTest {","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" public void testDateFormat() {","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" DateTimeDetector detector \u003d new DateTimeDetector();","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" String date \u003d \"15/12/2023\";","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" String formattedDate \u003d detector.format((date));","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" assertEquals(formattedDate, \"Dec 15 2023\");","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" @Test","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" public void testDateTimeFormat() {","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" DateTimeDetector detector \u003d new DateTimeDetector();","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" String dateTime \u003d \"15/12/2023 1800\";","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":" String formattedDate \u003d detector.format((dateTime));","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"seanpzk"},"content":" assertEquals(formattedDate, \"Dec 15 2023 1800\");","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"seanpzk":22}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import duke.filemanagement.Storage;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" public void loadFileToTaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" Storage storage \u003d new Storage(\"src/main/data/test.txt\");","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" storage.loadFileToTaskManager(taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":" assertEquals(\"1.[T][ ] Borrow Book\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" + \"2.[E][ ] Read Book (from: today to: next Sunday)\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" + \"3.[T][ ] Test\\n\", taskList.outputNumberedList());","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"seanpzk":17}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"package duke.task;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":" public void testStringOutput() {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"seanpzk"},"content":" ToDo toDo \u003d new ToDo(\"This is a test ToDo.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"seanpzk"},"content":" assertEquals(toDo.toString(), \"[T][ ] This is a test ToDo.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"seanpzk"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"seanpzk"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"seanpzk"},"content":" public void testConstructor() {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"seanpzk"},"content":" ToDo toDo \u003d new ToDo(\"This is a test ToDo.\", true);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"seanpzk"},"content":" assertEquals(toDo.toString(), \"[T][X] This is a test ToDo.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"seanpzk"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"seanpzk"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"seanpzk":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"seanpzk"},"content":"todo Borrow Book","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"seanpzk"},"content":"event Read Book /from today /to next Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"seanpzk"},"content":"deadline Buy bread /by Sunday","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"seanpzk"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"seanpzk"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"seanpzk"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"seanpzk"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"seanpzk"},"content":"delete 1","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"seanpzk"},"content":"list","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"seanpzk":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":"seanpzk"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-28"},{"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":"seanpzk"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"seanpzk":2,"-":19}}] diff --git a/seanpzk_ip_master/commits.json b/seanpzk_ip_master/commits.json index 8e130435..6139955c 100644 --- a/seanpzk_ip_master/commits.json +++ b/seanpzk_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"seanpzk":[{"date":"2023-08-21","commitResults":[{"hash":"53ce34370837c95e03bdf9434ff0173aace837ea","isMergeCommit":false,"messageTitle":"Renamed Duke to ChadBob. Now main simply greets user and exits.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"67b20824835c036f30e273bc3b20a858bc893abf","isMergeCommit":false,"messageTitle":"Added echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"703a1950b9c4e080ce0d0b27eb86c322fe970761","isMergeCommit":false,"messageTitle":"Added add and list functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"afc2ea14073852c922a11120c2b6314147de9b28","isMergeCommit":false,"messageTitle":"Added Task class.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"3ae5c12b8d646a78be362eef7cfe571c182261b6","isMergeCommit":false,"messageTitle":"Added marking functionality for chatbot.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"31d922c3d7d1d798afef61aee02b022ba235e5ac","isMergeCommit":false,"messageTitle":"Added javadoc comments for Duke and Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"e94e7886bde2fc3acb007a2e90540b33644c51e4","isMergeCommit":false,"messageTitle":"Renamed Task\u0027s method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}},{"hash":"92d14f9b1a6c03851df60afa551b091a72049409","isMergeCommit":false,"messageTitle":"Added Deadline, Event and ToDo classes","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":7}}},{"hash":"da94612fc6ffdc5868af2c7f09b666c1d16c1b8a","isMergeCommit":false,"messageTitle":"Modified input.txt and EXPECTED.txt for Automated Text UI Testing.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"627fa516bd15a987f38cf9b3aa966f5e21f1aacd","isMergeCommit":false,"messageTitle":"Added InvalidUserInputException exception.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"bc920b8152dfb0695e6e3c0e0c7671aa40203841","isMergeCommit":false,"messageTitle":"Added error handling functionality. Code reorganised for error handling.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":51}}},{"hash":"45dadbed92a4b1983c05fc156e5120c1ce4baca1","isMergeCommit":false,"messageTitle":"Added Task Manager class to handle collection of tasks.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}},{"hash":"f1cc67672b0cb0cfdfff3a9e60ae9cb172dde1c4","isMergeCommit":false,"messageTitle":"Added more commands to test in input.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1}}},{"hash":"3e00c454681ef19354e3759315f8731721743b25","isMergeCommit":false,"messageTitle":"Restructured Duke.java for Task Manager. Also, fixed minor bug for testing.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":31}}},{"hash":"7efab3ba01ed4bc9b420d84a30bfca94ea288161","isMergeCommit":false,"messageTitle":"Added delete functionality.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"8f0b1981649860443840d878b7d1368217d1bb87","isMergeCommit":false,"messageTitle":"Add ResponseGen class.","messageBody":"There are a lot of different responses generated to inform user of the\nchange hardcoded inside Duke.java. ResponseGen will now handle the\ndifferent responses to be generated. It will return a String for duke to\nprint out to users.\n","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":43}}},{"hash":"5d296e471122edcc1cb37d8479e7cdf80038e63a","isMergeCommit":false,"messageTitle":"Update input.txt for testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"994eeaafdb006d3af018c291be0f26d719d2812a","isMergeCommit":false,"messageTitle":"Update Task and its subclasses\u0027 constructors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":5}}},{"hash":"d3026e1f14f34e970de570a970d501f62f70e385","isMergeCommit":false,"messageTitle":"Add FileManager class to save task data in ChadBob","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":0}}},{"hash":"76c6c52fa1a3d2722aff7af184abd205e592c6df","isMergeCommit":false,"messageTitle":"Add Save functionality in Duke.","messageBody":"Tasks data are cleared previously when chatbot closes.\n\nSave functionality automatically saves tasks data and chatbot loads the\ntasks data upon start up.\n","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"9ec4553cedf73873c80dec451c305f274ce83d7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"Add save functionality in chatbot.\nAdd classes to better handle files and responses to users.\n","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"67237346235d5540f41b915b4309d78a7751b698","isMergeCommit":false,"messageTitle":"Move printing job from Duke to ResponseGen","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":41}}},{"hash":"55f70610664898fec473548c376320df93f10752","isMergeCommit":false,"messageTitle":"Fix bug on additional File loading to TaskManager","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":4}}},{"hash":"bd5ac5c7f97673d5b7d1af53df62501847f1f561","isMergeCommit":false,"messageTitle":"Teach chatbot how to understand dates and times.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":2}}},{"hash":"ce7d3371b1e65d953f73729340745cb922722243","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"Teach chatbot how to understand dates and times.\nDateTimeDetector class: Use to detect date and time and format\naccordingly.\nBug fix: Fix updating Task Manager with saved file excessively.\n","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"9b2f47cda9b157123e4e897e7dfead1b4d4eb7d5","isMergeCommit":false,"messageTitle":"Rename classes name to align with iP requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":46}}},{"hash":"4c9c6f8fb181d0580eea865f2391b9a5c802b6cf","isMergeCommit":false,"messageTitle":"Add Parser class to deal with user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":79}}},{"hash":"82d13967d6038d5e1091b070283aefa71100039f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"Implement more OOP to the project.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"98cff177b03653e4cb423d2015b11c7bc814c21a","isMergeCommit":false,"messageTitle":"Update format of time stored in file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"b55e0e598983404e4b07d9af3d8f2dddb372bdd2","isMergeCommit":false,"messageTitle":"Move files into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":6}}},{"hash":"d8ba36f310e117b0b9e8ba177b28bca20cdcaa1b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"Move classes into packages\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"b850cd1829c77b378eaef319f6de63bb2f9be32a","isMergeCommit":false,"messageTitle":"Update runtest.bat after packaging classes","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":2,"deletions":2},"md":{"insertions":4,"deletions":4}}},{"hash":"a2a5ecef688ea6f67afd97274a49575c6b3b445d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"Add gradle support\n","fileTypesAndContributionMap":{}},{"hash":"f38807bc48fa7ab856dc229d34efc0e8295266f0","isMergeCommit":false,"messageTitle":"Add Gradle to project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"e7ff9aa0378387139871622eb12b57fb8d7b66a8","isMergeCommit":false,"messageTitle":"Add JUnit test cases","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":1}}},{"hash":"754d32c979daaf25ae5cad34896ba2b86bd8e01f","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":2}}},{"hash":"b44b5444eb5a7aa1298403e93a1c08bb3dd75ac9","isMergeCommit":false,"messageTitle":"Tweak code to comply coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":28}}},{"hash":"17199e96f883c149541c6d61b36986c50f5d358b","isMergeCommit":false,"messageTitle":"Add Find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"aa11399cf805a2700e5c15dc38d8d2af0dd515c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"Add Find functionality.\n","fileTypesAndContributionMap":{}},{"hash":"2e08e7af138cfaa92af9afa0864a6f99ff9284e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"Add JavaDoc comments.\n","fileTypesAndContributionMap":{}},{"hash":"efc088660424feae41026b4e85d9bb8758899f27","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"Tweak code to comply coding standard\n","fileTypesAndContributionMap":{}},{"hash":"1ebeb058320adbe14ff59ea00b9665e114128055","isMergeCommit":false,"messageTitle":"Touch up on coding standard and JavaDoc after merging 3 branches","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard","A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":26}}}]},{"date":"2023-09-02","commitResults":[{"hash":"dca20f13cd12aa4333133f8cd6693236cd467f87","isMergeCommit":false,"messageTitle":"Fix importing all java.util","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"bac141e2a3a7d75c8130fced6d389b5bb8feed31","isMergeCommit":false,"messageTitle":"Implement GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":0},"fxml":{"insertions":39,"deletions":0},"java":{"insertions":270,"deletions":1}}},{"hash":"889d8fc8108267f7100444dae0366dbb14889f39","isMergeCommit":false,"messageTitle":"Fix warning from version mismatch","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}},{"hash":"b15fae8b97c6caf0444f9745a45fcf33412eff00","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"Implemented GUI for Duke\n","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"5a613c18a9a8f304418a5385359b1ccdce820ab3","isMergeCommit":false,"messageTitle":"Clear out unwanted commented code in build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":15}}}]},{"date":"2023-09-09","commitResults":[{"hash":"fb6c03aede45d6c8eaec36e54bdec1035fda2de5","isMergeCommit":false,"messageTitle":"Change echoing functionality of bot to proper response from bot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":56,"deletions":81}}},{"hash":"9419763a49aa6f430df118ac137c34e11e801f31","isMergeCommit":false,"messageTitle":"Implement switch case in Parser for better readability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":65}}},{"hash":"5051e6f3d8c4aea4300fb3d0b98320905b315570","isMergeCommit":false,"messageTitle":"Fix bugs on GUI","messageBody":"Fix bug #1 where application did not stop after user input \"bye\".\nFix bug #2 where previous tasks are not loaded and user always start\nfrom a fresh task list.\n","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":30}}},{"hash":"fed7e9b038029473cdd61de64bad3be0903ff9bb","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"There are poor coding practices across the files such as poor naming\nconvention with boolean or deeply nested code, making the code hard to\nread.\n\nCorrected mistakes pointed out from PRs and own thorough analysis of my\ncode.\n","fileTypesAndContributionMap":{"java":{"insertions":189,"deletions":91}}},{"hash":"dbfcc616b066d469277a5090785f62edeb60eb37","isMergeCommit":false,"messageTitle":"Fix minor issue on coding practice","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"25e214b4b2ce281ff26b4b2c54784f5a0c84b736","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"d6ae17bde0015878b56d064c7ec607b4bc8c4aaa","isMergeCommit":true,"messageTitle":"Merge pull request #2 from seanpzk/branch-A-CodeQuality","messageBody":"Improved Code Quality","fileTypesAndContributionMap":{}},{"hash":"066924dd1a0ce5081710ebcd290fd36e4d844a94","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Assertions\u0027","messageBody":"Add assertions to handle errors\n","tags":["A-CodeQuality","A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"5a56a8c91c97f61fc69135167271b8065e72fc1f","isMergeCommit":false,"messageTitle":"Add update functionalities to the different tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"0237fc9c39310875f8f953f74ba2b4e715e92dd2","isMergeCommit":false,"messageTitle":"Add update functionality to bot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":4}}},{"hash":"6f894a50be25053e764fff7ccc89323acc36ce3d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-update\u0027","messageBody":"Added update functionality to update task details\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"152d8c0bdc797d932d97812d00988d8411651100","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-update\u0027","messageBody":"TaskList class: Do not support editing of the task.\n\nOnly way to edit a task for a user is to delete the task and reinsert a\nnew task, making it inconvenient for them.\n\nAdded update functionality to update different attributes of a Task\nobject.\n\nParser will take input on update and pass the details to TaskList as\nTaskList handles Tasks. The Tasks update function are called and updated\naccordingly.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"seanpzk":{"java":1312,"md":2,"fxml":39,"sh":0,"bat":2,"gradle":12,"txt":9}},"authorContributionVariance":{"seanpzk":63788.15},"authorDisplayNameMap":{"seanpzk":"CS2103T-T15-3 SEAN..KIAT"}} +{"authorDailyContributionsMap":{"seanpzk":[{"date":"2023-08-21","commitResults":[{"hash":"53ce34370837c95e03bdf9434ff0173aace837ea","isMergeCommit":false,"messageTitle":"Renamed Duke to ChadBob. Now main simply greets user and exits.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"67b20824835c036f30e273bc3b20a858bc893abf","isMergeCommit":false,"messageTitle":"Added echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"703a1950b9c4e080ce0d0b27eb86c322fe970761","isMergeCommit":false,"messageTitle":"Added add and list functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"afc2ea14073852c922a11120c2b6314147de9b28","isMergeCommit":false,"messageTitle":"Added Task class.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"3ae5c12b8d646a78be362eef7cfe571c182261b6","isMergeCommit":false,"messageTitle":"Added marking functionality for chatbot.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"31d922c3d7d1d798afef61aee02b022ba235e5ac","isMergeCommit":false,"messageTitle":"Added javadoc comments for Duke and Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"e94e7886bde2fc3acb007a2e90540b33644c51e4","isMergeCommit":false,"messageTitle":"Renamed Task\u0027s method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":4}}},{"hash":"92d14f9b1a6c03851df60afa551b091a72049409","isMergeCommit":false,"messageTitle":"Added Deadline, Event and ToDo classes","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":7}}},{"hash":"da94612fc6ffdc5868af2c7f09b666c1d16c1b8a","isMergeCommit":false,"messageTitle":"Modified input.txt and EXPECTED.txt for Automated Text UI Testing.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"627fa516bd15a987f38cf9b3aa966f5e21f1aacd","isMergeCommit":false,"messageTitle":"Added InvalidUserInputException exception.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"bc920b8152dfb0695e6e3c0e0c7671aa40203841","isMergeCommit":false,"messageTitle":"Added error handling functionality. Code reorganised for error handling.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":51}}},{"hash":"45dadbed92a4b1983c05fc156e5120c1ce4baca1","isMergeCommit":false,"messageTitle":"Added Task Manager class to handle collection of tasks.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}},{"hash":"f1cc67672b0cb0cfdfff3a9e60ae9cb172dde1c4","isMergeCommit":false,"messageTitle":"Added more commands to test in input.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1}}},{"hash":"3e00c454681ef19354e3759315f8731721743b25","isMergeCommit":false,"messageTitle":"Restructured Duke.java for Task Manager. Also, fixed minor bug for testing.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":31}}},{"hash":"7efab3ba01ed4bc9b420d84a30bfca94ea288161","isMergeCommit":false,"messageTitle":"Added delete functionality.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"8f0b1981649860443840d878b7d1368217d1bb87","isMergeCommit":false,"messageTitle":"Add ResponseGen class.","messageBody":"There are a lot of different responses generated to inform user of the\nchange hardcoded inside Duke.java. ResponseGen will now handle the\ndifferent responses to be generated. It will return a String for duke to\nprint out to users.\n","fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":43}}},{"hash":"5d296e471122edcc1cb37d8479e7cdf80038e63a","isMergeCommit":false,"messageTitle":"Update input.txt for testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"994eeaafdb006d3af018c291be0f26d719d2812a","isMergeCommit":false,"messageTitle":"Update Task and its subclasses\u0027 constructors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":5}}},{"hash":"d3026e1f14f34e970de570a970d501f62f70e385","isMergeCommit":false,"messageTitle":"Add FileManager class to save task data in ChadBob","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":0}}},{"hash":"76c6c52fa1a3d2722aff7af184abd205e592c6df","isMergeCommit":false,"messageTitle":"Add Save functionality in Duke.","messageBody":"Tasks data are cleared previously when chatbot closes.\n\nSave functionality automatically saves tasks data and chatbot loads the\ntasks data upon start up.\n","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"9ec4553cedf73873c80dec451c305f274ce83d7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"Add save functionality in chatbot.\nAdd classes to better handle files and responses to users.\n","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"67237346235d5540f41b915b4309d78a7751b698","isMergeCommit":false,"messageTitle":"Move printing job from Duke to ResponseGen","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":41}}},{"hash":"55f70610664898fec473548c376320df93f10752","isMergeCommit":false,"messageTitle":"Fix bug on additional File loading to TaskManager","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":4}}},{"hash":"bd5ac5c7f97673d5b7d1af53df62501847f1f561","isMergeCommit":false,"messageTitle":"Teach chatbot how to understand dates and times.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":2}}},{"hash":"ce7d3371b1e65d953f73729340745cb922722243","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"Teach chatbot how to understand dates and times.\nDateTimeDetector class: Use to detect date and time and format\naccordingly.\nBug fix: Fix updating Task Manager with saved file excessively.\n","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"9b2f47cda9b157123e4e897e7dfead1b4d4eb7d5","isMergeCommit":false,"messageTitle":"Rename classes name to align with iP requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":46}}},{"hash":"4c9c6f8fb181d0580eea865f2391b9a5c802b6cf","isMergeCommit":false,"messageTitle":"Add Parser class to deal with user input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":79}}},{"hash":"82d13967d6038d5e1091b070283aefa71100039f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"Implement more OOP to the project.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"98cff177b03653e4cb423d2015b11c7bc814c21a","isMergeCommit":false,"messageTitle":"Update format of time stored in file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"b55e0e598983404e4b07d9af3d8f2dddb372bdd2","isMergeCommit":false,"messageTitle":"Move files into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":6}}},{"hash":"d8ba36f310e117b0b9e8ba177b28bca20cdcaa1b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"Move classes into packages\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"b850cd1829c77b378eaef319f6de63bb2f9be32a","isMergeCommit":false,"messageTitle":"Update runtest.bat after packaging classes","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":2,"deletions":2},"md":{"insertions":4,"deletions":4}}},{"hash":"a2a5ecef688ea6f67afd97274a49575c6b3b445d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"Add gradle support\n","fileTypesAndContributionMap":{}},{"hash":"f38807bc48fa7ab856dc229d34efc0e8295266f0","isMergeCommit":false,"messageTitle":"Add Gradle to project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"e7ff9aa0378387139871622eb12b57fb8d7b66a8","isMergeCommit":false,"messageTitle":"Add JUnit test cases","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":1}}},{"hash":"754d32c979daaf25ae5cad34896ba2b86bd8e01f","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":2}}},{"hash":"b44b5444eb5a7aa1298403e93a1c08bb3dd75ac9","isMergeCommit":false,"messageTitle":"Tweak code to comply coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":28}}},{"hash":"17199e96f883c149541c6d61b36986c50f5d358b","isMergeCommit":false,"messageTitle":"Add Find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"aa11399cf805a2700e5c15dc38d8d2af0dd515c1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"Add Find functionality.\n","fileTypesAndContributionMap":{}},{"hash":"2e08e7af138cfaa92af9afa0864a6f99ff9284e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"Add JavaDoc comments.\n","fileTypesAndContributionMap":{}},{"hash":"efc088660424feae41026b4e85d9bb8758899f27","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"Tweak code to comply coding standard\n","fileTypesAndContributionMap":{}},{"hash":"1ebeb058320adbe14ff59ea00b9665e114128055","isMergeCommit":false,"messageTitle":"Touch up on coding standard and JavaDoc after merging 3 branches","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard","A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":26}}}]},{"date":"2023-09-02","commitResults":[{"hash":"dca20f13cd12aa4333133f8cd6693236cd467f87","isMergeCommit":false,"messageTitle":"Fix importing all java.util","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"bac141e2a3a7d75c8130fced6d389b5bb8feed31","isMergeCommit":false,"messageTitle":"Implement GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":21,"deletions":0},"fxml":{"insertions":39,"deletions":0},"java":{"insertions":270,"deletions":1}}},{"hash":"889d8fc8108267f7100444dae0366dbb14889f39","isMergeCommit":false,"messageTitle":"Fix warning from version mismatch","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1}}},{"hash":"b15fae8b97c6caf0444f9745a45fcf33412eff00","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"Implemented GUI for Duke\n","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"5a613c18a9a8f304418a5385359b1ccdce820ab3","isMergeCommit":false,"messageTitle":"Clear out unwanted commented code in build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":15}}}]},{"date":"2023-09-09","commitResults":[{"hash":"fb6c03aede45d6c8eaec36e54bdec1035fda2de5","isMergeCommit":false,"messageTitle":"Change echoing functionality of bot to proper response from bot","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":56,"deletions":81}}},{"hash":"9419763a49aa6f430df118ac137c34e11e801f31","isMergeCommit":false,"messageTitle":"Implement switch case in Parser for better readability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":65}}},{"hash":"5051e6f3d8c4aea4300fb3d0b98320905b315570","isMergeCommit":false,"messageTitle":"Fix bugs on GUI","messageBody":"Fix bug #1 where application did not stop after user input \"bye\".\nFix bug #2 where previous tasks are not loaded and user always start\nfrom a fresh task list.\n","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":30}}},{"hash":"fed7e9b038029473cdd61de64bad3be0903ff9bb","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"There are poor coding practices across the files such as poor naming\nconvention with boolean or deeply nested code, making the code hard to\nread.\n\nCorrected mistakes pointed out from PRs and own thorough analysis of my\ncode.\n","fileTypesAndContributionMap":{"java":{"insertions":189,"deletions":91}}},{"hash":"dbfcc616b066d469277a5090785f62edeb60eb37","isMergeCommit":false,"messageTitle":"Fix minor issue on coding practice","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"25e214b4b2ce281ff26b4b2c54784f5a0c84b736","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"d6ae17bde0015878b56d064c7ec607b4bc8c4aaa","isMergeCommit":true,"messageTitle":"Merge pull request #2 from seanpzk/branch-A-CodeQuality","messageBody":"Improved Code Quality","fileTypesAndContributionMap":{}},{"hash":"066924dd1a0ce5081710ebcd290fd36e4d844a94","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Assertions\u0027","messageBody":"Add assertions to handle errors\n","tags":["A-CodeQuality","A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"5a56a8c91c97f61fc69135167271b8065e72fc1f","isMergeCommit":false,"messageTitle":"Add update functionalities to the different tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"0237fc9c39310875f8f953f74ba2b4e715e92dd2","isMergeCommit":false,"messageTitle":"Add update functionality to bot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":4}}},{"hash":"6f894a50be25053e764fff7ccc89323acc36ce3d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-update\u0027","messageBody":"Added update functionality to update task details\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"152d8c0bdc797d932d97812d00988d8411651100","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-update\u0027","messageBody":"TaskList class: Do not support editing of the task.\n\nOnly way to edit a task for a user is to delete the task and reinsert a\nnew task, making it inconvenient for them.\n\nAdded update functionality to update different attributes of a Task\nobject.\n\nParser will take input on update and pass the details to TaskList as\nTaskList handles Tasks. The Tasks update function are called and updated\naccordingly.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"463f6a80444192dc42dea043cdfbdd4396bd25e7","isMergeCommit":false,"messageTitle":"Add product screenshot","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":5,"deletions":5},"java":{"insertions":25,"deletions":0}}},{"hash":"d07524cf8cc319802655b4cf9cbfc13cdb16aa29","isMergeCommit":false,"messageTitle":"Fix bug in DateTimeFormatter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"3970a96fd92b081d01bef3c7e87cbf26c2153955","isMergeCommit":false,"messageTitle":"Fix minor bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":2}}},{"hash":"7ae1c9acc05f95010e6354c138d6945625cd14cb","isMergeCommit":false,"messageTitle":"Update User Guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":249,"deletions":10}}},{"hash":"a6effa87e79724e3b060801bdc09320e169df739","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"Update User Guide\n","tags":["A-UserGuide"],"fileTypesAndContributionMap":{}},{"hash":"5c183792646388abc85e5ec6d7921221a43d4acb","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"b6aae3353841b5b9799d7c19909a1d295664649f","isMergeCommit":false,"messageTitle":"Add test cases for DateTimeDetector","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"a6b90d1bfaedf69a547cc83d19561c7a32224fdb","isMergeCommit":false,"messageTitle":"Add more information for handling exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0},"md":{"insertions":1,"deletions":1}}},{"hash":"14fff7e997bd77ad2852a4eee0638328f5428fee","isMergeCommit":false,"messageTitle":"Fix gradle checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":39}}},{"hash":"596efccd436a40371244368f862cfe9788738f51","isMergeCommit":false,"messageTitle":"Remove printing messages","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"fxml":{"insertions":7,"deletions":6},"java":{"insertions":5,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"seanpzk":{"java":1370,"md":242,"fxml":40,"sh":0,"bat":2,"gradle":13,"txt":9}},"authorContributionVariance":{"seanpzk":55507.426},"authorDisplayNameMap":{"seanpzk":"CS2103T-T15-3 SEAN..KIAT"}} diff --git a/sheryew_ip_master/authorship.json b/sheryew_ip_master/authorship.json index 78a9e28f..c2a8bc0b 100644 --- a/sheryew_ip_master/authorship.json +++ b/sheryew_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":"sheryew"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"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":"sheryew"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"sheryew":16,"-":38}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"## DukePro","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"\u003e \"Your mind is for having ideas, not holding them.\" - David Allen [(Source)](https://dansilvestre.com/productivity-quotes)","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"DukePro frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"- text-based","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"- easy to learn","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"- ~~FAST~~ SUPER FAST to use","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"All you need to do is,","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":"1. download it from [here]().","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"2. double-click it.","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":"4. let it manage your tasks for you 😄 ","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":"And it is **FREE**!","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":"Features:","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":"- [x] Managing Tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":"- [x] Managing deadlines","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":"- [x] Searching Tasks","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":"- [ ] GUI (coming soon)","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":"If you are a Java programmer, you can use it to practice Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":"```java","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":"public class Main {","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"sheryew":30,"-":1}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"D|0|play fifa|2023-09-12","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"D|0|iron clothes|2023-09-15","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"D|0|cs2107 assignment|2023-09-30","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"sheryew":3}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"import javafx.scene.control.TextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" private TextArea dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" * Instantiates a DialogBox object that will be displayed either when the user prompts or when Duke replies","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" * @param text String Object. Either user\u0027s prompt or DUKE\u0027s response.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" * @param img Image Object that is generated from providing a reference link to the /resources/Images folder","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" TextArea dialogTextArea \u003d (TextArea) tmp.get(1);","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" dialogTextArea.setPadding(new Insets(0, 0, 0, 10));","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" dialogTextArea.setStyle(\"-fx-control-inner-background: lightblue;\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" * Generates a default DialogBox GUI whenever user\u0027s prompts DUKE","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":" * @param text String Object. User\u0027s prompt to the DUKE chatbot.","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"sheryew"},"content":" * @param img Image Object. User\u0027s default picture.","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"sheryew"},"content":" * @return DialogBox Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"sheryew"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"sheryew"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"sheryew"},"content":" * Generates a default DialogBox GUI whenever DUKE replies the user\u0027s prompt.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"sheryew"},"content":" * Compared to the user\u0027s DialogBox, DUKE\u0027s DialogBox is flipped to showcase contrast in response.","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"sheryew"},"content":" * @param text String Object. DUKE\u0027s response.","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"sheryew"},"content":" * @param img Image Object. Duke\u0027s default picture.","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"sheryew"},"content":" * @return ialogBox Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"sheryew"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"sheryew"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"sheryew"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"sheryew"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":84}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":10}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" public Main() throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" stage.setTitle(\"The War Room\");","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":34}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/Images/DaUser.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/Images/war_room.jpeg\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" * Returns two DialogBox GUI objects during the initialisation of DUKE interface.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" DialogBox.getDukeDialog(\"Hello! I\u0027m War Room.\", dukeImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" DialogBox.getDukeDialog(\"What can I do for you?\", dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" * Initialise duke object with an instance of a DUKE object","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" * @param d Duke object that is passed from Main.java","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":62}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"import java.time.temporal.Temporal;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" protected Temporal by;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" protected String deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" * Returns a Deadline object if provided with description (String) and the appropriate string format for deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" * If the deadline provided is not of (YYYY-MM-DD or YYYY-MM-DD HHMM) format, Object will not be created.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" * @param description description of task","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" * @param deadline due date for tasks. Has to be represented in yyyy-mm-dd or yyyy-mm-dd hhmm format","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" * @throws DukeException if format is provided wrongly, Deadline Object cannot be instantiated.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" public Deadline(String description, String deadline) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" super(description, \"D\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" this.by \u003d processDateTime(this.deadline);","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" public String getDeadline() {","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" return this.deadline;","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" * Returns an appropriate LocalDateTime or LocalDate representation based on the user\u0027s provided datetime","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" * @param deadline String which user use to represent one\u0027s deadline [Either in YYY-MM-DD or YYYY-MM-DD HHMM format]","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" * @return Temporal Object containing the formatted LocalDateTime or LocalDate object","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" * @throws DukeException in the event deadline is not provided in the right format","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" public Temporal processDateTime(String deadline) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" if (deadline.contains(\" \")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" return LocalDateTime.parse(deadline, dateTimeFormatter);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" return LocalDate.parse(deadline, dateFormatter);","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please check that the dates/times you provided are correct!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" * Returns MMM-D-YYYY representation for the deadline assuming the deadline provided is of LocalDate/LocalDateTime Object.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" * If the deadline isn\u0027t of LocalDate/LocalDateTime, it throws an UnsupportedOperationException.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" * @return MMM-D-YYYY representation from LocalDate or LocalDateTime object","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" * @throws UnsupportedOperationException If object is not of LocalDate or LocalDateTime","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" public String generateNewDateString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" if (this.by instanceof LocalDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" return ((LocalDate) this.by).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":" } else if (this.by instanceof LocalDateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":" return ((LocalDateTime) this.by).format(DateTimeFormatter.ofPattern(\"MMM d yyyy, ha\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"sheryew"},"content":" throw new UnsupportedOperationException(\"Unsupported Temporal type\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"sheryew"},"content":" * Checks if the current deadline is between the given LocalDateTime and X days after it.","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"sheryew"},"content":" * @param dateTime The LocalDateTime to start the range.","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"sheryew"},"content":" * @return true if the deadline is within the range, false otherwise.","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"sheryew"},"content":" public boolean withinDeadlineXDays(LocalDateTime dateTime, Integer daysAfter) {","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"sheryew"},"content":" LocalDateTime deadlineTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"sheryew"},"content":" if (this.by instanceof LocalDate) {","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"sheryew"},"content":" deadlineTime \u003d ((LocalDate) this.by).atTime(23, 59, 59);","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"sheryew"},"content":" } else if (this.by instanceof LocalDateTime) {","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"sheryew"},"content":" deadlineTime \u003d (LocalDateTime) this.by;","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"sheryew"},"content":" throw new UnsupportedOperationException(\"Unsupported Temporal type\");","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"sheryew"},"content":" LocalDateTime sevenDaysAfter \u003d dateTime.plusDays(daysAfter);","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"sheryew"},"content":" boolean isAfterToday \u003d deadlineTime.isEqual(dateTime) || deadlineTime.isAfter(dateTime);","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"sheryew"},"content":" boolean isBeforeDeadline \u003d deadlineTime.isBefore(sevenDaysAfter);","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"sheryew"},"content":" return isAfterToday \u0026\u0026 isBeforeDeadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"sheryew"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"sheryew"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"sheryew"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.generateNewDateString() + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"sheryew":94}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" * Returns a Duke Object which contains essential information for the functionality of this chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" * TaskList Object is instantiated to keep account of current tasks available for user (ArrayList)","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" * Ui Object is instantiated to return appropriate UI prompts back to user","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" * @param filePath File Path for Duke.txt","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" * @throws IOException If file is not located or not available","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" public Duke(String filePath) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" tasks \u003d new TaskList(storage.load(storage.filePath));","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" * Instantiates a Duke Object which contains essential information for the functionality of the chatbot","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" * Generates a TaskList object based on the file located at \"src/main/data/duke.txt\"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" * @throws IOException If file is not located or not available","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" public Duke() throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" storage \u003d new Storage(\"src/main/data/duke.txt\");","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" this.filePath \u003d storage.filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" tasks \u003d new TaskList(storage.load(storage.filePath));","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" * Returns a String object based on user\u0027s command to the DUKE chatbot","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" * Instantiates a Parser object that is responsible for the handling of user\u0027s command","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" * @param user_input String Object that is from what the user\u0027s types","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" * @return String Object AKA DUKE\u0027s response","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" public String getResponse(String user_input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" Parser parser \u003d new Parser(user_input);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" String answer \u003d parser.validateParser(tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" storage.save(filePath, tasks.userData);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" return answer;","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"sheryew":62,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"sheryew":7}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" * Returns an Event Task Object","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" * @param description Task Description (String)","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" * @param from User specifications on when the Event Task begins (String)","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" * @param to User specifications on when the Event Task ends (String)","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" super(description, \"E\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" public String getFrom() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" return this.from;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" public String getTo() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" return this.to;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"sheryew":32}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" protected String[] words;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" public Parser(String command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" this.words \u003d command.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" private static final Integer TODO_NUMBER \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" private static final Integer DEADLINE_NUMBER \u003d 2;","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" private static final Integer EVENT_NUMBER \u003d 3;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" private static final Integer MARK_NUMBER \u003d 4;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" private static final Integer UNMARK_NUMBER \u003d 5;","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" private static final Integer DELETE_NUMBER \u003d 6;","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" * Analyses user\u0027s commands and performs the appropriate actions.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object consisting of user\u0027s existing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" * @return String generated from the UI class. Aids in generation of DialogBox.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" * @throws Exception if the command is Bye.","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" public String validateParser(TaskList tasks) throws Exception {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" String action \u003d this.words[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" String taskDescription \u003d getTaskDescription(this.words);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" if (Arrays.asList(\"todo\", \"deadline\", \"event\", \"list\", \"reminder\").contains(action)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" return handleTaskCreationCommands(action, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"mark\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" if (validOthers(this.words, tasks)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" return performOthersAction(MARK_NUMBER, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"unmark\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" if (validOthers(this.words, tasks)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" return performOthersAction(UNMARK_NUMBER, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":" if (validOthers(this.words, tasks)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" return performOthersAction(DELETE_NUMBER, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" assert(!Objects.equals(taskDescription, \"\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" return performFiltering(taskDescription, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"bye\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" throw new Exception(\"Bye. Hope to see you again soon!\"); }","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" else {","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" } catch (DukeException DE) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" return DE.getMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" return \"Something went wrong!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"sheryew"},"content":" * Returns task description for various Task types (Todo/Deadline/Event).","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"sheryew"},"content":" * @param arrUserCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"sheryew"},"content":" * @return Task description for a particular Task (String).","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"sheryew"},"content":" public String getTaskDescription(String[] arrUserCommand) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"sheryew"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 1; i \u003c arrUserCommand.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"sheryew"},"content":" if (\"/by\".equals(arrUserCommand[i]) || \"/from\".equals(arrUserCommand[i])) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"sheryew"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"sheryew"},"content":" result.append(\" \").append(arrUserCommand[i]);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"sheryew"},"content":" return result.toString().trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"sheryew"},"content":" * Analyses user\u0027s commands and performs the appropriate actions.","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"sheryew"},"content":" * This function only works for \"todo\", \"deadline\", \"Event\".","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"sheryew"},"content":" * Refactoring due to Original Main function being too long.","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"sheryew"},"content":" * @param action String representation [\"Todo\", \"deadline\", \"Event\"].","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object consisting of user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"sheryew"},"content":" * @return String generated from the UI class. Aids in generation of DialogBox.","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"sheryew"},"content":" * @throws DukeException if not appropriate action.","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"sheryew"},"content":" private String handleTaskCreationCommands(String action, TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"sheryew"},"content":" String taskDescription \u003d getTaskDescription(this.words);","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"sheryew"},"content":" if (Objects.equals(action, \"todo\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"sheryew"},"content":" if (isValidToDoCommand(this.words)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"sheryew"},"content":" return performValidTaskAction(TODO_NUMBER,taskDescription, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"deadline\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"sheryew"},"content":" if (isValidDeadlineCommand(this.words)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"sheryew"},"content":" return performValidTaskAction(DEADLINE_NUMBER, taskDescription, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"event\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"sheryew"},"content":" if (isValidEventCommand(this.words)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"sheryew"},"content":" return performValidTaskAction(EVENT_NUMBER, taskDescription, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"list\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"sheryew"},"content":" assert(this.words.length \u003d\u003d 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"sheryew"},"content":" return performValidListAction(tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"reminder\")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"sheryew"},"content":" if (isValidReminderCommand(this.words)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"sheryew"},"content":" return performValidReminderAction(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Invalid\");","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"sheryew"},"content":" * Returns the appropriate string response as well as adding new task to pre-existing TaskList.","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"sheryew"},"content":" * Works for all the Task Object [Todo, Deadline, Event].","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"sheryew"},"content":" * @param taskNumber Magic Number as stated above. 1 for Todo, 2 for Deadline, 3 for Event.","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"sheryew"},"content":" * @param taskDescription String description of the particular task.","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"sheryew"},"content":" * @param tasks Pre-existing TaskList object containing the user\u0027s tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"sheryew"},"content":" * @return String response after successfully adding a new task.","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"sheryew"},"content":" * @throws DukeException If the magic digit is not stated in the conditional flow.","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"sheryew"},"content":" public String performValidTaskAction(Integer taskNumber, String taskDescription, TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"sheryew"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"sheryew"},"content":" if (taskNumber \u003d\u003d 1) {","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"sheryew"},"content":" newTask \u003d new Todo(taskDescription);","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"sheryew"},"content":" } else if (taskNumber \u003d\u003d 2) {","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"sheryew"},"content":" newTask \u003d new Deadline(taskDescription, searchDeadline(this.words, \"/by\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"sheryew"},"content":" } else if (taskNumber \u003d\u003d 3) {","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"sheryew"},"content":" String[] fromTo \u003d searchFromTo(this.words, \"/from\", \"/to\");","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"sheryew"},"content":" newTask \u003d new Event(taskDescription, fromTo[0], fromTo[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"sheryew"},"content":" if (newTask \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Something went wrong!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"sheryew"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"sheryew"},"content":" return ui.addTaskText(newTask, tasks.userData.size());","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"sheryew"},"content":" * Returns String representation of deadline tasks that are due within x number of days","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"sheryew"},"content":" * @param tasks Pre-existing TaskList object containing the user\u0027s tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"sheryew"},"content":" * @return String","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":148,"author":{"gitId":"sheryew"},"content":" public String performValidReminderAction(TaskList tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":149,"author":{"gitId":"sheryew"},"content":" LocalDateTime currentTime \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-12"},{"lineNumber":150,"author":{"gitId":"sheryew"},"content":" StringBuilder taskDetails \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":151,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c tasks.userData.size(); i++) {","lastModifiedDate":"2023-09-12"},{"lineNumber":152,"author":{"gitId":"sheryew"},"content":" Task currentTask \u003d tasks.userData.get(i);","lastModifiedDate":"2023-09-12"},{"lineNumber":153,"author":{"gitId":"sheryew"},"content":" if (Objects.equals(currentTask.tag, \"D\")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":154,"author":{"gitId":"sheryew"},"content":" Deadline task \u003d (Deadline) currentTask;","lastModifiedDate":"2023-09-12"},{"lineNumber":155,"author":{"gitId":"sheryew"},"content":" Integer daysAfter \u003d Integer.parseInt(this.words[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":156,"author":{"gitId":"sheryew"},"content":" if (task.withinDeadlineXDays(currentTime, daysAfter)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":157,"author":{"gitId":"sheryew"},"content":" taskDetails.append(ui.displayTaskInList(i, task)).append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":158,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":159,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":160,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":161,"author":{"gitId":"sheryew"},"content":" return taskDetails.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":162,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":163,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":164,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":165,"author":{"gitId":"sheryew"},"content":" * Returns True if the user\u0027s command for a Todo event is valid. I.e. has to contain \u003e\u003d 1 words.","lastModifiedDate":"2023-09-11"},{"lineNumber":166,"author":{"gitId":"sheryew"},"content":" * Throws DukeException if the user\u0027s command contains only 1 word (No Task Description).","lastModifiedDate":"2023-09-11"},{"lineNumber":167,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":168,"author":{"gitId":"sheryew"},"content":" * @param userCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-11"},{"lineNumber":169,"author":{"gitId":"sheryew"},"content":" * @return True if appropriate Todo command.","lastModifiedDate":"2023-09-11"},{"lineNumber":170,"author":{"gitId":"sheryew"},"content":" * @throws DukeException If the command is only one word. I.e. no task description.","lastModifiedDate":"2023-09-11"},{"lineNumber":171,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"sheryew"},"content":" public boolean isValidToDoCommand(String[] userCommand) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"sheryew"},"content":" if (userCommand.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"sheryew"},"content":" String error \u003d String.format(\"OOPS!!! The description of a %s cannot be empty.\", userCommand[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"sheryew"},"content":" throw new DukeException(error);","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"sheryew"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"sheryew"},"content":" * Returns string from delimiter to end of array. Array is from user commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"sheryew"},"content":" * @param userCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-11"},{"lineNumber":185,"author":{"gitId":"sheryew"},"content":" * @param delimiter Use-case would be \"/by\" for a deadline task.","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"sheryew"},"content":" * @return In Deadline task context, it should return the due date that the user has input. (String).","lastModifiedDate":"2023-09-11"},{"lineNumber":187,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"sheryew"},"content":" public String searchDeadline(String[] userCommand, String delimiter) {","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"sheryew"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"sheryew"},"content":" int index \u003d -1;","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c userCommand.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"sheryew"},"content":" if (delimiter.equals(userCommand[i])) {","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"sheryew"},"content":" index \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"sheryew"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"sheryew"},"content":" if (index !\u003d -1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"sheryew"},"content":" for (int i \u003d index + 1; i \u003c userCommand.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"sheryew"},"content":" result.append(userCommand[i]).append(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":200,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":201,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"sheryew"},"content":" return result.toString().trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"sheryew"},"content":" * Returns an Array of length 2 where the first index is the \"/from\" specification.","lastModifiedDate":"2023-09-11"},{"lineNumber":207,"author":{"gitId":"sheryew"},"content":" * Second index is the \"/to\" specification for Event Task.","lastModifiedDate":"2023-09-11"},{"lineNumber":208,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"sheryew"},"content":" * @param userCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-11"},{"lineNumber":210,"author":{"gitId":"sheryew"},"content":" * @param delimiter Use-case would be \"/from\" for an \"Event\" task.","lastModifiedDate":"2023-09-11"},{"lineNumber":211,"author":{"gitId":"sheryew"},"content":" * @param delimiter_2 Use-case would be \"/to\" for an \"Event\" task.","lastModifiedDate":"2023-09-11"},{"lineNumber":212,"author":{"gitId":"sheryew"},"content":" * @return In Event task context, it should return an array where array[0] is \"/from\" specs and array[1] is \"/to\" specs.","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"sheryew"},"content":" public String[] searchFromTo(String[] userCommand, String delimiter, String delimiter_2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"sheryew"},"content":" StringBuilder firstResult \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"sheryew"},"content":" StringBuilder secondResult \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":217,"author":{"gitId":"sheryew"},"content":" int index \u003d -1;","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"sheryew"},"content":" int index_2 \u003d -1;","lastModifiedDate":"2023-08-29"},{"lineNumber":219,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c userCommand.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":220,"author":{"gitId":"sheryew"},"content":" if (delimiter.equals(userCommand[i])) {","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"sheryew"},"content":" index \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"sheryew"},"content":" } else if (delimiter_2.equals(userCommand[i])) {","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"sheryew"},"content":" index_2 \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":225,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"sheryew"},"content":" if (index !\u003d -1 \u0026\u0026 index_2 !\u003d -1 \u0026\u0026 index \u003c index_2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":227,"author":{"gitId":"sheryew"},"content":" for (int i \u003d index + 1; i \u003c index_2; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":228,"author":{"gitId":"sheryew"},"content":" firstResult.append(userCommand[i]).append(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":230,"author":{"gitId":"sheryew"},"content":" for (int i \u003d index_2 + 1; i \u003c userCommand.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":231,"author":{"gitId":"sheryew"},"content":" secondResult.append(userCommand[i]).append(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":232,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":234,"author":{"gitId":"sheryew"},"content":" return new String[]{ firstResult.toString().trim(), secondResult.toString().trim() };","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":236,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":237,"author":{"gitId":"sheryew"},"content":" public boolean isValidDeadlineCommand(String[] userCommand) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"sheryew"},"content":" if (userCommand.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":239,"author":{"gitId":"sheryew"},"content":" throw new DukeException(String.format(\"OOPS!!! The description of a %s cannot be empty.\", userCommand[0]));","lastModifiedDate":"2023-08-29"},{"lineNumber":240,"author":{"gitId":"sheryew"},"content":" } else if (userCommand.length \u003c\u003d 2){","lastModifiedDate":"2023-08-29"},{"lineNumber":241,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"For deadlines, please give a gauge of when it is due\");","lastModifiedDate":"2023-08-29"},{"lineNumber":242,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":243,"author":{"gitId":"sheryew"},"content":" String result \u003d searchDeadline(userCommand, \"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"sheryew"},"content":" if (Objects.equals(result, \"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":245,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"For deadlines, please give a gauge of when it is due\");","lastModifiedDate":"2023-08-29"},{"lineNumber":246,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":247,"author":{"gitId":"sheryew"},"content":" String datePattern \u003d \"\\\\d{4}-\\\\d{2}-\\\\d{2}\";","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"sheryew"},"content":" String dateTimePattern \u003d \"\\\\d{4}-\\\\d{2}-\\\\d{2} \\\\d{4}\";","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"sheryew"},"content":" if (!result.matches(datePattern) \u0026\u0026 !result.matches(dateTimePattern)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please specify the deadline in the format \u0027yyyy-MM-dd\u0027 or \u0027yyyy-MM-dd HHmm\u0027.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":252,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":253,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":254,"author":{"gitId":"sheryew"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":255,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"sheryew"},"content":" public boolean isValidEventCommand(String[] userCommand) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"sheryew"},"content":" if (userCommand.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":259,"author":{"gitId":"sheryew"},"content":" throw new DukeException(String.format(\"OOPS!!! The description of a %s cannot be empty.\", userCommand[0]));","lastModifiedDate":"2023-08-29"},{"lineNumber":260,"author":{"gitId":"sheryew"},"content":" } else if (userCommand.length \u003c\u003d 2){","lastModifiedDate":"2023-08-29"},{"lineNumber":261,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"For Events, please provide a valid FROM/TO timeframe.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":262,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"sheryew"},"content":" String[] result \u003d searchFromTo(userCommand, \"/from\", \"/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"sheryew"},"content":" if (result[0].equals(\"\") || result[1].equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"For Events, please provide a valid FROM/TO timeframe.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":268,"author":{"gitId":"sheryew"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":269,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":270,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":271,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":272,"author":{"gitId":"sheryew"},"content":" * Checks if the user provided a valid Reminder command that comprises of at most length 2.","lastModifiedDate":"2023-09-12"},{"lineNumber":273,"author":{"gitId":"sheryew"},"content":" * Length 1 \u003d\u003d Reminder command.","lastModifiedDate":"2023-09-12"},{"lineNumber":274,"author":{"gitId":"sheryew"},"content":" * Length 2 \u003d\u003d Days ahead the user wants to view.","lastModifiedDate":"2023-09-12"},{"lineNumber":275,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":276,"author":{"gitId":"sheryew"},"content":" * @param userCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-12"},{"lineNumber":277,"author":{"gitId":"sheryew"},"content":" * @return Boolean. True if provided with appropriate command that follows the guidelines else False.","lastModifiedDate":"2023-09-12"},{"lineNumber":278,"author":{"gitId":"sheryew"},"content":" * @throws DukeException if user provides a non-digit as the 2nd command","lastModifiedDate":"2023-09-12"},{"lineNumber":279,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":280,"author":{"gitId":"sheryew"},"content":" public boolean isValidReminderCommand(String[] userCommand) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":281,"author":{"gitId":"sheryew"},"content":" if (userCommand.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":282,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please provide a digit representing the number of days ahead you wish to view deadlines for!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":283,"author":{"gitId":"sheryew"},"content":" } else if (userCommand.length \u003e 2) {","lastModifiedDate":"2023-09-12"},{"lineNumber":284,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please do not provide too much digits\");","lastModifiedDate":"2023-09-12"},{"lineNumber":285,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":286,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":287,"author":{"gitId":"sheryew"},"content":" int digit \u003d Integer.parseInt(userCommand[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":288,"author":{"gitId":"sheryew"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":289,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please enter a valid number.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":290,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":291,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":292,"author":{"gitId":"sheryew"},"content":" return true;","lastModifiedDate":"2023-09-12"},{"lineNumber":293,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":294,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":295,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":296,"author":{"gitId":"sheryew"},"content":" * Returns a boolean on whether the user input for \"Mark\"/\"Unmark\"/\"Delete\" is appropriate.","lastModifiedDate":"2023-09-11"},{"lineNumber":297,"author":{"gitId":"sheryew"},"content":" * I.e. a digit has to be provided and the digit has to be within the bounds of the length of list.","lastModifiedDate":"2023-09-11"},{"lineNumber":298,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":299,"author":{"gitId":"sheryew"},"content":" * @param userCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-11"},{"lineNumber":300,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object consisting of user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":301,"author":{"gitId":"sheryew"},"content":" * @return Boolean. True if provided with appropriate command that follows the guidelines else False.","lastModifiedDate":"2023-09-06"},{"lineNumber":302,"author":{"gitId":"sheryew"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-06"},{"lineNumber":303,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":304,"author":{"gitId":"sheryew"},"content":" public boolean validOthers(String[] userCommand, TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":305,"author":{"gitId":"sheryew"},"content":" if (userCommand.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":306,"author":{"gitId":"sheryew"},"content":" throw new DukeException(String.format(\"OOPS!!! Please provide an integer for a %s event.\", userCommand[0]));","lastModifiedDate":"2023-09-06"},{"lineNumber":307,"author":{"gitId":"sheryew"},"content":" } else if (userCommand.length \u003e 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":308,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"OOPS!!! Please only provide one digit!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":309,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":310,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":311,"author":{"gitId":"sheryew"},"content":" int digit \u003d Integer.parseInt(userCommand[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":312,"author":{"gitId":"sheryew"},"content":" if (digit \u003c\u003d 0 || digit \u003e tasks.userData.size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":313,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"The digit you provided is out of bounds!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":314,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":315,"author":{"gitId":"sheryew"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":316,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please enter a valid number.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":317,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":318,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":319,"author":{"gitId":"sheryew"},"content":" return true;","lastModifiedDate":"2023-09-06"},{"lineNumber":320,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":321,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":322,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":323,"author":{"gitId":"sheryew"},"content":" * Returns the string representation of the user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":324,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":325,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object that stores the user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":326,"author":{"gitId":"sheryew"},"content":" * @return String representation of user\u0027s tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":327,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":328,"author":{"gitId":"sheryew"},"content":" public String performValidListAction(TaskList tasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":329,"author":{"gitId":"sheryew"},"content":" StringBuilder taskDetails \u003d new StringBuilder();","lastModifiedDate":"2023-09-11"},{"lineNumber":330,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c tasks.userData.size(); i++) {","lastModifiedDate":"2023-09-11"},{"lineNumber":331,"author":{"gitId":"sheryew"},"content":" Task currentTask \u003d tasks.userData.get(i);","lastModifiedDate":"2023-09-11"},{"lineNumber":332,"author":{"gitId":"sheryew"},"content":" taskDetails.append(ui.displayTaskInList(i, currentTask)).append(\"\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":333,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":334,"author":{"gitId":"sheryew"},"content":" return taskDetails.toString();","lastModifiedDate":"2023-09-11"},{"lineNumber":335,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":336,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":337,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":338,"author":{"gitId":"sheryew"},"content":" * Returns the representation whenever a valid Mark/UnMark/Delete prompt is executed.","lastModifiedDate":"2023-09-11"},{"lineNumber":339,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":340,"author":{"gitId":"sheryew"},"content":" * @param othersIndex Magic Number as stated above. 4 for Mark, 5 for Unmark, 6 for Delete.","lastModifiedDate":"2023-09-11"},{"lineNumber":341,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object that stores the user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":342,"author":{"gitId":"sheryew"},"content":" * @return String response after successfully executing user\u0027s request.","lastModifiedDate":"2023-09-11"},{"lineNumber":343,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":344,"author":{"gitId":"sheryew"},"content":" public String performOthersAction(Integer othersIndex, TaskList tasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":345,"author":{"gitId":"sheryew"},"content":" int index \u003d Integer.parseInt(this.words[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":346,"author":{"gitId":"sheryew"},"content":" Task currentTask \u003d tasks.userData.get(index - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":347,"author":{"gitId":"sheryew"},"content":" if (othersIndex \u003d\u003d 4) {","lastModifiedDate":"2023-09-11"},{"lineNumber":348,"author":{"gitId":"sheryew"},"content":" currentTask.isDone \u003d true;","lastModifiedDate":"2023-09-11"},{"lineNumber":349,"author":{"gitId":"sheryew"},"content":" return ui.markTaskText(currentTask);","lastModifiedDate":"2023-09-11"},{"lineNumber":350,"author":{"gitId":"sheryew"},"content":" } else if (othersIndex \u003d\u003d 5) {","lastModifiedDate":"2023-09-11"},{"lineNumber":351,"author":{"gitId":"sheryew"},"content":" currentTask.isDone \u003d false;","lastModifiedDate":"2023-09-11"},{"lineNumber":352,"author":{"gitId":"sheryew"},"content":" return ui.unmarkTaskText(currentTask);","lastModifiedDate":"2023-09-11"},{"lineNumber":353,"author":{"gitId":"sheryew"},"content":" } else if (othersIndex \u003d\u003d 6) {","lastModifiedDate":"2023-09-11"},{"lineNumber":354,"author":{"gitId":"sheryew"},"content":" tasks.deleteTask(index - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":355,"author":{"gitId":"sheryew"},"content":" return ui.deleteTaskText(currentTask, tasks.userData.size());","lastModifiedDate":"2023-09-11"},{"lineNumber":356,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":357,"author":{"gitId":"sheryew"},"content":" return ui.textGenerator(\"Something went wrong!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":358,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":359,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":360,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":361,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":362,"author":{"gitId":"sheryew"},"content":" * Performs filtering based on a specific keyword and return all related tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":363,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":364,"author":{"gitId":"sheryew"},"content":" * @param keyword String in which user wants to filter the existing task on.","lastModifiedDate":"2023-09-11"},{"lineNumber":365,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object that stores the user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":366,"author":{"gitId":"sheryew"},"content":" * @return String representation of user\u0027s filtered tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":367,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":368,"author":{"gitId":"sheryew"},"content":" public String performFiltering(String keyword, TaskList tasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":369,"author":{"gitId":"sheryew"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d tasks.filter(keyword);","lastModifiedDate":"2023-09-11"},{"lineNumber":370,"author":{"gitId":"sheryew"},"content":" StringBuilder taskDetails \u003d new StringBuilder();","lastModifiedDate":"2023-09-11"},{"lineNumber":371,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c filteredTasks.size(); i++) {","lastModifiedDate":"2023-09-11"},{"lineNumber":372,"author":{"gitId":"sheryew"},"content":" Task currentTask \u003d filteredTasks.get(i);","lastModifiedDate":"2023-09-11"},{"lineNumber":373,"author":{"gitId":"sheryew"},"content":" taskDetails.append(ui.displayTaskInList(i, currentTask)).append(\"\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":374,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":375,"author":{"gitId":"sheryew"},"content":" return taskDetails.toString();","lastModifiedDate":"2023-09-11"},{"lineNumber":376,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":377,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"sheryew":377}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" protected String filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" protected ArrayList\u003cTask\u003e fileData;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" this.fileData \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" * Returns an ArrayList\u003cTask\u003e based on data represented in the Duke.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" * If the file does not exist, it creates a new directory and new file.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" * @param filePath File Path for Duke.txt","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" * @return ArrayList\u003cTask\u003e based on data parsed from the Duke.txt","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" * @throws DukeException If Deadline object is not instantiated properly","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" * @throws IOException If file is not located or not available","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" public ArrayList\u003cTask\u003e load(String filePath) throws DukeException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" String[] parts \u003d s.nextLine().split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" performAddTask(fileData, parts);","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" return fileData;","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" * Creates a new Task for every instance in the txt file and add to an Arraylist","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" * @param fileData ArrayList\u003cTask\u003e where each Task is an instance in the txt file","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" * @param parts Description of a particular task object","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" * @throws DukeException associated with deadline","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" public void performAddTask(ArrayList\u003cTask\u003e fileData, String[] parts) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" String event \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" int mark \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" boolean isCompleted \u003d mark \u003d\u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" if (Objects.equals(event, \"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" Task newTask \u003d new Todo(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" newTask.isDone \u003d isCompleted;","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":" fileData.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(event, \"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"sheryew"},"content":" Task newTask \u003d new Deadline(description, parts[3]);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"sheryew"},"content":" newTask.isDone \u003d isCompleted;","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"sheryew"},"content":" fileData.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(event, \"E\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"sheryew"},"content":" Task newTask \u003d new Event(description, parts[3], parts[4]);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"sheryew"},"content":" newTask.isDone \u003d isCompleted;","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"sheryew"},"content":" fileData.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"sheryew"},"content":" public void save(String filePath, ArrayList\u003cTask\u003e newTasks) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"sheryew"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c newTasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"sheryew"},"content":" Task newTask \u003d newTasks.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"sheryew"},"content":" int isDoneValue \u003d newTask.isDone ? 1 : 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"sheryew"},"content":" if (Objects.equals(newTask.tag, \"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"sheryew"},"content":" fw.write(String.format(\"%s|%d|%s%n\", newTask.getTag(), isDoneValue, newTask.getDescription()));","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(newTask.tag, \"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"sheryew"},"content":" Deadline deadlineTask \u003d (Deadline) newTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"sheryew"},"content":" fw.write(String.format(\"%s|%d|%s|%s%n\", deadlineTask.getTag(), isDoneValue, deadlineTask.getDescription(), deadlineTask.getDeadline()));","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(newTask.tag, \"E\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"sheryew"},"content":" Event eventTask \u003d (Event) newTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"sheryew"},"content":" fw.write(String.format(\"%s|%d|%s|%s|%s%n\", eventTask.getTag(), isDoneValue, eventTask.getDescription(), eventTask.getFrom(), eventTask.getTo()));","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"sheryew"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"sheryew"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"sheryew"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"sheryew":95}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":" protected String tag;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" * Returns a Task object if provided with task description and associated tag (\"T\"/\"D\"/\"E\")","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" * @param description Task description (String)","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" * @param tag \"E\" for Event, \"T\" for Todo, \"D\" for Deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" public Task(String description, String tag) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" public String getTag() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" return this.tag;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" return this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.getDescription();","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"sheryew":35}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":" public ArrayList\u003cTask\u003e userData;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" public TaskList(ArrayList\u003cTask\u003e userData) {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" this.userData \u003d userData;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" * Appends newly created Task to the current ArrayList\u003cTask\u003e of the user.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" * @param newTask Task Object. Could be Todo, Deadline or Event.","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" public void addTask(Task newTask) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" this.userData.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" * Deletes a particular Task from the current ArrayList\u003cTask\u003e based on given index.","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" * @param referenceIndex position of the Task within the ArrayList.","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" public void deleteTask(int referenceIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" this.userData.remove(referenceIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" * Returns an Arraylist containing Task Objects that contain a specific keyword.","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" * @param keyword String representation of the filtering parameter.","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" * @return Arraylist containing filtered Task Objects","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" public ArrayList\u003cTask\u003e filter(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" ArrayList\u003cTask\u003e filteredTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c userData.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" Task task \u003d userData.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" String taskDescription \u003d task.getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" if (taskDescription.contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" filteredTask.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" return filteredTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"sheryew":47}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":" * Returns an Todo Task Object","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" * @param description Task Description (String)","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" super(description, \"T\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"sheryew":17}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" public Ui() {};","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":" public String textGenerator(String answer) {","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" return answer;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" * Returns a default response when user attempts to add a new Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" * @param newT Task Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" * @param len Integer Object representing how many existing tasks the user has (including the newly added task)","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" * @return String Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" public String addTaskText(Task newT, int len) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + newT.toString() + \"\\n\" + \"Now you have \" + len + \" tasks in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" * Returns a default response when user wants to see all the existing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" * @param digit Integer Object. Index of the task in the ArrayList","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" * @param newT Task Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" * @return String Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" public String displayTaskInList(int digit, Task newT) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" return digit + 1 + \".\" + newT.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" * Returns a default response when user wants to mark a particular task.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" * @param newT Task Object. A task that user wants to mark.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" * @return String Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" public String markTaskText(Task newT) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + newT.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" * Returns a default response when user wants to unmark a particular task.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" * @param newT Task Object. A task that user wants to unmark.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":" * @return String Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" public String unmarkTaskText(Task newT) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + newT.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" * Returns a default response when user wants to delete a particular task.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" * @param newT Task Object. A task that user wants to unmark.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" * @param digit Integer Object. Represents the number of user\u0027s existing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" * @return String Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" public String deleteTaskText(Task newT, int digit) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + newT.toString() + \"\\n\" + \"Now you have \" + digit + \" tasks in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"sheryew":62}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.control.TextArea?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" 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":10,"author":{"gitId":"sheryew"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" \u003cTextArea fx:id\u003d\"dialog\" text\u003d\"Your Text Here\" wrapText\u003d\"true\" editable\u003d\"false\" focusTraversable\u003d\"false\" style\u003d\"-fx-text-fill: black; -fx-control-inner-background: lightgreen;\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" \u003cInsets right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" \u003cFont name\u003d\"Georgia\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" \u003c/TextArea\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":24}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"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\"MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"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-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"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-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"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-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" public void parserTDTest() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" assertEquals(\"Watch Youtube\", new Parser(\"\").getTaskDescription(new String[]{\"todo\", \"Watch\", \"Youtube\"}));","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" public void parserSearcherTest() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" assertEquals(\"\", new Parser(\"\").searcher(new String[]{\"hello\", \"world\", \"-\"}, \"/to\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"sheryew":17}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" public void taskStatus() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" assertEquals(\" \", new Todo(\"eat\").getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" public void taskRepresentation() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" assertEquals( \"[D][ ] return books (by: Aug 8 2023)\", new Deadline(\"return books\", \"2023-08-08\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"sheryew":16}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"sheryew":5}},{"path":"text-ui-test/output.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"todo hello","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"sheryew":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":"sheryew"},"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":{"sheryew":1,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"sheryew"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"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":"sheryew"},"content":" mainClass.set(\"Launcher\")","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"sheryew":16,"-":38}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"## War Room","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"\u003e \"Your mind is for having ideas, not holding them.\" - David Allen [(Source)](https://dansilvestre.com/productivity-quotes)","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"War Room frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"- text-based","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"- easy to learn","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"- ~~FAST~~ SUPER FAST to use","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"All you need to do is,","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":"1. download it from [here]().","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"2. double-click it.","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":"4. let it manage your tasks for you 😄 ","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":"And it is **FREE**!","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":"If you are a Java programmer, you can use it to practice Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":"```java","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":"public class Main {","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":"## Features \u0026 User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":"\u003e \"The term task signifies either a Todo or Deadline or Event.\" - Sher Yew.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":"### Overview","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":"- [x] Managing Todos","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":"- [x] Managing Deadlines","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":"- [x] Managing Events","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":"- [x] Searching Tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":"- [x] Searching Tasks\u0027 Deadlines","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":"- [x] Beautiful GUI","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":"### Viewing Feature (UG)","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":"1. List","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" - To view the user\u0027s current tasks, try out this command ```list```.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":"### Managing Features (UG)","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":"1. Todo","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" - To add a new todo that you would like to track, try this command ```todo task_name```.","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" ","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":"2. Deadlines","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" - To add a new deadline that you would like to track, try this command ```deadline deadline_name /by YYYY-MM-DD```.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" - Deadlines can also be tracked in hours and minutes, try out this command ```deadline deadline_name /by YYYY-MM-DD HHMM```.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" ","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":"3. Events","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" - To add a new event that you would like to track, try out this command ```event event_name /from xxx /to yyy```.","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" ","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":"4. Deletion","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" - To delete an entry, try out this command ```delete index_in_list```.","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" ","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":"5. Mark","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" - To signify the completion of a task, try out this command ```mark index_in_list```.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" ","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":"6. Unmark","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" - To \"reverse\" the completion of a task, try out this command ```unmark index_in_list```.","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" ","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":"### Searching Features (UG)","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":"1. Filtering via Task Description","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"sheryew"},"content":" - To view all tasks that possess a particular task description, try out this command ```find task_description```.","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"sheryew"},"content":" ","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"sheryew"},"content":"2. Filtering via Deadlines","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"sheryew"},"content":" - This feature only works for **deadlines**.","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"sheryew"},"content":" - To view all \"deadlines\" that have a deadline within X days, try out this command ```reminder x_number_of_days```.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"sheryew"},"content":"### UI (UG)","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"sheryew"},"content":"A task is generally represented as **\"[][] task_description\"** in the UI.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"sheryew"},"content":"For the first bracket, the character would correspond to: ","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"sheryew"},"content":"- **T** for todo","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"sheryew"},"content":"- **D** for deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"sheryew"},"content":"- **E** for event.","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"sheryew"},"content":"For the second bracket, the character would correspond to:","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"sheryew"},"content":"- **X** for marked (Completed Task)","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"sheryew"},"content":"- **\"\"** for unmarked (Uncompleted Task)","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"sheryew":72,"-":14}},{"path":"src/main/data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"D|0|play fifa|2023-09-18","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"D|0|iron clothes|2023-09-19","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"D|0|cs2107 assignment|2023-09-30","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"T|0|CS3210 Quiz","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"sheryew":4}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"import javafx.scene.control.TextArea;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" private TextArea dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" * Instantiates a DialogBox object that will be displayed either when the user prompts or when Duke replies","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" * @param text String Object. Either user\u0027s prompt or DUKE\u0027s response.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" * @param img Image Object that is generated from providing a reference link to the /resources/Images folder","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" TextArea dialogTextArea \u003d (TextArea) tmp.get(1);","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" dialogTextArea.setPadding(new Insets(0, 0, 0, 10));","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" dialogTextArea.setStyle(\"-fx-control-inner-background: lightblue;\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" * Generates a default DialogBox GUI whenever user\u0027s prompts DUKE","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":" * @param text String Object. User\u0027s prompt to the DUKE chatbot.","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"sheryew"},"content":" * @param img Image Object. User\u0027s default picture.","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"sheryew"},"content":" * @return DialogBox Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"sheryew"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"sheryew"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"sheryew"},"content":" * Generates a default DialogBox GUI whenever DUKE replies the user\u0027s prompt.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"sheryew"},"content":" * Compared to the user\u0027s DialogBox, DUKE\u0027s DialogBox is flipped to showcase contrast in response.","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"sheryew"},"content":" * @param text String Object. DUKE\u0027s response.","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"sheryew"},"content":" * @param img Image Object. Duke\u0027s default picture.","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"sheryew"},"content":" * @return ialogBox Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"sheryew"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"sheryew"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"sheryew"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"sheryew"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":84}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":10}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" public Main() throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" stage.setTitle(\"The War Room\");","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":34}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" private Duke duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/Images/DaUser.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/Images/war_room.jpeg\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" * Returns two DialogBox GUI objects during the initialisation of DUKE interface.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" DialogBox.getDukeDialog(\"Hello! I\u0027m War Room.\", dukeImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" DialogBox.getDukeDialog(\"What can I do for you?\", dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" * Initialise duke object with an instance of a DUKE object","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" * @param d Duke object that is passed from Main.java","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":62}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"import java.time.temporal.Temporal;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" protected Temporal by;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" protected String deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" * Returns a Deadline object if provided with description (String) and the appropriate string format for deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" * If the deadline provided is not of (YYYY-MM-DD or YYYY-MM-DD HHMM) format, Object will not be created.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" * @param description description of task","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" * @param deadline due date for tasks. Has to be represented in yyyy-mm-dd or yyyy-mm-dd hhmm format","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" * @throws DukeException if format is provided wrongly, Deadline Object cannot be instantiated.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" public Deadline(String description, String deadline) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" super(description, \"D\");","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" this.by \u003d processDateTime(this.deadline);","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" public String getDeadline() {","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" return this.deadline;","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" * Returns an appropriate LocalDateTime or LocalDate representation based on the user\u0027s provided datetime","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" * @param deadline String which user use to represent one\u0027s deadline [Either in YYY-MM-DD or YYYY-MM-DD HHMM format]","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" * @return Temporal Object containing the formatted LocalDateTime or LocalDate object","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" * @throws DukeException in the event deadline is not provided in the right format","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" public Temporal processDateTime(String deadline) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" if (deadline.contains(\" \")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" return LocalDateTime.parse(deadline, dateTimeFormatter);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" return LocalDate.parse(deadline, dateFormatter);","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please check that the dates/times you provided are correct!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" * Returns MMM-D-YYYY representation for the deadline assuming the deadline provided is of LocalDate/LocalDateTime Object.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" * If the deadline isn\u0027t of LocalDate/LocalDateTime, it throws an UnsupportedOperationException.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" * @return MMM-D-YYYY representation from LocalDate or LocalDateTime object","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" * @throws UnsupportedOperationException If object is not of LocalDate or LocalDateTime","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" public String generateNewDateString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" if (this.by instanceof LocalDate) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" return ((LocalDate) this.by).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":" } else if (this.by instanceof LocalDateTime) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":" return ((LocalDateTime) this.by).format(DateTimeFormatter.ofPattern(\"MMM d yyyy, ha\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"sheryew"},"content":" throw new UnsupportedOperationException(\"Unsupported Temporal type\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"sheryew"},"content":" * Checks if the current deadline is between the given LocalDateTime and X days after it.","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"sheryew"},"content":" * @param dateTime The LocalDateTime to start the range.","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"sheryew"},"content":" * @return true if the deadline is within the range, false otherwise.","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"sheryew"},"content":" public boolean withinDeadlineXDays(LocalDateTime dateTime, Integer daysAfter) {","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"sheryew"},"content":" LocalDateTime deadlineTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"sheryew"},"content":" if (this.by instanceof LocalDate) {","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"sheryew"},"content":" deadlineTime \u003d ((LocalDate) this.by).atTime(23, 59, 59);","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"sheryew"},"content":" } else if (this.by instanceof LocalDateTime) {","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"sheryew"},"content":" deadlineTime \u003d (LocalDateTime) this.by;","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"sheryew"},"content":" throw new UnsupportedOperationException(\"Unsupported Temporal type\");","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"sheryew"},"content":" LocalDateTime sevenDaysAfter \u003d dateTime.plusDays(daysAfter);","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"sheryew"},"content":" boolean isAfterToday \u003d deadlineTime.isEqual(dateTime) || deadlineTime.isAfter(dateTime);","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"sheryew"},"content":" boolean isBeforeDeadline \u003d deadlineTime.isBefore(sevenDaysAfter);","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"sheryew"},"content":" return isAfterToday \u0026\u0026 isBeforeDeadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"sheryew"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"sheryew"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"sheryew"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.generateNewDateString() + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"sheryew":94}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" private String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" * Returns a Duke Object which contains essential information for the functionality of this chatbot.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" * TaskList Object is instantiated to keep account of current tasks available for user (ArrayList)","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" * Ui Object is instantiated to return appropriate UI prompts back to user","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" * @param filePath File Path for Duke.txt","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" * @throws IOException If file is not located or not available","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" public Duke(String filePath) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" tasks \u003d new TaskList(storage.load(storage.filePath));","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" * Instantiates a Duke Object which contains essential information for the functionality of the chatbot","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" * Generates a TaskList object based on the file located at \"src/main/data/duke.txt\"","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" * @throws IOException If file is not located or not available","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" public Duke() throws IOException {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" storage \u003d new Storage(\"src/main/data/duke.txt\");","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" this.filePath \u003d storage.filePath;","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" tasks \u003d new TaskList(storage.load(storage.filePath));","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" tasks \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" * Returns a String object based on user\u0027s command to the DUKE chatbot","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" * Instantiates a Parser object that is responsible for the handling of user\u0027s command","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" * @param user_input String Object that is from what the user\u0027s types","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" * @return String Object AKA DUKE\u0027s response","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" public String getResponse(String user_input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" Parser parser \u003d new Parser(user_input);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" String answer \u003d parser.validateParser(tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" storage.save(filePath, tasks.userData);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" return answer;","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"sheryew":62,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"sheryew":7}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" protected String from;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":" protected String to;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" * Returns an Event Task Object","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" * @param description Task Description (String)","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" * @param from User specifications on when the Event Task begins (String)","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" * @param to User specifications on when the Event Task ends (String)","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" super(description, \"E\");","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" public String getFrom() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" return this.from;","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" public String getTo() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" return this.to;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"sheryew":32}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" protected String[] words;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" private Ui ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" public Parser(String command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" this.words \u003d command.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" private static final Integer TODO_NUMBER \u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" private static final Integer DEADLINE_NUMBER \u003d 2;","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" private static final Integer EVENT_NUMBER \u003d 3;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" private static final Integer MARK_NUMBER \u003d 4;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" private static final Integer UNMARK_NUMBER \u003d 5;","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" private static final Integer DELETE_NUMBER \u003d 6;","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" * Analyses user\u0027s commands and performs the appropriate actions.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object consisting of user\u0027s existing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" * @return String generated from the UI class. Aids in generation of DialogBox.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" * @throws Exception if the command is Bye.","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" public String validateParser(TaskList tasks) throws Exception {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" String action \u003d this.words[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" String taskDescription \u003d getTaskDescription(this.words);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" if (Arrays.asList(\"todo\", \"deadline\", \"event\", \"list\", \"reminder\").contains(action)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" return handleTaskCreationCommands(action, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"mark\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" if (validOthers(this.words, tasks)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" return performOthersAction(MARK_NUMBER, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"unmark\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" if (validOthers(this.words, tasks)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" return performOthersAction(UNMARK_NUMBER, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"delete\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":" if (validOthers(this.words, tasks)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" return performOthersAction(DELETE_NUMBER, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" assert(!Objects.equals(taskDescription, \"\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" return performFiltering(taskDescription, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"bye\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" throw new Exception(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" } catch (DukeException DE) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" return DE.getMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" return \"Something went wrong!\";","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"sheryew"},"content":" * Returns task description for various Task types (Todo/Deadline/Event).","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"sheryew"},"content":" * @param arrUserCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"sheryew"},"content":" * @return Task description for a particular Task (String).","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"sheryew"},"content":" public String getTaskDescription(String[] arrUserCommand) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"sheryew"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 1; i \u003c arrUserCommand.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"sheryew"},"content":" if (\"/by\".equals(arrUserCommand[i]) || \"/from\".equals(arrUserCommand[i])) {","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"sheryew"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"sheryew"},"content":" result.append(\" \").append(arrUserCommand[i]);","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"sheryew"},"content":" return result.toString().trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"sheryew"},"content":" * Analyses user\u0027s commands and performs the appropriate actions.","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"sheryew"},"content":" * This function only works for \"todo\", \"deadline\", \"Event\".","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"sheryew"},"content":" * Refactoring due to Original Main function being too long.","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"sheryew"},"content":" * @param action String representation [\"Todo\", \"deadline\", \"Event\"].","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object consisting of user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"sheryew"},"content":" * @return String generated from the UI class. Aids in generation of DialogBox.","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"sheryew"},"content":" * @throws DukeException if not appropriate action.","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"sheryew"},"content":" private String handleTaskCreationCommands(String action, TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"sheryew"},"content":" String taskDescription \u003d getTaskDescription(this.words);","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"sheryew"},"content":" if (Objects.equals(action, \"todo\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"sheryew"},"content":" if (isValidToDoCommand(this.words)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"sheryew"},"content":" return performValidTaskAction(TODO_NUMBER,taskDescription, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"deadline\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"sheryew"},"content":" if (isValidDeadlineCommand(this.words)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"sheryew"},"content":" return performValidTaskAction(DEADLINE_NUMBER, taskDescription, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"event\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"sheryew"},"content":" if (isValidEventCommand(this.words)) {","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"sheryew"},"content":" return performValidTaskAction(EVENT_NUMBER, taskDescription, tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"list\")) {","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"sheryew"},"content":" assert(this.words.length \u003d\u003d 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"sheryew"},"content":" return performValidListAction(tasks);","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(action, \"reminder\")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"sheryew"},"content":" if (isValidReminderCommand(this.words)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"sheryew"},"content":" return performValidReminderAction(tasks);","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Invalid\");","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":114,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":115,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":116,"author":{"gitId":"sheryew"},"content":" * Returns the appropriate string response as well as adding new task to pre-existing TaskList.","lastModifiedDate":"2023-09-11"},{"lineNumber":117,"author":{"gitId":"sheryew"},"content":" * Works for all the Task Object [Todo, Deadline, Event].","lastModifiedDate":"2023-09-11"},{"lineNumber":118,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":119,"author":{"gitId":"sheryew"},"content":" * @param taskNumber Magic Number as stated above. 1 for Todo, 2 for Deadline, 3 for Event.","lastModifiedDate":"2023-09-11"},{"lineNumber":120,"author":{"gitId":"sheryew"},"content":" * @param taskDescription String description of the particular task.","lastModifiedDate":"2023-09-11"},{"lineNumber":121,"author":{"gitId":"sheryew"},"content":" * @param tasks Pre-existing TaskList object containing the user\u0027s tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"sheryew"},"content":" * @return String response after successfully adding a new task.","lastModifiedDate":"2023-09-11"},{"lineNumber":123,"author":{"gitId":"sheryew"},"content":" * @throws DukeException If the magic digit is not stated in the conditional flow.","lastModifiedDate":"2023-09-11"},{"lineNumber":124,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":125,"author":{"gitId":"sheryew"},"content":" public String performValidTaskAction(Integer taskNumber, String taskDescription, TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":126,"author":{"gitId":"sheryew"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-11"},{"lineNumber":127,"author":{"gitId":"sheryew"},"content":" if (taskNumber \u003d\u003d 1) {","lastModifiedDate":"2023-09-11"},{"lineNumber":128,"author":{"gitId":"sheryew"},"content":" newTask \u003d new Todo(taskDescription);","lastModifiedDate":"2023-09-11"},{"lineNumber":129,"author":{"gitId":"sheryew"},"content":" } else if (taskNumber \u003d\u003d 2) {","lastModifiedDate":"2023-09-11"},{"lineNumber":130,"author":{"gitId":"sheryew"},"content":" newTask \u003d new Deadline(taskDescription, searchDeadline(this.words, \"/by\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":131,"author":{"gitId":"sheryew"},"content":" } else if (taskNumber \u003d\u003d 3) {","lastModifiedDate":"2023-09-11"},{"lineNumber":132,"author":{"gitId":"sheryew"},"content":" String[] fromTo \u003d searchFromTo(this.words, \"/from\", \"/to\");","lastModifiedDate":"2023-09-11"},{"lineNumber":133,"author":{"gitId":"sheryew"},"content":" newTask \u003d new Event(taskDescription, fromTo[0], fromTo[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":134,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":135,"author":{"gitId":"sheryew"},"content":" if (newTask \u003d\u003d null) {","lastModifiedDate":"2023-09-11"},{"lineNumber":136,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Something went wrong!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":137,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":138,"author":{"gitId":"sheryew"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-11"},{"lineNumber":139,"author":{"gitId":"sheryew"},"content":" return ui.addTaskText(newTask, tasks.userData.size());","lastModifiedDate":"2023-09-11"},{"lineNumber":140,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":141,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":142,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"sheryew"},"content":" * Returns String representation of deadline tasks that are due within x number of days","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"sheryew"},"content":" * @param tasks Pre-existing TaskList object containing the user\u0027s tasks.","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"sheryew"},"content":" * @return String","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":148,"author":{"gitId":"sheryew"},"content":" public String performValidReminderAction(TaskList tasks) {","lastModifiedDate":"2023-09-12"},{"lineNumber":149,"author":{"gitId":"sheryew"},"content":" LocalDateTime currentTime \u003d LocalDateTime.now();","lastModifiedDate":"2023-09-12"},{"lineNumber":150,"author":{"gitId":"sheryew"},"content":" StringBuilder taskDetails \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":151,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c tasks.userData.size(); i++) {","lastModifiedDate":"2023-09-12"},{"lineNumber":152,"author":{"gitId":"sheryew"},"content":" Task currentTask \u003d tasks.userData.get(i);","lastModifiedDate":"2023-09-12"},{"lineNumber":153,"author":{"gitId":"sheryew"},"content":" if (Objects.equals(currentTask.tag, \"D\")) {","lastModifiedDate":"2023-09-12"},{"lineNumber":154,"author":{"gitId":"sheryew"},"content":" Deadline task \u003d (Deadline) currentTask;","lastModifiedDate":"2023-09-12"},{"lineNumber":155,"author":{"gitId":"sheryew"},"content":" Integer daysAfter \u003d Integer.parseInt(this.words[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":156,"author":{"gitId":"sheryew"},"content":" if (task.withinDeadlineXDays(currentTime, daysAfter)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":157,"author":{"gitId":"sheryew"},"content":" taskDetails.append(ui.displayTaskInList(i, task)).append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":158,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":159,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":160,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":161,"author":{"gitId":"sheryew"},"content":" return taskDetails.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":162,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":163,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":164,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":165,"author":{"gitId":"sheryew"},"content":" * Returns True if the user\u0027s command for a Todo event is valid. I.e. has to contain \u003e\u003d 1 words.","lastModifiedDate":"2023-09-11"},{"lineNumber":166,"author":{"gitId":"sheryew"},"content":" * Throws DukeException if the user\u0027s command contains only 1 word (No Task Description).","lastModifiedDate":"2023-09-11"},{"lineNumber":167,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":168,"author":{"gitId":"sheryew"},"content":" * @param userCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-11"},{"lineNumber":169,"author":{"gitId":"sheryew"},"content":" * @return True if appropriate Todo command.","lastModifiedDate":"2023-09-11"},{"lineNumber":170,"author":{"gitId":"sheryew"},"content":" * @throws DukeException If the command is only one word. I.e. no task description.","lastModifiedDate":"2023-09-11"},{"lineNumber":171,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"sheryew"},"content":" public boolean isValidToDoCommand(String[] userCommand) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"sheryew"},"content":" if (userCommand.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":174,"author":{"gitId":"sheryew"},"content":" String error \u003d String.format(\"OOPS!!! The description of a %s cannot be empty.\", userCommand[0]);","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"sheryew"},"content":" throw new DukeException(error);","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":177,"author":{"gitId":"sheryew"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":178,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":179,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":180,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":181,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"sheryew"},"content":" * Returns string from delimiter to end of array. Array is from user commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"sheryew"},"content":" * @param userCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-11"},{"lineNumber":185,"author":{"gitId":"sheryew"},"content":" * @param delimiter Use-case would be \"/by\" for a deadline task.","lastModifiedDate":"2023-09-11"},{"lineNumber":186,"author":{"gitId":"sheryew"},"content":" * @return In Deadline task context, it should return the due date that the user has input. (String).","lastModifiedDate":"2023-09-11"},{"lineNumber":187,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"sheryew"},"content":" public String searchDeadline(String[] userCommand, String delimiter) {","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"sheryew"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":190,"author":{"gitId":"sheryew"},"content":" int index \u003d -1;","lastModifiedDate":"2023-08-29"},{"lineNumber":191,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c userCommand.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"sheryew"},"content":" if (delimiter.equals(userCommand[i])) {","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"sheryew"},"content":" index \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"sheryew"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":196,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":197,"author":{"gitId":"sheryew"},"content":" if (index !\u003d -1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":198,"author":{"gitId":"sheryew"},"content":" for (int i \u003d index + 1; i \u003c userCommand.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":199,"author":{"gitId":"sheryew"},"content":" result.append(userCommand[i]).append(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":200,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":201,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":202,"author":{"gitId":"sheryew"},"content":" return result.toString().trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":203,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":204,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":205,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"sheryew"},"content":" * Returns an Array of length 2 where the first index is the \"/from\" specification.","lastModifiedDate":"2023-09-11"},{"lineNumber":207,"author":{"gitId":"sheryew"},"content":" * Second index is the \"/to\" specification for Event Task.","lastModifiedDate":"2023-09-11"},{"lineNumber":208,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"sheryew"},"content":" * @param userCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-11"},{"lineNumber":210,"author":{"gitId":"sheryew"},"content":" * @param delimiter Use-case would be \"/from\" for an \"Event\" task.","lastModifiedDate":"2023-09-11"},{"lineNumber":211,"author":{"gitId":"sheryew"},"content":" * @param delimiter_2 Use-case would be \"/to\" for an \"Event\" task.","lastModifiedDate":"2023-09-11"},{"lineNumber":212,"author":{"gitId":"sheryew"},"content":" * @return In Event task context, it should return an array where array[0] is \"/from\" specs and array[1] is \"/to\" specs.","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"sheryew"},"content":" public String[] searchFromTo(String[] userCommand, String delimiter, String delimiter_2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"sheryew"},"content":" StringBuilder firstResult \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":216,"author":{"gitId":"sheryew"},"content":" StringBuilder secondResult \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":217,"author":{"gitId":"sheryew"},"content":" int index \u003d -1;","lastModifiedDate":"2023-08-29"},{"lineNumber":218,"author":{"gitId":"sheryew"},"content":" int index_2 \u003d -1;","lastModifiedDate":"2023-08-29"},{"lineNumber":219,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c userCommand.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":220,"author":{"gitId":"sheryew"},"content":" if (delimiter.equals(userCommand[i])) {","lastModifiedDate":"2023-08-29"},{"lineNumber":221,"author":{"gitId":"sheryew"},"content":" index \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":222,"author":{"gitId":"sheryew"},"content":" } else if (delimiter_2.equals(userCommand[i])) {","lastModifiedDate":"2023-08-29"},{"lineNumber":223,"author":{"gitId":"sheryew"},"content":" index_2 \u003d i;","lastModifiedDate":"2023-08-29"},{"lineNumber":224,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":225,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":226,"author":{"gitId":"sheryew"},"content":" if (index !\u003d -1 \u0026\u0026 index_2 !\u003d -1 \u0026\u0026 index \u003c index_2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":227,"author":{"gitId":"sheryew"},"content":" for (int i \u003d index + 1; i \u003c index_2; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":228,"author":{"gitId":"sheryew"},"content":" firstResult.append(userCommand[i]).append(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":229,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":230,"author":{"gitId":"sheryew"},"content":" for (int i \u003d index_2 + 1; i \u003c userCommand.length; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":231,"author":{"gitId":"sheryew"},"content":" secondResult.append(userCommand[i]).append(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":232,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":233,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":234,"author":{"gitId":"sheryew"},"content":" return new String[]{ firstResult.toString().trim(), secondResult.toString().trim() };","lastModifiedDate":"2023-08-29"},{"lineNumber":235,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":236,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":237,"author":{"gitId":"sheryew"},"content":" public boolean isValidDeadlineCommand(String[] userCommand) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"sheryew"},"content":" if (userCommand.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":239,"author":{"gitId":"sheryew"},"content":" throw new DukeException(String.format(\"OOPS!!! The description of a %s cannot be empty.\", userCommand[0]));","lastModifiedDate":"2023-08-29"},{"lineNumber":240,"author":{"gitId":"sheryew"},"content":" } else if (userCommand.length \u003c\u003d 2){","lastModifiedDate":"2023-08-29"},{"lineNumber":241,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"For deadlines, please give a gauge of when it is due\");","lastModifiedDate":"2023-08-29"},{"lineNumber":242,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":243,"author":{"gitId":"sheryew"},"content":" String result \u003d searchDeadline(userCommand, \"/by\");","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"sheryew"},"content":" if (Objects.equals(result, \"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":245,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"For deadlines, please give a gauge of when it is due\");","lastModifiedDate":"2023-08-29"},{"lineNumber":246,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":247,"author":{"gitId":"sheryew"},"content":" String datePattern \u003d \"\\\\d{4}-\\\\d{2}-\\\\d{2}\";","lastModifiedDate":"2023-08-29"},{"lineNumber":248,"author":{"gitId":"sheryew"},"content":" String dateTimePattern \u003d \"\\\\d{4}-\\\\d{2}-\\\\d{2} \\\\d{4}\";","lastModifiedDate":"2023-08-29"},{"lineNumber":249,"author":{"gitId":"sheryew"},"content":" if (!result.matches(datePattern) \u0026\u0026 !result.matches(dateTimePattern)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":250,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please specify the deadline in the format \u0027yyyy-MM-dd\u0027 or \u0027yyyy-MM-dd HHmm\u0027.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":251,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":252,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":253,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":254,"author":{"gitId":"sheryew"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":255,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":256,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":257,"author":{"gitId":"sheryew"},"content":" public boolean isValidEventCommand(String[] userCommand) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"sheryew"},"content":" if (userCommand.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":259,"author":{"gitId":"sheryew"},"content":" throw new DukeException(String.format(\"OOPS!!! The description of a %s cannot be empty.\", userCommand[0]));","lastModifiedDate":"2023-08-29"},{"lineNumber":260,"author":{"gitId":"sheryew"},"content":" } else if (userCommand.length \u003c\u003d 2){","lastModifiedDate":"2023-08-29"},{"lineNumber":261,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"For Events, please provide a valid FROM/TO timeframe.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":262,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":263,"author":{"gitId":"sheryew"},"content":" String[] result \u003d searchFromTo(userCommand, \"/from\", \"/to\");","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"sheryew"},"content":" if (result[0].equals(\"\") || result[1].equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":265,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"For Events, please provide a valid FROM/TO timeframe.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":266,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":267,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":268,"author":{"gitId":"sheryew"},"content":" return true;","lastModifiedDate":"2023-08-29"},{"lineNumber":269,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":270,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":271,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":272,"author":{"gitId":"sheryew"},"content":" * Checks if the user provided a valid Reminder command that comprises of at most length 2.","lastModifiedDate":"2023-09-12"},{"lineNumber":273,"author":{"gitId":"sheryew"},"content":" * Length 1 \u003d\u003d Reminder command.","lastModifiedDate":"2023-09-12"},{"lineNumber":274,"author":{"gitId":"sheryew"},"content":" * Length 2 \u003d\u003d Days ahead the user wants to view.","lastModifiedDate":"2023-09-12"},{"lineNumber":275,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-12"},{"lineNumber":276,"author":{"gitId":"sheryew"},"content":" * @param userCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-12"},{"lineNumber":277,"author":{"gitId":"sheryew"},"content":" * @return Boolean. True if provided with appropriate command that follows the guidelines else False.","lastModifiedDate":"2023-09-12"},{"lineNumber":278,"author":{"gitId":"sheryew"},"content":" * @throws DukeException if user provides a non-digit as the 2nd command","lastModifiedDate":"2023-09-12"},{"lineNumber":279,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":280,"author":{"gitId":"sheryew"},"content":" public boolean isValidReminderCommand(String[] userCommand) throws DukeException {","lastModifiedDate":"2023-09-12"},{"lineNumber":281,"author":{"gitId":"sheryew"},"content":" if (userCommand.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":282,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please provide a digit representing the number of days ahead you wish to view deadlines for!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":283,"author":{"gitId":"sheryew"},"content":" } else if (userCommand.length \u003e 2) {","lastModifiedDate":"2023-09-12"},{"lineNumber":284,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please do not provide too much digits\");","lastModifiedDate":"2023-09-12"},{"lineNumber":285,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":286,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":287,"author":{"gitId":"sheryew"},"content":" int digit \u003d Integer.parseInt(userCommand[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":288,"author":{"gitId":"sheryew"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":289,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please enter a valid number.\");","lastModifiedDate":"2023-09-12"},{"lineNumber":290,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":291,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":292,"author":{"gitId":"sheryew"},"content":" return true;","lastModifiedDate":"2023-09-12"},{"lineNumber":293,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":294,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":295,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":296,"author":{"gitId":"sheryew"},"content":" * Returns a boolean on whether the user input for \"Mark\"/\"Unmark\"/\"Delete\" is appropriate.","lastModifiedDate":"2023-09-11"},{"lineNumber":297,"author":{"gitId":"sheryew"},"content":" * I.e. a digit has to be provided and the digit has to be within the bounds of the length of list.","lastModifiedDate":"2023-09-11"},{"lineNumber":298,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":299,"author":{"gitId":"sheryew"},"content":" * @param userCommand Array of the particular user\u0027s command split by \" \".","lastModifiedDate":"2023-09-11"},{"lineNumber":300,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object consisting of user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":301,"author":{"gitId":"sheryew"},"content":" * @return Boolean. True if provided with appropriate command that follows the guidelines else False.","lastModifiedDate":"2023-09-06"},{"lineNumber":302,"author":{"gitId":"sheryew"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-06"},{"lineNumber":303,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":304,"author":{"gitId":"sheryew"},"content":" public boolean validOthers(String[] userCommand, TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":305,"author":{"gitId":"sheryew"},"content":" if (userCommand.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":306,"author":{"gitId":"sheryew"},"content":" throw new DukeException(String.format(\"OOPS!!! Please provide an integer for a %s event.\", userCommand[0]));","lastModifiedDate":"2023-09-06"},{"lineNumber":307,"author":{"gitId":"sheryew"},"content":" } else if (userCommand.length \u003e 2) {","lastModifiedDate":"2023-09-06"},{"lineNumber":308,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"OOPS!!! Please only provide one digit!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":309,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":310,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":311,"author":{"gitId":"sheryew"},"content":" int digit \u003d Integer.parseInt(userCommand[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":312,"author":{"gitId":"sheryew"},"content":" if (digit \u003c\u003d 0 || digit \u003e tasks.userData.size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":313,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"The digit you provided is out of bounds!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":314,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":315,"author":{"gitId":"sheryew"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":316,"author":{"gitId":"sheryew"},"content":" throw new DukeException(\"Please enter a valid number.\");","lastModifiedDate":"2023-09-11"},{"lineNumber":317,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":318,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":319,"author":{"gitId":"sheryew"},"content":" return true;","lastModifiedDate":"2023-09-06"},{"lineNumber":320,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":321,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":322,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":323,"author":{"gitId":"sheryew"},"content":" * Returns the string representation of the user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":324,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":325,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object that stores the user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":326,"author":{"gitId":"sheryew"},"content":" * @return String representation of user\u0027s tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":327,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":328,"author":{"gitId":"sheryew"},"content":" public String performValidListAction(TaskList tasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":329,"author":{"gitId":"sheryew"},"content":" StringBuilder taskDetails \u003d new StringBuilder();","lastModifiedDate":"2023-09-11"},{"lineNumber":330,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c tasks.userData.size(); i++) {","lastModifiedDate":"2023-09-11"},{"lineNumber":331,"author":{"gitId":"sheryew"},"content":" Task currentTask \u003d tasks.userData.get(i);","lastModifiedDate":"2023-09-11"},{"lineNumber":332,"author":{"gitId":"sheryew"},"content":" taskDetails.append(ui.displayTaskInList(i, currentTask)).append(\"\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":333,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":334,"author":{"gitId":"sheryew"},"content":" return taskDetails.toString();","lastModifiedDate":"2023-09-11"},{"lineNumber":335,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":336,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":337,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":338,"author":{"gitId":"sheryew"},"content":" * Returns the representation whenever a valid Mark/UnMark/Delete prompt is executed.","lastModifiedDate":"2023-09-11"},{"lineNumber":339,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":340,"author":{"gitId":"sheryew"},"content":" * @param othersIndex Magic Number as stated above. 4 for Mark, 5 for Unmark, 6 for Delete.","lastModifiedDate":"2023-09-11"},{"lineNumber":341,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object that stores the user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":342,"author":{"gitId":"sheryew"},"content":" * @return String response after successfully executing user\u0027s request.","lastModifiedDate":"2023-09-11"},{"lineNumber":343,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":344,"author":{"gitId":"sheryew"},"content":" public String performOthersAction(Integer othersIndex, TaskList tasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":345,"author":{"gitId":"sheryew"},"content":" int index \u003d Integer.parseInt(this.words[1]);","lastModifiedDate":"2023-09-11"},{"lineNumber":346,"author":{"gitId":"sheryew"},"content":" Task currentTask \u003d tasks.userData.get(index - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":347,"author":{"gitId":"sheryew"},"content":" if (othersIndex \u003d\u003d 4) {","lastModifiedDate":"2023-09-11"},{"lineNumber":348,"author":{"gitId":"sheryew"},"content":" currentTask.isDone \u003d true;","lastModifiedDate":"2023-09-11"},{"lineNumber":349,"author":{"gitId":"sheryew"},"content":" return ui.markTaskText(currentTask);","lastModifiedDate":"2023-09-11"},{"lineNumber":350,"author":{"gitId":"sheryew"},"content":" } else if (othersIndex \u003d\u003d 5) {","lastModifiedDate":"2023-09-11"},{"lineNumber":351,"author":{"gitId":"sheryew"},"content":" currentTask.isDone \u003d false;","lastModifiedDate":"2023-09-11"},{"lineNumber":352,"author":{"gitId":"sheryew"},"content":" return ui.unmarkTaskText(currentTask);","lastModifiedDate":"2023-09-11"},{"lineNumber":353,"author":{"gitId":"sheryew"},"content":" } else if (othersIndex \u003d\u003d 6) {","lastModifiedDate":"2023-09-11"},{"lineNumber":354,"author":{"gitId":"sheryew"},"content":" tasks.deleteTask(index - 1);","lastModifiedDate":"2023-09-11"},{"lineNumber":355,"author":{"gitId":"sheryew"},"content":" return ui.deleteTaskText(currentTask, tasks.userData.size());","lastModifiedDate":"2023-09-11"},{"lineNumber":356,"author":{"gitId":"sheryew"},"content":" } else {","lastModifiedDate":"2023-09-11"},{"lineNumber":357,"author":{"gitId":"sheryew"},"content":" return ui.textGenerator(\"Something went wrong!\");","lastModifiedDate":"2023-09-11"},{"lineNumber":358,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":359,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":360,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":361,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":362,"author":{"gitId":"sheryew"},"content":" * Performs filtering based on a specific keyword and return all related tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":363,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":364,"author":{"gitId":"sheryew"},"content":" * @param keyword String in which user wants to filter the existing task on.","lastModifiedDate":"2023-09-11"},{"lineNumber":365,"author":{"gitId":"sheryew"},"content":" * @param tasks TaskList object that stores the user\u0027s existing tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":366,"author":{"gitId":"sheryew"},"content":" * @return String representation of user\u0027s filtered tasks.","lastModifiedDate":"2023-09-11"},{"lineNumber":367,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":368,"author":{"gitId":"sheryew"},"content":" public String performFiltering(String keyword, TaskList tasks) {","lastModifiedDate":"2023-09-11"},{"lineNumber":369,"author":{"gitId":"sheryew"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d tasks.filter(keyword);","lastModifiedDate":"2023-09-11"},{"lineNumber":370,"author":{"gitId":"sheryew"},"content":" StringBuilder taskDetails \u003d new StringBuilder();","lastModifiedDate":"2023-09-11"},{"lineNumber":371,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c filteredTasks.size(); i++) {","lastModifiedDate":"2023-09-11"},{"lineNumber":372,"author":{"gitId":"sheryew"},"content":" Task currentTask \u003d filteredTasks.get(i);","lastModifiedDate":"2023-09-11"},{"lineNumber":373,"author":{"gitId":"sheryew"},"content":" taskDetails.append(ui.displayTaskInList(i, currentTask)).append(\"\\n\");","lastModifiedDate":"2023-09-11"},{"lineNumber":374,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":375,"author":{"gitId":"sheryew"},"content":" return taskDetails.toString();","lastModifiedDate":"2023-09-11"},{"lineNumber":376,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":377,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"sheryew":377}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" protected String filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" protected ArrayList\u003cTask\u003e fileData;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" this.fileData \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" * Returns an ArrayList\u003cTask\u003e based on data represented in the Duke.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" * If the file does not exist, it creates a new directory and new file.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" * @param filePath File Path for Duke.txt","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" * @return ArrayList\u003cTask\u003e based on data parsed from the Duke.txt","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" * @throws DukeException If Deadline object is not instantiated properly","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" * @throws IOException If file is not located or not available","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" public ArrayList\u003cTask\u003e load(String filePath) throws DukeException, IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" String[] parts \u003d s.nextLine().split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" performAddTask(fileData, parts);","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" return fileData;","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" * Creates a new Task for every instance in the txt file and add to an Arraylist","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" * @param fileData ArrayList\u003cTask\u003e where each Task is an instance in the txt file","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":" * @param parts Description of a particular task object","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" * @throws DukeException associated with deadline","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" public void performAddTask(ArrayList\u003cTask\u003e fileData, String[] parts) throws DukeException {","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" String event \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" int mark \u003d Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" boolean isCompleted \u003d mark \u003d\u003d 1;","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" if (Objects.equals(event, \"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" Task newTask \u003d new Todo(description);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" newTask.isDone \u003d isCompleted;","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":" fileData.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(event, \"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"sheryew"},"content":" Task newTask \u003d new Deadline(description, parts[3]);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"sheryew"},"content":" newTask.isDone \u003d isCompleted;","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"sheryew"},"content":" fileData.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(event, \"E\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"sheryew"},"content":" Task newTask \u003d new Event(description, parts[3], parts[4]);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"sheryew"},"content":" newTask.isDone \u003d isCompleted;","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"sheryew"},"content":" fileData.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"sheryew"},"content":" public void save(String filePath, ArrayList\u003cTask\u003e newTasks) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"sheryew"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"sheryew"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c newTasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"sheryew"},"content":" Task newTask \u003d newTasks.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"sheryew"},"content":" int isDoneValue \u003d newTask.isDone ? 1 : 0;","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"sheryew"},"content":" if (Objects.equals(newTask.tag, \"T\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"sheryew"},"content":" fw.write(String.format(\"%s|%d|%s%n\", newTask.getTag(), isDoneValue, newTask.getDescription()));","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(newTask.tag, \"D\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"sheryew"},"content":" Deadline deadlineTask \u003d (Deadline) newTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"sheryew"},"content":" fw.write(String.format(\"%s|%d|%s|%s%n\", deadlineTask.getTag(), isDoneValue, deadlineTask.getDescription(), deadlineTask.getDeadline()));","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"sheryew"},"content":" } else if (Objects.equals(newTask.tag, \"E\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"sheryew"},"content":" Event eventTask \u003d (Event) newTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"sheryew"},"content":" fw.write(String.format(\"%s|%d|%s|%s|%s%n\", eventTask.getTag(), isDoneValue, eventTask.getDescription(), eventTask.getFrom(), eventTask.getTo()));","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"sheryew"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"sheryew"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"sheryew"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"sheryew":95}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":" protected String tag;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" * Returns a Task object if provided with task description and associated tag (\"T\"/\"D\"/\"E\")","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" * @param description Task description (String)","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" * @param tag \"E\" for Event, \"T\" for Todo, \"D\" for Deadline","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" public Task(String description, String tag) {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" public String getTag() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" return this.tag;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" return this.description;","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.getDescription();","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"sheryew":35}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":" public ArrayList\u003cTask\u003e userData;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" public TaskList(ArrayList\u003cTask\u003e userData) {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" this.userData \u003d userData;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" * Appends newly created Task to the current ArrayList\u003cTask\u003e of the user.","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" * @param newTask Task Object. Could be Todo, Deadline or Event.","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" public void addTask(Task newTask) {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" this.userData.add(newTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" * Deletes a particular Task from the current ArrayList\u003cTask\u003e based on given index.","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" * @param referenceIndex position of the Task within the ArrayList.","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" public void deleteTask(int referenceIndex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" this.userData.remove(referenceIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":" * Returns an Arraylist containing Task Objects that contain a specific keyword.","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" * @param keyword String representation of the filtering parameter.","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" * @return Arraylist containing filtered Task Objects","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" public ArrayList\u003cTask\u003e filter(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" ArrayList\u003cTask\u003e filteredTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" for (int i \u003d 0; i \u003c userData.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" Task task \u003d userData.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" String taskDescription \u003d task.getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":" if (taskDescription.contains(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" filteredTask.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" return filteredTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"sheryew":47}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":" * Returns an Todo Task Object","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" * @param description Task Description (String)","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" super(description, \"T\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"sheryew":17}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":" public Ui() {};","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":" public String textGenerator(String answer) {","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" return answer;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" * Returns a default response when user attempts to add a new Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" * @param newT Task Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" * @param len Integer Object representing how many existing tasks the user has (including the newly added task)","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" * @return String Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" public String addTaskText(Task newT, int len) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + newT.toString() + \"\\n\" + \"Now you have \" + len + \" tasks in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" * Returns a default response when user wants to see all the existing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":" * @param digit Integer Object. Index of the task in the ArrayList","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"sheryew"},"content":" * @param newT Task Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"sheryew"},"content":" * @return String Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"sheryew"},"content":" public String displayTaskInList(int digit, Task newT) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"sheryew"},"content":" return digit + 1 + \".\" + newT.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"sheryew"},"content":" * Returns a default response when user wants to mark a particular task.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"sheryew"},"content":" * @param newT Task Object. A task that user wants to mark.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"sheryew"},"content":" * @return String Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"sheryew"},"content":" public String markTaskText(Task newT) {","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"sheryew"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + newT.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"sheryew"},"content":" * Returns a default response when user wants to unmark a particular task.","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"sheryew"},"content":" * @param newT Task Object. A task that user wants to unmark.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"sheryew"},"content":" * @return String Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"sheryew"},"content":" public String unmarkTaskText(Task newT) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"sheryew"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + newT.toString();","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"sheryew"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"sheryew"},"content":" * Returns a default response when user wants to delete a particular task.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"sheryew"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"sheryew"},"content":" * @param newT Task Object. A task that user wants to unmark.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"sheryew"},"content":" * @param digit Integer Object. Represents the number of user\u0027s existing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"sheryew"},"content":" * @return String Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"sheryew"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"sheryew"},"content":" public String deleteTaskText(Task newT, int digit) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"sheryew"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + newT.toString() + \"\\n\" + \"Now you have \" + digit + \" tasks in the list.\";","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"sheryew":62}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.control.TextArea?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" 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":10,"author":{"gitId":"sheryew"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" \u003cTextArea fx:id\u003d\"dialog\" text\u003d\"Your Text Here\" wrapText\u003d\"true\" editable\u003d\"false\" focusTraversable\u003d\"false\" style\u003d\"-fx-text-fill: black; -fx-control-inner-background: lightgreen;\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" \u003cInsets right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" \u003cFont name\u003d\"Georgia\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" \u003c/TextArea\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"sheryew"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"sheryew"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"sheryew"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"sheryew"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"sheryew"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":24}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"sheryew"},"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\"MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"sheryew"},"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-06"},{"lineNumber":12,"author":{"gitId":"sheryew"},"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-06"},{"lineNumber":13,"author":{"gitId":"sheryew"},"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-06"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"sheryew"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"sheryew"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"sheryew":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" public void parserTDTest() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" assertEquals(\"Watch Youtube\", new Parser(\"\").getTaskDescription(new String[]{\"todo\", \"Watch\", \"Youtube\"}));","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" public void parserSearcherTest() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" assertEquals(\"\", new Parser(\"\").searcher(new String[]{\"hello\", \"world\", \"-\"}, \"/to\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"sheryew":17}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"sheryew"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"sheryew"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"sheryew"},"content":" public void taskStatus() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"sheryew"},"content":" assertEquals(\" \", new Todo(\"eat\").getStatusIcon());","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"sheryew"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"sheryew"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"sheryew"},"content":" public void taskRepresentation() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"sheryew"},"content":" assertEquals( \"[D][ ] return books (by: Aug 8 2023)\", new Deadline(\"return books\", \"2023-08-08\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"sheryew"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"sheryew"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"sheryew":16}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"sheryew"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"sheryew"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"sheryew"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"sheryew":5}},{"path":"text-ui-test/output.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"sheryew"},"content":"todo hello","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"sheryew"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"sheryew":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":"sheryew"},"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":{"sheryew":1,"-":20}}] diff --git a/sheryew_ip_master/commits.json b/sheryew_ip_master/commits.json index f5dc24f7..377236fa 100644 --- a/sheryew_ip_master/commits.json +++ b/sheryew_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"sheryew":[{"date":"2023-08-22","commitResults":[{"hash":"310b12ae07e78927ed8b12c0e9fa2b26360eb535","isMergeCommit":false,"messageTitle":"Level 0.","messageBody":"Rename, Greet, Exit\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"456541837118f522890ebd2e9796455992bd29ae","isMergeCommit":false,"messageTitle":"Echo","messageBody":"Echo user commands\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"865fcca9c0287434e0e3fa75192e600fab746a3c","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"Add the ability to store whatever text entered by the user and display them back\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"250fa14762769b57b41e7fd95539637954815b23","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"Add the ability to mark tasks as done.\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":4}}},{"hash":"f68d9f37655a3e17de495210d5eb518f0612b92c","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"ToDos, Events, Deadlines\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":14}}}]},{"date":"2023-08-23","commitResults":[{"hash":"efc1b55747638f300d19689f64554b3b39bda481","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"Automated Text UI Testing\n-- Removed the code for initialising new scanner from the while loop\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":1,"deletions":1},"sh":{"insertions":0,"deletions":0}}},{"hash":"e594742c5fe81dece44d17152cc6aa5238140c36","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"Handle Errors\n","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":153,"deletions":86}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e702d061ab03f0f86bef622c3d7fbfc61c31b5e3","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"Delete\nAlso edited a minor bug I found in level 5\n","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":12}}}]},{"date":"2023-08-29","commitResults":[{"hash":"50dc47f36949183e71a6e1a5d0598ac0bc63e580","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":93,"deletions":16}}},{"hash":"73605d41531fb967c4d22c4cc14160eeb6db653f","isMergeCommit":false,"messageTitle":"Level 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":45,"deletions":10}}},{"hash":"7f15fb800f5cb60416667acaedd9d87bf393b35c","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP_T","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":323,"deletions":228}}}]},{"date":"2023-08-30","commitResults":[{"hash":"350f27f5f37f3a55702aa7e524c83a10dbfc00aa","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"d4254ec9afb3c13808f70576880290f6416b1aaa","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027 into A_Packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c33d601763f082f3eb7452a2206fa2bd26ee7e53","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"Removed README.md as it was conflicting with my migration of Duke into duke package repo\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":3},"bat":{"insertions":1,"deletions":1},"md":{"insertions":0,"deletions":24}}},{"hash":"cb1ed991e64bf3611f028387413196dcf783614e","isMergeCommit":true,"messageTitle":"Merge branch \u0027A_Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0c749eeb64f43120b509f383ad94b1943cad087","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"af77b4d3bfdb2c8a84671c2c70a83a9cc1b1d898","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":4},"java":{"insertions":11,"deletions":5}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b7fc0f61dd416b941b1cb7ebd15328ea112b6f87","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":6}}},{"hash":"f267323ba5dfb505ebf78ad6e6115458ceeeb335","isMergeCommit":false,"messageTitle":"Tweak the code to comply with a coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":37,"deletions":60}}},{"hash":"f1d1058703e81f1d0afda9eda8f5a675e64f9a88","isMergeCommit":false,"messageTitle":"Find a task by searching for a keyword","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":20,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"de459e760db314d076a564e9e9cd8d59baf5175f","isMergeCommit":false,"messageTitle":"level 10. GUI","messageBody":"","tags":["Level-10","GUI"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"txt":{"insertions":5,"deletions":4},"fxml":{"insertions":43,"deletions":0},"java":{"insertions":338,"deletions":56}}}]},{"date":"2023-09-11","commitResults":[{"hash":"425660e5717f4cb2866de8c1f1518d524595aaa7","isMergeCommit":false,"messageTitle":"Add assertions to Parser class","messageBody":"Parser Class: Validate and return appropriate responses from user\u0027s prompts\n\nParser Class allows invalid prompts from users (e.g. list a, find).\n\nInclude assertions in certain portions of the logic flow found in the Parser class.\n\nAssertions prevent illogical prompts from affecting the operations of Duke.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":9,"deletions":3}}},{"hash":"3793222e01edbbb8ceed65c978b7f3b311ff1afc","isMergeCommit":true,"messageTitle":"Merge pull request #1 from sheryew/Assertions_Branch","messageBody":"Add assertions to Parser class","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"6051faa95cc76d3ed980be5d38ca741574a08f02","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":1},"java":{"insertions":210,"deletions":117}}},{"hash":"62c0ea25145445aadefc266952406f05492ffdf3","isMergeCommit":true,"messageTitle":"Merge pull request #2 from sheryew/CodeQuality_Branch","messageBody":"Improve Code Quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"485cfef2dd746ce9f9f18a3e79de9f575a818c89","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":30,"deletions":28}}}]},{"date":"2023-09-12","commitResults":[{"hash":"0f5d6529ab902ee591ab602d555fd1b264b55a91","isMergeCommit":false,"messageTitle":"Provide a way to get reminders about task","messageBody":"Current Situation\nDeadline Class do not provide a method to check if the deadline of a particular Task is within x days.\n\nWhy it needs to change\nThis allows users to make full use of the functionality of the DUKE application as well as the special LocalDate object in Deadline class.\n\nWhat is being done about it\nDeadline class has a method that checks if a particular Deadline Task\u0027s due date is within x days. Parser Class also has the appropriate conditional checks to ensure users prompts are correct\n\nWhy it is done that way\nThis ensures proper abstraction\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":15},"java":{"insertions":73,"deletions":1}}},{"hash":"4f79019e11d15f48839bfe374e3da3b456aa0058","isMergeCommit":true,"messageTitle":"Merge pull request #3 from sheryew/Extension_Branch","messageBody":"Provide a way to get reminders about task","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"sheryew":{"java":1051,"md":30,"fxml":43,"sh":0,"bat":1,"gradle":16,"txt":10}},"authorContributionVariance":{"sheryew":32519.652},"authorDisplayNameMap":{"sheryew":"CS2103-F13-2 TAN .. YEW"}} +{"authorDailyContributionsMap":{"sheryew":[{"date":"2023-08-22","commitResults":[{"hash":"310b12ae07e78927ed8b12c0e9fa2b26360eb535","isMergeCommit":false,"messageTitle":"Level 0.","messageBody":"Rename, Greet, Exit\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"456541837118f522890ebd2e9796455992bd29ae","isMergeCommit":false,"messageTitle":"Echo","messageBody":"Echo user commands\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"865fcca9c0287434e0e3fa75192e600fab746a3c","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"Add the ability to store whatever text entered by the user and display them back\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"250fa14762769b57b41e7fd95539637954815b23","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"Add the ability to mark tasks as done.\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":4}}},{"hash":"f68d9f37655a3e17de495210d5eb518f0612b92c","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"ToDos, Events, Deadlines\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":14}}}]},{"date":"2023-08-23","commitResults":[{"hash":"efc1b55747638f300d19689f64554b3b39bda481","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"Automated Text UI Testing\n-- Removed the code for initialising new scanner from the while loop\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":1,"deletions":1},"sh":{"insertions":0,"deletions":0}}},{"hash":"e594742c5fe81dece44d17152cc6aa5238140c36","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"Handle Errors\n","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":153,"deletions":86}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e702d061ab03f0f86bef622c3d7fbfc61c31b5e3","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"Delete\nAlso edited a minor bug I found in level 5\n","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":12}}}]},{"date":"2023-08-29","commitResults":[{"hash":"50dc47f36949183e71a6e1a5d0598ac0bc63e580","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":93,"deletions":16}}},{"hash":"73605d41531fb967c4d22c4cc14160eeb6db653f","isMergeCommit":false,"messageTitle":"Level 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":45,"deletions":10}}},{"hash":"7f15fb800f5cb60416667acaedd9d87bf393b35c","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP_T","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":323,"deletions":228}}}]},{"date":"2023-08-30","commitResults":[{"hash":"350f27f5f37f3a55702aa7e524c83a10dbfc00aa","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"d4254ec9afb3c13808f70576880290f6416b1aaa","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027 into A_Packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c33d601763f082f3eb7452a2206fa2bd26ee7e53","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"Removed README.md as it was conflicting with my migration of Duke into duke package repo\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":3},"bat":{"insertions":1,"deletions":1},"md":{"insertions":0,"deletions":24}}},{"hash":"cb1ed991e64bf3611f028387413196dcf783614e","isMergeCommit":true,"messageTitle":"Merge branch \u0027A_Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0c749eeb64f43120b509f383ad94b1943cad087","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"af77b4d3bfdb2c8a84671c2c70a83a9cc1b1d898","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":4},"java":{"insertions":11,"deletions":5}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b7fc0f61dd416b941b1cb7ebd15328ea112b6f87","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":6}}},{"hash":"f267323ba5dfb505ebf78ad6e6115458ceeeb335","isMergeCommit":false,"messageTitle":"Tweak the code to comply with a coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":37,"deletions":60}}},{"hash":"f1d1058703e81f1d0afda9eda8f5a675e64f9a88","isMergeCommit":false,"messageTitle":"Find a task by searching for a keyword","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":20,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"de459e760db314d076a564e9e9cd8d59baf5175f","isMergeCommit":false,"messageTitle":"level 10. GUI","messageBody":"","tags":["Level-10","GUI"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"txt":{"insertions":5,"deletions":4},"fxml":{"insertions":43,"deletions":0},"java":{"insertions":338,"deletions":56}}}]},{"date":"2023-09-11","commitResults":[{"hash":"425660e5717f4cb2866de8c1f1518d524595aaa7","isMergeCommit":false,"messageTitle":"Add assertions to Parser class","messageBody":"Parser Class: Validate and return appropriate responses from user\u0027s prompts\n\nParser Class allows invalid prompts from users (e.g. list a, find).\n\nInclude assertions in certain portions of the logic flow found in the Parser class.\n\nAssertions prevent illogical prompts from affecting the operations of Duke.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":9,"deletions":3}}},{"hash":"3793222e01edbbb8ceed65c978b7f3b311ff1afc","isMergeCommit":true,"messageTitle":"Merge pull request #1 from sheryew/Assertions_Branch","messageBody":"Add assertions to Parser class","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"6051faa95cc76d3ed980be5d38ca741574a08f02","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":1},"java":{"insertions":210,"deletions":117}}},{"hash":"62c0ea25145445aadefc266952406f05492ffdf3","isMergeCommit":true,"messageTitle":"Merge pull request #2 from sheryew/CodeQuality_Branch","messageBody":"Improve Code Quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"485cfef2dd746ce9f9f18a3e79de9f575a818c89","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":30,"deletions":28}}}]},{"date":"2023-09-12","commitResults":[{"hash":"0f5d6529ab902ee591ab602d555fd1b264b55a91","isMergeCommit":false,"messageTitle":"Provide a way to get reminders about task","messageBody":"Current Situation\nDeadline Class do not provide a method to check if the deadline of a particular Task is within x days.\n\nWhy it needs to change\nThis allows users to make full use of the functionality of the DUKE application as well as the special LocalDate object in Deadline class.\n\nWhat is being done about it\nDeadline class has a method that checks if a particular Deadline Task\u0027s due date is within x days. Parser Class also has the appropriate conditional checks to ensure users prompts are correct\n\nWhy it is done that way\nThis ensures proper abstraction\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":15},"java":{"insertions":73,"deletions":1}}},{"hash":"4f79019e11d15f48839bfe374e3da3b456aa0058","isMergeCommit":true,"messageTitle":"Merge pull request #3 from sheryew/Extension_Branch","messageBody":"Provide a way to get reminders about task","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"6a37c5b033623a01fd224fb34ac18f2cab25c1ef","isMergeCommit":false,"messageTitle":"Added Product Website","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":2,"deletions":2}}},{"hash":"37b0675a731e23c3627f8bed0e0bbc1c293281c6","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":63,"deletions":8}}},{"hash":"b84bd20169a18ca816b7d8bb0315c169155127c5","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"43a8e2e9441d3748bc80677d4d6417ea8ce73cbd","isMergeCommit":false,"messageTitle":"Changing build.gradle for JAR file","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"ae8fa1316e25bbb61ebfa8a5ca8a8d0c46a6652d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/sheryew/ip","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"sheryew":{"java":1051,"md":72,"fxml":43,"sh":0,"bat":1,"gradle":16,"txt":11}},"authorContributionVariance":{"sheryew":29023.496},"authorDisplayNameMap":{"sheryew":"CS2103-F13-2 TAN .. YEW"}} diff --git a/shyanyong_ip_master/commits.json b/shyanyong_ip_master/commits.json index 3514c63e..f9244e63 100644 --- a/shyanyong_ip_master/commits.json +++ b/shyanyong_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"shyanyong":[{"date":"2023-08-22","commitResults":[{"hash":"c7fc58319f6719f1a5d9fb0b5e582c279799db04","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit (a) Give your chatbot a new name, to differentiate it from the placeholder name Duke.","messageBody":"(b) Implement an initial skeletal version of the it that simply greets the user and exits.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"4267d6d4f5751178bb63250f2a06001cf5ff22aa","isMergeCommit":false,"messageTitle":"Level 1. Echo Improve the skeletal version of Duke so that it echos commands entered by the user, and exits when the user types the command bye.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}},{"hash":"abc9088f4bc9c2e66901cdce30a2b965bed3923a","isMergeCommit":false,"messageTitle":"Level 2. Add, List Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"4cf5cfcc9bee956c0130baf7a2f4f89d19c4a6a2","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done Add the ability to mark tasks as done. Optionally, add the ability to change the status back to not done.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":4}}}]},{"date":"2023-08-23","commitResults":[{"hash":"514816e3f1fb74aafff5deab861cb30cb7f52971","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines Add support for tracking three types of tasks:","messageBody":"ToDos: tasks without any date/time attached to it e.g., visit new theme park\nDeadlines: tasks that need to be done before a specific date/time e.g., submit report by 11/10/2019 5pm\nEvents: tasks that start at a specific date/time and ends at a specific date/time\ne.g., (a) team project meeting 2/10/2019 2-4pm (b) orientation week 4/10/2019 to 11/10/2019\n\nAdded support for all the tasks\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":4}}},{"hash":"e9e7993c1b480376a75495581c941e43d222630f","isMergeCommit":false,"messageTitle":"Use the input/output redirection technique to semi-automate the testing of Duke.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"dc88fe0a47abc880cde97af163c24e82d1fcdc94","isMergeCommit":false,"messageTitle":"Updated automatated testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"3a0506f45474781d7bd6a7b5f13fff3b55788f3d","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors Teach the chatbot to deal with errors such as incorrect inputs entered by the user.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"b70b5944850d3410ad4d355966eafe2caf69359d","isMergeCommit":false,"messageTitle":"Level 6. Delete Add support for deleting tasks from the list.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"f7b2a195dd513582134b5f4894f089512009881f","isMergeCommit":false,"messageTitle":"Updated tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"85b46860eaf1f3d52e41997546485eacde75f542","isMergeCommit":false,"messageTitle":"Level-7: Implement automatic task data saving and loading from disk This commit introduces the feature of automatically saving tasks to the hard disk whenever the task list undergoes changes. Additionally, it enables the loading of task data from the hard disk during the chatbot\u0027s startup. The file name and relative path are hard-coded from the project root. The data is stored in a format designed for efficient storage and retrieval. This feature enhances the user experience by ensuring that task data persists across chatbot sessions and remains consistent even in the event of interruptions.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":0}}},{"hash":"e2244219e44fb061beb1509298cb22d52068e627","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"316c6cf964d8c6a5247437e983f002259a7a4174","isMergeCommit":false,"messageTitle":"Level-8: Dates and Times This commit implements date and time understanding for tasks.","messageBody":"This commit enhances the chatbot\u0027s capability to intelligently interpret dates and times provided in commands. When processing task inputs like \"deadline return book /by 2/12/2019 1800\", the chatbot now comprehends the date \"2/12/2019\" as 2nd of December 2019 and the time \"1800\" as 6pm. The parsed dates are stored as java.time.LocalDate or java.time.LocalDateTime objects in task instances.\n\nAdditionally, the chatbot accepts dates in the yyyy-mm-dd format (e.g., 2019-10-15) and presents them in a more readable format such as MMM dd yyyy (e.g., Oct 15 2019) when displaying task details. This improvement elevates the user experience by enabling more natural and intuitive interaction with date and time information.\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":109,"deletions":37}}},{"hash":"60b9f38fcb7f4e880183fa1543f6dd0187492e7b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"10066f92891f7237efadb02234eef54dfc134078","isMergeCommit":false,"messageTitle":"A-MoreOOP: Rewrote brotherman chatbot in OOP style. Added new classes to encapsulate commands as well as Ui, Storage and TaskList.","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":447,"deletions":278}}},{"hash":"c148d1538c5d03d1831b2086a5ee1198e6101c4a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-MoreOOP\u0027","messageBody":"Merge MoreOOP. OOP the files. Created new classes to encapsulate commands, parsing, ui and storage.\n","fileTypesAndContributionMap":{}},{"hash":"06661f8dbdda7f20e368a4875ac3f5d0638e3f5f","isMergeCommit":false,"messageTitle":"A-Packages:","messageBody":"Added packages into Brotherman. Added Commands, exceptions, parser, storage, tasks, ui.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"70b3e0eba288d92f0cb9828069660806427722d8","isMergeCommit":false,"messageTitle":"A-Packages:","messageBody":"Added packages into Brotherman. Added Commands, exceptions, parser, storage, tasks, ui.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":74,"deletions":13}}},{"hash":"d9344230d5c51176f0de63b81aef27123f5fb5ab","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9157fc2b18cd913f0f486ea83329a73cc378cfe0","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Gradle","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"209042ef8d538120562c4f8f15c85b61de805cd5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Gradle\u0027","messageBody":"","tags":["A-Jar","A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"9a69eefdb5710d96744ee3f14766719417ecf0b3","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser class and Ui class.","messageBody":"Sure, I can help you write a GitHub commit message where JUnit tests have been added to test the code. Here is an example of a commit message:\n\nAdd JUnit tests for Parser class\n\nThis commit adds JUnit tests for the parseTodo() and ShowWelcomeMessage()\n","tags":["A-JUnit","A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":111,"deletions":26}}},{"hash":"876f9aec41978dbb8bb6167e35e2386fe338166b","isMergeCommit":false,"messageTitle":"Add Javadocs to all files","messageBody":"This commit adds Javadocs to all files in the project. Javadocs are documentation comments that can be used to describe the purpose of a class, method, or field. They can be helpful for understanding the code and for debugging.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":405,"deletions":6}}},{"hash":"a84a100c074082fe63ebf4bb9303786377f2b2fe","isMergeCommit":false,"messageTitle":"Add FindCommand class","messageBody":"This commit adds the FindCommand class, which allows users to find tasks with a specified keyword.\n\nThe FindCommand class is a subclass of the Command class. It has a constructor that takes the keyword as a parameter. The execute() method of the FindCommand class calls the getTasksByKeyword() method of the TaskList class to get the tasks that match the keyword. The showTaskList() method of the Ui class is then called to display the list of tasks to the user.\n","tags":["Level-9","A-Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":2}}},{"hash":"9b55c129b9bb6bd8491af46960ccd9f0b94086f6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"965d0a379ccf7087f14bac9de2953c84f9cf280e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/brotherman/tasks/TaskList.java\n#\tsrc/main/java/brotherman/ui/Ui.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"6e9757e8c424bc8d49e3b929c507569c3baf4789","isMergeCommit":false,"messageTitle":"Add Checkstyle to project and resolve all Checkstyle issues","messageBody":"In this commit, we introduce Checkstyle to our project to enforce consistent coding style and maintain code quality. The following changes have been made:\n\n- Added Checkstyle plugin to IntelliJ IDEA for integrated code analysis.\n- Configured Checkstyle with a custom checkstyle.xml configuration file tailored to our project\u0027s coding standards.\n- Resolved all Checkstyle issues identified in the codebase, ensuring adherence to the coding guidelines.\n\nThis implementation helps us maintain a cleaner and more consistent codebase, making it easier to collaborate and maintain the project in the long run.\n","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":108,"deletions":64}}},{"hash":"5fc81e417a848604d1e76b9f0819312e6bce5dd7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Checkstyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7f7706fc54ca569d6eeed8eee226c64362da7961","isMergeCommit":false,"messageTitle":"Resolve Parsing and general Code Cleanup","messageBody":" - Improved parsing logic for date and time strings to handle a wider range of formats.\n\n- Conducted a thorough code review and performed extensive code cleanup.\n - Removed redundant code, optimized data structures, and enhanced code readability.\n - Applied consistent coding standards and naming conventions across the project.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":24,"deletions":18}}},{"hash":"f89358acc3325902ca7e0c3ff776a982cc3ec5ee","isMergeCommit":false,"messageTitle":"Add simple GUI","messageBody":"Implemented a basic graphical user interface (GUI) using JavaFX. This GUI includes a main window with a scrollable chat container, a user input field, and a send button. The GUI provides the foundation for future user interaction and chatbot functionality. Logic for chatbot not yet done.\n","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":0,"deletions":3},"java":{"insertions":253,"deletions":57}}}]},{"date":"2023-09-07","commitResults":[{"hash":"06187b43ae7fa04a7efdea84169ddd67f1f185ac","isMergeCommit":false,"messageTitle":"Enhance GUI using JavaFX and maintain chatbot functionality In this commit, I have improved the graphical user interface (GUI) of our application by integrating JavaFX components. The new GUI not only enhances the overall user experience but also provides a more modern and intuitive look and feel. Additionally, we have updated the application\u0027s logic to seamlessly integrate the JavaFX components while ensuring that the core functionality of the chatbot remains intact. This means that users can continue to interact with the chatbot as they did before, with all existing features and capabilities fully preserved.","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":116,"deletions":78}}},{"hash":"344aa4dd9934d6c3a7a8934b8c0d4f42de7094c7","isMergeCommit":true,"messageTitle":"Merge branch \u0027Branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"464f8ca927d4eabad5f1d1fbbdb2ace1d6c0a9b4","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Added assertions in some key places.\n\nEnsures that important assumptions hold at various points in the code.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2},"txt":{"insertions":1,"deletions":1},"java":{"insertions":83,"deletions":90}}},{"hash":"e9f1da2395b47ad1157e00d93e412b12e0c9e7bd","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"Improved the overall general code quality of the project\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":31}}},{"hash":"f1e24c92e8e773a994a1a51c5da156c3040142b4","isMergeCommit":true,"messageTitle":"Merge pull request #1 from shyanyong/branch-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"a44dc4e6228f967a09d00df94567b4cba86a708a","isMergeCommit":true,"messageTitle":"Merge pull request #2 from shyanyong/branch-CodeQuality","messageBody":"Improve Code Quality","fileTypesAndContributionMap":{}},{"hash":"8cfd5aabc885d1254ac5fc1e6e57be7fc32b824a","isMergeCommit":false,"messageTitle":"Add Help function","messageBody":"Provide in-App guidance to users.\n\nAdded command to help page for users to view commands.\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":44,"deletions":22}}},{"hash":"8595d3ef4af5b87ba7ff20471bd2212a4cba1b52","isMergeCommit":true,"messageTitle":"Merge branch \u0027C-Help\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"53b3c4b0b8c809055bc4fe4b337484afac185de0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/shyanyong/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/brotherman/ui/Ui.java\n","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"shyanyong":{"java":1462,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":23,"txt":4}},"authorContributionVariance":{"shyanyong":55226.062},"authorDisplayNameMap":{"shyanyong":"CS2103T-T15-2 WONG..YONG"}} +{"authorDailyContributionsMap":{"shyanyong":[{"date":"2023-08-22","commitResults":[{"hash":"c7fc58319f6719f1a5d9fb0b5e582c279799db04","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit (a) Give your chatbot a new name, to differentiate it from the placeholder name Duke.","messageBody":"(b) Implement an initial skeletal version of the it that simply greets the user and exits.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"4267d6d4f5751178bb63250f2a06001cf5ff22aa","isMergeCommit":false,"messageTitle":"Level 1. Echo Improve the skeletal version of Duke so that it echos commands entered by the user, and exits when the user types the command bye.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}},{"hash":"abc9088f4bc9c2e66901cdce30a2b965bed3923a","isMergeCommit":false,"messageTitle":"Level 2. Add, List Add the ability to store whatever text entered by the user and display them back to the user when requested.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":3}}},{"hash":"4cf5cfcc9bee956c0130baf7a2f4f89d19c4a6a2","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done Add the ability to mark tasks as done. Optionally, add the ability to change the status back to not done.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":4}}}]},{"date":"2023-08-23","commitResults":[{"hash":"514816e3f1fb74aafff5deab861cb30cb7f52971","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines Add support for tracking three types of tasks:","messageBody":"ToDos: tasks without any date/time attached to it e.g., visit new theme park\nDeadlines: tasks that need to be done before a specific date/time e.g., submit report by 11/10/2019 5pm\nEvents: tasks that start at a specific date/time and ends at a specific date/time\ne.g., (a) team project meeting 2/10/2019 2-4pm (b) orientation week 4/10/2019 to 11/10/2019\n\nAdded support for all the tasks\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":4}}},{"hash":"e9e7993c1b480376a75495581c941e43d222630f","isMergeCommit":false,"messageTitle":"Use the input/output redirection technique to semi-automate the testing of Duke.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"dc88fe0a47abc880cde97af163c24e82d1fcdc94","isMergeCommit":false,"messageTitle":"Updated automatated testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"3a0506f45474781d7bd6a7b5f13fff3b55788f3d","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors Teach the chatbot to deal with errors such as incorrect inputs entered by the user.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":0}}},{"hash":"b70b5944850d3410ad4d355966eafe2caf69359d","isMergeCommit":false,"messageTitle":"Level 6. Delete Add support for deleting tasks from the list.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"f7b2a195dd513582134b5f4894f089512009881f","isMergeCommit":false,"messageTitle":"Updated tests","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"85b46860eaf1f3d52e41997546485eacde75f542","isMergeCommit":false,"messageTitle":"Level-7: Implement automatic task data saving and loading from disk This commit introduces the feature of automatically saving tasks to the hard disk whenever the task list undergoes changes. Additionally, it enables the loading of task data from the hard disk during the chatbot\u0027s startup. The file name and relative path are hard-coded from the project root. The data is stored in a format designed for efficient storage and retrieval. This feature enhances the user experience by ensuring that task data persists across chatbot sessions and remains consistent even in the event of interruptions.","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":0}}},{"hash":"e2244219e44fb061beb1509298cb22d52068e627","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"316c6cf964d8c6a5247437e983f002259a7a4174","isMergeCommit":false,"messageTitle":"Level-8: Dates and Times This commit implements date and time understanding for tasks.","messageBody":"This commit enhances the chatbot\u0027s capability to intelligently interpret dates and times provided in commands. When processing task inputs like \"deadline return book /by 2/12/2019 1800\", the chatbot now comprehends the date \"2/12/2019\" as 2nd of December 2019 and the time \"1800\" as 6pm. The parsed dates are stored as java.time.LocalDate or java.time.LocalDateTime objects in task instances.\n\nAdditionally, the chatbot accepts dates in the yyyy-mm-dd format (e.g., 2019-10-15) and presents them in a more readable format such as MMM dd yyyy (e.g., Oct 15 2019) when displaying task details. This improvement elevates the user experience by enabling more natural and intuitive interaction with date and time information.\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":109,"deletions":37}}},{"hash":"60b9f38fcb7f4e880183fa1543f6dd0187492e7b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"10066f92891f7237efadb02234eef54dfc134078","isMergeCommit":false,"messageTitle":"A-MoreOOP: Rewrote brotherman chatbot in OOP style. Added new classes to encapsulate commands as well as Ui, Storage and TaskList.","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":447,"deletions":278}}},{"hash":"c148d1538c5d03d1831b2086a5ee1198e6101c4a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-MoreOOP\u0027","messageBody":"Merge MoreOOP. OOP the files. Created new classes to encapsulate commands, parsing, ui and storage.\n","fileTypesAndContributionMap":{}},{"hash":"06661f8dbdda7f20e368a4875ac3f5d0638e3f5f","isMergeCommit":false,"messageTitle":"A-Packages:","messageBody":"Added packages into Brotherman. Added Commands, exceptions, parser, storage, tasks, ui.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"70b3e0eba288d92f0cb9828069660806427722d8","isMergeCommit":false,"messageTitle":"A-Packages:","messageBody":"Added packages into Brotherman. Added Commands, exceptions, parser, storage, tasks, ui.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":74,"deletions":13}}},{"hash":"d9344230d5c51176f0de63b81aef27123f5fb5ab","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Packages\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9157fc2b18cd913f0f486ea83329a73cc378cfe0","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Gradle","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"209042ef8d538120562c4f8f15c85b61de805cd5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Gradle\u0027","messageBody":"","tags":["A-Jar","A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"9a69eefdb5710d96744ee3f14766719417ecf0b3","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser class and Ui class.","messageBody":"Sure, I can help you write a GitHub commit message where JUnit tests have been added to test the code. Here is an example of a commit message:\n\nAdd JUnit tests for Parser class\n\nThis commit adds JUnit tests for the parseTodo() and ShowWelcomeMessage()\n","tags":["A-JUnit","A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":111,"deletions":26}}},{"hash":"876f9aec41978dbb8bb6167e35e2386fe338166b","isMergeCommit":false,"messageTitle":"Add Javadocs to all files","messageBody":"This commit adds Javadocs to all files in the project. Javadocs are documentation comments that can be used to describe the purpose of a class, method, or field. They can be helpful for understanding the code and for debugging.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":405,"deletions":6}}},{"hash":"a84a100c074082fe63ebf4bb9303786377f2b2fe","isMergeCommit":false,"messageTitle":"Add FindCommand class","messageBody":"This commit adds the FindCommand class, which allows users to find tasks with a specified keyword.\n\nThe FindCommand class is a subclass of the Command class. It has a constructor that takes the keyword as a parameter. The execute() method of the FindCommand class calls the getTasksByKeyword() method of the TaskList class to get the tasks that match the keyword. The showTaskList() method of the Ui class is then called to display the list of tasks to the user.\n","tags":["Level-9","A-Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":2}}},{"hash":"9b55c129b9bb6bd8491af46960ccd9f0b94086f6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"965d0a379ccf7087f14bac9de2953c84f9cf280e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/brotherman/tasks/TaskList.java\n#\tsrc/main/java/brotherman/ui/Ui.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"6e9757e8c424bc8d49e3b929c507569c3baf4789","isMergeCommit":false,"messageTitle":"Add Checkstyle to project and resolve all Checkstyle issues","messageBody":"In this commit, we introduce Checkstyle to our project to enforce consistent coding style and maintain code quality. The following changes have been made:\n\n- Added Checkstyle plugin to IntelliJ IDEA for integrated code analysis.\n- Configured Checkstyle with a custom checkstyle.xml configuration file tailored to our project\u0027s coding standards.\n- Resolved all Checkstyle issues identified in the codebase, ensuring adherence to the coding guidelines.\n\nThis implementation helps us maintain a cleaner and more consistent codebase, making it easier to collaborate and maintain the project in the long run.\n","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":108,"deletions":64}}},{"hash":"5fc81e417a848604d1e76b9f0819312e6bce5dd7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Checkstyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7f7706fc54ca569d6eeed8eee226c64362da7961","isMergeCommit":false,"messageTitle":"Resolve Parsing and general Code Cleanup","messageBody":" - Improved parsing logic for date and time strings to handle a wider range of formats.\n\n- Conducted a thorough code review and performed extensive code cleanup.\n - Removed redundant code, optimized data structures, and enhanced code readability.\n - Applied consistent coding standards and naming conventions across the project.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":24,"deletions":18}}},{"hash":"f89358acc3325902ca7e0c3ff776a982cc3ec5ee","isMergeCommit":false,"messageTitle":"Add simple GUI","messageBody":"Implemented a basic graphical user interface (GUI) using JavaFX. This GUI includes a main window with a scrollable chat container, a user input field, and a send button. The GUI provides the foundation for future user interaction and chatbot functionality. Logic for chatbot not yet done.\n","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":0,"deletions":3},"java":{"insertions":253,"deletions":57}}}]},{"date":"2023-09-07","commitResults":[{"hash":"06187b43ae7fa04a7efdea84169ddd67f1f185ac","isMergeCommit":false,"messageTitle":"Enhance GUI using JavaFX and maintain chatbot functionality In this commit, I have improved the graphical user interface (GUI) of our application by integrating JavaFX components. The new GUI not only enhances the overall user experience but also provides a more modern and intuitive look and feel. Additionally, we have updated the application\u0027s logic to seamlessly integrate the JavaFX components while ensuring that the core functionality of the chatbot remains intact. This means that users can continue to interact with the chatbot as they did before, with all existing features and capabilities fully preserved.","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":116,"deletions":78}}},{"hash":"344aa4dd9934d6c3a7a8934b8c0d4f42de7094c7","isMergeCommit":true,"messageTitle":"Merge branch \u0027Branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"464f8ca927d4eabad5f1d1fbbdb2ace1d6c0a9b4","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Added assertions in some key places.\n\nEnsures that important assumptions hold at various points in the code.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2},"txt":{"insertions":1,"deletions":1},"java":{"insertions":83,"deletions":90}}},{"hash":"e9f1da2395b47ad1157e00d93e412b12e0c9e7bd","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"Improved the overall general code quality of the project\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":31}}},{"hash":"f1e24c92e8e773a994a1a51c5da156c3040142b4","isMergeCommit":true,"messageTitle":"Merge pull request #1 from shyanyong/branch-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"a44dc4e6228f967a09d00df94567b4cba86a708a","isMergeCommit":true,"messageTitle":"Merge pull request #2 from shyanyong/branch-CodeQuality","messageBody":"Improve Code Quality","fileTypesAndContributionMap":{}},{"hash":"8cfd5aabc885d1254ac5fc1e6e57be7fc32b824a","isMergeCommit":false,"messageTitle":"Add Help function","messageBody":"Provide in-App guidance to users.\n\nAdded command to help page for users to view commands.\n","tags":["BCD-Extension","A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":44,"deletions":22}}},{"hash":"8595d3ef4af5b87ba7ff20471bd2212a4cba1b52","isMergeCommit":true,"messageTitle":"Merge branch \u0027C-Help\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"53b3c4b0b8c809055bc4fe4b337484afac185de0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/shyanyong/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/brotherman/ui/Ui.java\n","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"shyanyong":{"java":1462,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":23,"txt":4}},"authorContributionVariance":{"shyanyong":55226.062},"authorDisplayNameMap":{"shyanyong":"CS2103T-T15-2 WONG..YONG"}} diff --git a/songgthu_ip_master/authorship.json b/songgthu_ip_master/authorship.json index 1f611714..6fb879de 100644 --- a/songgthu_ip_master/authorship.json +++ b/songgthu_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"plugins {","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"repositories {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" mavenCentral()","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"dependencies {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":"test {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" testLogging {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" showExceptions true","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" showCauses true","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" showStackTraces true","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":"application {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" mainClass.set(\"milbot.Mil\")","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":"shadowJar {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" archiveBaseName \u003d \"mil\"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" archiveFileName \u003d \u0027mil.jar\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":"run {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"songgthu":63}},{"path":"src/main/data/mil-tags.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"#heh","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"#new","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"songgthu":2}},{"path":"src/main/data/mil.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"T | 0 | study | #new","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"D | 1 | sss | #heh | Sep 9 2023","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"E | 0 | jhd | #new | Sep 9 2023 - Feb 12 2023","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"songgthu":3}},{"path":"src/main/java/exception/EmptyFindQueryException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class EmptyFindQueryException extends MilException {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public EmptyFindQueryException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"☹ Oopsie! You did not include any query.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"songgthu":8}},{"path":"src/main/java/exception/EmptyTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class EmptyTaskException extends MilException {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public EmptyTaskException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"☹ Oopsie! You did not include any task description.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class InvalidDeadlineException extends MilException {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"☹ Oopsie! Please add your deadline with the following format: \\\"deadline (description) /by (yyyy-mm-dd) \\\".\");","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class InvalidEventException extends MilException {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"☹ Oopsie! Please add your event with the following format: \\\"event (description) /from (yyyy-mm-dd) /to (yyyy-mm-dd)\\\".\");","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class InvalidTaskIndexException extends MilException {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public InvalidTaskIndexException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"☹ Oopsie! The index you input does not match any task.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/MilException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class MilException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public MilException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/NoTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class NoTaskIndexException extends MilException {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public NoTaskIndexException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"☹ Oopsie! You did not input the task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/extensions/Tag.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package extensions;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class Tag {","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" private String tagName;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" public Tag(String tagName) {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":" this.tagName \u003d tagName;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" return \"#\" + tagName;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"songgthu":14}},{"path":"src/main/java/extensions/TagList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package extensions;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import java.util.List;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"public class TagList {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":" private List\u003cTag\u003e tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" public TagList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" tagList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" public List\u003cTag\u003e getTagList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" return tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" public int getSize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" return tagList.size();","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" public void addTag(Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" tagList.add(tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" public Tag getTag(int index) {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" return tagList.get(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" public boolean containTag(String tagNameToFind) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" for (Tag tag : tagList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" if (tag.toString().equals(\"#\" + tagNameToFind)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" return true;","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" public void removeTag(int index) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" tagList.remove(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"songgthu":42}},{"path":"src/main/java/milbot/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"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":"songgthu"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"songgthu"},"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":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":62}},{"path":"src/main/java/milbot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":12}},{"path":"src/main/java/milbot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" private Mil mil \u003d new Mil();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setMil(mil);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":32}},{"path":"src/main/java/milbot/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" private Mil mil;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" private Image chatbot \u003d new Image(this.getClass().getResourceAsStream(\"/images/chatbot.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" String welcomeMessage \u003d \"Hi there, I\u0027m Mil - your personal chatbot.\\n How can I help you today?\";","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(welcomeMessage, chatbot));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" public void setMil(Mil m) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" mil \u003d m;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"songgthu"},"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":43,"author":{"gitId":"songgthu"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" assert input !\u003d null : \"User input should not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" String response \u003d mil.getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" DialogBox.getUserDialog(input, user),","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" DialogBox.getDukeDialog(response, chatbot)","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":57}},{"path":"src/main/java/milbot/Mil.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.TagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" * Mil class represents a chatbot application for managing tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"public class Mil {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" private static Parser parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" private static TagList tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" * Constructs a new instance of the Mil chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" * Initializes the task list, user interface, storage, and parser.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" public Mil() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" tagList \u003d storage.loadTagsFromFile();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" taskList \u003d storage.loadTasksFromFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" parser \u003d new Parser(taskList, ui, storage, tagList);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" String response \u003d parser.parseInput(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" assert response !\u003d null: \"The response should not be null.\";","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" return response;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"songgthu":30,"-":2}},{"path":"src/main/java/milbot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import extensions.TagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import taskclasses.Deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import taskclasses.Event;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import taskclasses.Todo;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"import taskclasses.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import exception.EmptyFindQueryException;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"import exception.EmptyTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"import exception.InvalidDeadlineException;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"import exception.InvalidEventException;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":"import exception.InvalidTaskIndexException;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"import exception.NoTaskIndexException;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" private TagList tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" public Parser(TaskList taskList, Ui ui, Storage storage, TagList tagList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" this.tagList \u003d tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" * Parses the user input and performs corresponding actions based on the input.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" * @param input The input provided by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" * @return response from the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" public String parseInput(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" return executeByeCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" return executeListCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" } else if (input.startsWith(\"mark\") || input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" return executeMarkCommand(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" return executeTodoCommand(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" return executeDeadlineCommand(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" return executeEventCommand(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" } else if(input.startsWith(\"add tag\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" return executeAddTagCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" } else if(input.startsWith(\"delete tag\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" return executeRemoveTagCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":" } else if(input.equals(\"tags\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" return executeTagListCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" } else if(input.startsWith(\"tag\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" return executeTagCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" } else if(input.startsWith(\"untag\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" return executeUntagCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":" } else if(input.startsWith(\"find by tag\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":" return ui.printUnknownMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":" //return executeFindByTagCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"songgthu"},"content":" } else if(input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"songgthu"},"content":" return executeFindCommand(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"songgthu"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"songgthu"},"content":" return executeDeleteCommand(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"songgthu"},"content":" return ui.printUnknownMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"songgthu"},"content":" public String executeByeCommand() {","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"songgthu"},"content":" storage.saveTasksToFile(taskList);","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"songgthu"},"content":" storage.saveTagsToFile(tagList);","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"songgthu"},"content":" return ui.printGoodbyeMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"songgthu"},"content":" public String executeListCommand() {","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"songgthu"},"content":" return ui.printTaskList(taskList);","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"songgthu"},"content":" public String executeMarkCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"songgthu"},"content":" int index \u003d extractTaskIndex(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"songgthu"},"content":" Task task \u003d taskList.getTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"songgthu"},"content":" if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"songgthu"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"songgthu"},"content":" return ui.printMarkTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"songgthu"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"songgthu"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"songgthu"},"content":" return ui.printUnmarkTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"songgthu"},"content":" } catch (NoTaskIndexException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"songgthu"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"songgthu"},"content":" private int extractTaskIndex(String input) throws NoTaskIndexException, InvalidTaskIndexException {","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"songgthu"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"songgthu"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"songgthu"},"content":" throw new NoTaskIndexException();","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"songgthu"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"songgthu"},"content":" if (index \u003c 0 || index \u003e\u003d taskList.getSize()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"songgthu"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"songgthu"},"content":" return index;","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"songgthu"},"content":" public String executeTodoCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"songgthu"},"content":" if (input.equals(\"todo\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"songgthu"},"content":" throw new EmptyTaskException();","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"songgthu"},"content":" } catch (EmptyTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"songgthu"},"content":" Todo task \u003d new Todo(input.substring(5));","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"songgthu"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"songgthu"},"content":" return ui.printNewTask(taskList, task);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"songgthu"},"content":" public String executeDeadlineCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"songgthu"},"content":" if (input.equals(\"deadline\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"songgthu"},"content":" throw new EmptyTaskException();","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"songgthu"},"content":" if (!input.contains(\"/by\") || input.trim().split(\"/by\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"songgthu"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"songgthu"},"content":" } catch (EmptyTaskException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"songgthu"},"content":" } catch (InvalidDeadlineException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"songgthu"},"content":" LocalDate deadlineDate \u003d LocalDate.parse(input.split(\"/\")[1].substring(3).trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"songgthu"},"content":" Deadline deadline \u003d new Deadline(input.split(\"/\")[0].substring(9),","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"songgthu"},"content":" deadlineDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"songgthu"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"songgthu"},"content":" return ui.printNewTask(taskList, deadline);","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"songgthu"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"songgthu"},"content":" public String executeEventCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"songgthu"},"content":" if (input.equals(\"event\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"songgthu"},"content":" throw new EmptyTaskException();","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"songgthu"},"content":" if (!input.contains(\"/from\") || !input.contains(\"/to\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"songgthu"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"songgthu"},"content":" } catch (EmptyTaskException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"songgthu"},"content":" } catch (InvalidEventException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":168,"author":{"gitId":"songgthu"},"content":" LocalDate fromDate \u003d LocalDate.parse(input.split(\"/\")[1].substring(5).trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"songgthu"},"content":" LocalDate toDate \u003d LocalDate.parse(input.split(\"/\")[2].substring(3).trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"songgthu"},"content":" Event event \u003d new Event(input.split(\"/\")[0].substring(6),","lastModifiedDate":"2023-09-08"},{"lineNumber":171,"author":{"gitId":"songgthu"},"content":" fromDate, toDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"songgthu"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-08"},{"lineNumber":173,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":174,"author":{"gitId":"songgthu"},"content":" return ui.printNewTask(taskList, event);","lastModifiedDate":"2023-09-08"},{"lineNumber":175,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"songgthu"},"content":" public String executeDeleteCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":178,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"songgthu"},"content":" if (input.split(\" \").length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"songgthu"},"content":" throw new NoTaskIndexException();","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"songgthu"},"content":" } catch (NoTaskIndexException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":186,"author":{"gitId":"songgthu"},"content":" int index \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":188,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"songgthu"},"content":" if (index \u003c 0 || index \u003e\u003d taskList.getSize()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"songgthu"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-08-27"},{"lineNumber":191,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"songgthu"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":193,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":195,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":196,"author":{"gitId":"songgthu"},"content":" Task task \u003d taskList.getTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"songgthu"},"content":" taskList.removeTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"songgthu"},"content":" return ui.printRemoveTask(task, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":200,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":201,"author":{"gitId":"songgthu"},"content":" public String executeFindCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":202,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":203,"author":{"gitId":"songgthu"},"content":" if (input.trim().equals(\"find\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":204,"author":{"gitId":"songgthu"},"content":" throw new EmptyFindQueryException();","lastModifiedDate":"2023-08-28"},{"lineNumber":205,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":206,"author":{"gitId":"songgthu"},"content":" } catch (EmptyFindQueryException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":207,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":209,"author":{"gitId":"songgthu"},"content":" String taskQuery \u003d input.split(\" \")[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":210,"author":{"gitId":"songgthu"},"content":" TaskList tasksResult \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":211,"author":{"gitId":"songgthu"},"content":" for(Task task : taskList.getTaskList()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":212,"author":{"gitId":"songgthu"},"content":" if(task.toString().contains(taskQuery)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":213,"author":{"gitId":"songgthu"},"content":" tasksResult.addTask(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":214,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":215,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":216,"author":{"gitId":"songgthu"},"content":" return ui.printSearchResult(tasksResult);","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":218,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":219,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":220,"author":{"gitId":"songgthu"},"content":" public String executeAddTagCommand(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":221,"author":{"gitId":"songgthu"},"content":" String tagName \u003d input.split(\"#\")[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":222,"author":{"gitId":"songgthu"},"content":" Tag tag \u003d new Tag(tagName);","lastModifiedDate":"2023-09-10"},{"lineNumber":223,"author":{"gitId":"songgthu"},"content":" tagList.addTag(tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":224,"author":{"gitId":"songgthu"},"content":" return ui.printNewTag(tagList, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":225,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":226,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":227,"author":{"gitId":"songgthu"},"content":" public String executeRemoveTagCommand(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":228,"author":{"gitId":"songgthu"},"content":" int index \u003d Integer.parseInt(input.split(\" \")[2]) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":229,"author":{"gitId":"songgthu"},"content":" Tag tag \u003d tagList.getTag(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":230,"author":{"gitId":"songgthu"},"content":" tagList.removeTag(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":231,"author":{"gitId":"songgthu"},"content":" return ui.printRemoveTag(tag, tagList);","lastModifiedDate":"2023-09-10"},{"lineNumber":232,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":233,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":234,"author":{"gitId":"songgthu"},"content":" public String executeTagListCommand() {","lastModifiedDate":"2023-09-10"},{"lineNumber":235,"author":{"gitId":"songgthu"},"content":" return ui.printTagList(tagList);","lastModifiedDate":"2023-09-10"},{"lineNumber":236,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":237,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":238,"author":{"gitId":"songgthu"},"content":" public String executeTagCommand(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":239,"author":{"gitId":"songgthu"},"content":" int taskIndex \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":240,"author":{"gitId":"songgthu"},"content":" String tagName \u003d input.split(\"#\")[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":241,"author":{"gitId":"songgthu"},"content":" Tag tag \u003d new Tag(tagName);","lastModifiedDate":"2023-09-10"},{"lineNumber":242,"author":{"gitId":"songgthu"},"content":" Task task \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-09-10"},{"lineNumber":243,"author":{"gitId":"songgthu"},"content":" if(tagList.containTag(tagName)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":244,"author":{"gitId":"songgthu"},"content":" task.tagTask(tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":245,"author":{"gitId":"songgthu"},"content":" return ui.printTagTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":246,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":247,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":248,"author":{"gitId":"songgthu"},"content":" return \"Tag task failed\";","lastModifiedDate":"2023-09-10"},{"lineNumber":249,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":250,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":251,"author":{"gitId":"songgthu"},"content":" public String executeUntagCommand(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":252,"author":{"gitId":"songgthu"},"content":" int taskIndex \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":253,"author":{"gitId":"songgthu"},"content":" Task task \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-09-10"},{"lineNumber":254,"author":{"gitId":"songgthu"},"content":" task.untagTask();","lastModifiedDate":"2023-09-10"},{"lineNumber":255,"author":{"gitId":"songgthu"},"content":" return ui.printUntagTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":256,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":257,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":257}},{"path":"src/main/java/milbot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.TagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import taskclasses.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"import java.io.File;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" * Storage class handles reading tasks from and writing tasks to a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" private File taskFile;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" private File tagsFile;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" private FileWriter tasksOutput;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" private String tasksFilePath;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" private String tagsFilePath;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" private TagList tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" * Constructs a Storage instance with a default file path.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" public Storage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" tasksFilePath \u003d \"src\\\\main\\\\data\\\\mil.txt\";","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" taskFile \u003d new File(tasksFilePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" tagsFilePath \u003d \"src\\\\main\\\\data\\\\mil-tags.txt\";","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" tagsFile \u003d new File(tagsFilePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" tagList \u003d new TagList();","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" * Loads tasks from the file and adds them to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" public TaskList loadTasksFromFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" try (BufferedReader inputFile \u003d new BufferedReader(new FileReader(taskFile))) {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" String line;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" while ((line \u003d inputFile.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" Task task \u003d Task.createTaskFromData(line);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" System.err.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":" return taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" public TagList loadTagsFromFile() {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" try (BufferedReader inputFile \u003d new BufferedReader(new FileReader(tagsFile))) {","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" String line;","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":" while ((line \u003d inputFile.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":" if (line.contains(\"#\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":" Tag tag \u003d new Tag(line.split(\"#\")[1].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"songgthu"},"content":" tagList.addTag(tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"songgthu"},"content":" System.err.println(\"Error loading tags: \" + e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"songgthu"},"content":" return tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"songgthu"},"content":" * Saves tasks from the provided TaskList to the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"songgthu"},"content":" * @param tasks The TaskList containing tasks to be saved.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"songgthu"},"content":" public void saveTasksToFile(TaskList tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"songgthu"},"content":" taskList \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"songgthu"},"content":" tasksOutput \u003d new FileWriter(tasksFilePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"songgthu"},"content":" BufferedWriter outputFile \u003d new BufferedWriter(tasksOutput);","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"songgthu"},"content":" for (Task task : tasks.getTaskList()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"songgthu"},"content":" outputFile.write(task.formatToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"songgthu"},"content":" outputFile.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"songgthu"},"content":" outputFile.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"songgthu"},"content":" System.err.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"songgthu"},"content":" public void saveTagsToFile(TagList tags) {","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"songgthu"},"content":" tagList \u003d tags;","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"songgthu"},"content":" tasksOutput \u003d new FileWriter(tagsFilePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"songgthu"},"content":" BufferedWriter outputFile \u003d new BufferedWriter(tasksOutput);","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"songgthu"},"content":" for (Tag tag : tags.getTagList()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"songgthu"},"content":" outputFile.write(tag.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"songgthu"},"content":" outputFile.newLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"songgthu"},"content":" outputFile.close();","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"songgthu"},"content":" System.err.println(\"Error saving tags: \" + e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":109}},{"path":"src/main/java/milbot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import taskclasses.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":" * TaskList class represents a list of tasks and provides methods to manage tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" private List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" * Constructs a TaskList instance with an empty list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" * Retrieves the list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" public List\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" * Gets the number of tasks in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" return taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" * Retrieves the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" return taskList.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":" * Removes a task from the task list at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" taskList.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":62}},{"path":"src/main/java/milbot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import extensions.TagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import taskclasses.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import taskclasses.Deadline;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import taskclasses.Event;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" * Ui class handles user interface-related functionalities.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" * Prints a goodbye message before the chatbot exits.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" * @return the goodbye message.","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" public String printGoodbyeMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" return \"Have a nice day and see you again soon!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" * Prints an error message.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" * @param message The error message to be printed.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" public String printErrorMessage(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" return message + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" * Prints a message indicating a new task has been added to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" * @param taskList The TaskList containing the added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" * @param task The added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" * @return add new task message.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" public String printNewTask(TaskList taskList, Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" String newTaskMessage \u003d \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" \" \" + task + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" \"Now you have \" + taskList.getSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" return newTaskMessage;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" * Prints the list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":" * @param taskList The TaskList containing the tasks to be printed.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" * @return A message containing the task list.","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" public String printTaskList(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" String taskListMessage \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":" for (Task task : taskList.getTaskList()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":" taskListMessage +\u003d String.format(\"%d. %s\\n\", i, task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"songgthu"},"content":" i++;","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"songgthu"},"content":" return taskListMessage;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"songgthu"},"content":" * Prints a message indicating that a task has been marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"songgthu"},"content":" * @param task The task that has been marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"songgthu"},"content":" * @return A message indicating that the task has been marked as done.","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"songgthu"},"content":" public String printMarkTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"songgthu"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"songgthu"},"content":" * Prints a message indicating that a task has been marked as not done yet.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"songgthu"},"content":" * @param task The task that has been marked as not done yet.","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"songgthu"},"content":" * @return A message indicating that the task has been marked as undone.","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"songgthu"},"content":" public String printUnmarkTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"songgthu"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"songgthu"},"content":" * Prints a message indicating that a task has been removed from the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"songgthu"},"content":" * @param task The task that has been removed.","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"songgthu"},"content":" * @param taskList The TaskList after the task has been removed.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"songgthu"},"content":" * @return A message indicating that the task has been removed.","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"songgthu"},"content":" public String printRemoveTask(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"songgthu"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"songgthu"},"content":" \"Now you have \" + taskList.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"songgthu"},"content":" * Prints a message indicating an unknown command.","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"songgthu"},"content":" * @return A message indicating that the user command is unknown.","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"songgthu"},"content":" public String printUnknownMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"songgthu"},"content":" return \"Oopsie! I\u0027m sorry, but I don\u0027t know what that means :(\";","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"songgthu"},"content":" * Generates a message containing tasks that match the search query.","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"songgthu"},"content":" * @param taskList The task list to search within.","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"songgthu"},"content":" * @return A message of tasks that match the search query, or no matches found.","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"songgthu"},"content":" public String printSearchResult(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"songgthu"},"content":" if (taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"songgthu"},"content":" return \"There is no task matched to your query\";","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"songgthu"},"content":" String searchResult \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"songgthu"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"songgthu"},"content":" for (Task task : taskList.getTaskList()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"songgthu"},"content":" searchResult +\u003d String.format(\"%d.%s \\n\", i, task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"songgthu"},"content":" i++;","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"songgthu"},"content":" return searchResult;","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"songgthu"},"content":" public String printNewTag(TagList tagList, Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"songgthu"},"content":" String newTagMessage \u003d \"Got it. I\u0027ve added this tag:\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"songgthu"},"content":" \" \" + tag + \"\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"songgthu"},"content":" \"Now you have \" + tagList.getSize() + \" tags.\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"songgthu"},"content":" return newTagMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"songgthu"},"content":" public String printRemoveTag(Tag tag, TagList tagList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"songgthu"},"content":" return \"Noted. I\u0027ve removed this tag:\\n\" + tag + \"\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"songgthu"},"content":" \"Now you have \" + tagList.getSize() + \" tags.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"songgthu"},"content":" public String printTagList(TagList tagList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"songgthu"},"content":" String taskListMessage \u003d \"Here are the tags you have:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"songgthu"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"songgthu"},"content":" for (Tag tag : tagList.getTagList()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"songgthu"},"content":" taskListMessage +\u003d String.format(\"%d. %s\\n\", i, tag.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"songgthu"},"content":" i++;","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"songgthu"},"content":" return taskListMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"songgthu"},"content":" public String printTagTask(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"songgthu"},"content":" return \"Nice! I\u0027ve tagged this task:\\n\" + task.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"songgthu"},"content":" public String printUntagTask(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"songgthu"},"content":" return \"Nice! I\u0027ve untagged this task:\\n\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":166,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":167}},{"path":"src/main/java/taskclasses/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" * Represents a task of type \"Deadline\" with a specific due date.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" private String by;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" * Constructs a Deadline task with the given description and due date.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" * @param by The due date of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" this.by \u003d by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" * Constructs a Deadline task with the given description, completion status, and due date.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" * @param by The due date of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" public Deadline(String description, boolean isDone, LocalDate by, Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" super(description, isDone, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" this.by \u003d by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" public String formatToFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" return \"D | \" + super.formatToFile() + \" | \" + by;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"songgthu":45}},{"path":"src/main/java/taskclasses/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" protected String from;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" protected String to;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" this.from \u003d from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" this.to \u003d to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" public Event(String description, boolean isDone, LocalDate from, LocalDate to, Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" super(description, isDone, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" this.from \u003d from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" this.to \u003d to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" public String formatToFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" return \"E | \" + super.formatToFile() + \" | \" + from + \" - \" + to;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"songgthu":29}},{"path":"src/main/java/taskclasses/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":" * Represents a basic task with a description and completion status.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" private String description;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" private Tag tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" * Constructs a Task with the given description and sets the completion status to false.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" assert description !\u003d null : \"Task description should not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" * Constructs a Task with the given description and completion status.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" public Task(String description, boolean isDone, Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" assert description !\u003d null : \"Task description should not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" * Creates a task object from a data line in storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" * @param dataLine The data line representing the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" * @return A Task object created from the data line.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" public static Task createTaskFromData(String dataLine) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" String[] parts \u003d dataLine.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" assert parts.length \u003e\u003d 3 : \"Invalid data line format\";","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" String type \u003d parts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" boolean isDone \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" int dateIndex \u003d 3;","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" Tag tag \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" if(parts.length \u003e 3 \u0026\u0026 parts[3].contains(\"#\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" dateIndex \u003d 4;","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" String tagData \u003d parts[3].split(\"#\")[1].trim();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" tag \u003d new Tag(tagData);","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":" return new Todo(description, isDone, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"songgthu"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"songgthu"},"content":" LocalDate by \u003d LocalDate.parse(parts[dateIndex].trim(), inputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"songgthu"},"content":" return new Deadline(description, isDone, by, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"songgthu"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"songgthu"},"content":" String[] dates \u003d parts[dateIndex].split(\" - \");","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"songgthu"},"content":" String fromDateString \u003d dates[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"songgthu"},"content":" String toDateString \u003d dates[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"songgthu"},"content":" LocalDate from \u003d LocalDate.parse(fromDateString, inputFormatter);","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"songgthu"},"content":" LocalDate to \u003d LocalDate.parse(toDateString, inputFormatter);","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"songgthu"},"content":" return new Event(description, isDone, from, to, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"songgthu"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"songgthu"},"content":" return null; // Unknown task type","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"songgthu"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"songgthu"},"content":" assert !isDone : \"This task is already marked as done\";","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"songgthu"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":85,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":86,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"songgthu"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":88,"author":{"gitId":"songgthu"},"content":" assert isDone : \"This task is not marked as done\";","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"songgthu"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":90,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":91,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":92,"author":{"gitId":"songgthu"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":93,"author":{"gitId":"songgthu"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-20"},{"lineNumber":94,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":95,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":96,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"songgthu"},"content":" * Formats the task for storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"songgthu"},"content":" * @return A formatted string representing the task for storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"songgthu"},"content":" public String formatToFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"songgthu"},"content":" String status \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"songgthu"},"content":" if(this.tag !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"songgthu"},"content":" return status + \" | \" + description + \" | \" + this.tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"songgthu"},"content":" return status + \" | \" + description;","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"songgthu"},"content":" public void tagTask(Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"songgthu"},"content":" if(this.tag \u003d\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"songgthu"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"songgthu"},"content":" public void untagTask() {","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"songgthu"},"content":" if(this.tag !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"songgthu"},"content":" this.tag \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":120,"author":{"gitId":"songgthu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":121,"author":{"gitId":"songgthu"},"content":" if (this.tag !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"songgthu"},"content":" return String.format(\"[%s] %s %s\", this.getStatusIcon(), this.description, this.tag.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"songgthu"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"songgthu"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":126,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":127,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"songgthu":127}},{"path":"src/main/java/taskclasses/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" * Represents a task of type \"Todo\" that can be completed.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" * Constructs a Todo task with the given description.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" public Todo(String description, boolean isDone, Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" super(description, isDone, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" public String formatToFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" return \"T | \" + super.formatToFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"songgthu":29}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"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":"songgthu"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"songgthu"},"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":"songgthu"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"15.0\" right\u003d\"15.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"songgthu"},"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\"milbot.MainWindow\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"songgthu"},"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":"songgthu"},"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":"songgthu"},"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":"songgthu"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":19}},{"path":"src/test/java/taskclasses/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import taskclasses.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" public void testFormatToFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" LocalDate dueDate \u003d LocalDate.of(2023, 9, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" Deadline deadline \u003d new Deadline(\"Complete project\", dueDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"D | 0 | Complete project | Sep 1 2023\";","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, deadline.formatToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" public void testToString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" LocalDate dueDate \u003d LocalDate.of(2023, 9, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", true, dueDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" String formattedDueDate \u003d dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"[D][X] Submit report (by: \" + formattedDueDate + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":32}},{"path":"src/test/java/taskclasses/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import taskclasses.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"public class EventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" public void testFormatToFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" LocalDate fromDate \u003d LocalDate.of(2023, 9, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" LocalDate toDate \u003d LocalDate.of(2023, 9, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" Event event \u003d new Event(\"Conference\", fromDate, toDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" String formattedFromDate \u003d fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" String formattedToDate \u003d toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"E | 0 | Conference | \" + formattedFromDate + \" - \" + formattedToDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, event.formatToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" public void testToString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" LocalDate fromDate \u003d LocalDate.of(2023, 9, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" LocalDate toDate \u003d LocalDate.of(2023, 9, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" Event event \u003d new Event(\"Party\", true, fromDate, toDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" String formattedFromDate \u003d fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" String formattedToDate \u003d toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"[E][X] Party (from: \" + formattedFromDate + \" to: \" + formattedToDate + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, event.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":35}},{"path":"src/test/java/taskclasses/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import taskclasses.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" public void testFormatToFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" Todo todo \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"T | 0 | Buy groceries\";","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, todo.formatToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" public void testToString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" Todo todo \u003d new Todo(\"Read a book\");","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"[T][ ] Read a book\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, todo.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":23}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"todo complete lab 1","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"todo test","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"deadline finish task /by 2023-11-07","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"event do stuff /from 2023-11-01 /to 2023-11-02","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"mark 2","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"mark 3","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"unmark 1","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"delete 2","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":10}},{"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":"songgthu"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"REM compile the code into the bin folder, including packages","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\exception\\*.java ..\\src\\main\\java\\milbot\\*.java ..\\src\\main\\java\\taskclasses\\*.java","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"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":19,"author":{"gitId":"songgthu"},"content":"java -classpath ..\\bin milbot.Mil \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"songgthu":4,"-":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":"-"},"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":"songgthu"},"content":"java -classpath ../bin Mil \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-21"},{"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":"songgthu"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2023-08-21"},{"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":{"songgthu":2,"-":32}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"plugins {","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"repositories {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" mavenCentral()","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"dependencies {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":"test {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" testLogging {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" showExceptions true","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" showCauses true","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" showStackTraces true","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":"application {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" mainClass.set(\"milbot.Launcher\")","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":"shadowJar {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" archiveBaseName \u003d \"mil\"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" archiveFileName \u003d \u0027mil.jar\u0027","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":"run {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"songgthu":63}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"# Milbot User Guide","lastModifiedDate":"2023-09-16"},{"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":"songgthu"},"content":"### Adding a new Task","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"Adds a new task to the task list","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"#### Adding a new Todo","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"A Todo is a task with only task name.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":"Format: `todo TASK_NAME`","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"#### Adding a new Deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":"A Deadline is a task with a completion date.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":"Format: `deadline DEADLINE_NAME /by DATE`","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":"#### Adding a new Event","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":"An Event is a task with a time range.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":"Format: `event EVENT_NAME /from DATE_1 /to DATE_2`","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":"Got it. I\u0027ve added this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" TASK_NAME","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":"Now you have TOTAL_TASKS tasks in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":"![](/event_example.png)","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":"### Deleting a task","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":"Deletes a task from the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":"Noted. I\u0027ve removed this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" TASK_NAME","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":"Now you have TOTAL_TASKS tasks in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":"### Viewing task list","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":"Shows the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":"Format: `list`","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":"### Marking a task as done/undone","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":"Marks a task to be completed or incompleted.","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":"Format: ","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"songgthu"},"content":"mark `TASK_INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":66,"author":{"gitId":"songgthu"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"songgthu"},"content":"Nice! I\u0027ve marked this task as done: TASK_NAME","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"songgthu"},"content":"![](/mark_example.png)","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"songgthu"},"content":"unmark `TASK_INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":75,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":77,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"songgthu"},"content":"OK, I\u0027ve marked this task as not done yet: TASK_NAME","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"songgthu"},"content":"### Finding a task","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"songgthu"},"content":"Find tasks that contains a matching substring.","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"songgthu"},"content":"Format: `find TASK_NAME`","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"songgthu"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"songgthu"},"content":"- If no task found:","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"songgthu"},"content":"There is no task matched to your query","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"songgthu"},"content":"- If found:","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"songgthu"},"content":"Here are the matching tasks in your list:","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"songgthu"},"content":"![](/find_example.png)","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"songgthu"},"content":"### Adding a new tag","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"songgthu"},"content":"Adds a new tag to the tag list.","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"songgthu"},"content":"Format: `add tag #TAG_NAME`","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"songgthu"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"songgthu"},"content":"Got it. I\u0027ve added this tag:","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"songgthu"},"content":" TASK_NAME","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"songgthu"},"content":"Now you have TOTAL_TAGS tags in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"songgthu"},"content":"### Deleting tag","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"songgthu"},"content":"Deletes a tag from a tag list.","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"songgthu"},"content":"Format: `delete tag #TAG_INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"songgthu"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"songgthu"},"content":"Noted. I\u0027ve removed this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"songgthu"},"content":"TASK_NAME","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"songgthu"},"content":"Now you have TOTAL_TASKS tasks in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"songgthu"},"content":"### Tagging a task","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"songgthu"},"content":"Associates a tag with a specific task in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"songgthu"},"content":"Format: `tag TASK_NAME TASK_INDEX`","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"songgthu"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"songgthu"},"content":"Nice! I\u0027ve tagged this task: TASK","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"songgthu"},"content":"![](/tag_example.png)","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"songgthu"},"content":"### Untagging a task","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"songgthu"},"content":"Removes a tag from a specific task in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"songgthu"},"content":"Format: `untag TASK_NAME`","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"songgthu"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"songgthu"},"content":"Nice! I\u0027ve untagged this task: TASK","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"songgthu"},"content":"### Viewing tags list","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"songgthu"},"content":"Shows all the tags in the tag list.","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"songgthu"},"content":"Format: `tags`","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"songgthu"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"songgthu"},"content":"Here are the tags you have:","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"songgthu"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"songgthu"},"content":"### Exiting the application","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"songgthu"},"content":"Show the goodbye message and save the data.","lastModifiedDate":"2023-09-16"},{"lineNumber":169,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"songgthu"},"content":"Format: `bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":171,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":172,"author":{"gitId":"songgthu"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":174,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":175,"author":{"gitId":"songgthu"},"content":"Have a nice day and see you again soon!","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"songgthu":152,"-":24}},{"path":"src/main/data/mil-tags.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"#urgent","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"#school","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"#personal","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"songgthu":3}},{"path":"src/main/data/mil.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"T | 1 | laundry","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"D | 0 | ip | Sep 22 2023","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"T | 0 | shj","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"T | 0 | sjisl","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"T | 0 | shso","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"songgthu":5}},{"path":"src/main/java/exception/EmptyFindQueryException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class EmptyFindQueryException extends MilException {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public EmptyFindQueryException() {","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"Oopsie! You did not include any query.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"songgthu":8}},{"path":"src/main/java/exception/EmptyTagException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class EmptyTagException extends MilException {","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public EmptyTagException() {","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"Oopsie! Cannot create an empty tag.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/EmptyTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class EmptyTaskException extends MilException {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public EmptyTaskException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"Oopsie! You did not include tag description :(\");","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class InvalidDeadlineException extends MilException {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"Oopsie! Please add your deadline with the following format: \\\"deadline (description) /by (yyyy-mm-dd) \\\".\");","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class InvalidEventException extends MilException {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"Oopsie! Please add your event with the following format: \\\"event (description) /from (yyyy-mm-dd) /to (yyyy-mm-dd)\\\".\");","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/InvalidTagIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class InvalidTagIndexException extends MilException {","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public InvalidTagIndexException() {","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"The index you input does not match any tag\");","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/InvalidTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class InvalidTaskIndexException extends MilException {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public InvalidTaskIndexException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"Oopsie! The index you entered does not match any task.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/MilException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class MilException extends Exception {","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public MilException(String message) {","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(message);","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/NoTagIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class NoTagIndexException extends MilException {","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public NoTagIndexException() {","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"Oopsie! You did not include tag description :(\");","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-16"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/exception/NoTaskIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class NoTaskIndexException extends MilException {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" public NoTaskIndexException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":" super(\"Oopsie! You did not input the task index.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":7}},{"path":"src/main/java/extensions/Tag.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package extensions;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"public class Tag {","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":" private String tagName;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" public Tag(String tagName) {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":" this.tagName \u003d tagName;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" return \"#\" + tagName;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"songgthu":14}},{"path":"src/main/java/extensions/TagList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package extensions;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import java.util.List;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"public class TagList {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":" private List\u003cTag\u003e tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" public TagList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" tagList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" public List\u003cTag\u003e getTagList() {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" return tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" public int getSize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" return tagList.size();","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" public void addTag(Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" tagList.add(tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" public Tag getTag(int index) {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" return tagList.get(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" public boolean containTag(String tagNameToFind) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" for (Tag tag : tagList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" if (tag.toString().equals(\"#\" + tagNameToFind)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" return true;","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" public void removeTag(int index) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" tagList.remove(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"songgthu":42}},{"path":"src/main/java/milbot/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"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":"songgthu"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" private Label dialog;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"songgthu"},"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":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":62}},{"path":"src/main/java/milbot/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":12}},{"path":"src/main/java/milbot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" private Mil mil \u003d new Mil();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setMil(mil);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" stage.show();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":32}},{"path":"src/main/java/milbot/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" private Mil mil;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" private Image chatbot \u003d new Image(this.getClass().getResourceAsStream(\"/images/chatbot.png\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" public void initialize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" String welcomeMessage \u003d \"Hi there, I\u0027m Mil - your personal chatbot.\\n How can I help you today?\";","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(welcomeMessage, chatbot));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" public void setMil(Mil m) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" mil \u003d m;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"songgthu"},"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":43,"author":{"gitId":"songgthu"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" @FXML","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" assert input !\u003d null : \"User input should not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" String response \u003d mil.getResponse(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" DialogBox.getUserDialog(input, user),","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" DialogBox.getDukeDialog(response, chatbot)","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" userInput.clear();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":57}},{"path":"src/main/java/milbot/Mil.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.TagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" * Mil class represents a chatbot application for managing tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"public class Mil {","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" private static Parser parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" private static TagList tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" * Constructs a new instance of the Mil chatbot.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" * Initializes the task list, user interface, storage, and parser.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" public Mil() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" tagList \u003d storage.loadTagsFromFile();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" taskList \u003d storage.loadTasksFromFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" parser \u003d new Parser(taskList, ui, storage, tagList);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" String response \u003d parser.parseInput(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" assert response !\u003d null: \"The response should not be null.\";","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" return response;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"songgthu":30,"-":2}},{"path":"src/main/java/milbot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import exception.*;","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import extensions.TagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import taskclasses.Deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import taskclasses.Event;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"import taskclasses.Todo;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import taskclasses.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" private TagList tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" public Parser(TaskList taskList, Ui ui, Storage storage, TagList tagList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" this.tagList \u003d tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" * Parses the user input and performs corresponding actions based on the input.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" * @param input The input provided by the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" * @return response from the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" public String parseInput(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" String trimmedInput \u003d input.trim();","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" if (trimmedInput.equals(\"bye\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" return executeByeCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" } else if (trimmedInput.equals(\"list\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" return executeListCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" } else if (trimmedInput.startsWith(\"mark\") || trimmedInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" return executeMarkCommand(trimmedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" } else if (trimmedInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" return executeTodoCommand(trimmedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" } else if (trimmedInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" return executeDeadlineCommand(trimmedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" } else if (trimmedInput.startsWith(\"event\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" return executeEventCommand(trimmedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":" } else if(trimmedInput.startsWith(\"add tag\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" return executeAddTagCommand(trimmedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" } else if(trimmedInput.startsWith(\"delete tag\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" return executeRemoveTagCommand(trimmedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" } else if(trimmedInput.equals(\"tags\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" return executeTagListCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" } else if(trimmedInput.startsWith(\"tag\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" return executeTagCommand(trimmedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":" } else if(trimmedInput.startsWith(\"untag\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" return executeUntagCommand(trimmedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" } else if(trimmedInput.startsWith(\"find\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" return executeFindCommand(trimmedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" } else if (trimmedInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" return executeDeleteCommand(trimmedInput);","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":" return ui.printUnknownMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"songgthu"},"content":" * Executes the \"bye\" command, which saves tasks and tags to files and","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"songgthu"},"content":" * prints a goodbye message.","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"songgthu"},"content":" * @return The goodbye message.","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"songgthu"},"content":" public String executeByeCommand() {","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"songgthu"},"content":" storage.saveTasksToFile(taskList);","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"songgthu"},"content":" storage.saveTagsToFile(tagList);","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"songgthu"},"content":" return ui.printGoodbyeMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"songgthu"},"content":" * Executes the \"list\" command, which prints the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"songgthu"},"content":" * @return The task list as a string.","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"songgthu"},"content":" public String executeListCommand() {","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"songgthu"},"content":" return ui.printTaskList(taskList);","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"songgthu"},"content":" * Executes the \"mark\" or \"unmark\" command to mark or unmark a task as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"songgthu"},"content":" * @return The response message indicating the task\u0027s status change.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"songgthu"},"content":" public String executeMarkCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"songgthu"},"content":" int index \u003d extractTaskIndex(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"songgthu"},"content":" Task task \u003d taskList.getTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"songgthu"},"content":" if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"songgthu"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"songgthu"},"content":" return ui.printMarkTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"songgthu"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"songgthu"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"songgthu"},"content":" return ui.printUnmarkTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"songgthu"},"content":" } catch (NoTaskIndexException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"songgthu"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"songgthu"},"content":" * Extracts the task index from a command input.","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"songgthu"},"content":" * @return The task index.","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"songgthu"},"content":" * @throws NoTaskIndexException If the task index is missing.","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"songgthu"},"content":" * @throws InvalidTaskIndexException If the task index is invalid.","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"songgthu"},"content":" private int extractTaskIndex(String input) throws NoTaskIndexException, InvalidTaskIndexException {","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"songgthu"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"songgthu"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"songgthu"},"content":" throw new NoTaskIndexException();","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"songgthu"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"songgthu"},"content":" if (index \u003c 0 || index \u003e\u003d taskList.getSize()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"songgthu"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"songgthu"},"content":" return index;","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"songgthu"},"content":" * Executes the \"todo\" command to add a new todo task.","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"songgthu"},"content":" * @return The response message indicating the addition of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"songgthu"},"content":" public String executeTodoCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"songgthu"},"content":" if (input.equals(\"todo\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"songgthu"},"content":" throw new EmptyTaskException();","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"songgthu"},"content":" } catch (EmptyTaskException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"songgthu"},"content":" Todo task \u003d new Todo(input.substring(5));","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"songgthu"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"songgthu"},"content":" return ui.printNewTask(taskList, task);","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"songgthu"},"content":" * Executes the \"deadline\" command to add a new deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"songgthu"},"content":" * @return The response message indicating the addition of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"songgthu"},"content":" public String executeDeadlineCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"songgthu"},"content":" if (input.equals(\"deadline\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":162,"author":{"gitId":"songgthu"},"content":" throw new EmptyTaskException();","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"songgthu"},"content":" if (!input.contains(\"/by\") || input.split(\"/by\").length \u003d\u003d 1) {","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"songgthu"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"songgthu"},"content":" } catch (EmptyTaskException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":168,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":169,"author":{"gitId":"songgthu"},"content":" } catch (InvalidDeadlineException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":173,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"songgthu"},"content":" LocalDate deadlineDate \u003d LocalDate.parse(input.split(\"/by\")[1].trim());","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"songgthu"},"content":" Deadline deadline \u003d new Deadline(input.split(\"/by\")[0].substring(9),","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"songgthu"},"content":" deadlineDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"songgthu"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-08"},{"lineNumber":178,"author":{"gitId":"songgthu"},"content":" return ui.printNewTask(taskList, deadline);","lastModifiedDate":"2023-09-08"},{"lineNumber":179,"author":{"gitId":"songgthu"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":183,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":185,"author":{"gitId":"songgthu"},"content":" * Executes the \"event\" command to add a new event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":186,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":187,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"songgthu"},"content":" * @return The response message indicating the addition of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"songgthu"},"content":" public String executeEventCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":191,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":192,"author":{"gitId":"songgthu"},"content":" if (input.equals(\"event\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":193,"author":{"gitId":"songgthu"},"content":" throw new EmptyTaskException();","lastModifiedDate":"2023-09-08"},{"lineNumber":194,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":195,"author":{"gitId":"songgthu"},"content":" if (!input.contains(\"/from\") || !input.contains(\"/to\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":196,"author":{"gitId":"songgthu"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-27"},{"lineNumber":197,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":198,"author":{"gitId":"songgthu"},"content":" } catch (EmptyTaskException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":199,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":200,"author":{"gitId":"songgthu"},"content":" } catch (InvalidEventException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":201,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":203,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":204,"author":{"gitId":"songgthu"},"content":" LocalDate fromDate \u003d LocalDate.parse(input.split(\"/\")[1].substring(5).trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":205,"author":{"gitId":"songgthu"},"content":" LocalDate toDate \u003d LocalDate.parse(input.split(\"/\")[2].substring(3).trim());","lastModifiedDate":"2023-08-27"},{"lineNumber":206,"author":{"gitId":"songgthu"},"content":" Event event \u003d new Event(input.split(\"/\")[0].substring(6),","lastModifiedDate":"2023-09-08"},{"lineNumber":207,"author":{"gitId":"songgthu"},"content":" fromDate, toDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":208,"author":{"gitId":"songgthu"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-08"},{"lineNumber":209,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":210,"author":{"gitId":"songgthu"},"content":" return ui.printNewTask(taskList, event);","lastModifiedDate":"2023-09-08"},{"lineNumber":211,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":212,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":213,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":214,"author":{"gitId":"songgthu"},"content":" * Executes the \"delete\" command to remove a task.","lastModifiedDate":"2023-09-16"},{"lineNumber":215,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":216,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":217,"author":{"gitId":"songgthu"},"content":" * @return The response message indicating the removal of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":218,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":219,"author":{"gitId":"songgthu"},"content":" public String executeDeleteCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":220,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":221,"author":{"gitId":"songgthu"},"content":" if (input.split(\" \").length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":222,"author":{"gitId":"songgthu"},"content":" throw new NoTaskIndexException();","lastModifiedDate":"2023-08-27"},{"lineNumber":223,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":224,"author":{"gitId":"songgthu"},"content":" } catch (NoTaskIndexException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":225,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":226,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":227,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":228,"author":{"gitId":"songgthu"},"content":" int index \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":229,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":230,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":231,"author":{"gitId":"songgthu"},"content":" if (index \u003c 0 || index \u003e\u003d taskList.getSize()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":232,"author":{"gitId":"songgthu"},"content":" throw new InvalidTaskIndexException();","lastModifiedDate":"2023-08-27"},{"lineNumber":233,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":234,"author":{"gitId":"songgthu"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":235,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":236,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":237,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":238,"author":{"gitId":"songgthu"},"content":" Task task \u003d taskList.getTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":239,"author":{"gitId":"songgthu"},"content":" taskList.removeTask(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":240,"author":{"gitId":"songgthu"},"content":" return ui.printRemoveTask(task, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":242,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":243,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":244,"author":{"gitId":"songgthu"},"content":" * Executes the \"find\" command to search for tasks based on a query.","lastModifiedDate":"2023-09-16"},{"lineNumber":245,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":246,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":247,"author":{"gitId":"songgthu"},"content":" * @return The response message containing the search results.","lastModifiedDate":"2023-09-16"},{"lineNumber":248,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":249,"author":{"gitId":"songgthu"},"content":" public String executeFindCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":250,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":251,"author":{"gitId":"songgthu"},"content":" if (input.equals(\"find\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":252,"author":{"gitId":"songgthu"},"content":" throw new EmptyFindQueryException();","lastModifiedDate":"2023-08-28"},{"lineNumber":253,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":254,"author":{"gitId":"songgthu"},"content":" } catch (EmptyFindQueryException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":255,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":257,"author":{"gitId":"songgthu"},"content":" String taskQuery \u003d input.split(\" \")[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":258,"author":{"gitId":"songgthu"},"content":" TaskList tasksResult \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":259,"author":{"gitId":"songgthu"},"content":" for(Task task : taskList.getTaskList()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":260,"author":{"gitId":"songgthu"},"content":" if(task.toString().contains(taskQuery)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":261,"author":{"gitId":"songgthu"},"content":" tasksResult.addTask(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":262,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":263,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":264,"author":{"gitId":"songgthu"},"content":" return ui.printSearchResult(tasksResult);","lastModifiedDate":"2023-09-02"},{"lineNumber":265,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":266,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":267,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":268,"author":{"gitId":"songgthu"},"content":" * Executes the \"add tag\" command to add a new tag.","lastModifiedDate":"2023-09-16"},{"lineNumber":269,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":270,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":271,"author":{"gitId":"songgthu"},"content":" * @return The response message indicating the addition of the tag.","lastModifiedDate":"2023-09-16"},{"lineNumber":272,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":273,"author":{"gitId":"songgthu"},"content":" public String executeAddTagCommand(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":274,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":275,"author":{"gitId":"songgthu"},"content":" if(input.equals(\"tag\") || input.equals(\"tag #\")) {","lastModifiedDate":"2023-09-16"},{"lineNumber":276,"author":{"gitId":"songgthu"},"content":" throw new EmptyTagException();","lastModifiedDate":"2023-09-16"},{"lineNumber":277,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":278,"author":{"gitId":"songgthu"},"content":" } catch(EmptyTagException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":279,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":280,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":281,"author":{"gitId":"songgthu"},"content":" String tagName \u003d input.split(\"#\")[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":282,"author":{"gitId":"songgthu"},"content":" Tag tag \u003d new Tag(tagName);","lastModifiedDate":"2023-09-10"},{"lineNumber":283,"author":{"gitId":"songgthu"},"content":" tagList.addTag(tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":284,"author":{"gitId":"songgthu"},"content":" return ui.printNewTag(tagList, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":285,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":286,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":287,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":288,"author":{"gitId":"songgthu"},"content":" * Executes the \"delete tag\" command to remove a tag.","lastModifiedDate":"2023-09-16"},{"lineNumber":289,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":290,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":291,"author":{"gitId":"songgthu"},"content":" * @return The response message indicating the removal of the tag.","lastModifiedDate":"2023-09-16"},{"lineNumber":292,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":293,"author":{"gitId":"songgthu"},"content":" public String executeRemoveTagCommand(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":294,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":295,"author":{"gitId":"songgthu"},"content":" if(input.split(\" \").length !\u003d 3) {","lastModifiedDate":"2023-09-16"},{"lineNumber":296,"author":{"gitId":"songgthu"},"content":" throw new NoTagIndexException();","lastModifiedDate":"2023-09-16"},{"lineNumber":297,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":298,"author":{"gitId":"songgthu"},"content":" } catch(NoTagIndexException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":299,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":300,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":301,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":302,"author":{"gitId":"songgthu"},"content":" int index \u003d Integer.parseInt(input.split(\" \")[2]) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":303,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":304,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":305,"author":{"gitId":"songgthu"},"content":" if (index \u003c 0 || index \u003e\u003d tagList.getSize()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":306,"author":{"gitId":"songgthu"},"content":" throw new InvalidTagIndexException();","lastModifiedDate":"2023-09-16"},{"lineNumber":307,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":308,"author":{"gitId":"songgthu"},"content":" Tag tag \u003d tagList.getTag(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":309,"author":{"gitId":"songgthu"},"content":" tagList.removeTag(index);","lastModifiedDate":"2023-09-10"},{"lineNumber":310,"author":{"gitId":"songgthu"},"content":" return ui.printRemoveTag(tag, tagList);","lastModifiedDate":"2023-09-10"},{"lineNumber":311,"author":{"gitId":"songgthu"},"content":" } catch (InvalidTagIndexException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":312,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":313,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":314,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":315,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":316,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":317,"author":{"gitId":"songgthu"},"content":" * Executes the \"tags\" command to list all available tags.","lastModifiedDate":"2023-09-16"},{"lineNumber":318,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":319,"author":{"gitId":"songgthu"},"content":" * @return The response message containing the list of tags.","lastModifiedDate":"2023-09-16"},{"lineNumber":320,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":321,"author":{"gitId":"songgthu"},"content":" public String executeTagListCommand() {","lastModifiedDate":"2023-09-10"},{"lineNumber":322,"author":{"gitId":"songgthu"},"content":" return ui.printTagList(tagList);","lastModifiedDate":"2023-09-10"},{"lineNumber":323,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":324,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":325,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":326,"author":{"gitId":"songgthu"},"content":" * Executes the \"tag\" command to tag a task with a specified tag.","lastModifiedDate":"2023-09-16"},{"lineNumber":327,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":328,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":329,"author":{"gitId":"songgthu"},"content":" * @return The response message indicating the tagging of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":330,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":331,"author":{"gitId":"songgthu"},"content":" public String executeTagCommand(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":332,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":333,"author":{"gitId":"songgthu"},"content":" int taskIndex \u003d extractTaskIndex(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":334,"author":{"gitId":"songgthu"},"content":" String tagName \u003d input.split(\"#\")[1];","lastModifiedDate":"2023-09-10"},{"lineNumber":335,"author":{"gitId":"songgthu"},"content":" Tag tag \u003d new Tag(tagName);","lastModifiedDate":"2023-09-10"},{"lineNumber":336,"author":{"gitId":"songgthu"},"content":" Task task \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-09-10"},{"lineNumber":337,"author":{"gitId":"songgthu"},"content":" if (!tagList.containTag(tagName)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":338,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(\"This tag does not exist in the tag list\");","lastModifiedDate":"2023-09-16"},{"lineNumber":339,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":340,"author":{"gitId":"songgthu"},"content":" task.tagTask(tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":341,"author":{"gitId":"songgthu"},"content":" return ui.printTagTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":342,"author":{"gitId":"songgthu"},"content":" } catch (NoTaskIndexException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":343,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":344,"author":{"gitId":"songgthu"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":345,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":346,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":347,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":348,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":349,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":350,"author":{"gitId":"songgthu"},"content":" * Executes the \"untag\" command to remove a tag from a task.","lastModifiedDate":"2023-09-16"},{"lineNumber":351,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":352,"author":{"gitId":"songgthu"},"content":" * @param input The input command.","lastModifiedDate":"2023-09-16"},{"lineNumber":353,"author":{"gitId":"songgthu"},"content":" * @return The response message indicating the removal of the tag from the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":354,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":355,"author":{"gitId":"songgthu"},"content":" public String executeUntagCommand(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":356,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":357,"author":{"gitId":"songgthu"},"content":" int taskIndex \u003d extractTaskIndex(input);","lastModifiedDate":"2023-09-16"},{"lineNumber":358,"author":{"gitId":"songgthu"},"content":" Task task \u003d taskList.getTask(taskIndex);","lastModifiedDate":"2023-09-10"},{"lineNumber":359,"author":{"gitId":"songgthu"},"content":" task.untagTask();","lastModifiedDate":"2023-09-10"},{"lineNumber":360,"author":{"gitId":"songgthu"},"content":" return ui.printUntagTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":361,"author":{"gitId":"songgthu"},"content":" } catch (NoTaskIndexException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":362,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":363,"author":{"gitId":"songgthu"},"content":" } catch (InvalidTaskIndexException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":364,"author":{"gitId":"songgthu"},"content":" return ui.printErrorMessage(e.getMessage());","lastModifiedDate":"2023-09-16"},{"lineNumber":365,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":366,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":367,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":367}},{"path":"src/main/java/milbot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.TagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import taskclasses.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"import java.io.File;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" * Storage class handles reading tasks from and writing tasks to a file.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" private File taskFile;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" private File tagsFile;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" private FileWriter tasksOutput;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" private String tasksFilePath;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" private String tagsFilePath;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" private TagList tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" * Constructs a Storage instance with a default file path.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" public Storage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" tasksFilePath \u003d \"src\\\\main\\\\data\\\\mil.txt\";","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" taskFile \u003d new File(tasksFilePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" tagsFilePath \u003d \"src\\\\main\\\\data\\\\mil-tags.txt\";","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" tagsFile \u003d new File(tagsFilePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" tagList \u003d new TagList();","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" * Loads tasks from the file and adds them to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" public TaskList loadTasksFromFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" try (BufferedReader inputFile \u003d new BufferedReader(new FileReader(taskFile))) {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" String line;","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" while ((line \u003d inputFile.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" Task task \u003d Task.createTaskFromData(line);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" System.err.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":" return taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" public TagList loadTagsFromFile() {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" try (BufferedReader inputFile \u003d new BufferedReader(new FileReader(tagsFile))) {","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" String line;","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":" while ((line \u003d inputFile.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":" if (line.contains(\"#\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":" Tag tag \u003d new Tag(line.split(\"#\")[1].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"songgthu"},"content":" tagList.addTag(tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"songgthu"},"content":" System.err.println(\"Error loading tags: \" + e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"songgthu"},"content":" return tagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"songgthu"},"content":" * Saves tasks from the provided TaskList to the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"songgthu"},"content":" * @param tasks The TaskList containing tasks to be saved.","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"songgthu"},"content":" public void saveTasksToFile(TaskList tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"songgthu"},"content":" taskList \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"songgthu"},"content":" tasksOutput \u003d new FileWriter(tasksFilePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"songgthu"},"content":" BufferedWriter outputFile \u003d new BufferedWriter(tasksOutput);","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"songgthu"},"content":" for (Task task : tasks.getTaskList()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"songgthu"},"content":" outputFile.write(task.formatToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"songgthu"},"content":" outputFile.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"songgthu"},"content":" outputFile.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"songgthu"},"content":" System.err.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"songgthu"},"content":" public void saveTagsToFile(TagList tags) {","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"songgthu"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"songgthu"},"content":" tagList \u003d tags;","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"songgthu"},"content":" tasksOutput \u003d new FileWriter(tagsFilePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"songgthu"},"content":" BufferedWriter outputFile \u003d new BufferedWriter(tasksOutput);","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"songgthu"},"content":" for (Tag tag : tags.getTagList()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"songgthu"},"content":" outputFile.write(tag.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"songgthu"},"content":" outputFile.newLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"songgthu"},"content":" outputFile.close();","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"songgthu"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"songgthu"},"content":" System.err.println(\"Error saving tags: \" + e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":109}},{"path":"src/main/java/milbot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import java.util.List;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import taskclasses.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":" * TaskList class represents a list of tasks and provides methods to manage tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" private List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" * Constructs a TaskList instance with an empty list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" * Retrieves the list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" public List\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" * Gets the number of tasks in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" return taskList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" * Retrieves the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" return taskList.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":" * Removes a task from the task list at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" taskList.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":62}},{"path":"src/main/java/milbot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package milbot;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import extensions.TagList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import taskclasses.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import taskclasses.Deadline;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import taskclasses.Event;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" * Ui class handles user interface-related functionalities.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" * Prints a goodbye message before the chatbot exits.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" * @return the goodbye message.","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" public String printGoodbyeMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" return \"Have a nice day and see you again soon!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" * Prints an error message.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" * @param message The error message to be printed.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" public String printErrorMessage(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" return message + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" * Prints a message indicating a new task has been added to the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" * @param taskList The TaskList containing the added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" * @param task The added task.","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" * @return add new task message.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" public String printNewTask(TaskList taskList, Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" String newTaskMessage \u003d \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" \" \" + task + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" \"Now you have \" + taskList.getSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" return newTaskMessage;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" * Prints the list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":" * @param taskList The TaskList containing the tasks to be printed.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" * @return A message containing the task list.","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" public String printTaskList(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" String taskListMessage \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":" for (Task task : taskList.getTaskList()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":" taskListMessage +\u003d String.format(\"%d. %s\\n\", i, task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"songgthu"},"content":" i++;","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"songgthu"},"content":" return taskListMessage;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"songgthu"},"content":" * Prints a message indicating that a task has been marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"songgthu"},"content":" * @param task The task that has been marked as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"songgthu"},"content":" * @return A message indicating that the task has been marked as done.","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"songgthu"},"content":" public String printMarkTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"songgthu"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\" + task;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"songgthu"},"content":" * Prints a message indicating that a task has been marked as not done yet.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"songgthu"},"content":" * @param task The task that has been marked as not done yet.","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"songgthu"},"content":" * @return A message indicating that the task has been marked as undone.","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"songgthu"},"content":" public String printUnmarkTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"songgthu"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + task;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"songgthu"},"content":" * Prints a message indicating that a task has been removed from the task list.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"songgthu"},"content":" * @param task The task that has been removed.","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"songgthu"},"content":" * @param taskList The TaskList after the task has been removed.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"songgthu"},"content":" * @return A message indicating that the task has been removed.","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"songgthu"},"content":" public String printRemoveTask(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"songgthu"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + task + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"songgthu"},"content":" \"Now you have \" + taskList.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"songgthu"},"content":" * Prints a message indicating an unknown command.","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"songgthu"},"content":" * @return A message indicating that the user command is unknown.","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"songgthu"},"content":" public String printUnknownMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"songgthu"},"content":" return \"Oopsie! I\u0027m sorry, but I don\u0027t know what that means :(\";","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"songgthu"},"content":" * Generates a message containing tasks that match the search query.","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"songgthu"},"content":" * @param taskList The task list to search within.","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"songgthu"},"content":" * @return A message of tasks that match the search query, or no matches found.","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"songgthu"},"content":" public String printSearchResult(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"songgthu"},"content":" if (taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"songgthu"},"content":" return \"There is no task matched to your query\";","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"songgthu"},"content":" String searchResult \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"songgthu"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":128,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"songgthu"},"content":" for (Task task : taskList.getTaskList()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"songgthu"},"content":" searchResult +\u003d String.format(\"%d.%s \\n\", i, task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"songgthu"},"content":" i++;","lastModifiedDate":"2023-08-28"},{"lineNumber":132,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"songgthu"},"content":" return searchResult;","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"songgthu"},"content":" public String printNewTag(TagList tagList, Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"songgthu"},"content":" String newTagMessage \u003d \"Got it. I\u0027ve added this tag:\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"songgthu"},"content":" \" \" + tag + \"\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"songgthu"},"content":" \"Now you have \" + tagList.getSize() + \" tags.\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"songgthu"},"content":" return newTagMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"songgthu"},"content":" public String printRemoveTag(Tag tag, TagList tagList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"songgthu"},"content":" return \"Noted. I\u0027ve removed this tag:\\n\" + tag + \"\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"songgthu"},"content":" \"Now you have \" + tagList.getSize() + \" tags.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"songgthu"},"content":" public String printTagList(TagList tagList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"songgthu"},"content":" String taskListMessage \u003d \"Here are the tags you have:\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"songgthu"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"songgthu"},"content":" for (Tag tag : tagList.getTagList()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"songgthu"},"content":" taskListMessage +\u003d String.format(\"%d. %s\\n\", i, tag.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"songgthu"},"content":" i++;","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"songgthu"},"content":" return taskListMessage;","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"songgthu"},"content":" public String printTagTask(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"songgthu"},"content":" return \"Nice! I\u0027ve tagged this task:\\n\" + task.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"songgthu"},"content":" public String printUntagTask(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"songgthu"},"content":" return \"Nice! I\u0027ve untagged this task:\\n\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":166,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":167}},{"path":"src/main/java/taskclasses/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" * Represents a task of type \"Deadline\" with a specific due date.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" private String by;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" * Constructs a Deadline task with the given description and due date.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" * @param by The due date of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" this.by \u003d by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" * Constructs a Deadline task with the given description, completion status, and due date.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" * @param by The due date of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" public Deadline(String description, boolean isDone, LocalDate by, Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" super(description, isDone, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" this.by \u003d by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" public String formatToFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" return \"D | \" + super.formatToFile() + \" | \" + by;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"songgthu":45}},{"path":"src/main/java/taskclasses/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" protected String from;","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" protected String to;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" this.from \u003d from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" this.to \u003d to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" public Event(String description, boolean isDone, LocalDate from, LocalDate to, Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" super(description, isDone, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" this.from \u003d from.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" this.to \u003d to.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" public String formatToFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" return \"E | \" + super.formatToFile() + \" | \" + from + \" - \" + to;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"songgthu":29}},{"path":"src/main/java/taskclasses/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":" * Represents a basic task with a description and completion status.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" private String description;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" private Tag tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" * Constructs a Task with the given description and sets the completion status to false.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" assert description !\u003d null : \"Task description should not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" * Constructs a Task with the given description and completion status.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" public Task(String description, boolean isDone, Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" assert description !\u003d null : \"Task description should not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"songgthu"},"content":" * Creates a task object from a data line in storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"songgthu"},"content":" * @param dataLine The data line representing the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"songgthu"},"content":" * @return A Task object created from the data line.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"songgthu"},"content":" public static Task createTaskFromData(String dataLine) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"songgthu"},"content":" String[] parts \u003d dataLine.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"songgthu"},"content":" assert parts.length \u003e\u003d 3 : \"Invalid data line format\";","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"songgthu"},"content":" String type \u003d parts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"songgthu"},"content":" boolean isDone \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"songgthu"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"songgthu"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"songgthu"},"content":" int dateIndex \u003d 3;","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"songgthu"},"content":" Tag tag \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"songgthu"},"content":" if(parts.length \u003e 3 \u0026\u0026 parts[3].contains(\"#\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"songgthu"},"content":" dateIndex \u003d 4;","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"songgthu"},"content":" String tagData \u003d parts[3].split(\"#\")[1].trim();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"songgthu"},"content":" tag \u003d new Tag(tagData);","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"songgthu"},"content":" if (type.equals(\"T\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"songgthu"},"content":" return new Todo(description, isDone, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"songgthu"},"content":" } else if (type.equals(\"D\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"songgthu"},"content":" LocalDate by \u003d LocalDate.parse(parts[dateIndex].trim(), inputFormatter);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"songgthu"},"content":" return new Deadline(description, isDone, by, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"songgthu"},"content":" } else if (type.equals(\"E\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"songgthu"},"content":" String[] dates \u003d parts[dateIndex].split(\" - \");","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"songgthu"},"content":" String fromDateString \u003d dates[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"songgthu"},"content":" String toDateString \u003d dates[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"songgthu"},"content":" LocalDate from \u003d LocalDate.parse(fromDateString, inputFormatter);","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"songgthu"},"content":" LocalDate to \u003d LocalDate.parse(toDateString, inputFormatter);","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"songgthu"},"content":" return new Event(description, isDone, from, to, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"songgthu"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"songgthu"},"content":" return null;","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":81,"author":{"gitId":"songgthu"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":82,"author":{"gitId":"songgthu"},"content":" assert !isDone : \"This task is already marked as done\";","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"songgthu"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":84,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":85,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":86,"author":{"gitId":"songgthu"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"songgthu"},"content":" assert isDone : \"This task is not marked as done\";","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"songgthu"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":89,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":90,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":91,"author":{"gitId":"songgthu"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":92,"author":{"gitId":"songgthu"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":94,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":95,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"songgthu"},"content":" * Formats the task for storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"songgthu"},"content":" * @return A formatted string representing the task for storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"songgthu"},"content":" public String formatToFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"songgthu"},"content":" String status \u003d isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"songgthu"},"content":" if(this.tag !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"songgthu"},"content":" return status + \" | \" + description + \" | \" + this.tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"songgthu"},"content":" return status + \" | \" + description;","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"songgthu"},"content":" public void tagTask(Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"songgthu"},"content":" if(this.tag \u003d\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"songgthu"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"songgthu"},"content":" public void untagTask() {","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"songgthu"},"content":" if(this.tag !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"songgthu"},"content":" this.tag \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":119,"author":{"gitId":"songgthu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":120,"author":{"gitId":"songgthu"},"content":" if (this.tag !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"songgthu"},"content":" return String.format(\"[%s] %s %s\", this.getStatusIcon(), this.description, this.tag.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"songgthu"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"songgthu"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":126,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"songgthu":126}},{"path":"src/main/java/taskclasses/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import extensions.Tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":" * Represents a task of type \"Todo\" that can be completed.","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" * Constructs a Todo task with the given description.","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" super(description);","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" public Todo(String description, boolean isDone, Tag tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" super(description, isDone, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" public String formatToFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" return \"T | \" + super.formatToFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"songgthu":29}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-spacing: 10;\" 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-16"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" \u003cLabel fx:id\u003d\"dialog\" minHeight\u003d\"-Infinity\" maxWidth\u003d\"1.7976931348623157E308\" style\u003d\"-fx-background-color: #caf0f8; -fx-background-radius: 10px;\" wrapText\u003d\"true\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":19}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"songgthu"},"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\"milbot.MainWindow\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"100.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":"songgthu"},"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":"songgthu"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToHeight\u003d\"true\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"songgthu":19}},{"path":"src/test/java/taskclasses/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import taskclasses.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" public void testFormatToFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" LocalDate dueDate \u003d LocalDate.of(2023, 9, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" Deadline deadline \u003d new Deadline(\"Complete project\", dueDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"D | 0 | Complete project | Sep 1 2023\";","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, deadline.formatToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" public void testToString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" LocalDate dueDate \u003d LocalDate.of(2023, 9, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", dueDate);","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" String formattedDueDate \u003d dueDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"[D][ ] Submit report (by: \" + formattedDueDate + \")\";","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":32}},{"path":"src/test/java/taskclasses/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import taskclasses.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":"public class EventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" public void testFormatToFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" LocalDate fromDate \u003d LocalDate.of(2023, 9, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" LocalDate toDate \u003d LocalDate.of(2023, 9, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":" Event event \u003d new Event(\"Conference\", fromDate, toDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" String formattedFromDate \u003d fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" String formattedToDate \u003d toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"E | 0 | Conference | \" + formattedFromDate + \" - \" + formattedToDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, event.formatToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"songgthu"},"content":" public void testToString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"songgthu"},"content":" LocalDate fromDate \u003d LocalDate.of(2023, 9, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"songgthu"},"content":" LocalDate toDate \u003d LocalDate.of(2023, 9, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"songgthu"},"content":" Event event \u003d new Event(\"Party\", fromDate, toDate);","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"songgthu"},"content":" String formattedFromDate \u003d fromDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"songgthu"},"content":" String formattedToDate \u003d toDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"[E][ ] Party (from: \" + formattedFromDate + \" to: \" + formattedToDate + \")\";","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, event.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":35}},{"path":"src/test/java/taskclasses/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"package taskclasses;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"import taskclasses.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"songgthu"},"content":" public void testFormatToFile() {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"songgthu"},"content":" Todo todo \u003d new Todo(\"Buy groceries\");","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"T | 0 | Buy groceries\";","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, todo.formatToFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"songgthu"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"songgthu"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"songgthu"},"content":" public void testToString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"songgthu"},"content":" Todo todo \u003d new Todo(\"Read a book\");","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"songgthu"},"content":" String expected \u003d \"[T][ ] Read a book\";","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"songgthu"},"content":" assertEquals(expected, todo.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"songgthu"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"songgthu"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"songgthu":23}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"songgthu"},"content":"todo complete lab 1","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"songgthu"},"content":"todo test","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"songgthu"},"content":"deadline finish task /by 2023-11-07","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"songgthu"},"content":"event do stuff /from 2023-11-01 /to 2023-11-02","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"songgthu"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"songgthu"},"content":"mark 2","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"songgthu"},"content":"mark 3","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"songgthu"},"content":"unmark 1","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"delete 2","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"songgthu":10}},{"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":"songgthu"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"songgthu"},"content":"REM compile the code into the bin folder, including packages","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"songgthu"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\exception\\*.java ..\\src\\main\\java\\milbot\\*.java ..\\src\\main\\java\\taskclasses\\*.java","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"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":19,"author":{"gitId":"songgthu"},"content":"java -classpath ..\\bin milbot.Mil \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"songgthu":4,"-":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":"-"},"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":"songgthu"},"content":"java -classpath ../bin Mil \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-21"},{"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":"songgthu"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2023-08-21"},{"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":{"songgthu":2,"-":32}}] diff --git a/songgthu_ip_master/commits.json b/songgthu_ip_master/commits.json index 0d7845e1..786bc45d 100644 --- a/songgthu_ip_master/commits.json +++ b/songgthu_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"songgthu":[{"date":"2023-08-20","commitResults":[{"hash":"b5370172e5358597b417104d791657f89a9c170f","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"02e7d5be389d738f8c6ea3a7022429c6014d0ab9","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"b8b384c0463736bb965466513c89483af1def571","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"1a77eb6c97a02b4d70a66a90e157168fce2db31a","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":4}}},{"hash":"afac077cbe8b4661b3a74e04e96ce5dcd0621fa9","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"cf5b09e44b19cefce5bac13a678304aceb1a548b","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}},{"hash":"cf7396e8d9c1db551f869bd3a39dca6506ce22ec","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":9}}},{"hash":"67161e3d11e2b6187388173ac88fc2e79e29f115","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":6}}}]},{"date":"2023-08-21","commitResults":[{"hash":"d8f35495dd02482ecf3432df4a49dda5a06028ba","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":2,"deletions":2},"bat":{"insertions":2,"deletions":2},"sh":{"insertions":3,"deletions":7}}},{"hash":"84d1039b7b6a9f654ddb91e9faf21a940ccc8327","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":5}}},{"hash":"47f4f46307f8c9ccbaae27d3968381babe3a6b3a","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"83f482601fd4f365a57449855f350e004caf4739","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":55}}}]},{"date":"2023-08-26","commitResults":[{"hash":"662776c736f70425c0db245b6bd9b39cec703c71","isMergeCommit":false,"messageTitle":"Add save function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":106,"deletions":57}}},{"hash":"2d095a5b355bf715ed416240f7ca0fef484408fb","isMergeCommit":false,"messageTitle":"Add date formatting for Deadline, Event tasks","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":5},"java":{"insertions":45,"deletions":20}}}]},{"date":"2023-08-27","commitResults":[{"hash":"63e08b262a5a2d7612a0e20349af77736cbada75","isMergeCommit":true,"messageTitle":"Merge pull request #1 from songgthu/branch-Level-7","messageBody":"Add date formatting for Deadline, Event tasks","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"f7ff2fbf9112690924a170b8ed9ffd32b05a77c9","isMergeCommit":false,"messageTitle":"Extract the following classes: Ui, Storage, Parser, TaskList","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":6},"java":{"insertions":312,"deletions":185}}},{"hash":"68b654dcc76cb60c6fe7f3df342cae1cc85d4f1e","isMergeCommit":false,"messageTitle":"Organize classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":6},"java":{"insertions":78,"deletions":18},"bat":{"insertions":4,"deletions":3}}},{"hash":"bff0cc5a13dfe2327a6d94568a49f75725b7cb5a","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":24,"deletions":0},"java":{"insertions":20,"deletions":30}}},{"hash":"742c45fed9e95695014d05303af628a74c31db13","isMergeCommit":false,"messageTitle":"Add JUnit testcases for Todo, Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":0},"java":{"insertions":92,"deletions":2}}},{"hash":"9c1e9038d79991f1b78321066c18ea0e123bf962","isMergeCommit":false,"messageTitle":"Add JUnit testcases of Todo, Deadline and Event","messageBody":"","tags":["A-Junit"],"fileTypesAndContributionMap":{"gradle":{"insertions":26,"deletions":16},"java":{"insertions":23,"deletions":23}}},{"hash":"d6ee0807d9236c636e0f40c613243c0593d4e726","isMergeCommit":false,"messageTitle":"Package the app as a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"eebedc93437b38eddaf8a697528f2444c0c72ac5","isMergeCommit":false,"messageTitle":"Add javadoc to classes and methods","messageBody":"","tags":["A-Javadoc"],"fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":6}}},{"hash":"6bc0fc441136235577006f9bc1996d847f1365ec","isMergeCommit":false,"messageTitle":"Check coding standards","messageBody":"","tags":["A-CodingStandards"],"fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":6}}},{"hash":"a96852921217c0dbb74f687b5883008f951d2810","isMergeCommit":false,"messageTitle":"Add find task function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":51,"deletions":12}}},{"hash":"6e49d9c97004543f7f26b3d93a99b08bbc81127f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"b2d7451302b366328735aeb2fea255b376213b4c","isMergeCommit":false,"messageTitle":"Add checkStyle to detect coding style violations","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-02","commitResults":[{"hash":"f2db7634f0236d80932ee78bfaa0498a1ca8dd14","isMergeCommit":false,"messageTitle":"Create a simple GUI for the app","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"txt":{"insertions":1,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":252,"deletions":127}}}]},{"date":"2023-09-08","commitResults":[{"hash":"4bd2bc310ac4e9f26c0f14538deb1ed560f96840","isMergeCommit":false,"messageTitle":"Add assert statements to the code base","messageBody":"The current code lacks proper validation and error checking, making it susceptible to unexpected behavior and more difficult to debug.\n\nIn createTaskFromData method, `dataLine` is split into an array for parsing purpose, so it is necessary to make sure the array length does not exceed 4 to prevent parse issue.\n\nUsing assert statements is a best practice for improving code reliability and catch potential issues.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":2,"deletions":2},"java":{"insertions":46,"deletions":22}}},{"hash":"f6db815b759a25273f66e9047304b5dc515af148","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"In this commit, I refactored the code by breaking down a lengthy method into smaller, more manageable sub-methods. Restructuring the code not only enhances code readability but also reduces deep nesting. Additionally, I ensured consistent method naming throughout the codebase.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"fxml":{"insertions":2,"deletions":2},"java":{"insertions":157,"deletions":102}}},{"hash":"d5ca47307d87a2a4a35908b32611fa47a58bc1d9","isMergeCommit":true,"messageTitle":"Merge pull request #2 from songgthu/branch-A-Assertions","messageBody":"Branch A-Assertions","fileTypesAndContributionMap":{}},{"hash":"cda520671deeca332faf5b2b2c5372fd56e97d7b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"dc4110d4b653637c1497f6c415f0dd53ca49b5ec","isMergeCommit":false,"messageTitle":"Add tagging items extension","messageBody":"Functions that have been added:\n- Create and delete tags\n- Add tag to a task\n- Remove tag from a task\n- Auto-save tags\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":3},"java":{"insertions":255,"deletions":24}}}]}]},"authorFileTypeContributionMap":{"songgthu":{"java":1214,"md":0,"fxml":35,"sh":2,"bat":4,"gradle":63,"txt":15}},"authorContributionVariance":{"songgthu":45547.465},"authorDisplayNameMap":{"songgthu":"CS2103T-T15-3 TRIN.. THU"}} +{"authorDailyContributionsMap":{"songgthu":[{"date":"2023-08-20","commitResults":[{"hash":"b5370172e5358597b417104d791657f89a9c170f","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"02e7d5be389d738f8c6ea3a7022429c6014d0ab9","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"b8b384c0463736bb965466513c89483af1def571","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"1a77eb6c97a02b4d70a66a90e157168fce2db31a","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":4}}},{"hash":"afac077cbe8b4661b3a74e04e96ce5dcd0621fa9","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"cf5b09e44b19cefce5bac13a678304aceb1a548b","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}},{"hash":"cf7396e8d9c1db551f869bd3a39dca6506ce22ec","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":9}}},{"hash":"67161e3d11e2b6187388173ac88fc2e79e29f115","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":6}}}]},{"date":"2023-08-21","commitResults":[{"hash":"d8f35495dd02482ecf3432df4a49dda5a06028ba","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":2,"deletions":2},"bat":{"insertions":2,"deletions":2},"sh":{"insertions":3,"deletions":7}}},{"hash":"84d1039b7b6a9f654ddb91e9faf21a940ccc8327","isMergeCommit":false,"messageTitle":"Level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":5}}},{"hash":"47f4f46307f8c9ccbaae27d3968381babe3a6b3a","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"83f482601fd4f365a57449855f350e004caf4739","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":55}}}]},{"date":"2023-08-26","commitResults":[{"hash":"662776c736f70425c0db245b6bd9b39cec703c71","isMergeCommit":false,"messageTitle":"Add save function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":106,"deletions":57}}},{"hash":"2d095a5b355bf715ed416240f7ca0fef484408fb","isMergeCommit":false,"messageTitle":"Add date formatting for Deadline, Event tasks","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":5},"java":{"insertions":45,"deletions":20}}}]},{"date":"2023-08-27","commitResults":[{"hash":"63e08b262a5a2d7612a0e20349af77736cbada75","isMergeCommit":true,"messageTitle":"Merge pull request #1 from songgthu/branch-Level-7","messageBody":"Add date formatting for Deadline, Event tasks","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"f7ff2fbf9112690924a170b8ed9ffd32b05a77c9","isMergeCommit":false,"messageTitle":"Extract the following classes: Ui, Storage, Parser, TaskList","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":6},"java":{"insertions":312,"deletions":185}}},{"hash":"68b654dcc76cb60c6fe7f3df342cae1cc85d4f1e","isMergeCommit":false,"messageTitle":"Organize classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":6},"java":{"insertions":78,"deletions":18},"bat":{"insertions":4,"deletions":3}}},{"hash":"bff0cc5a13dfe2327a6d94568a49f75725b7cb5a","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":24,"deletions":0},"java":{"insertions":20,"deletions":30}}},{"hash":"742c45fed9e95695014d05303af628a74c31db13","isMergeCommit":false,"messageTitle":"Add JUnit testcases for Todo, Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":8,"deletions":0},"java":{"insertions":92,"deletions":2}}},{"hash":"9c1e9038d79991f1b78321066c18ea0e123bf962","isMergeCommit":false,"messageTitle":"Add JUnit testcases of Todo, Deadline and Event","messageBody":"","tags":["A-Junit"],"fileTypesAndContributionMap":{"gradle":{"insertions":26,"deletions":16},"java":{"insertions":23,"deletions":23}}},{"hash":"d6ee0807d9236c636e0f40c613243c0593d4e726","isMergeCommit":false,"messageTitle":"Package the app as a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"eebedc93437b38eddaf8a697528f2444c0c72ac5","isMergeCommit":false,"messageTitle":"Add javadoc to classes and methods","messageBody":"","tags":["A-Javadoc"],"fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":6}}},{"hash":"6bc0fc441136235577006f9bc1996d847f1365ec","isMergeCommit":false,"messageTitle":"Check coding standards","messageBody":"","tags":["A-CodingStandards"],"fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":6}}},{"hash":"a96852921217c0dbb74f687b5883008f951d2810","isMergeCommit":false,"messageTitle":"Add find task function","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":51,"deletions":12}}},{"hash":"6e49d9c97004543f7f26b3d93a99b08bbc81127f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"b2d7451302b366328735aeb2fea255b376213b4c","isMergeCommit":false,"messageTitle":"Add checkStyle to detect coding style violations","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-02","commitResults":[{"hash":"f2db7634f0236d80932ee78bfaa0498a1ca8dd14","isMergeCommit":false,"messageTitle":"Create a simple GUI for the app","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"txt":{"insertions":1,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":252,"deletions":127}}}]},{"date":"2023-09-08","commitResults":[{"hash":"4bd2bc310ac4e9f26c0f14538deb1ed560f96840","isMergeCommit":false,"messageTitle":"Add assert statements to the code base","messageBody":"The current code lacks proper validation and error checking, making it susceptible to unexpected behavior and more difficult to debug.\n\nIn createTaskFromData method, `dataLine` is split into an array for parsing purpose, so it is necessary to make sure the array length does not exceed 4 to prevent parse issue.\n\nUsing assert statements is a best practice for improving code reliability and catch potential issues.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":2,"deletions":2},"java":{"insertions":46,"deletions":22}}},{"hash":"f6db815b759a25273f66e9047304b5dc515af148","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"In this commit, I refactored the code by breaking down a lengthy method into smaller, more manageable sub-methods. Restructuring the code not only enhances code readability but also reduces deep nesting. Additionally, I ensured consistent method naming throughout the codebase.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"fxml":{"insertions":2,"deletions":2},"java":{"insertions":157,"deletions":102}}},{"hash":"d5ca47307d87a2a4a35908b32611fa47a58bc1d9","isMergeCommit":true,"messageTitle":"Merge pull request #2 from songgthu/branch-A-Assertions","messageBody":"Branch A-Assertions","fileTypesAndContributionMap":{}},{"hash":"cda520671deeca332faf5b2b2c5372fd56e97d7b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"dc4110d4b653637c1497f6c415f0dd53ca49b5ec","isMergeCommit":false,"messageTitle":"Add tagging items extension","messageBody":"Functions that have been added:\n- Create and delete tags\n- Add tag to a task\n- Remove tag from a task\n- Auto-save tags\n","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":3},"java":{"insertions":255,"deletions":24}}}]},{"date":"2023-09-16","commitResults":[{"hash":"928e6e6f9e12ad3be421c9db2638d2f40b425625","isMergeCommit":false,"messageTitle":"Fix minor bugs and improve Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"6e70b33af8d541e59579b0ebc1347a2b4738927a","isMergeCommit":false,"messageTitle":"Fix minor bugs and improve Ui","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":8,"deletions":5},"fxml":{"insertions":10,"deletions":7},"java":{"insertions":191,"deletions":67}}},{"hash":"12075640020377938aa414c72627123efd54d0e6","isMergeCommit":false,"messageTitle":"Add user guide","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"md":{"insertions":127,"deletions":12}}},{"hash":"a89ca02868956e534f97c240959edf640e1e57b6","isMergeCommit":false,"messageTitle":"Update user guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":0,"deletions":1}}},{"hash":"96fdaebc004cd2f8e5d4487784b261a75ef10e4d","isMergeCommit":false,"messageTitle":"Update user guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":35,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"songgthu":{"java":1344,"md":152,"fxml":38,"sh":2,"bat":4,"gradle":63,"txt":18}},"authorContributionVariance":{"songgthu":43082.332},"authorDisplayNameMap":{"songgthu":"CS2103T-T15-3 TRIN.. THU"}} diff --git a/sopa301_ip_master/authorship.json b/sopa301_ip_master/authorship.json index f6445e06..9db64260 100644 --- a/sopa301_ip_master/authorship.json +++ b/sopa301_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" mainClass.set(\"bot.gui.Launcher\")","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" archiveBaseName \u003d \"bot\"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":"checkstyle {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":21,"-":40}},{"path":"src/main/java/bot/Bot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.BotException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.LoadingException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.Parser;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.utils.commands.Command;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Main class for the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public class Bot {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Storage object for storing data.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * User interface for interacting with the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Task list for storing tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * Shows if the bot is active or not.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * Creates the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" public Bot() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" this.storage \u003d new Storage(\"/data/tasks.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" } catch (LoadingException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * Gives the bot\u0027s response to a String input.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" * @param input Raw input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response as a string.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" String response;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" assert command !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" response \u003d command.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" if (command.getExitStatus()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" isExit \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" } catch (BotException exception) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" response \u003d ui.showError(exception.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" return response;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * Gets the bot\u0027s greeting message.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * @return Greeting message.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" public String greet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" return ui.showWelcome();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" * Indicates if the bot is active.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" * @return True if the bot is active, else false.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" return this.isExit;","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"sopa301":85}},{"path":"src/main/java/bot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.gui.MainWindow;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Main class for the entire project.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * Bot used in the project.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" private final Bot bot \u003d new Bot();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * Creates the GUI for the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * Applications may create other stages, if needed,","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * but they will not be primary stages.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setBot(bot);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":42}},{"path":"src/main/java/bot/enums/DoneStatus.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.enums;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Indicates whether a task is done or not.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public enum DoneStatus {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Indicates task is done.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" DONE,","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Indicates task is not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" NOT_DONE","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/exceptions/BotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Supertype of all exceptions that occur specific to the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class BotException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public BotException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":16}},{"path":"src/main/java/bot/exceptions/DuplicateTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when duplicate tasks are encountered and are not supposed to exist.","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class DuplicateTaskException extends InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Constructor with default message.","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public DuplicateTaskException() {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Task already exists!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Constructor with variable message.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" public DuplicateTaskException(String msg) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":22}},{"path":"src/main/java/bot/exceptions/EmptyListException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when the task list is empty and a function requires an","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" * item in the task list.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"public class EmptyListException extends BotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" public EmptyListException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" super(\"Oops, there are no tasks in your list!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":14}},{"path":"src/main/java/bot/exceptions/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when invalid arguments are provided to a command.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidArgumentException extends BotException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidArgumentException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, but that command can\u0027t be done with the provided argument(s).\");","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Creates an InvalidArgumentException with the provided string as the error","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * message.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * @param str Error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" public InvalidArgumentException(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" super(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":23}},{"path":"src/main/java/bot/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when an invalid command is sent to the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidCommandException extends BotException {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor. Currently set to Trash Gremlin Caelus personality.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, I dunno what you\u0027re saying. Must be the trash getting to my brain.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"sopa301":13}},{"path":"src/main/java/bot/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when an index is given that is out of range for the requested operation.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidIndexException extends InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Constructor with variable message.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" public InvalidIndexException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":22}},{"path":"src/main/java/bot/exceptions/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for incorrect inputs when creating a Task object.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidTaskException extends InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Constructor with variable message.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public InvalidTaskException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/exceptions/LoadingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when the storage class fails to load or save data for any reason.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class LoadingException extends BotException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Creates a LoadingException with the given string as the error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param str Error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public LoadingException(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Dialog text.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Image for the dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * Creates a dialog box with the given text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * @param text Text to show in the box.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @param img Image to show in the box.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * Creates a dialog box to show on the user\u0027s side with the given text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" * @param text Text to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * @param img Image to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @return Dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" * Creates a dialog box to show on the bot\u0027s side with the given text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" * @param text Text to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" * @param img Image to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" * @return Dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" public static DialogBox getBotDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":86}},{"path":"src/main/java/bot/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Main method for the entire project.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" Application.launch(Main.class);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":18}},{"path":"src/main/java/bot/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.Bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Scroll pane on the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Dialog container for the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * User input field for the GUI","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * Bot instance exchanging data with the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" private Bot bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * User\u0027s image in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" private final Image userImage \u003d new Image(Objects.requireNonNull(","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" this.getClass().getResourceAsStream(\"/images/DaUser.png\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Bot\u0027s image in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" private final Image botImage \u003d new Image(Objects.requireNonNull(","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" this.getClass().getResourceAsStream(\"/images/DaBot.png\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * Initialises the main window in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" * Sets the active bot instance to the given bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * @param bot Bot to use in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" public void setBot(Bot bot) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" this.bot \u003d bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" dialogContainer.getChildren().add(DialogBox.getBotDialog(bot.greet(), botImage));","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" if (bot.getExitStatus()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" String response \u003d bot.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" DialogBox.getBotDialog(response, botImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":84}},{"path":"src/main/java/bot/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.commands.Command;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Abstraction for making sense of user commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Regex pattern for delete commands.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_DELETE \u003d Pattern.compile(\"delete -?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Regex pattern for mark commands.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_MARK \u003d Pattern.compile(\"mark -?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Regex pattern for unmark commands.","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_UNMARK \u003d Pattern.compile(\"unmark -?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * Default constructor. It does nothing as the parser is not meant to","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * be instantiated.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" public Parser() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * Parses the command string into a command to be executed.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * Does not guarantee the command is syntactically correct.","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @return Command object.","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the arguments are clearly invalid.","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" public static Command parse(String str) throws InvalidCommandException, InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" String commandWord \u003d str.split(\" \", 2)[0].toLowerCase().trim();","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" case \"bye\":","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" return Command.exit();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" case \"list\":","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" return Command.list();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" case \"mark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" return Command.mark(getMarkIndex(str));","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" return Command.unmark(getUnmarkIndex(str));","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" case \"delete\":","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" return Command.delete(getDeleteIndex(str));","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" case \"find\":","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" return Command.find(getFindTerm(str));","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" default:","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" if (!Task.isTaskCommand(commandWord)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" return Command.add(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" * Gets the index from the unmark command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * @return Unmark index.","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" private static int getUnmarkIndex(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" if (!isValidUnmarkCommand(str)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException(\"Index to mark must be an integer.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" return Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" * Checks if the command string has valid MarkCommand syntax. It ensures the string follows this pattern:","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" * \"unmark (index)\" where index is an integer.","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" * @return Returns true if it is valid, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" private static boolean isValidUnmarkCommand(String str) {","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" return PATTERN_UNMARK.matcher(str).matches();","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" * Checks if the command string has valid MarkCommand syntax. It ensures the string follows this pattern:","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" * \"mark (index)\" where index is an integer.","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" * @return Returns true if it is valid, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" private static boolean isValidMarkCommand(String str) {","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" return PATTERN_MARK.matcher(str).matches();","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" * Gets the index from the mark command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" * @return Mark index.","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" private static int getMarkIndex(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" if (!isValidMarkCommand(str)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException(\"Index to mark must be an integer.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" return Integer.parseInt(str.substring(5));","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":" * Checks if the string has valid FindCommand syntax. It ensures the command follows this pattern:","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" * \"find (search term)\"","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" * Note that whitespaces are valid search terms as well, so \" book\" will find \"read book\".","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" * @param str Raw command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" * @return True if it is valid, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":" private static boolean isValidFindCommand(String str) {","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" if (str.trim().equalsIgnoreCase(\"find\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" String[] tokens \u003d str.split(\" \", 2);","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" assert tokens.length \u003e 1;","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":" String searchTerm \u003d tokens[1].trim();","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" return !searchTerm.equals(\"\");","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" * Parses the search term from the full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":" * @return Search term.","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the search term is empty.","lastModifiedDate":"2023-09-08"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":" private static String getFindTerm(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":" if (!isValidFindCommand(str)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":" assert str.trim().equals(\"find\");","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException(\"Search term cannot be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"sopa301"},"content":" return str.substring(5).trim();","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"sopa301"},"content":" * Checks if the string has valid DeleteCommand syntax. It ensures the command follows this pattern:","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"sopa301"},"content":" * \"delete (index)\" where index is an integer.","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"sopa301"},"content":" * @param str Raw command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":156,"author":{"gitId":"sopa301"},"content":" * @return True if it is valid, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"sopa301"},"content":" private static boolean isValidDeleteCommand(String str) {","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"sopa301"},"content":" return PATTERN_DELETE.matcher(str).matches();","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":162,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"sopa301"},"content":" * Gets the index from the delete command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":165,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":167,"author":{"gitId":"sopa301"},"content":" * @return Delete index.","lastModifiedDate":"2023-09-08"},{"lineNumber":168,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":169,"author":{"gitId":"sopa301"},"content":" private static int getDeleteIndex(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-09-08"},{"lineNumber":170,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":171,"author":{"gitId":"sopa301"},"content":" if (!isValidDeleteCommand(str)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":172,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException(\"Index to delete must be an integer.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":173,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":174,"author":{"gitId":"sopa301"},"content":" return Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-09-08"},{"lineNumber":175,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":176,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":176}},{"path":"src/main/java/bot/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.io.File;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.LoadingException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Abstraction for storing and loading data from a local file.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * File path for loading and saving data.","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" private final String filePath;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Creates a Storage object that stores and loads data at that file path.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param filePath Path to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * Loads data from that file path, and creates the file if it doesn\u0027t exist.","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * @return ArrayList of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" * @throws LoadingException If the data file cannot be read or created.","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" public ArrayList\u003cTask\u003e load() throws LoadingException {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" if (!f.isFile()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" createTasksFile(f);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" tasks \u003d loadTasksFromFile(f);","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" } catch (IOException | SecurityException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" throw new LoadingException(e.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" return tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" * Creates the task file in the specified directory given by the file\u0027s filepath.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" * @param f Details of file to create.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" * @throws IOException If the file cannot be created.","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" private static void createTasksFile(File f) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" File parent \u003d new File(f.getParent());","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" if (!parent.isDirectory()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" parent.mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * Creates an ArrayList of tasks from the contents of the file.","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * @param f File to read tasks from.","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" * @return Tasks in an ArrayList.","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * @throws FileNotFoundException If file cannot be found.","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" private static ArrayList\u003cTask\u003e loadTasksFromFile(File f) throws FileNotFoundException {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" Scanner scanner \u003d new Scanner(f);","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" tasks.add(Task.convertFromDataString(scanner.nextLine()));","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" System.out.println(\"Invalid task, skipping...\");","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" * Saves task list to file named at filePath. Assumes the file has been created.","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" * @param lst Bot.Task list to save to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" * @throws LoadingException If the list cannot be saved fully.","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" public void save(TaskList lst) throws LoadingException {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" assert lst !\u003d null : \"lst must not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" // We did it like this so the last line isn\u0027t a line separator.","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" for (int i \u003d 1; i \u003c lst.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" fw.write(lst.get(i).convertToDataString());","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" fw.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" if (lst.size() \u003e 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" fw.write(lst.get(lst.size()).convertToDataString());","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" fw.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" throw new LoadingException(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":110}},{"path":"src/main/java/bot/utils/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.util.Collection;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.DuplicateTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Task list abstraction. Functions like an arraylist but may not contain one. Does not accept duplicates.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Index starts at 1.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Data structure to hold list.","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" private final List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Default constructor. To be used when an empty list is needed.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Constructor with a list of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * @param list List of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" public TaskList(Collection\u003cTask\u003e list) {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" for (Task task : list) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" add(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" } catch (DuplicateTaskException exception) {","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" // We ignore duplicates because our task list should have unique items.","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Adds a task to the end of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" * @param task Task to add.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @throws DuplicateTaskException If the list already contains the task.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" public void add(Task task) throws DuplicateTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" if (tasks.contains(task)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" throw new DuplicateTaskException();","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" * Gets the task at that index of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * @return Bot.Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" return tasks.get(index - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * Removes the task at that index from the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" * @return Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" public Task remove(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" return tasks.remove(index - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" * Gets length of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" * @return Length of list.","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" public int size() {","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" return tasks.size();","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" * Gets an iterator of the tasks in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" * @return Iterator of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" public Iterator\u003cTask\u003e getIterator() {","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" return tasks.iterator();","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" * Marks the task at the specified index","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" public void mark(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" tasks.get(index - 1).mark();","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * Unmarks the task at the specified index.","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" public void unmark(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" tasks.get(index - 1).unmark();","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":" * Gets all tasks that contain the given string in their names.","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" * @param str Query string.","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" * @return TaskList of tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" public TaskList findAll(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" Iterator\u003cTask\u003e iter \u003d tasks.iterator();","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":" TaskList out \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" while (iter.hasNext()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" Task task \u003d iter.next();","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" if (task.getName().toLowerCase().contains(str.toLowerCase())) {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" out.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" } catch (DuplicateTaskException exception) {","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":" // We ignore duplicate tasks because there\u0027s no better way to deal with them in this method.","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":" return out;","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":145}},{"path":"src/main/java/bot/utils/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * User interface class responsible for dealing with interactions with the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Default constructor. Creates a Ui object.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" public Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Formats the input string as an error message for the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @param str Input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * @return Input string formatted as an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" public String showError(String str) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" return println(\"ERROR: \" + str);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Formats the input string similar to System.out.println().","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * @param str Input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @return String with line separator.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" public String println(String str) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" return str + System.lineSeparator();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * Gets the bot\u0027s welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * @return Welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" return println(\"Hello! I\u0027m the trash gremlin Caelus!\")","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" .concat(println(\"What can I do for you?\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" * Gets the bot\u0027s farewell message.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" * @return Farewell message.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" return println(\"Bye. I\u0027ll be at the nearest trash can!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" * Gets the inputted task list in a string format for printing to a screen.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * @param tasks Input task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" * @return Task list in string format.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" public String displayTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" StringBuilder out \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" Iterator\u003cTask\u003e iter \u003d tasks.getIterator();","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" for (int ctr \u003d 1; iter.hasNext(); ctr++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" out.append(ctr).append(\". \")","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" .append(iter.next().toString())","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" .append(System.lineSeparator());","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" out.deleteCharAt(out.length() - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" return println(out.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":74}},{"path":"src/main/java/bot/utils/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Bot.Command to add tasks to the task list.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"class AddCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Full command string","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" private final String input;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Creates an AddCommand with the full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @param input Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" protected AddCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the command adds a task and fails to do so.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" Task newTask \u003d Task.makeTask(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Added:\\n\" + newTask.toString())","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" .concat(ui.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":51}},{"path":"src/main/java/bot/utils/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.enums.DoneStatus;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.EmptyListException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Command abstraction for executing commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Default constructor. Does nothing.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" public Command() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * Creates an ExitCommand to indicate the end of the program.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * @return ExitCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" public static Command exit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" * Creates a ListCommand to instruct the bot to display the items in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @return ListCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" public static Command list() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand to instruct the bot to mark the task at the given index","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" * @param index Mark index.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" * @return MarkCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" public static Command mark(int index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" return new MarkCommand(index, DoneStatus.DONE);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand to instruct the bot to unmark the task at the given index","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" * @param index Unmark index.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" * @return MarkCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" public static Command unmark(int index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" return new MarkCommand(index, DoneStatus.NOT_DONE);","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" * Creates an AddCommand to instruct the bot to add a task to the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * @return AddCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" public static Command add(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" return new AddCommand(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * Creates a DeleteCommand to instruct the bot to delete the task at the given index","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" * @param index Index to delete.","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" * @return DeleteCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" public static Command delete(int index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" * Creates a FindCommand to instruct the bot to look for tasks that meet specific criteria.","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" * @return FindCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" public static Command find(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" return new FindCommand(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" public abstract boolean getExitStatus();","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" * @param tasks Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * @param storage Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" * @throws EmptyListException If an illegal operation is performed on an empty list.","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the command adds a task and fails to do so.","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws EmptyListException,","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" InvalidIndexException, InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":112}},{"path":"src/main/java/bot/utils/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Command to delete tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"class DeleteCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Index to delete task at.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" private final int index;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Creates a DeleteCommand with the given index.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @param index Index to delete task at.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" protected DeleteCommand(int index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" Task task \u003d tasks.remove(index);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" return ui.println(\"I\u0027ve removed this task:\\n\" + task.toString())","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" .concat(ui.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":50}},{"path":"src/main/java/bot/utils/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Command to indicate the end of the program.","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"class ExitCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":31}},{"path":"src/main/java/bot/utils/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Command for finding specific tasks in the task list.","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"class FindCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" private final String input;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * Creates an FindCommand with the full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * @param input Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" protected FindCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * @param tasks Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @param storage Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" TaskList queries \u003d tasks.findAll(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" if (queries.size() \u003e 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Here are the matching tasks in your list:\")","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" .concat(ui.displayTaskList(queries));","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Sorry, no matching tasks found.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":51}},{"path":"src/main/java/bot/utils/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.EmptyListException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" * Bot.Command to list all tasks in the task list.","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"class ListCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * @throws EmptyListException If an illegal operation is performed on an empty list.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws EmptyListException {","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" throw new EmptyListException();","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Here are the tasks in your list:\").concat(ui.displayTaskList(tasks));","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":36}},{"path":"src/main/java/bot/utils/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.enums.DoneStatus;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Bot.Command to mark the task as done or not done.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"class MarkCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Index to mark the task at.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" private final int index;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Mark the task as done or not done.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" private final DoneStatus done;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand with the command to mark or unmark the task","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * at the given index.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param index Index to mark the task at.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * @param done Mark the task as done or not done.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" protected MarkCommand(int index, DoneStatus done) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" this.done \u003d done;","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" if (done.equals(DoneStatus.DONE)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" tasks.mark(index);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" return ui.println(\"I\u0027ll mark this as done:\\n\" + tasks.get(index).toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" return ui.println(\"I\u0027ll mark this as not done:\\n\" + tasks.get(index).toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":61}},{"path":"src/main/java/bot/utils/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Deadline subclass. Contains a name and a time the deadline is due.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * The time the deadline is due.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @param name Name of the deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * @param by The time the deadline is due.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" public Deadline(String name, LocalDate by) {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @param name Name of deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * @param by The time the deadline is due.","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" protected Deadline(String name, boolean isDone, LocalDate by) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs a Deadline object based on the information.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * @return Deadline object.","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If Deadline object cannot be created.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" public static Deadline convertFromDataString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"d/[01]/.+/.+\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Deadline.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" return new Deadline(arr[2], arr[1].equals(\"1\"),","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" LocalDate.parse(arr[3], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" * Creates a Deadline object.","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the Deadline object from.","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" * @return Deadline object.","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If a Deadline object cannot be created from the string.","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" public static Deadline makeDeadline(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" String[] comps \u003d str.split(\"/\");","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" if (comps.length !\u003d 2) {","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the deadline is written in the correct format:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\");","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" } else if (comps[0].trim().equals(\"deadline\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the deadline description can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" } else if (comps[1].trim().equals(\"by\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the deadline can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" } else if (!comps[1].startsWith(\"by\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the deadline is written in the correct format:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\");","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" LocalDate by;","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" by \u003d LocalDate.parse(comps[1].substring(3).trim());","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"One or more dates are invalid.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" if (by.isBefore(LocalDate.now())) {","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Deadline can\u0027t be before now!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" return new Deadline(comps[0].substring(9).trim(), by);","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" * String representation of the deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" + this.getBy().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * Get the deadline time.","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" * @return Deadline time.","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" protected LocalDate getBy() {","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" return this.by;","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * Returns data string representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" return \"d/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName()","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":" + \"/\" + this.getBy();","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" * Checks for sameness. Deadlines are the same if they have the same name and deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof Deadline) {","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":" Deadline deadline \u003d (Deadline) o;","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(deadline.getName())","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getBy().equals(deadline.getBy());","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":138}},{"path":"src/main/java/bot/utils/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Event subclass. Contains a name, event start time and end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"class Event extends Task {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Event start time.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Event end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" * @param name Event name.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param from Event start time.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * @param to Event end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" public Event(String name, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @param name Name of task.","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of task.","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * @param from Start time of task.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * @param to End time of task.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" protected Event(String name, boolean isDone, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs an Event object based on the information.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" * @return Event object.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If an Event object cannot be created.","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" public static bot.utils.tasks.Event convertFromDataString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"e/[01]/.+/.+/.+\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Event.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" return new bot.utils.tasks.Event(arr[2], arr[1].equals(\"1\"), LocalDate.parse(arr[3]), LocalDate.parse(arr[4]));","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" * Creates an Event object.","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the object from.","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @return Event object.","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the input string cannot create the Event object.","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" public static bot.utils.tasks.Event makeEvent(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" String[] comps \u003d str.split(\"/\");","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" if (comps.length !\u003d 3) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the event is written in the correct format:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" + \"event ... /from ... /to ...\");","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" } else if (comps[0].trim().equals(\"event\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the event description can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" } else if (comps[1].trim().equals(\"from\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, event start time can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" } else if (comps[2].trim().equals(\"to\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, event end time can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" } else if (!comps[1].startsWith(\"from \") || !comps[2].startsWith(\"to \")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the event is written in the correct format:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" + \"event ... /from ... /to ...\");","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" LocalDate from;","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" LocalDate to;","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" from \u003d LocalDate.parse(comps[1].substring(5).trim());","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" to \u003d LocalDate.parse(comps[2].substring(3).trim());","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"One or more dates are invalid.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" if (from.isAfter(to)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Event end time can\u0027t be before event start time!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" return new bot.utils.tasks.Event(comps[0].substring(6).trim(), from, to);","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" * Get event start time.","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * @return Event start time.","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" protected LocalDate getFrom() {","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" return this.from;","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" * Get event end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * @return Event end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" protected LocalDate getTo() {","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" return this.to;","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" * String representation of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" + \" (from: \"","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" + this.getFrom().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" + \" to: \" + this.getTo().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" * Returns data string representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" return \"e/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName()","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":" + \"/\" + this.getFrom() + \"/\" + this.getTo();","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":" * Checks for sameness. Events are the same if they have the same name, start time","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":" * and end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof bot.utils.tasks.Event) {","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(((bot.utils.tasks.Event) o).getName())","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getFrom().equals(((bot.utils.tasks.Event) o).getFrom())","lastModifiedDate":"2023-09-08"},{"lineNumber":156,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getTo().equals(((bot.utils.tasks.Event) o).getTo());","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":160}},{"path":"src/main/java/bot/utils/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" * Abstract task class for tasks that can be created for the task list in the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Name of the task.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" private String name;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Indicates if the task is completed.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * @param name Name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * @param name Name of the task.","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" protected Task(String name, boolean isDone) {","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * Creates a task based on the string input. Throws an InvalidTaskException","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * if no task can be created from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create task from.","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * @return Task object containing information from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If no task can be created.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" public static Task makeTask(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" return ToDo.makeToDo(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" return Deadline.makeDeadline(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"event\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" return Event.makeEvent(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"No such task exists with that code.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs a Task object based on the information.","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * @return Bot.Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the task object cannot be created from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" public static Task convertFromDataString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"t\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" return ToDo.convertFromDataString(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"d\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" return Deadline.convertFromDataString(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"e\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" return Event.convertFromDataString(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"No such task exists with that code.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" * Checks if the command word contains a task command.","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" * @param str Command word to check.","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" * @return True if a task command is found, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" public static boolean isTaskCommand(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" return str.equals(\"todo\") || str.equals(\"event\") || str.equals(\"deadline\");","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" * Gets completion status of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" * @return True if the task is complete, false otherwise.","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" @SuppressWarnings(\"BooleanMethodIsAlwaysInverted\")","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" return this.isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" * Gets the name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * @return Name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" public String getName() {","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" return this.name;","lastModifiedDate":"2023-08-20"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" * Gets the string representation of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * @return String representation of task.","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" return \"[\" + (this.isDone() ? \"X\" : \" \") + \"] \" + this.getName();","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" * Changes the task\u0027s completion status to complete.","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" public void mark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" * Changes the task\u0027s completion status to incomplete.","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" public void unmark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" * Creates data string of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-08-25"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" public abstract String convertToDataString();","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"sopa301":140}},{"path":"src/main/java/bot/utils/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":" * ToDo subclass. Contains a name.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"class ToDo extends Task {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * @param name Name of task.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @param name Name of ToDo.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of Todo.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" protected ToDo(String name, boolean isDone) {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and creates a ToDo object.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * @param str Data string to read.","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @return ToDo object.","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If an object cannot be created.","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" public static ToDo convertFromDataString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"t/[01]/.+\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Todo.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" return new ToDo(arr[2], arr[1].equals(\"1\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Checks for sameness of ToDo. ToDos are the same if they have the same name.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof ToDo) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(((ToDo) o).getName());","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * Creates a ToDo object.","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the ToDo object from.","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" * @return ToDo object.","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If a ToDo object cannot be created from the string.","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" public static ToDo makeToDo(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" String name \u003d str.substring(4).trim();","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" if (name.equals(\"\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the todo description can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" return new ToDo(name);","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" * String representation of the todo.","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" * Get data string representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" return \"t/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName();","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":92}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"bot.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":19}},{"path":"src/test/java/bot/utils/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" public void remove_validIndex_success() throws InvalidTaskException, InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" assertEquals(task, tasks.remove(1));","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" public void remove_multipleIndex_success() throws InvalidTaskException, InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" Task task1 \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" Task task2 \u003d Task.makeTask(\"todo 2\");","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" arr.add(task1);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" arr.add(task2);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" assertEquals(task2, tasks.remove(2));","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" assertEquals(task1, tasks.remove(1));","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" public void remove_negativeIndex_throwsException() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" tasks.remove(-1);","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" public void remove_bigNumber_throwsException() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" tasks.remove(100);","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":69}},{"path":"src/test/java/bot/utils/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" public void makeTask_validInput_success() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" assertEquals(\"[T][ ] name1\", Task.makeTask(\"todo name1\").toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" assertEquals(\"[D][ ] name2 (by: Aug 10 2024)\",","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline name2 /by 2024-08-10\").toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" assertEquals(\"[E][ ] name3 (from: Jul 1 2024 to: Aug 1 2024)\",","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"event name3 /from 2024-07-01 /to 2024-08-01\").toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsToDo_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"todo\");","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, the todo description can\u0027t be empty.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsDeadline_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline two\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Please make sure the deadline \"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" + \"is written in the correct format:\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\",","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsEvent_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"event /from 2020-10-10 /to 2020-12-10\");","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, the event description can\u0027t be empty.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" public void makeTask_invalidDate_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline kappa /by 2020-20-20\");","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" assertEquals(\"One or more dates are invalid.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":70}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" mainClass.set(\"bot.gui.Launcher\")","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" archiveBaseName \u003d \"bot\"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":"checkstyle {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":21,"-":40}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"# Trash Gremlin Caelus User Guide","lastModifiedDate":"2023-09-16"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"A chatbot that can help keep track of a list of tasks. Note that all indexes begin at 1.","lastModifiedDate":"2023-09-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"### Add Task","lastModifiedDate":"2023-09-16"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"Add tasks of different natures to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"### Mark Task","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"Mark tasks as done or not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"### Delete Task","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"Remove tasks from the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"### Find Task","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":"Find tasks with names that match the search term.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":"### List Tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":"List all tasks in the task list.","lastModifiedDate":"2023-09-16"},{"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":"sopa301"},"content":"### `todo` - Add to-do","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":"Adds a task with no deadline or time window to the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":"`todo Make bed`","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":"Adds a to-do to the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"Added:","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":"[T][ ] Make bed","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":"### `deadline` - Add deadline","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":"Adds a task with a deadline to the list. Deadline must not be before the current date.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":"`deadline Make bed /by 2023-09-16`","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":"Adds a deadline to the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":"Added:","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":"[D][ ] Make bed (by: Sep 16 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":"### `event` - Add event","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":"Adds a task with a time window to the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":"`event heck week /from 2023-09-18 /to 2023-09-25`","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":"Adds an event to the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":"Added:","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":"[E][ ] heck week (from: Sep 18 2023 to: Sep 25 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":"### `mark` - Mark task as done","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":"Marks the task at the given index as completed.","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":"`mark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":"Task at position 1 of the list is marked as complete.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":"I\u0027ll mark this as done:","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":"[T][X] Make bed","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":"### `unmark` - Mark task as not done","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":"Marks the task at the given index as not completed.","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":"`unmark 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":"Task at position 1 of the list is marked as not complete.","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":"I\u0027ll mark this as not done:","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":"[T][ ] Make bed","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":"### `find` - Find task","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":"Displays all tasks with the given search term in their names.","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":"`find bed`","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":"Finds all tasks with the word \"bed\" in their names.","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":"Here are the matching tasks in your list:","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":"1. [T][ ] Make bed","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":"2. [D][ ] Make bed (by: Sep 16 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":"### `delete` - Delete task","lastModifiedDate":"2023-09-16"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":"Deletes the task at the given index from the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":"`delete 1`","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":"Deletes the task from the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":"I\u0027ve removed this task:","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"sopa301"},"content":"[T][ ] Make bed","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"sopa301"},"content":"### `list` - List tasks","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":151,"author":{"gitId":"sopa301"},"content":"Lists all tasks currently in the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"sopa301"},"content":"Example of usage:","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"sopa301"},"content":"`list`","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"sopa301"},"content":"Expected outcome:","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"sopa301"},"content":"Lists all tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"sopa301"},"content":"Here are the tasks in your list:","lastModifiedDate":"2023-09-16"},{"lineNumber":163,"author":{"gitId":"sopa301"},"content":"1. [T][ ] Make bed","lastModifiedDate":"2023-09-16"},{"lineNumber":164,"author":{"gitId":"sopa301"},"content":"2. [D][ ] Make bed (by: Sep 16 2023)","lastModifiedDate":"2023-09-16"},{"lineNumber":165,"author":{"gitId":"sopa301"},"content":"```","lastModifiedDate":"2023-09-16"},{"lineNumber":166,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":167,"author":{"gitId":"sopa301"},"content":"### `bye` - Stop the bot","lastModifiedDate":"2023-09-16"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":169,"author":{"gitId":"sopa301"},"content":"Stop the bot and prevent it from taking any more commands.","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":171,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":173,"author":{"gitId":"sopa301"},"content":"`bye`","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":177,"author":{"gitId":"sopa301"},"content":"Stops the bot and disables messages from being sent to the bot.","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":179,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"},{"lineNumber":180,"author":{"gitId":"sopa301"},"content":"Bye. I\u0027ll be at the nearest trash can!","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"sopa301":158,"-":23}},{"path":"src/main/java/bot/Bot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.BotException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.LoadingException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.Parser;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.utils.commands.Command;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Main class for the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public class Bot {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Storage object for storing data.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * User interface for interacting with the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Task list for storing tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * Shows if the bot is active or not.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * Creates the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" public Bot() {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" this.storage \u003d new Storage(\"/data/tasks.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" } catch (LoadingException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * Gives the bot\u0027s response to a String input.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" * @param input Raw input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response as a string.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" String response;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" assert command !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" response \u003d command.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" if (command.getExitStatus()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" isExit \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" } catch (BotException exception) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" response \u003d ui.showError(exception.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" return response;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * Gets the bot\u0027s greeting message.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * @return Greeting message.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" public String greet() {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" return ui.showWelcome();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" * Indicates if the bot is active.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" * @return True if the bot is active, else false.","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" return this.isExit;","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"sopa301":85}},{"path":"src/main/java/bot/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.gui.MainWindow;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Main class for the entire project.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * Bot used in the project.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" private final Bot bot \u003d new Bot();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * Creates the GUI for the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" * the application scene can be set.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * Applications may create other stages, if needed,","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * but they will not be primary stages.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setBot(bot);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":42}},{"path":"src/main/java/bot/enums/DoneStatus.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.enums;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Indicates whether a task is done or not.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public enum DoneStatus {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Indicates task is done.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" DONE,","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Indicates task is not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" NOT_DONE","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/exceptions/BotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Supertype of all exceptions that occur specific to the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class BotException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public BotException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":16}},{"path":"src/main/java/bot/exceptions/DuplicateTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when duplicate tasks are encountered and are not supposed to exist.","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class DuplicateTaskException extends InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Constructor with default message.","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public DuplicateTaskException() {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Task already exists!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Constructor with variable message.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" public DuplicateTaskException(String msg) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":22}},{"path":"src/main/java/bot/exceptions/EmptyListException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when the task list is empty and a function requires an","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" * item in the task list.","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"public class EmptyListException extends BotException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" public EmptyListException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" super(\"Oops, there are no tasks in your list!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":14}},{"path":"src/main/java/bot/exceptions/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when invalid arguments are provided to a command.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidArgumentException extends BotException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidArgumentException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, but that command can\u0027t be done with the provided argument(s).\");","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Creates an InvalidArgumentException with the provided string as the error","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * message.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * @param str Error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" public InvalidArgumentException(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" super(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":23}},{"path":"src/main/java/bot/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when an invalid command is sent to the bot.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidCommandException extends BotException {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor. Currently set to Trash Gremlin Caelus personality.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, I dunno what you\u0027re saying. Must be the trash getting to my brain.\");","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"sopa301":13}},{"path":"src/main/java/bot/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when an index is given that is out of range for the requested operation.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidIndexException extends InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" public InvalidIndexException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" super(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Constructor with variable message.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" public InvalidIndexException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":22}},{"path":"src/main/java/bot/exceptions/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for incorrect inputs when creating a Task object.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class InvalidTaskException extends InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Constructor with variable message.","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param msg Message to be displayed when getMessage is called.","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public InvalidTaskException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/exceptions/LoadingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.exceptions;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":" * Exception for when the storage class fails to load or save data for any reason.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"public class LoadingException extends BotException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Creates a LoadingException with the given string as the error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * @param str Error message.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" public LoadingException(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" super(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":15}},{"path":"src/main/java/bot/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Dialog text.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Image for the dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * Creates a dialog box with the given text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * @param text Text to show in the box.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @param img Image to show in the box.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * Creates a dialog box to show on the user\u0027s side with the given text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" * @param text Text to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * @param img Image to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @return Dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" * Creates a dialog box to show on the bot\u0027s side with the given text and image.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" * @param text Text to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" * @param img Image to show.","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" * @return Dialog box.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" public static DialogBox getBotDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":86}},{"path":"src/main/java/bot/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.Main;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Starts the GUI.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" Application.launch(Main.class);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":18}},{"path":"src/main/java/bot/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.gui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.Bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Scroll pane on the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Dialog container for the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * User input field for the GUI","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * Bot instance exchanging data with the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" private Bot bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * User\u0027s image in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" private final Image userImage \u003d new Image(Objects.requireNonNull(","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" this.getClass().getResourceAsStream(\"/images/DaUser.png\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Bot\u0027s image in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" private final Image botImage \u003d new Image(Objects.requireNonNull(","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" this.getClass().getResourceAsStream(\"/images/DaBot.png\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * Initialises the main window in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" * Sets the active bot instance to the given bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * @param bot Bot to use in the GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" public void setBot(Bot bot) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" this.bot \u003d bot;","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" dialogContainer.getChildren().add(DialogBox.getBotDialog(bot.greet(), botImage));","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" if (bot.getExitStatus()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" String response \u003d bot.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" DialogBox.getBotDialog(response, botImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":84}},{"path":"src/main/java/bot/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidArgumentException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.commands.Command;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Abstraction for making sense of user commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Regex pattern for delete commands.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_DELETE \u003d Pattern.compile(\"delete -?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Regex pattern for mark commands.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_MARK \u003d Pattern.compile(\"mark -?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Regex pattern for unmark commands.","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" private static final Pattern PATTERN_UNMARK \u003d Pattern.compile(\"unmark -?\\\\d+\");","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * Default constructor. It does nothing as the parser is not meant to","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * be instantiated.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" public Parser() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * Parses the command string into a command to be executed.","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * Does not guarantee the command is syntactically correct.","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @return Command object.","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the arguments are clearly invalid.","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" public static Command parse(String str) throws InvalidCommandException, InvalidArgumentException {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" String commandWord \u003d str.split(\" \", 2)[0].toLowerCase().trim();","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" case \"bye\":","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" return Command.exit();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" case \"list\":","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" return Command.list();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" case \"mark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" return Command.mark(getMarkIndex(str));","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" return Command.unmark(getUnmarkIndex(str));","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" case \"delete\":","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" return Command.delete(getDeleteIndex(str));","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" case \"find\":","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" return Command.find(getFindTerm(str));","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" default:","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" if (!Task.isTaskCommand(commandWord)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" return Command.add(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" * Gets the index from the unmark command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * @return Unmark index.","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" private static int getUnmarkIndex(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" if (!isValidUnmarkCommand(str)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException(\"Index to mark must be an integer.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" return Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" * Checks if the command string has valid MarkCommand syntax. It ensures the string follows this pattern:","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" * \"unmark (index)\" where index is an integer.","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" * @return Returns true if it is valid, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" private static boolean isValidUnmarkCommand(String str) {","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" return PATTERN_UNMARK.matcher(str).matches();","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" * Checks if the command string has valid MarkCommand syntax. It ensures the string follows this pattern:","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" * \"mark (index)\" where index is an integer.","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" * @return Returns true if it is valid, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" private static boolean isValidMarkCommand(String str) {","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" return PATTERN_MARK.matcher(str).matches();","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" * Gets the index from the mark command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" * @return Mark index.","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" private static int getMarkIndex(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" if (!isValidMarkCommand(str)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException(\"Index to mark must be an integer.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" return Integer.parseInt(str.substring(5));","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":" * Checks if the string has valid FindCommand syntax. It ensures the command follows this pattern:","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" * \"find (search term)\"","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" * Note that whitespaces are valid search terms as well, so \" book\" will find \"read book\".","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" * @param str Raw command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" * @return True if it is valid, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":" private static boolean isValidFindCommand(String str) {","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" if (str.trim().equalsIgnoreCase(\"find\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" String[] tokens \u003d str.split(\" \", 2);","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" assert tokens.length \u003e 1;","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":" String searchTerm \u003d tokens[1].trim();","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" return !searchTerm.equals(\"\");","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" * Parses the search term from the full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":" * @return Search term.","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":" * @throws InvalidArgumentException If the search term is empty.","lastModifiedDate":"2023-09-08"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":" private static String getFindTerm(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":" if (!isValidFindCommand(str)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":" assert str.trim().equals(\"find\");","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException(\"Search term cannot be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"sopa301"},"content":" return str.substring(5).trim();","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"sopa301"},"content":" * Checks if the string has valid DeleteCommand syntax. It ensures the command follows this pattern:","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"sopa301"},"content":" * \"delete (index)\" where index is an integer.","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"sopa301"},"content":" * @param str Raw command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":156,"author":{"gitId":"sopa301"},"content":" * @return True if it is valid, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"sopa301"},"content":" private static boolean isValidDeleteCommand(String str) {","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"sopa301"},"content":" return PATTERN_DELETE.matcher(str).matches();","lastModifiedDate":"2023-09-08"},{"lineNumber":161,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":162,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"sopa301"},"content":" * Gets the index from the delete command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":165,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":166,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":167,"author":{"gitId":"sopa301"},"content":" * @return Delete index.","lastModifiedDate":"2023-09-08"},{"lineNumber":168,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":169,"author":{"gitId":"sopa301"},"content":" private static int getDeleteIndex(String str) throws InvalidArgumentException {","lastModifiedDate":"2023-09-08"},{"lineNumber":170,"author":{"gitId":"sopa301"},"content":" assert str !\u003d null;","lastModifiedDate":"2023-09-08"},{"lineNumber":171,"author":{"gitId":"sopa301"},"content":" if (!isValidDeleteCommand(str)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":172,"author":{"gitId":"sopa301"},"content":" throw new InvalidArgumentException(\"Index to delete must be an integer.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":173,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":174,"author":{"gitId":"sopa301"},"content":" return Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-09-08"},{"lineNumber":175,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":176,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":176}},{"path":"src/main/java/bot/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.io.File;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.LoadingException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Abstraction for storing and loading data from a local file.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * File path for loading and saving data.","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" private final String filePath;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * Creates a Storage object that stores and loads data at that file path.","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param filePath Path to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * Loads data from that file path, and creates the file if it doesn\u0027t exist.","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * @return ArrayList of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" * @throws LoadingException If the data file cannot be read or created.","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" public ArrayList\u003cTask\u003e load() throws LoadingException {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" if (!f.isFile()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" createTasksFile(f);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" tasks \u003d loadTasksFromFile(f);","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" } catch (IOException | SecurityException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" throw new LoadingException(e.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" return tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" * Creates the task file in the specified directory given by the file\u0027s filepath.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" * @param f Details of file to create.","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" * @throws IOException If the file cannot be created.","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" private static void createTasksFile(File f) throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" File parent \u003d new File(f.getParent());","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" if (!parent.isDirectory()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" parent.mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * Creates an ArrayList of tasks from the contents of the file.","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * @param f File to read tasks from.","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" * @return Tasks in an ArrayList.","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * @throws FileNotFoundException If file cannot be found.","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" private static ArrayList\u003cTask\u003e loadTasksFromFile(File f) throws FileNotFoundException {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" Scanner scanner \u003d new Scanner(f);","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" tasks.add(Task.convertFromDataString(scanner.nextLine()));","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" System.out.println(\"Invalid task, skipping...\");","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" * Saves task list to file named at filePath. Assumes the file has been created.","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" * @param lst Bot.Task list to save to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" * @throws LoadingException If the list cannot be saved fully.","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" public void save(TaskList lst) throws LoadingException {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" assert lst !\u003d null : \"lst must not be null\";","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" File f \u003d new File(this.filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" // We did it like this so the last line isn\u0027t a line separator.","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" for (int i \u003d 1; i \u003c lst.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" fw.write(lst.get(i).convertToDataString());","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" fw.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" if (lst.size() \u003e 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" fw.write(lst.get(lst.size()).convertToDataString());","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" fw.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" throw new LoadingException(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":110}},{"path":"src/main/java/bot/utils/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.util.Collection;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.DuplicateTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Task list abstraction. Functions like an arraylist but may not contain one. Does not accept duplicates.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Index starts at 1.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Data structure to hold list.","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" private final List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Default constructor. To be used when an empty list is needed.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Constructor with a list of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * @param list List of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" public TaskList(Collection\u003cTask\u003e list) {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" for (Task task : list) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" add(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" } catch (DuplicateTaskException exception) {","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" // We ignore duplicates because our task list should have unique items.","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Adds a task to the end of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" * @param task Task to add.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @throws DuplicateTaskException If the list already contains the task.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" public void add(Task task) throws DuplicateTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" if (tasks.contains(task)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" throw new DuplicateTaskException();","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" * Gets the task at that index of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * @return Bot.Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" return tasks.get(index - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * Removes the task at that index from the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" * @return Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" public Task remove(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" return tasks.remove(index - 1);","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" * Gets length of the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" * @return Length of list.","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" public int size() {","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" return tasks.size();","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" * Gets an iterator of the tasks in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" * @return Iterator of Task objects.","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" public Iterator\u003cTask\u003e getIterator() {","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" return tasks.iterator();","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" * Marks the task at the specified index","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" public void mark(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" tasks.get(index - 1).mark();","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * Unmarks the task at the specified index.","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If index is out of range.","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" public void unmark(int index) throws InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":" if (index \u003c 1 || index \u003e tasks.size()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" throw new InvalidIndexException();","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" tasks.get(index - 1).unmark();","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":" * Gets all tasks that contain the given string in their names.","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" * @param str Query string.","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" * @return TaskList of tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" public TaskList findAll(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" Iterator\u003cTask\u003e iter \u003d tasks.iterator();","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":" TaskList out \u003d new TaskList();","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" while (iter.hasNext()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" Task task \u003d iter.next();","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" if (task.getName().toLowerCase().contains(str.toLowerCase())) {","lastModifiedDate":"2023-09-05"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" out.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" } catch (DuplicateTaskException exception) {","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":" // We ignore duplicate tasks because there\u0027s no better way to deal with them in this method.","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":" return out;","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":145}},{"path":"src/main/java/bot/utils/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * User interface class responsible for dealing with interactions with the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Default constructor. Creates a Ui object.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" public Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Formats the input string as an error message for the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @param str Input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * @return Input string formatted as an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" public String showError(String str) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" return println(\"ERROR: \" + str);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Formats the input string similar to System.out.println().","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * @param str Input string.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @return String with line separator.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" public String println(String str) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" return str + System.lineSeparator();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * Gets the bot\u0027s welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * @return Welcome message.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" public String showWelcome() {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" return println(\"Hello! I\u0027m the trash gremlin Caelus!\")","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" .concat(println(\"What can I do for you?\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" * Gets the bot\u0027s farewell message.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" * @return Farewell message.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" return println(\"Bye. I\u0027ll be at the nearest trash can!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" * Gets the inputted task list in a string format for printing to a screen.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * @param tasks Input task list.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" * @return Task list in string format.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" public String displayTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" StringBuilder out \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" Iterator\u003cTask\u003e iter \u003d tasks.getIterator();","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" for (int ctr \u003d 1; iter.hasNext(); ctr++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" out.append(ctr).append(\". \")","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" .append(iter.next().toString())","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" .append(System.lineSeparator());","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" out.deleteCharAt(out.length() - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" return println(out.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":74}},{"path":"src/main/java/bot/utils/commands/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Command to add tasks to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"class AddCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Full command string","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" private final String input;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Creates an AddCommand with the full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @param input Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" protected AddCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the command adds a task and fails to do so.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" Task newTask \u003d Task.makeTask(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Added:\\n\" + newTask.toString())","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" .concat(ui.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":51}},{"path":"src/main/java/bot/utils/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.enums.DoneStatus;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.EmptyListException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Command abstraction for executing commands.","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" * Default constructor. Does nothing.","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" public Command() {}","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * Creates an ExitCommand to indicate the end of the program.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * @return ExitCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" public static Command exit() {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" * Creates a ListCommand to instruct the bot to display the items in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @return ListCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" public static Command list() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand to instruct the bot to mark the task at the given index","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" * @param index Mark index.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" * @return MarkCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" public static Command mark(int index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" return new MarkCommand(index, DoneStatus.DONE);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand to instruct the bot to unmark the task at the given index","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" * @param index Unmark index.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" * @return MarkCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" public static Command unmark(int index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" return new MarkCommand(index, DoneStatus.NOT_DONE);","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" * Creates an AddCommand to instruct the bot to add a task to the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * @return AddCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" public static Command add(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" return new AddCommand(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" * Creates a DeleteCommand to instruct the bot to delete the task at the given index","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" * in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" * @param index Index to delete.","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" * @return DeleteCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" public static Command delete(int index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" * Creates a FindCommand to instruct the bot to look for tasks that meet specific criteria.","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" * @param str Full command string.","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" * @return FindCommand object.","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" public static Command find(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" return new FindCommand(str);","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" public abstract boolean getExitStatus();","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" * @param tasks Task list containing tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * @param storage Storage for storing data.","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" * @throws EmptyListException If an illegal operation is performed on an empty list.","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the command adds a task and fails to do so.","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws EmptyListException,","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" InvalidIndexException, InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":112}},{"path":"src/main/java/bot/utils/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Command to delete tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"class DeleteCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Index to delete task at.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" private final int index;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Creates a DeleteCommand with the given index.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @param index Index to delete task at.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" protected DeleteCommand(int index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" Task task \u003d tasks.remove(index);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" return ui.println(\"I\u0027ve removed this task:\\n\" + task.toString())","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" .concat(ui.println(\"Now you have \" + tasks.size() + \" task(s) in the list.\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":50}},{"path":"src/main/java/bot/utils/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Command to indicate the end of the program.","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"class ExitCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":31}},{"path":"src/main/java/bot/utils/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" * Command for finding specific tasks in the task list.","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"class FindCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" private final String input;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" * Creates an FindCommand with the full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * @param input Full command string.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" protected FindCommand(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" this.input \u003d input;","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * @param tasks Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @param storage Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" TaskList queries \u003d tasks.findAll(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" if (queries.size() \u003e 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Here are the matching tasks in your list:\")","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" .concat(ui.displayTaskList(queries));","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Sorry, no matching tasks found.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":51}},{"path":"src/main/java/bot/utils/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.EmptyListException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" * Bot.Command to list all tasks in the task list.","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"class ListCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" * @throws EmptyListException If an illegal operation is performed on an empty list.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws EmptyListException {","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" throw new EmptyListException();","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" return ui.println(\"Here are the tasks in your list:\").concat(ui.displayTaskList(tasks));","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":36}},{"path":"src/main/java/bot/utils/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.enums.DoneStatus;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import bot.utils.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import bot.utils.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.utils.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Command to mark the task as done or not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"class MarkCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Index to mark the task at.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" private final int index;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Mark the task as done or not done.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" private final DoneStatus done;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Creates a MarkCommand with the command to mark or unmark the task","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" * at the given index.","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param index Index to mark the task at.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * @param done Mark the task as done or not done.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" protected MarkCommand(int index, DoneStatus done) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" this.done \u003d done;","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" * Checks if the bot should exit after the execution of the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" * @return True if the bot should exit, false otherwise.","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" public boolean getExitStatus() {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" * @param tasks Bot.Task list containing tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @param ui User interface for interacting with users.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" * @param storage Bot.Storage for storing data.","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" * @return Bot\u0027s response to the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * @throws InvalidIndexException If the command tries to access an invalid index.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws InvalidIndexException {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" if (done.equals(DoneStatus.DONE)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" tasks.mark(index);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" return ui.println(\"I\u0027ll mark this as done:\\n\" + tasks.get(index).toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" } else {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" return ui.println(\"I\u0027ll mark this as not done:\\n\" + tasks.get(index).toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":61}},{"path":"src/main/java/bot/utils/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Deadline subclass. Contains a name and a time the deadline is due.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * The time the deadline is due.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @param name Name of the deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * @param by The time the deadline is due.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" public Deadline(String name, LocalDate by) {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @param name Name of deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" * @param by The time the deadline is due.","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" protected Deadline(String name, boolean isDone, LocalDate by) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs a Deadline object based on the information.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * @return Deadline object.","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If Deadline object cannot be created.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" public static Deadline convertFromDataString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"d/[01]/.+/.+\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Deadline.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" return new Deadline(arr[2], arr[1].equals(\"1\"),","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" LocalDate.parse(arr[3], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")));","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" * Creates a Deadline object.","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the Deadline object from.","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" * @return Deadline object.","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If a Deadline object cannot be created from the string.","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" public static Deadline makeDeadline(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" String[] comps \u003d str.split(\"/\");","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" if (comps.length !\u003d 2) {","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the deadline is written in the correct format:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\");","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" } else if (comps[0].trim().equals(\"deadline\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the deadline description can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" } else if (comps[1].trim().equals(\"by\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the deadline can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" } else if (!comps[1].startsWith(\"by\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the deadline is written in the correct format:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\");","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" LocalDate by;","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" by \u003d LocalDate.parse(comps[1].substring(3).trim());","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"One or more dates are invalid.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" if (by.isBefore(LocalDate.now())) {","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Deadline can\u0027t be before now!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" return new Deadline(comps[0].substring(9).trim(), by);","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" * Gets the string representation of the deadline.","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" + this.getBy().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":" + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * Gets the deadline time.","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" * @return Deadline time.","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" protected LocalDate getBy() {","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":" return this.by;","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * Returns data string representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" return \"d/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName()","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":" + \"/\" + this.getBy();","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" * Checks for sameness. Deadlines are the same if they have the same name and deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof Deadline) {","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":" Deadline deadline \u003d (Deadline) o;","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(deadline.getName())","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getBy().equals(deadline.getBy());","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":138}},{"path":"src/main/java/bot/utils/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Event subclass. Contains a name, event start time and end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"class Event extends Task {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" * Event start time.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" * Event end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" * @param name Event name.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" * @param from Event start time.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" * @param to Event end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" public Event(String name, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" * @param name Name of task.","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of task.","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * @param from Start time of task.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * @param to End time of task.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" protected Event(String name, boolean isDone, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs an Event object based on the information.","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" * @return Event object.","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If an Event object cannot be created.","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" public static bot.utils.tasks.Event convertFromDataString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"e/[01]/.+/.+/.+\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Event.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" return new bot.utils.tasks.Event(arr[2], arr[1].equals(\"1\"), LocalDate.parse(arr[3]), LocalDate.parse(arr[4]));","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" * Creates an Event object.","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the object from.","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" * @return Event object.","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the input string cannot create the Event object.","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" public static bot.utils.tasks.Event makeEvent(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" String[] comps \u003d str.split(\"/\");","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" if (comps.length !\u003d 3) {","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the event is written in the correct format:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" + \"event ... /from ... /to ...\");","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" } else if (comps[0].trim().equals(\"event\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the event description can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" } else if (comps[1].trim().equals(\"from\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, event start time can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" } else if (comps[2].trim().equals(\"to\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, event end time can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" } else if (!comps[1].startsWith(\"from \") || !comps[2].startsWith(\"to \")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Please make sure the event is written in the correct format:\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" + \"event ... /from ... /to ...\");","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" LocalDate from;","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" LocalDate to;","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" from \u003d LocalDate.parse(comps[1].substring(5).trim());","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" to \u003d LocalDate.parse(comps[2].substring(3).trim());","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"One or more dates are invalid.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" if (from.isAfter(to)) {","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Event end time can\u0027t be before event start time!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" return new bot.utils.tasks.Event(comps[0].substring(6).trim(), from, to);","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" * Gets event start time.","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * @return Event start time.","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" protected LocalDate getFrom() {","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" return this.from;","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" * Gets event end time.","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * @return Event end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" protected LocalDate getTo() {","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" return this.to;","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" * Gets the string representation of the event.","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" + \" (from: \"","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" + this.getFrom().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" + \" to: \" + this.getTo().format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"))","lastModifiedDate":"2023-09-08"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" + \")\";","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" * Returns data string representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" return \"e/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName()","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":" + \"/\" + this.getFrom() + \"/\" + this.getTo();","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":142,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"sopa301"},"content":" * Checks for sameness. Events are the same if they have the same name, start time","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"sopa301"},"content":" * and end time.","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":152,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":153,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof bot.utils.tasks.Event) {","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(((bot.utils.tasks.Event) o).getName())","lastModifiedDate":"2023-09-08"},{"lineNumber":155,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getFrom().equals(((bot.utils.tasks.Event) o).getFrom())","lastModifiedDate":"2023-09-08"},{"lineNumber":156,"author":{"gitId":"sopa301"},"content":" \u0026\u0026 this.getTo().equals(((bot.utils.tasks.Event) o).getTo());","lastModifiedDate":"2023-09-08"},{"lineNumber":157,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":160,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":160}},{"path":"src/main/java/bot/utils/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" * Abstract task class for tasks that can be created for the task list in the chatbot.","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" * Name of the task.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" private String name;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" * Indicates if the task is completed.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * @param name Name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * @param name Name of the task.","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" protected Task(String name, boolean isDone) {","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" * Creates a task based on the string input. Throws an InvalidTaskException","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" * if no task can be created from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create task from.","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * @return Task object containing information from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If no task can be created.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" public static Task makeTask(String str) throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" return ToDo.makeToDo(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" return Deadline.makeDeadline(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"event\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" return Event.makeEvent(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"No such task exists with that code.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and constructs a Task object based on the information.","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" * @param str Data string.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * @return Bot.Task object.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If the task object cannot be created from the string.","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" public static Task convertFromDataString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"t\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" return ToDo.convertFromDataString(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"d\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" return Deadline.convertFromDataString(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" if (str.startsWith(\"e\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" return Event.convertFromDataString(str);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"No such task exists with that code.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" * Checks if the command word contains a task command.","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":" * @param str Command word to check.","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" * @return True if a task command is found, false otherwise.","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" public static boolean isTaskCommand(String str) {","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" return str.equals(\"todo\") || str.equals(\"event\") || str.equals(\"deadline\");","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" * Gets completion status of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"sopa301"},"content":" * @return True if the task is complete, false otherwise.","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"sopa301"},"content":" @SuppressWarnings(\"BooleanMethodIsAlwaysInverted\")","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"sopa301"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":97,"author":{"gitId":"sopa301"},"content":" return this.isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":98,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":99,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"sopa301"},"content":" * Gets the name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"sopa301"},"content":" * @return Name of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"sopa301"},"content":" public String getName() {","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"sopa301"},"content":" return this.name;","lastModifiedDate":"2023-08-20"},{"lineNumber":107,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":108,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"sopa301"},"content":" * Gets the string representation of the task.","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"sopa301"},"content":" * @return String representation of task.","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":115,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"sopa301"},"content":" return \"[\" + (this.isDone() ? \"X\" : \" \") + \"] \" + this.getName();","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"sopa301"},"content":" * Changes the task\u0027s completion status to complete.","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"sopa301"},"content":" public void mark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":123,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":124,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":125,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"sopa301"},"content":" * Changes the task\u0027s completion status to incomplete.","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"sopa301"},"content":" public void unmark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":130,"author":{"gitId":"sopa301"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":131,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":132,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"sopa301"},"content":" * Creates data string of task.","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-08-25"},{"lineNumber":137,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":138,"author":{"gitId":"sopa301"},"content":" public abstract String convertToDataString();","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"sopa301":140}},{"path":"src/main/java/bot/utils/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils.tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":" * ToDo subclass. Contains a name.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"class ToDo extends Task {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" * Default constructor.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" * @param name Name of task.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" super(name);","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" * Alternative constructor. Usually used when reading data from a file.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" * @param name Name of ToDo.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":" * @param isDone Completion status of Todo.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" protected ToDo(String name, boolean isDone) {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" * Reads a string of standardised data and creates a ToDo object.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" * @param str Data string to read.","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" * @return ToDo object.","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If an object cannot be created.","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" public static ToDo convertFromDataString(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" if (!str.matches(\"t/[01]/.+\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Could not read Todo.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" String[] arr \u003d str.split(\"/\");","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" return new ToDo(arr[2], arr[1].equals(\"1\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" * Checks for sameness of ToDo. ToDos are the same if they have the same name.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" * @param o Object to compare to.","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" * @return True if objects are the same, else false.","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" } else if (o instanceof ToDo) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" return this.getName().equals(((ToDo) o).getName());","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" * Creates a ToDo object.","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" * @param str Raw string to create the ToDo object from.","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" * @return ToDo object.","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" * @throws InvalidTaskException If a ToDo object cannot be created from the string.","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" public static ToDo makeToDo(String str) throws InvalidTaskException {","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" String name \u003d str.substring(4).trim();","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" if (name.equals(\"\")) {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":" throw new InvalidTaskException(\"Sorry, the todo description can\u0027t be empty.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"sopa301"},"content":" return new ToDo(name);","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"sopa301"},"content":" * Gets the string representation of the todo.","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"sopa301"},"content":" * @return String representation.","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"sopa301"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"sopa301"},"content":" public String toString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"sopa301"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"sopa301"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"sopa301"},"content":" * Gets data string representation.","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"sopa301"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"sopa301"},"content":" * @return Data string.","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"sopa301"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"sopa301"},"content":" public String convertToDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"sopa301"},"content":" return \"t/\" + (super.isDone() ? \"1\" : \"0\") + \"/\" + super.getName();","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"sopa301":92}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"bot.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"sopa301":19}},{"path":"src/test/java/bot/utils/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" public void remove_validIndex_success() throws InvalidTaskException, InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" assertEquals(task, tasks.remove(1));","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" public void remove_multipleIndex_success() throws InvalidTaskException, InvalidIndexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" Task task1 \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" Task task2 \u003d Task.makeTask(\"todo 2\");","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" arr.add(task1);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" arr.add(task2);","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" assertEquals(task2, tasks.remove(2));","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" assertEquals(task1, tasks.remove(1));","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" public void remove_negativeIndex_throwsException() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" tasks.remove(-1);","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" public void remove_bigNumber_throwsException() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" Task task \u003d Task.makeTask(\"todo one\");","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" arr.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" TaskList tasks \u003d new TaskList(arr);","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" tasks.remove(100);","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" } catch (InvalidIndexException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, that index doesn\u0027t exist. Please key in a valid index.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":69}},{"path":"src/test/java/bot/utils/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"sopa301"},"content":"package bot.utils;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"sopa301"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"sopa301"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"sopa301"},"content":"import bot.exceptions.InvalidTaskException;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"sopa301"},"content":"import bot.utils.tasks.Task;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"sopa301"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"sopa301"},"content":" public void makeTask_validInput_success() throws InvalidTaskException {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"sopa301"},"content":" assertEquals(\"[T][ ] name1\", Task.makeTask(\"todo name1\").toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"sopa301"},"content":" assertEquals(\"[D][ ] name2 (by: Aug 10 2024)\",","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline name2 /by 2024-08-10\").toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"sopa301"},"content":" assertEquals(\"[E][ ] name3 (from: Jul 1 2024 to: Aug 1 2024)\",","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"event name3 /from 2024-07-01 /to 2024-08-01\").toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsToDo_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"todo\");","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, the todo description can\u0027t be empty.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsDeadline_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline two\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Please make sure the deadline \"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"sopa301"},"content":" + \"is written in the correct format:\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"sopa301"},"content":" + \"deadline ... /by ...\",","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"sopa301"},"content":" public void makeTask_missingDetailsEvent_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"event /from 2020-10-10 /to 2020-12-10\");","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"sopa301"},"content":" assertEquals(\"Sorry, the event description can\u0027t be empty.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"sopa301"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"sopa301"},"content":" public void makeTask_invalidDate_throwsException() {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"sopa301"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"sopa301"},"content":" Task.makeTask(\"deadline kappa /by 2020-20-20\");","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"sopa301"},"content":" fail();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"sopa301"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"sopa301"},"content":" assertEquals(\"One or more dates are invalid.\",","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"sopa301"},"content":" e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"sopa301"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"sopa301"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"sopa301"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"sopa301":70}}] diff --git a/sopa301_ip_master/commits.json b/sopa301_ip_master/commits.json index a1968fdc..0c36579e 100644 --- a/sopa301_ip_master/commits.json +++ b/sopa301_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"sopa301":[{"date":"2023-08-19","commitResults":[{"hash":"4b46ff407fb5a48a39c3fcef9684929793f3959e","isMergeCommit":false,"messageTitle":"Changed name of bot from Duke to Bot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}}]},{"date":"2023-08-20","commitResults":[{"hash":"0c5151fc46abed3acc6a2da4d70984784eb04e93","isMergeCommit":false,"messageTitle":"Changed bot personality to trash gremlin Caelus. Added echo functionality.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"c496ac457dee587f236c279837330d68b0867bc6","isMergeCommit":false,"messageTitle":"Added list capability","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"8c74c9a13a6a0f5b790f5945b2f623be5b88a827","isMergeCommit":false,"messageTitle":"Added task marking and unmarking capability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":7}}},{"hash":"fc1cb66b187c5ab0bd0d9b707e34bfa1f5ed8457","isMergeCommit":false,"messageTitle":"Added helper methods for Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"2e3671e1cbceedb97eb8b52ac0dd9a59ddbaadf7","isMergeCommit":false,"messageTitle":"Added support for multiple task types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":12}}},{"hash":"595323519bfbd8b6b718eba81bac35ce99e156d5","isMergeCommit":false,"messageTitle":"Added test files and re-added echo function.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":3,"deletions":5},"bat":{"insertions":1,"deletions":1}}},{"hash":"e3c686c1dae4df283dcb68c3814931eb1c7c6887","isMergeCommit":false,"messageTitle":"Added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":62}}},{"hash":"15447602bd6d89240b041018876456b746fc61dd","isMergeCommit":false,"messageTitle":"Added delete functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":20,"deletions":18}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3fe9fb3dbc306f02c0c245c890f6226ae8aa8e93","isMergeCommit":false,"messageTitle":"Minor optimisations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":33}}},{"hash":"01a901480ca35fb3ca2618b0a48263c915614869","isMergeCommit":false,"messageTitle":"Added documentation, fixed minor bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":274,"deletions":30}}}]},{"date":"2023-08-25","commitResults":[{"hash":"77d1eef11ebb63286fa2cfe3aabd1e222aa49b3a","isMergeCommit":false,"messageTitle":"Added data file reading capability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":1}}},{"hash":"81f7badc9b10c8df932a0c6068929697431c757d","isMergeCommit":false,"messageTitle":"Routed data folder creation to correct level","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"9ee179659314493c431f1e3791cc3b0d20c5f3cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6aa376d107b20d168a164a2ec6810b86640cb571","isMergeCommit":false,"messageTitle":"Added save functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":98,"deletions":9}}},{"hash":"8244d7f7672f9c6044acfd9d68f6549cb7e189fb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a00dfdbc5f28a8c5d5dffc63c4559276e42ce811","isMergeCommit":false,"messageTitle":"Added some date functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2}}},{"hash":"c1bb05324a14838ed8b2f0490b2de245555f4c19","isMergeCommit":false,"messageTitle":"Moved makeTask for classes to the respective classes and added some docs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":86}}},{"hash":"f63ff0f19cc3e8292501291dc48821c4f5f44623","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"0a4a2a049d5be7ffec1320900c4a404442e12ee1","isMergeCommit":false,"messageTitle":"Fix style for Task class","messageBody":"Certain excerpts are not conforming to the required style.\n\nLet\u0027s change it so that it follows the style guide.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"79c81ab19a25eb20c4738b5130348522e6fcc29d","isMergeCommit":false,"messageTitle":"Add TaskList class","messageBody":"We are required to add this abstraction.\n\nLet\u0027s add the TaskList class.\n","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":0}}},{"hash":"34801a5c116a34856b05b13c861b240fa668cffa","isMergeCommit":false,"messageTitle":"Add Storage class","messageBody":"We are required to add this abstraction.\n\nLet\u0027s add the Storage class.\n","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":1}}},{"hash":"a7126a6a16545582355863e3417011411b267785","isMergeCommit":false,"messageTitle":"Add Ui, Parser and Command classes","messageBody":"As part of the requirements, we have to do this.\n\nLet\u0027s add the required classes, the optional Command class,\nmore linking code and link it all together.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"fc1fdbd8ec19a7fa1d842e42c61fcafb1785446a","isMergeCommit":false,"messageTitle":"Fix more bugs","messageBody":"Let\u0027s fix more bugs.\n","fileTypesAndContributionMap":{"java":{"insertions":472,"deletions":198}}},{"hash":"5a47536dc26b4ec71f1e10784996e02b025d5627","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"798ca8dd57a316e6115b509da67c40bce6924edf","isMergeCommit":false,"messageTitle":"Format code into packages","messageBody":"As per requirement.\n\nLet\u0027s put the code in packages.\n","fileTypesAndContributionMap":{"java":{"insertions":258,"deletions":218},"bat":{"insertions":2,"deletions":2}}},{"hash":"30f91d7df0077f8aa6e5f5f23bdb446f91939f05","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages","A-Enums"],"fileTypesAndContributionMap":{}},{"hash":"bb40256b72163e658fa0c4dac7de713a0c3f8c7c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bc5685a669e0b027a8ec0bffb23c65c871f3cd1a","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"As per the requirements.\n\nLet\u0027s add gradle and stylecheck.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":73,"deletions":17}}},{"hash":"87decccd6e9c2536b9e607a06c306557c18ae8a6","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"As per requirements.\n\nLet\u0027s add some tests for Task and TaskList.\n","fileTypesAndContributionMap":{"java":{"insertions":201,"deletions":10}}},{"hash":"f32f6c0f945db47f5b64805d72ba7c2e02a43600","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"c4bc712a68dae9dc3c13a5f53673c08ff9fe8457","isMergeCommit":false,"messageTitle":"Add JAR packaging capability","messageBody":"As per requirements, let\u0027s make our bot packagable using gradle.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"1f4599ea2775d94d3418606481d80f2ad31aae91","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"d11da99b21640e001c2efa25a6017186e39a4158","isMergeCommit":false,"messageTitle":"Fix coding standard for test files","messageBody":"As per requirements, let\u0027s fix the coding standard for TaskListTest\nand TaskTest.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":8}}},{"hash":"87c5ad809cbc64f790654a41e3bebf897dd48988","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"As per requirements, let\u0027s add the find command.\n","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":16}}},{"hash":"266e4e53c2b45a591c3ad281d74adaa8cff7bd08","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a06d59e9228d0902adf99bade157e13faad4fd12","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9","A-Checkstyle"],"fileTypesAndContributionMap":{}},{"hash":"c334282b65dda09bc57a7e40c44da0ed4a85983f","isMergeCommit":false,"messageTitle":"Add code to close scanner","messageBody":"It\u0027s nice to close scanners after use. Let\u0027s close the scanner in Ui at\nthe end of its usage.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"7eb0b44305eb5fe12c42b31fcb85215453f9849c","isMergeCommit":false,"messageTitle":"Fix minor bugs","messageBody":"Let\u0027s remove the final keyword from all not-properly-named constants\n(thereby making them non-constants) and add code in parser for when\npeople key in commands without anything else.\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":18}}}]},{"date":"2023-09-04","commitResults":[{"hash":"7135efadcbcefa3b6f17cdde90a974dcbdd25625","isMergeCommit":false,"messageTitle":"Add GUI for the bot","messageBody":"As per requirements, let\u0027s add a GUI for our bot.\n","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":330,"deletions":86}}},{"hash":"db2aa59a838cf9bc2659e3d0c7de3aab570e9020","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"Let\u0027s just fix the style for the project because why not?\n","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}},{"hash":"60a41b51dbef2922e683dcb99ef620497fafe84c","isMergeCommit":false,"messageTitle":"Move Main out of gui package","messageBody":"Let\u0027s move the Main class into the main package because it\u0027s the main\nclass.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"3d59d5b4e3b95fa21d0b4b2fecb608a46988daf2","isMergeCommit":false,"messageTitle":"Rename package statements","messageBody":"Let\u0027s rename the package statements for the classes affected by the\nmoving of Main so they don\u0027t break.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"ff60959e951869ea4dace2b2e07eff1d313abb88","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"1d98a10c4240432cfbc18cc2cf4ace982f1774d1","isMergeCommit":false,"messageTitle":"Fix minor bug","messageBody":"Let\u0027s allow the find function to be case-insensitive.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"35abcc1adf301761aaba066c3aa946f419b2b84a","isMergeCommit":false,"messageTitle":"Add assertions to code","messageBody":"Currently, the code has no assertions and the lack of hard-to-find bugs\nis purely contingent on good usage of the code, which is hard to achieve\nas the codebase grows.\n\nAdding assertions ensures that functions are being used in the way they\nare intended.\n\nLet\u0027s add assertions to our code. Also because we are required to do so.\n","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":6}}},{"hash":"cc43732e877730349e622e3871ff899e8dd3b384","isMergeCommit":false,"messageTitle":"Refactor Command and Task classes into packages","messageBody":"Currently, the Command and Tasks classes are written in one file each\nwith their subclasses.\n\nThis is bad because big files are hard to maintain.\n\nBreaking the files up into smaller files will make it easier to\nmaintain.\n\nLet\u0027s break up the Command and Task class files into smaller components\nand put them into packages.\n\nWe use packages so because of the natural grouping of tasks and\ncommands.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"9b0e4022a62cda53cb92127b5bd63152864414ad","isMergeCommit":false,"messageTitle":"Improve coding standard and refactor parse() method","messageBody":"Currently, the code has poor coding standard.\n\nImproving the coding standard will make it easier to find bugs.\n\nLet\u0027s:\n- improve the coding standard as instructed.\n- fix the bugs that become apparent during refactoring.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":20},"java":{"insertions":903,"deletions":737},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"2864c714fe78fa07513ce6ff0690dc6bc0badc4a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from sopa301/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"1fff4190e51e32e1a15a4ebd01e417e2233e2226","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f65c2780c1fc1b7837dc794fd75ad32b8b1965af","isMergeCommit":false,"messageTitle":"Resolve merge conflicts","messageBody":"Let\u0027s resolve merge conflicts so we can merge this commit into master.\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}},{"hash":"28b5da246d83ed55885b507563feb6f1c2463f37","isMergeCommit":true,"messageTitle":"Merge pull request #2 from sopa301/branch-A-Assertions","messageBody":"Add assertions to code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"551d481a6e54f6ea46e4c422d38374156c25297f","isMergeCommit":false,"messageTitle":"Replace old test code and do styling","messageBody":"Let\u0027s do a style check so our code adheres to coding standards.\n","fileTypesAndContributionMap":{"txt":{"insertions":20,"deletions":0},"bat":{"insertions":21,"deletions":0},"sh":{"insertions":38,"deletions":0}}},{"hash":"527632fcd3f444e0f9ab647100574fdecfdba6b1","isMergeCommit":false,"messageTitle":"Remove old test code and text-based test from gradle.yaml","messageBody":"Let\u0027s remove any text-based testing because we don\u0027t need it.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":20},"java":{"insertions":38,"deletions":34},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"1d94425becfe2bd882a8bd23fc8a8faf8ae1e9de","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CI\u0027","messageBody":"","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"5687bef7d970d747d5d7d194ee2341fe2ed009a1","isMergeCommit":false,"messageTitle":"Make task list contain unique entries","messageBody":"Currently, the task list accepts duplicate tasks.\n\nThis is undesirable because it adds no additional information and\nclutters the list.\n\nEnforcing uniqueness in the task list will allow us to reduce redundant\ninformation in the list.\n\nLet\u0027s make TaskList contain only unique tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":19}}},{"hash":"07dd03dab4d5101dde801ef62583021b191da419","isMergeCommit":true,"messageTitle":"Merge pull request #3 from sopa301/branch-C-DetectDuplicates","messageBody":"Make task list contain unique entries","tags":["C-DetectDuplicates","BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"sopa301":{"java":2036,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":21,"txt":0}},"authorContributionVariance":{"sopa301":312721.53},"authorDisplayNameMap":{"sopa301":"CS2103T-F12-1 POON..RYAN"}} +{"authorDailyContributionsMap":{"sopa301":[{"date":"2023-08-19","commitResults":[{"hash":"4b46ff407fb5a48a39c3fcef9684929793f3959e","isMergeCommit":false,"messageTitle":"Changed name of bot from Duke to Bot.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}}]},{"date":"2023-08-20","commitResults":[{"hash":"0c5151fc46abed3acc6a2da4d70984784eb04e93","isMergeCommit":false,"messageTitle":"Changed bot personality to trash gremlin Caelus. Added echo functionality.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"c496ac457dee587f236c279837330d68b0867bc6","isMergeCommit":false,"messageTitle":"Added list capability","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"8c74c9a13a6a0f5b790f5945b2f623be5b88a827","isMergeCommit":false,"messageTitle":"Added task marking and unmarking capability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":7}}},{"hash":"fc1cb66b187c5ab0bd0d9b707e34bfa1f5ed8457","isMergeCommit":false,"messageTitle":"Added helper methods for Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"2e3671e1cbceedb97eb8b52ac0dd9a59ddbaadf7","isMergeCommit":false,"messageTitle":"Added support for multiple task types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":12}}},{"hash":"595323519bfbd8b6b718eba81bac35ce99e156d5","isMergeCommit":false,"messageTitle":"Added test files and re-added echo function.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":3,"deletions":5},"bat":{"insertions":1,"deletions":1}}},{"hash":"e3c686c1dae4df283dcb68c3814931eb1c7c6887","isMergeCommit":false,"messageTitle":"Added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":123,"deletions":62}}},{"hash":"15447602bd6d89240b041018876456b746fc61dd","isMergeCommit":false,"messageTitle":"Added delete functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":20,"deletions":18}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3fe9fb3dbc306f02c0c245c890f6226ae8aa8e93","isMergeCommit":false,"messageTitle":"Minor optimisations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":33}}},{"hash":"01a901480ca35fb3ca2618b0a48263c915614869","isMergeCommit":false,"messageTitle":"Added documentation, fixed minor bugs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":274,"deletions":30}}}]},{"date":"2023-08-25","commitResults":[{"hash":"77d1eef11ebb63286fa2cfe3aabd1e222aa49b3a","isMergeCommit":false,"messageTitle":"Added data file reading capability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":1}}},{"hash":"81f7badc9b10c8df932a0c6068929697431c757d","isMergeCommit":false,"messageTitle":"Routed data folder creation to correct level","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"9ee179659314493c431f1e3791cc3b0d20c5f3cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6aa376d107b20d168a164a2ec6810b86640cb571","isMergeCommit":false,"messageTitle":"Added save functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":98,"deletions":9}}},{"hash":"8244d7f7672f9c6044acfd9d68f6549cb7e189fb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a00dfdbc5f28a8c5d5dffc63c4559276e42ce811","isMergeCommit":false,"messageTitle":"Added some date functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2}}},{"hash":"c1bb05324a14838ed8b2f0490b2de245555f4c19","isMergeCommit":false,"messageTitle":"Moved makeTask for classes to the respective classes and added some docs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":86}}},{"hash":"f63ff0f19cc3e8292501291dc48821c4f5f44623","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"0a4a2a049d5be7ffec1320900c4a404442e12ee1","isMergeCommit":false,"messageTitle":"Fix style for Task class","messageBody":"Certain excerpts are not conforming to the required style.\n\nLet\u0027s change it so that it follows the style guide.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"79c81ab19a25eb20c4738b5130348522e6fcc29d","isMergeCommit":false,"messageTitle":"Add TaskList class","messageBody":"We are required to add this abstraction.\n\nLet\u0027s add the TaskList class.\n","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":0}}},{"hash":"34801a5c116a34856b05b13c861b240fa668cffa","isMergeCommit":false,"messageTitle":"Add Storage class","messageBody":"We are required to add this abstraction.\n\nLet\u0027s add the Storage class.\n","fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":1}}},{"hash":"a7126a6a16545582355863e3417011411b267785","isMergeCommit":false,"messageTitle":"Add Ui, Parser and Command classes","messageBody":"As part of the requirements, we have to do this.\n\nLet\u0027s add the required classes, the optional Command class,\nmore linking code and link it all together.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"fc1fdbd8ec19a7fa1d842e42c61fcafb1785446a","isMergeCommit":false,"messageTitle":"Fix more bugs","messageBody":"Let\u0027s fix more bugs.\n","fileTypesAndContributionMap":{"java":{"insertions":472,"deletions":198}}},{"hash":"5a47536dc26b4ec71f1e10784996e02b025d5627","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"798ca8dd57a316e6115b509da67c40bce6924edf","isMergeCommit":false,"messageTitle":"Format code into packages","messageBody":"As per requirement.\n\nLet\u0027s put the code in packages.\n","fileTypesAndContributionMap":{"java":{"insertions":258,"deletions":218},"bat":{"insertions":2,"deletions":2}}},{"hash":"30f91d7df0077f8aa6e5f5f23bdb446f91939f05","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages","A-Enums"],"fileTypesAndContributionMap":{}},{"hash":"bb40256b72163e658fa0c4dac7de713a0c3f8c7c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bc5685a669e0b027a8ec0bffb23c65c871f3cd1a","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"As per the requirements.\n\nLet\u0027s add gradle and stylecheck.\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":73,"deletions":17}}},{"hash":"87decccd6e9c2536b9e607a06c306557c18ae8a6","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"As per requirements.\n\nLet\u0027s add some tests for Task and TaskList.\n","fileTypesAndContributionMap":{"java":{"insertions":201,"deletions":10}}},{"hash":"f32f6c0f945db47f5b64805d72ba7c2e02a43600","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"c4bc712a68dae9dc3c13a5f53673c08ff9fe8457","isMergeCommit":false,"messageTitle":"Add JAR packaging capability","messageBody":"As per requirements, let\u0027s make our bot packagable using gradle.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"1f4599ea2775d94d3418606481d80f2ad31aae91","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"d11da99b21640e001c2efa25a6017186e39a4158","isMergeCommit":false,"messageTitle":"Fix coding standard for test files","messageBody":"As per requirements, let\u0027s fix the coding standard for TaskListTest\nand TaskTest.\n","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":8}}},{"hash":"87c5ad809cbc64f790654a41e3bebf897dd48988","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"As per requirements, let\u0027s add the find command.\n","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":16}}},{"hash":"266e4e53c2b45a591c3ad281d74adaa8cff7bd08","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"a06d59e9228d0902adf99bade157e13faad4fd12","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9","A-Checkstyle"],"fileTypesAndContributionMap":{}},{"hash":"c334282b65dda09bc57a7e40c44da0ed4a85983f","isMergeCommit":false,"messageTitle":"Add code to close scanner","messageBody":"It\u0027s nice to close scanners after use. Let\u0027s close the scanner in Ui at\nthe end of its usage.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"7eb0b44305eb5fe12c42b31fcb85215453f9849c","isMergeCommit":false,"messageTitle":"Fix minor bugs","messageBody":"Let\u0027s remove the final keyword from all not-properly-named constants\n(thereby making them non-constants) and add code in parser for when\npeople key in commands without anything else.\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":18}}}]},{"date":"2023-09-04","commitResults":[{"hash":"7135efadcbcefa3b6f17cdde90a974dcbdd25625","isMergeCommit":false,"messageTitle":"Add GUI for the bot","messageBody":"As per requirements, let\u0027s add a GUI for our bot.\n","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":330,"deletions":86}}},{"hash":"db2aa59a838cf9bc2659e3d0c7de3aab570e9020","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"Let\u0027s just fix the style for the project because why not?\n","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}},{"hash":"60a41b51dbef2922e683dcb99ef620497fafe84c","isMergeCommit":false,"messageTitle":"Move Main out of gui package","messageBody":"Let\u0027s move the Main class into the main package because it\u0027s the main\nclass.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"3d59d5b4e3b95fa21d0b4b2fecb608a46988daf2","isMergeCommit":false,"messageTitle":"Rename package statements","messageBody":"Let\u0027s rename the package statements for the classes affected by the\nmoving of Main so they don\u0027t break.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"ff60959e951869ea4dace2b2e07eff1d313abb88","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"1d98a10c4240432cfbc18cc2cf4ace982f1774d1","isMergeCommit":false,"messageTitle":"Fix minor bug","messageBody":"Let\u0027s allow the find function to be case-insensitive.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-08","commitResults":[{"hash":"35abcc1adf301761aaba066c3aa946f419b2b84a","isMergeCommit":false,"messageTitle":"Add assertions to code","messageBody":"Currently, the code has no assertions and the lack of hard-to-find bugs\nis purely contingent on good usage of the code, which is hard to achieve\nas the codebase grows.\n\nAdding assertions ensures that functions are being used in the way they\nare intended.\n\nLet\u0027s add assertions to our code. Also because we are required to do so.\n","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":6}}},{"hash":"cc43732e877730349e622e3871ff899e8dd3b384","isMergeCommit":false,"messageTitle":"Refactor Command and Task classes into packages","messageBody":"Currently, the Command and Tasks classes are written in one file each\nwith their subclasses.\n\nThis is bad because big files are hard to maintain.\n\nBreaking the files up into smaller files will make it easier to\nmaintain.\n\nLet\u0027s break up the Command and Task class files into smaller components\nand put them into packages.\n\nWe use packages so because of the natural grouping of tasks and\ncommands.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"9b0e4022a62cda53cb92127b5bd63152864414ad","isMergeCommit":false,"messageTitle":"Improve coding standard and refactor parse() method","messageBody":"Currently, the code has poor coding standard.\n\nImproving the coding standard will make it easier to find bugs.\n\nLet\u0027s:\n- improve the coding standard as instructed.\n- fix the bugs that become apparent during refactoring.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":20},"java":{"insertions":903,"deletions":737},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"2864c714fe78fa07513ce6ff0690dc6bc0badc4a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from sopa301/branch-A-CodeQuality","messageBody":"Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"1fff4190e51e32e1a15a4ebd01e417e2233e2226","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f65c2780c1fc1b7837dc794fd75ad32b8b1965af","isMergeCommit":false,"messageTitle":"Resolve merge conflicts","messageBody":"Let\u0027s resolve merge conflicts so we can merge this commit into master.\n","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}},{"hash":"28b5da246d83ed55885b507563feb6f1c2463f37","isMergeCommit":true,"messageTitle":"Merge pull request #2 from sopa301/branch-A-Assertions","messageBody":"Add assertions to code","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"551d481a6e54f6ea46e4c422d38374156c25297f","isMergeCommit":false,"messageTitle":"Replace old test code and do styling","messageBody":"Let\u0027s do a style check so our code adheres to coding standards.\n","fileTypesAndContributionMap":{"txt":{"insertions":20,"deletions":0},"bat":{"insertions":21,"deletions":0},"sh":{"insertions":38,"deletions":0}}},{"hash":"527632fcd3f444e0f9ab647100574fdecfdba6b1","isMergeCommit":false,"messageTitle":"Remove old test code and text-based test from gradle.yaml","messageBody":"Let\u0027s remove any text-based testing because we don\u0027t need it.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":20},"java":{"insertions":38,"deletions":34},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38}}},{"hash":"1d94425becfe2bd882a8bd23fc8a8faf8ae1e9de","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CI\u0027","messageBody":"","tags":["A-CI"],"fileTypesAndContributionMap":{}},{"hash":"5687bef7d970d747d5d7d194ee2341fe2ed009a1","isMergeCommit":false,"messageTitle":"Make task list contain unique entries","messageBody":"Currently, the task list accepts duplicate tasks.\n\nThis is undesirable because it adds no additional information and\nclutters the list.\n\nEnforcing uniqueness in the task list will allow us to reduce redundant\ninformation in the list.\n\nLet\u0027s make TaskList contain only unique tasks.\n","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":19}}},{"hash":"07dd03dab4d5101dde801ef62583021b191da419","isMergeCommit":true,"messageTitle":"Merge pull request #3 from sopa301/branch-C-DetectDuplicates","messageBody":"Make task list contain unique entries","tags":["C-DetectDuplicates","BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"a9c7403e8f0fe7e6a493b2758a94c4643c99a911","isMergeCommit":false,"messageTitle":"Fix comments to adhere to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"d6c2e934b1edfb903a86dfa4a00dac997aa3f569","isMergeCommit":false,"messageTitle":"Update README and add UI image","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":162,"deletions":10}}},{"hash":"e37477cdd575a50cf26b94fc823b634c77a462dc","isMergeCommit":false,"messageTitle":"Edit README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"bc93f2d8a7b4fd37539a99523439b9cad6044de7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-UserGuide\u0027","messageBody":"","tags":["v0.1","A-UserGuide"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"sopa301":{"java":2036,"md":158,"fxml":35,"sh":0,"bat":0,"gradle":21,"txt":0}},"authorContributionVariance":{"sopa301":241270.27},"authorDisplayNameMap":{"sopa301":"CS2103T-F12-1 POON..RYAN"}} diff --git a/summary.json b/summary.json index a7ffcc51..ca6bf800 100644 --- a/summary.json +++ b/summary.json @@ -1 +1 @@ -{"repoSenseVersion":"3bad16bb3d","reportGeneratedTime":"Sat Sep 16 11:08:17 2023 UTC+08:00","reportGenerationTime":" 1 minute(s) 58.75 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-16","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":"Sat Sep 16 21:56:07 2023 UTC+08:00","reportGenerationTime":" 1 minute(s) 56.98 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-16","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/tim-pipi_ip_master/authorship.json b/tim-pipi_ip_master/authorship.json index f83850d9..f1de8cb3 100644 --- a/tim-pipi_ip_master/authorship.json +++ b/tim-pipi_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"# Anya Forger - Your Task Management Chat bot","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"Anya Forger is a chat bot inspired by the character from the [_Spy x Family_](https://en.wikipedia.org/wiki/Spy_%C3%97_Family) anime. She is your ultimate task management companion. Whether you\u0027re a secret agent or just someone with a busy schedule, Anya can help you stay organized and on top of your tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"## Features:","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"* **Task Management**: Anya Forger can create, edit, and track your tasks effortlessly.","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"* **Priority Sorting**: Arrange your tasks by priority to ensure you focus on what matters most.","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"* **Deadline Alerts**: Receive timely reminders, so you never miss a deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"* **Cross-Device Sync**: Access your tasks from anywhere, on any device.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"## 🚀Mission Accomplished:","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"\u003e \"Anya Forger is the secret agent of Task Management.\" - Anonymous","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"## Task List:","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"- [ ] Finish coding the chat-bot","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"- [ ] Test Anya\u0027s task management features","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":"- [ ] Write documentation","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":"- [ ] Deploy Anya to production!","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":"## Getting Started:","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":"1. Download the `anya.jar` file from [here]()","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":"2. Run the following command:","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":"java -jar Anya.jar ","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":"\u003e ✏️ Note: run the command in the same folder as the jar file","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":"If you are Java programmer, you can use it to practice Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":"```java","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":"public class Main {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":30,"-":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":"tim-pipi"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"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":"tim-pipi"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"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":"tim-pipi"},"content":" mainClass.set(\"anya.Anya\")","lastModifiedDate":"2023-09-03"},{"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":"tim-pipi"},"content":" archiveBaseName \u003d \"Anya\"","lastModifiedDate":"2023-09-03"},{"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":{"tim-pipi":22,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"T | 1 | read book","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"D | 1 | return book | 2019-12-01T06:30","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"E | 0 | project meeting | 2019-12-01T06:30 | 2019-12-01T06:30","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"T | 0 | sleep","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"T | 0 | sleep","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tim-pipi":5}},{"path":"src/main/java/anya/Anya.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import anya.exception.AnyaException;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import anya.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import anya.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import anya.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import anya.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" * Represents a chat bot named anya.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"public class Anya {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" private static final String STORAGE_FILE_PATH \u003d \"data/tasks.txt\";","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" private Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new instance of the {@code Anya} class with the specified storage file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" * This constructor initializes the user interface (UI), storage, and task list parser for the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" * It also loads tasks from the specified storage file and handles exceptions related to storage operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" * @throws RuntimeException If there is an issue with the storage file path or storage operation,","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" * a runtime exception is thrown, and an initialization error message is","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" * displayed through the UI.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" public Anya() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" this.storage \u003d new Storage(STORAGE_FILE_PATH);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" this.parser \u003d new Parser(storage, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" } catch (AnyaException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" ui.showInitError();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" return parser.parse(input);","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" } catch (AnyaException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"tim-pipi":45,"-":1}},{"path":"src/main/java/anya/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":12}},{"path":"src/main/java/anya/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import anya.gui.MainWindow;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" private Anya anya \u003d new Anya();","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(anya.Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" stage.setTitle(\"Anya Forger\");","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" stage.getIcons().add(new Image(\"/images/anya.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setAnya(anya);","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":35}},{"path":"src/main/java/anya/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":" * Enum representing the available commands in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" * This enum defines the various command types that can be used by the user to interact with the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * Each enum value corresponds to a specific user command, such as \"BYE\" for exiting the application or \"TODO\" for","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" * adding a to-do task.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"public enum Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" BYE, LIST, MARK, UNMARK, TODO, DEADLINE, EVENT, DELETE, FIND, UNKNOWN","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":12}},{"path":"src/main/java/anya/exception/AnyaException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":" * Custom exception class for handling Anya-specific exceptions.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" * This class extends the standard Java Exception class to create custom exceptions tailored for the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * It allows for the propagation of Anya-specific error messages when exceptional conditions occur during execution.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" * @see Exception","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"public class AnyaException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new instance of the {@code AnyaException} class with the specified error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" * @param message A descriptive error message explaining the exceptional condition.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" public AnyaException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":20}},{"path":"src/main/java/anya/exception/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":" * Custom exception class for handling invalid arguments in Anya commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" * This class extends the {@code AnyaException} class to create custom exceptions specifically for cases where","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * invalid arguments are provided to Anya commands. It allows for the propagation of error messages indicating","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" * that an invalid argument was detected.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" * @see AnyaException","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"public class InvalidArgumentException extends AnyaException {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new instance of the {@code InvalidArgumentException} class with the specified error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" * @param message A descriptive error message explaining the invalid argument condition.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" public InvalidArgumentException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":21}},{"path":"src/main/java/anya/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.gui;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" public static DialogBox getAnyaDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":61}},{"path":"src/main/java/anya/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.gui;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import anya.Anya;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import anya.messages.Messages;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" private Anya anya;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/damian.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" private Image anyaImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/anya.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" public void setAnya(Anya a) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" anya \u003d a;","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" DialogBox.getAnyaDialog(Messages.MESSAGE_GREETING, anyaImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" String response \u003d anya.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" DialogBox.getAnyaDialog(response, anyaImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" Platform.exit();","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":60}},{"path":"src/main/java/anya/messages/Messages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.messages;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":" * Container for user visible messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"public class Messages {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" public static final String DIVIDER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" /** A platform independent line separator. */","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" public static final String LS \u003d System.lineSeparator();","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_GREETING \u003d \"Hello! I\u0027m Anya Forger.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" + \"What can I do for you?\";","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_ERROR_LOADING \u003d \"Error loading file.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_ERROR_INIT \u003d \"Error initializing Bot.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_EXIT \u003d \"Bye! Hope to see you again.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_SUCCESS_LOADING \u003d \"Error loading file.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_SUCCESS_ADD \u003d \"I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_SUCCESS_DELETE \u003d \"I\u0027ve deleted this task:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_SUCCESS_MARK \u003d \"I\u0027ve marked this task as \u0027DONE\u0027:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_SUCCESS_UNMARK \u003d \"I\u0027ve marked this task as \u0027NOT DONE\u0027:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_TASK_SIZE \u003d \"Now you have tasks.size() tasks in the list!\";","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_TASK_LIST \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_TASK_FOUND \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_TASK_NOT_FOUND \u003d \"There are no matching tasks found\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_ERROR_PREFIX \u003d \"Oh no!\";","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":27}},{"path":"src/main/java/anya/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import anya.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import anya.exception.AnyaException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import anya.exception.InvalidArgumentException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import anya.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"import anya.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"import anya.ui.Ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" * The `Parser` class is responsible for interpreting user input","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" * and executing corresponding actions in the Anya application.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" * It handles parsing commands, validating arguments,","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" * and performing the appropriate operations on tasks and data storage.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" private Ui ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Parser` instance with the specified storage and task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The task list containing the user\u0027s tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" public Parser(Storage storage, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" * Parses the user input and returns the corresponding command.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" * @param input The user input to be parsed.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" * @return The command represented by the user input, or {@code Command.UNKNOWN} if the input is not recognized.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" public Command parseCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" return Command.BYE;","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" return Command.LIST;","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" return Command.MARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" return Command.UNMARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" return Command.TODO;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" return Command.DEADLINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" return Command.EVENT;","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":" return Command.DELETE;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" return Command.FIND;","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":" return Command.UNKNOWN;","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"tim-pipi"},"content":" * Executes the core functionality of parsing user input and performing relevant actions.","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"tim-pipi"},"content":" * This method reads user input, parses it, and executes the appropriate command based on the parsed input.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"tim-pipi"},"content":" * It handles various command types and associated error checks, displaying appropriate messages and performing","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"tim-pipi"},"content":" * actions like marking tasks as done, adding tasks, deleting tasks, and more.","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"tim-pipi"},"content":" * @return The output of the command in String.","lastModifiedDate":"2023-09-15"},{"lineNumber":83,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"tim-pipi"},"content":" public String parse(String input) throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"tim-pipi"},"content":" String[] arguments \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"tim-pipi"},"content":" Command command \u003d parseCommand(arguments[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"tim-pipi"},"content":" String details;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"tim-pipi"},"content":" if (arguments.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"tim-pipi"},"content":" details \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"tim-pipi"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"tim-pipi"},"content":" details \u003d arguments[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"tim-pipi"},"content":" switch (command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"tim-pipi"},"content":" case BYE:","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"tim-pipi"},"content":" return executeByeCommand();","lastModifiedDate":"2023-09-15"},{"lineNumber":97,"author":{"gitId":"tim-pipi"},"content":" case LIST:","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"tim-pipi"},"content":" return executeListCommand();","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"tim-pipi"},"content":" case MARK: {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"tim-pipi"},"content":" return executeMarkCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"tim-pipi"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"tim-pipi"},"content":" return executeUnmarkCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"tim-pipi"},"content":" case TODO: {","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"tim-pipi"},"content":" return executeTodoCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"tim-pipi"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"tim-pipi"},"content":" return executeDeadlineCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"tim-pipi"},"content":" case EVENT: {","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"tim-pipi"},"content":" return executeEventCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"tim-pipi"},"content":" case DELETE: {","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"tim-pipi"},"content":" return executeDeleteCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"tim-pipi"},"content":" case FIND: {","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"tim-pipi"},"content":" return executeFindCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"tim-pipi"},"content":" default:","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(\"I\u0027m sorry, but I don\u0027t know what that means (yet) :( \");","lastModifiedDate":"2023-09-15"},{"lineNumber":122,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"tim-pipi"},"content":" private String executeFindCommand(String details) {","lastModifiedDate":"2023-09-15"},{"lineNumber":126,"author":{"gitId":"tim-pipi"},"content":" TaskList matchingTasks \u003d tasks.find(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":127,"author":{"gitId":"tim-pipi"},"content":" if (matchingTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskNotFound();","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskFound(matchingTasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":132,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"tim-pipi"},"content":" private String executeDeleteCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":134,"author":{"gitId":"tim-pipi"},"content":" validateDeleteArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"tim-pipi"},"content":" validateTypeOfArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"tim-pipi"},"content":" int taskNumber \u003d Integer.parseInt(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"tim-pipi"},"content":" validateTaskNumber(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":140,"author":{"gitId":"tim-pipi"},"content":" tasks.remove(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskDeleteSuccess(t, tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":142,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":144,"author":{"gitId":"tim-pipi"},"content":" private static void validateDeleteArguments(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":145,"author":{"gitId":"tim-pipi"},"content":" // Error: No argument or Multiple arguments provided","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"tim-pipi"},"content":" if (details.isEmpty() || details.split(\" \").length !\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"☹ Waku waku! Please input in the following format:\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":148,"author":{"gitId":"tim-pipi"},"content":" + \" delete \u003ctaskNumber\u003e\");","lastModifiedDate":"2023-09-15"},{"lineNumber":149,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"tim-pipi"},"content":" private String executeEventCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":153,"author":{"gitId":"tim-pipi"},"content":" validateEventDetails(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":154,"author":{"gitId":"tim-pipi"},"content":" validateEventTime(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":155,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"tim-pipi"},"content":" String taskName \u003d details.split(\"/from\")[0].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":157,"author":{"gitId":"tim-pipi"},"content":" String startTime \u003d details.split(\"/from\")[1].trim().split(\"/to\")[0].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":158,"author":{"gitId":"tim-pipi"},"content":" String endTime \u003d details.split(\"/to\")[1].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":159,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-09-15"},{"lineNumber":160,"author":{"gitId":"tim-pipi"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":161,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskAddSuccess(t, tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":162,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":164,"author":{"gitId":"tim-pipi"},"content":" private static void validateEventTime(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":165,"author":{"gitId":"tim-pipi"},"content":" // Error: Does not contain /from and /to","lastModifiedDate":"2023-09-15"},{"lineNumber":166,"author":{"gitId":"tim-pipi"},"content":" if (!details.contains(\"/from\") \u0026\u0026 !details.contains(\"/to\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":167,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"☹ Waku waku! Please input in the following format:\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":168,"author":{"gitId":"tim-pipi"},"content":" + \" event \u003ctaskName\u003e /from \u003cstartTime\u003e /to \u003cendTime\u003e\");","lastModifiedDate":"2023-09-15"},{"lineNumber":169,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":170,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":171,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"tim-pipi"},"content":" private static void validateEventDetails(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":173,"author":{"gitId":"tim-pipi"},"content":" // Error: No argument provided","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"tim-pipi"},"content":" if (details.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"☹ Waku waku! Please input in the following format:\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":176,"author":{"gitId":"tim-pipi"},"content":" + \" event \u003ctaskName\u003e /from \u003cstartTime\u003e /to \u003cendTime\u003e\");","lastModifiedDate":"2023-09-15"},{"lineNumber":177,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":178,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"tim-pipi"},"content":" private String executeDeadlineCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":181,"author":{"gitId":"tim-pipi"},"content":" String[] info \u003d details.split(\"/by\");","lastModifiedDate":"2023-09-15"},{"lineNumber":182,"author":{"gitId":"tim-pipi"},"content":" validateDeadlineDetails(details, info);","lastModifiedDate":"2023-09-15"},{"lineNumber":183,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"tim-pipi"},"content":" String taskName \u003d info[0].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":185,"author":{"gitId":"tim-pipi"},"content":" String deadline \u003d info[1].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":186,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":187,"author":{"gitId":"tim-pipi"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":188,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskAddSuccess(t, tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":189,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":191,"author":{"gitId":"tim-pipi"},"content":" private static void validateDeadlineDetails(String details, String[] info) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":192,"author":{"gitId":"tim-pipi"},"content":" // Error: No argument or wrong no of arguments provided","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"tim-pipi"},"content":" if (details.isEmpty() || info.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"☹ Waku waku! Please input in the following format:\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":195,"author":{"gitId":"tim-pipi"},"content":" + \" deadline \u003ctaskName\u003e /by \u003cdeadline\u003e\");","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":198,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"tim-pipi"},"content":" private String executeTodoCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":200,"author":{"gitId":"tim-pipi"},"content":" validateTodoDescription(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":201,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d new Todo(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":203,"author":{"gitId":"tim-pipi"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":204,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskAddSuccess(t, tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":205,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":207,"author":{"gitId":"tim-pipi"},"content":" private static void validateTodoDescription(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":208,"author":{"gitId":"tim-pipi"},"content":" // Error: No argument provided","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"tim-pipi"},"content":" if (details.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"Please input in the following format:\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":211,"author":{"gitId":"tim-pipi"},"content":" + \" todo \u003ctaskName\u003e\");","lastModifiedDate":"2023-09-15"},{"lineNumber":212,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"tim-pipi"},"content":" private String executeByeCommand() throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":217,"author":{"gitId":"tim-pipi"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":218,"author":{"gitId":"tim-pipi"},"content":" return ui.showExitMessage();","lastModifiedDate":"2023-09-15"},{"lineNumber":219,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":221,"author":{"gitId":"tim-pipi"},"content":" private String executeListCommand() throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":222,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskList(tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":223,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":224,"author":{"gitId":"tim-pipi"},"content":" private String executeMarkCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":225,"author":{"gitId":"tim-pipi"},"content":" validateNumberOfArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":226,"author":{"gitId":"tim-pipi"},"content":" validateTypeOfArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":227,"author":{"gitId":"tim-pipi"},"content":" int taskNumber \u003d Integer.parseInt(details) - 1;","lastModifiedDate":"2023-09-15"},{"lineNumber":228,"author":{"gitId":"tim-pipi"},"content":" validateTaskNumber(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":229,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":230,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d tasks.get(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":231,"author":{"gitId":"tim-pipi"},"content":" tasks.mark(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":232,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskMarkSuccess(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":233,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":234,"author":{"gitId":"tim-pipi"},"content":" private String executeUnmarkCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":235,"author":{"gitId":"tim-pipi"},"content":" validateNumberOfArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":236,"author":{"gitId":"tim-pipi"},"content":" validateTypeOfArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":237,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":238,"author":{"gitId":"tim-pipi"},"content":" int taskNumber \u003d Integer.parseInt(details) - 1;","lastModifiedDate":"2023-09-15"},{"lineNumber":239,"author":{"gitId":"tim-pipi"},"content":" validateTaskNumber(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":240,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d tasks.get(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":241,"author":{"gitId":"tim-pipi"},"content":" tasks.unmark(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":242,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":243,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskUnmarkSuccess(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":244,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":246,"author":{"gitId":"tim-pipi"},"content":" private static void validateTypeOfArguments(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":247,"author":{"gitId":"tim-pipi"},"content":" // Error: Argument provided is not a number","lastModifiedDate":"2023-09-02"},{"lineNumber":248,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"tim-pipi"},"content":" Integer.parseInt(details);","lastModifiedDate":"2023-09-02"},{"lineNumber":250,"author":{"gitId":"tim-pipi"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":251,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"☹ Waku waku! \"","lastModifiedDate":"2023-09-03"},{"lineNumber":252,"author":{"gitId":"tim-pipi"},"content":" + \"Please only input INTEGERs after the word unmark!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":253,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":254,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"tim-pipi"},"content":" private static void validateNumberOfArguments(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":257,"author":{"gitId":"tim-pipi"},"content":" // Error: No argument or Multiple arguments provided","lastModifiedDate":"2023-09-15"},{"lineNumber":258,"author":{"gitId":"tim-pipi"},"content":" if (details.isEmpty() || details.split(\" \").length !\u003d 1) {","lastModifiedDate":"2023-09-15"},{"lineNumber":259,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"☹ Waku waku! \"","lastModifiedDate":"2023-09-15"},{"lineNumber":260,"author":{"gitId":"tim-pipi"},"content":" + \"Please only input ONE integer after the word unmark!\");","lastModifiedDate":"2023-09-15"},{"lineNumber":261,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":264,"author":{"gitId":"tim-pipi"},"content":" private void validateTaskNumber(int taskNumber) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":265,"author":{"gitId":"tim-pipi"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size() - 1) {","lastModifiedDate":"2023-09-15"},{"lineNumber":266,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"☹ Waku waku! \"","lastModifiedDate":"2023-09-15"},{"lineNumber":267,"author":{"gitId":"tim-pipi"},"content":" + \"I don\u0027t see a task with the number:\" + taskNumber + 1);","lastModifiedDate":"2023-09-15"},{"lineNumber":268,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":269,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":270,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":270}},{"path":"src/main/java/anya/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import anya.exception.AnyaException;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"import anya.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" * The `Storage` class is responsible for managing the storage of task data in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" * It provides functionality to read, write, and convert task data between the application and the storage file.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" private final String storageFilePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" private File source;","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Storage` instance with the specified storage file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" * @param path The file path where task data is stored.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" * @throws AnyaException If the provided storage file path is invalid (doesn\u0027t end with \u0027.txt\u0027).","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" public Storage(String path) throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" this.storageFilePath \u003d path;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" if (!isValidPath(path)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(\"Storage file should end with \u0027.txt\u0027\");","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" this.source \u003d new File(path);","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" * Returns true if the given path is acceptable as a storage file.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" * @param filePath The file path to be checked.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" * @return true if the file path ends with \u0027.txt\u0027, indicating it\u0027s a valid storage file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" private static boolean isValidPath(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" return filePath.endsWith(\".txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" * Loads task data from the storage file and returns it as a `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" * @return A `TaskList` containing the loaded tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" * @throws AnyaException If an error occurs while reading or creating the storage file.","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" public ArrayList\u003cTask\u003e load() throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" // Check for directory","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" File directory \u003d this.source.getParentFile();","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" directory.mkdir();","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" if (source.createNewFile()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":" return readFile();","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(\"Error writing to file: \" + storageFilePath);","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" * Reads task data from the storage file and converts it into a `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":" * @return A `TaskList` containing the tasks read from the storage file.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":" * @throws FileNotFoundException If the storage file is not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"tim-pipi"},"content":" public ArrayList\u003cTask\u003e readFile() throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"tim-pipi"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"tim-pipi"},"content":" Scanner sc \u003d new Scanner(this.source);","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"tim-pipi"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d convertStringToTask(sc.nextLine());","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"tim-pipi"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"tim-pipi"},"content":" return tasks;","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"tim-pipi"},"content":" } catch (UnknownTaskException | FileNotFoundException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"tim-pipi"},"content":" * Converts a string representation of a task to a `Task` object.","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"tim-pipi"},"content":" * @param input The string representation of a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"tim-pipi"},"content":" * @return A `Task` object parsed from the input string.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"tim-pipi"},"content":" * @throws UnknownTaskException If an unknown task type is encountered in the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"tim-pipi"},"content":" public Task convertStringToTask(String input) throws UnknownTaskException {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"tim-pipi"},"content":" String[] args \u003d input.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"tim-pipi"},"content":" String taskType \u003d args[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"tim-pipi"},"content":" boolean isDone \u003d args[1].trim().equals(\"1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"tim-pipi"},"content":" String description \u003d args[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"tim-pipi"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"tim-pipi"},"content":" case \"T\":","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"tim-pipi"},"content":" return new Todo(description, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"tim-pipi"},"content":" case \"D\":","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"tim-pipi"},"content":" String by \u003d args[3].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"tim-pipi"},"content":" return new Deadline(description, by, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"tim-pipi"},"content":" case \"E\":","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"tim-pipi"},"content":" String from \u003d args[3].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"tim-pipi"},"content":" String to \u003d args[4].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"tim-pipi"},"content":" return new Event(description, from, to, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"tim-pipi"},"content":" default:","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"tim-pipi"},"content":" throw new UnknownTaskException(\"Unknown task identified: \" + taskType);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"tim-pipi"},"content":" * Saves the tasks from a `TaskList` to the storage file.","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The `TaskList` containing the tasks to be saved.","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"tim-pipi"},"content":" public void save(TaskList tasks) throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"tim-pipi"},"content":" clearFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"tim-pipi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"tim-pipi"},"content":" writeToFile(tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"tim-pipi"},"content":" private void writeToFile(TaskList tasks) throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"tim-pipi"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"tim-pipi"},"content":" String text \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"tim-pipi"},"content":" text +\u003d convertTaskToString(t) + System.lineSeparator();","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"tim-pipi"},"content":" appendToFile(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"tim-pipi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"tim-pipi"},"content":" * Converts a `Task` object to its string representation for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"tim-pipi"},"content":" * @param task The `Task` object to be converted.","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"tim-pipi"},"content":" * @return A string representation of the task suitable for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"tim-pipi"},"content":" public String convertTaskToString(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"tim-pipi"},"content":" return task.formatToSave();","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"tim-pipi"},"content":" private void clearFile() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"tim-pipi"},"content":" FileWriter fw \u003d new FileWriter(this.storageFilePath, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"tim-pipi"},"content":" fw.write(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"tim-pipi"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"tim-pipi"},"content":" private void appendToFile(String text) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"tim-pipi"},"content":" FileWriter fw \u003d new FileWriter(this.storageFilePath, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"tim-pipi"},"content":" fw.write(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"tim-pipi"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"tim-pipi"},"content":" * Signals that an unknown task type was encountered during conversion.","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"tim-pipi"},"content":" public static class UnknownTaskException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"tim-pipi"},"content":" public UnknownTaskException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"tim-pipi"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":175}},{"path":"src/main/java/anya/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * Represents a deadline task in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" * A deadline task is a task with a specific due date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Deadline` instance with the specified description and deadline date-time.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" * @param by The due date and time of the deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" this.by \u003d super.convertStringToDate(by);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Deadline` instance with the specified description, deadline date-time, and done status.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" * @param by The due date and time of the deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" * @param isDone A boolean indicating whether the task is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" public Deadline(String description, String by, Boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" this.by \u003d super.convertStringToDate(by);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" this.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" * Returns the type of task, which is \u0027D\u0027 for deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" * @return The task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" public String getType() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" return \"D\";","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" * Formats the `Deadline` object as a string for saving to storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" * @return A string representation of the `Deadline` object suitable for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" public String formatToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" return \"D\" + super.formatToSave() + \" | \" + this.by;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" * Formats a `LocalDateTime` object as a string in the \"MMM d yyyy HH:mm\" format.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" * @param date The `LocalDateTime` object to be formatted.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":" * @return A formatted date-time string.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" public String formatDate(LocalDateTime date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDate(this.by) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":73}},{"path":"src/main/java/anya/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * Represents an event task in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" * An event task is a task with a specific start date and time and an end date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Event` instance with the specified description, start date-time, and end date-time.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" * @param from The start date and time of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" * @param to The end date and time of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" this.from \u003d super.convertStringToDate(from);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" this.to \u003d super.convertStringToDate(to);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Event` instance with the specified description,","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" * start date-time, end date-time, and done status.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" * @param from The start date and time of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" * @param to The end date and time of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" * @param isDone A boolean indicating whether the task is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" public Event(String description, String from, String to, Boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" this.from \u003d super.convertStringToDate(from);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" this.to \u003d super.convertStringToDate(to);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" this.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" * Returns the type of task, which is \u0027E\u0027 for event.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" * @return The task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" public String getType() {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" return \"E\";","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" * Formats the `Event` object as a string for saving to storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" * @return A string representation of the `Event` object suitable for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" public String formatToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" return \"E\" + super.formatToSave() + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" * Formats a `LocalDateTime` object as a string in the \"MMM d yyyy HH:mm\" format.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":" * @param date The `LocalDateTime` object to be formatted.","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" * @return A formatted date-time string.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" public String formatDate(LocalDateTime date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"tim-pipi"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"tim-pipi"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatDate(this.from) + \" to: \" + formatDate(this.to) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":79}},{"path":"src/main/java/anya/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" * Represents a generic task in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * A task has a description and a completion status.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Task` instance with the specified description and initializes it as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" return (isDone ? \"X\" : \" \"); // mark done anya.task with X","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" public String getStatusNumber() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" return (isDone ? \"1\" : \"0\"); // mark done anya.task with 1","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" public String getType() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" return this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" public Task markAsDone() {","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" return this;","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" public Task markAsNotDone() {","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" return this;","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" public String formatToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" return \" | \" + getStatusNumber() + \" | \" + this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" public LocalDateTime convertStringToDate(String dateString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" return LocalDateTime.parse(dateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":61}},{"path":"src/main/java/anya/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * Represents a collection of tasks in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" * The `TaskList` class provides methods for adding, removing, accessing, and listing tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new empty `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `TaskList` with the specified list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" * @param tasks An ArrayList of tasks to initialize the `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" * Adds a task to the `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The tasks to be added.","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" public void add(Task... tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" Collections.addAll(this.tasks, tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" * Removes a task from the `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" * @param task The task to be removed.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" public void remove(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" * Retrieves a task from the `TaskList` at the specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" public Task mark(int index) {","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" return this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" public Task unmark(int index) {","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" return this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" * Returns the number of tasks in the `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"tim-pipi"},"content":" * Lists all tasks in the `TaskList` with their corresponding indices.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"tim-pipi"},"content":" public void list() {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"tim-pipi"},"content":" StringBuilder list \u003d new StringBuilder(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"tim-pipi"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"tim-pipi"},"content":" list.append(System.lineSeparator());","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"tim-pipi"},"content":" list.append(String.format((i + 1) + \". \" + tasks.get(i)));","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"tim-pipi"},"content":" System.out.println(list.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"tim-pipi"},"content":" * Finds and displays tasks containing a specified keyword in their descriptions.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"tim-pipi"},"content":" * @param input The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"tim-pipi"},"content":" public TaskList find(String input) {","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"tim-pipi"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"tim-pipi"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"tim-pipi"},"content":" if (t.getDescription().contains(input)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"tim-pipi"},"content":" matchingTasks.add(t);","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"tim-pipi"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":100}},{"path":"src/main/java/anya/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":" * Represents a todo task in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":" * A todo task is a simple task with a description.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Todo` instance with the specified description.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Todo` instance with the specified description and done status.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" * @param isDone A boolean indicating whether the task is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" public Todo(String description, Boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" this.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" * Returns the type of task, which is \u0027T\u0027 for todo.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" * @return The task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" public String getType() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" return \"T\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" * Formats the `Todo` object as a string for saving to storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" * @return A string representation of the `Todo` object suitable for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" public String formatToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" return \"T\" + super.formatToSave();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":54}},{"path":"src/main/java/anya/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.DIVIDER;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.LS;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_ERROR_INIT;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_ERROR_LOADING;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_EXIT;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_GREETING;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_SUCCESS_ADD;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_SUCCESS_DELETE;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_SUCCESS_LOADING;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_SUCCESS_MARK;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_SUCCESS_UNMARK;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_TASK_FOUND;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_TASK_LIST;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_TASK_NOT_FOUND;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_TASK_SIZE;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":"import anya.task.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" * Represents the User Interface (UI) of the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" * The UI handles interactions with the user, displaying messages, and receiving user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" private final Scanner in;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" private final PrintStream out;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Ui` instance using the default input and output streams (System.in and System.out).","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Ui` instance with the specified input and output streams.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" * @param in The input stream to read user input from.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" * @param out The output stream to display messages to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" this.out \u003d out;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" * Displays a message to the user, surrounded by a divider for better readability.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" * @param message The message to be shown.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" public void showToUser(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" out.println(LS + DIVIDER + LS","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" + message.replace(\"\\n\", LS)","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" + LS + DIVIDER + LS);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" * Returns the welcome message when the application starts.","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" * @return Welcome Message.","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" public String showGreetingMessage() {","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_GREETING;","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"tim-pipi"},"content":" * Returns a message to inform the user that the application is exiting.","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"tim-pipi"},"content":" * @return Exit Message","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"tim-pipi"},"content":" public String showExitMessage() {","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_EXIT;","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"tim-pipi"},"content":" * Reads a user command from the input stream, trims leading and trailing whitespace,","lastModifiedDate":"2023-09-13"},{"lineNumber":84,"author":{"gitId":"tim-pipi"},"content":" * and returns the cleaned command as a string.","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"tim-pipi"},"content":" * @return The user-entered command after trimming whitespace.","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"tim-pipi"},"content":" public String readUserCommand() {","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"tim-pipi"},"content":" return in.nextLine().trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"tim-pipi"},"content":" * Returns a loading error message when there is an issue loading data.","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"tim-pipi"},"content":" * @return Loading Error Message.","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"tim-pipi"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_ERROR_LOADING;","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"tim-pipi"},"content":" * Returns a loading success message when there is an issue loading data.","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"tim-pipi"},"content":" * @return Loading Success Message.","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"tim-pipi"},"content":" public String showLoadingSuccess() {","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_SUCCESS_LOADING;","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"tim-pipi"},"content":" * Returns a success message after adding a task to the task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":112,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":113,"author":{"gitId":"tim-pipi"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The task list containing the added task.","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"tim-pipi"},"content":" * @return A success message including information about the added task and the updated task list size.","lastModifiedDate":"2023-09-13"},{"lineNumber":116,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":117,"author":{"gitId":"tim-pipi"},"content":" public String showTaskAddSuccess(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-13"},{"lineNumber":118,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_SUCCESS_ADD + task + LS","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"tim-pipi"},"content":" + MESSAGE_TASK_SIZE.replace(\"tasks.size()\", String.valueOf(tasks.size()));","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"tim-pipi"},"content":" * Generates a success message after marking a task as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"tim-pipi"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"tim-pipi"},"content":" * @return A success message indicating that the task has been marked as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"tim-pipi"},"content":" public String showTaskMarkSuccess(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_SUCCESS_MARK + task;","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":132,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"tim-pipi"},"content":" * Generates a success message after marking a task as not done.","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"tim-pipi"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"tim-pipi"},"content":" * @return A success message indicating that the task has been marked as not done.","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"tim-pipi"},"content":" public String showTaskUnmarkSuccess(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_SUCCESS_UNMARK + task;","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"tim-pipi"},"content":" * Displays a list of tasks to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"tim-pipi"},"content":" public String showTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"tim-pipi"},"content":" StringBuilder list \u003d new StringBuilder(MESSAGE_TASK_LIST);","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"tim-pipi"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"tim-pipi"},"content":" list.append(String.format((i + 1) + \". \" + tasks.get(i) + \"\\n\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"tim-pipi"},"content":" return list.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"tim-pipi"},"content":" * Returns a success message after deleting a task from the task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"tim-pipi"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The task list containing the deleted task.","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"tim-pipi"},"content":" * @return A success message including information about the deleted task and the updated task list size.","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"tim-pipi"},"content":" public String showTaskDeleteSuccess(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_SUCCESS_DELETE + task + LS","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"tim-pipi"},"content":" + MESSAGE_TASK_SIZE.replace(\"tasks.size()\", String.valueOf(tasks.size()));","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"tim-pipi"},"content":" * Generates a message to display a list of tasks found in the task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The task list containing the found tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"tim-pipi"},"content":" * @return A message displaying the found tasks with their indexes in the list.","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"tim-pipi"},"content":" public String showTaskFound(TaskList tasks) {","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"tim-pipi"},"content":" StringBuilder list \u003d new StringBuilder(MESSAGE_TASK_FOUND);","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"tim-pipi"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"tim-pipi"},"content":" list.append(String.format((i + 1) + \". \" + tasks.get(i) + \"\\n\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":178,"author":{"gitId":"tim-pipi"},"content":" return list.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":181,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"tim-pipi"},"content":" * Generates a message to indicate that no tasks were found.","lastModifiedDate":"2023-09-13"},{"lineNumber":183,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":184,"author":{"gitId":"tim-pipi"},"content":" * @return A message indicating that no tasks matching the search criteria were found.","lastModifiedDate":"2023-09-13"},{"lineNumber":185,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":186,"author":{"gitId":"tim-pipi"},"content":" public String showTaskNotFound() {","lastModifiedDate":"2023-09-13"},{"lineNumber":187,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_TASK_NOT_FOUND;","lastModifiedDate":"2023-09-13"},{"lineNumber":188,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":189,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":190,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":191,"author":{"gitId":"tim-pipi"},"content":" * Generates an error message during the application initialization.","lastModifiedDate":"2023-09-13"},{"lineNumber":192,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":193,"author":{"gitId":"tim-pipi"},"content":" * @return Init Error Message.","lastModifiedDate":"2023-09-13"},{"lineNumber":194,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":195,"author":{"gitId":"tim-pipi"},"content":" public String showInitError() {","lastModifiedDate":"2023-09-13"},{"lineNumber":196,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_ERROR_INIT;","lastModifiedDate":"2023-09-13"},{"lineNumber":197,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":198}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"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\"anya.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" \u003cFont name\u003d\"System Bold\" size\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":23}},{"path":"src/test/java/anya/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" private final Todo t \u003d new Todo(\"Test task\");","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" assertTrue(t.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" public void markAsNotDoneTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" t.markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" assertFalse(t.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tim-pipi":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"todo sleep","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"deadline homework /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"event class /from 4pm /to 6pm","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":19}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"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":"tim-pipi"},"content":"java -classpath ..\\bin Anya \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":{"tim-pipi":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":"tim-pipi"},"content":"java -classpath ../bin Anya \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tim-pipi":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"# Anya Forger - Your Task Management Chat bot","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"Anya Forger is a chat bot inspired by the character from the [_Spy x Family_](https://en.wikipedia.org/wiki/Spy_%C3%97_Family) anime. She is your ultimate task management companion. Whether you\u0027re a secret agent or just someone with a busy schedule, Anya can help you stay organized and on top of your tasks.","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"## Features:","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"* **Task Management**: Anya Forger can create, edit, and track your tasks effortlessly.","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"* **Priority Sorting**: Arrange your tasks by priority to ensure you focus on what matters most.","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"* **Deadline Alerts**: Receive timely reminders, so you never miss a deadline.","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"* **Cross-Device Sync**: Access your tasks from anywhere, on any device.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"## 🚀Mission Accomplished:","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"\u003e \"Anya Forger is the secret agent of Task Management.\" - Anonymous","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"## Task List:","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"- [ ] Finish coding the chat-bot","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"- [ ] Test Anya\u0027s task management features","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":"- [ ] Write documentation","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":"- [ ] Deploy Anya to production!","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":"## Getting Started:","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":"1. Download the `anya.jar` file from [here]()","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":"2. Run the following command:","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":"java -jar Anya.jar ","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":"\u003e ✏️ Note: run the command in the same folder as the jar file","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":"If you are Java programmer, you can use it to practice Java too. Here\u0027s the `main` method:","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":"```java","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":"public class Main {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":30,"-":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":"tim-pipi"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"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":"tim-pipi"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"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":"tim-pipi"},"content":" mainClass.set(\"anya.Launcher\")","lastModifiedDate":"2023-09-16"},{"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":"tim-pipi"},"content":" archiveBaseName \u003d \"Anya\"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tim-pipi":22,"-":39}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"T | 1 | read book","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"D | 1 | return book | 2019-12-01T06:30","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"E | 0 | project meeting | 2019-12-01T06:30 | 2019-12-01T06:30","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"T | 0 | sleep","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"tim-pipi":4}},{"path":"src/main/java/anya/Anya.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import anya.exception.AnyaException;","lastModifiedDate":"2023-09-15"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import anya.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import anya.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import anya.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import anya.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" * Represents a chat bot named anya.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"public class Anya {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" private static final String STORAGE_FILE_PATH \u003d \"data/tasks.txt\";","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" private Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new instance of the {@code Anya} class with the specified storage file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" * This constructor initializes the user interface (UI), storage, and task list parser for the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" * It also loads tasks from the specified storage file and handles exceptions related to storage operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" * @throws RuntimeException If there is an issue with the storage file path or storage operation,","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" * a runtime exception is thrown, and an initialization error message is","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" * displayed through the UI.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" public Anya() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" this.storage \u003d new Storage(STORAGE_FILE_PATH);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-15"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" this.parser \u003d new Parser(storage, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" } catch (AnyaException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" ui.showInitError();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" return parser.parse(input);","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" } catch (AnyaException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-15"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"tim-pipi":45,"-":1}},{"path":"src/main/java/anya/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"public class Launcher {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":12}},{"path":"src/main/java/anya/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import anya.gui.MainWindow;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" private Anya anya \u003d new Anya();","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(anya.Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" stage.setTitle(\"Anya Forger\");","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" stage.getIcons().add(new Image(\"/images/anya.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setAnya(anya);","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":35}},{"path":"src/main/java/anya/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":" * Enum representing the available commands in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" * This enum defines the various command types that can be used by the user to interact with the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * Each enum value corresponds to a specific user command, such as \"BYE\" for exiting the application or \"TODO\" for","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" * adding a to-do task.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"public enum Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" BYE, LIST, MARK, UNMARK, TODO, DEADLINE, EVENT, DELETE, FIND, UNKNOWN","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":12}},{"path":"src/main/java/anya/exception/AnyaException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":" * Custom exception class for handling Anya-specific exceptions.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" * This class extends the standard Java Exception class to create custom exceptions tailored for the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * It allows for the propagation of Anya-specific error messages when exceptional conditions occur during execution.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" * @see Exception","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"public class AnyaException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new instance of the {@code AnyaException} class with the specified error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" * @param message A descriptive error message explaining the exceptional condition.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" public AnyaException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":20}},{"path":"src/main/java/anya/exception/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":" * Custom exception class for handling invalid arguments in Anya commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" * This class extends the {@code AnyaException} class to create custom exceptions specifically for cases where","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * invalid arguments are provided to Anya commands. It allows for the propagation of error messages indicating","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" * that an invalid argument was detected.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" * @see AnyaException","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"public class InvalidArgumentException extends AnyaException {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new instance of the {@code InvalidArgumentException} class with the specified error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" * @param message A descriptive error message explaining the invalid argument condition.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" public InvalidArgumentException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":21}},{"path":"src/main/java/anya/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.gui;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" public static DialogBox getAnyaDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":61}},{"path":"src/main/java/anya/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.gui;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import anya.Anya;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import anya.messages.Messages;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-15"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" private Anya anya;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/damian.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" private Image anyaImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/anya.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" public void setAnya(Anya a) {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" anya \u003d a;","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" DialogBox.getAnyaDialog(Messages.MESSAGE_GREETING, anyaImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" String response \u003d anya.getResponse(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" DialogBox.getAnyaDialog(response, anyaImage)","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" Platform.exit();","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":60}},{"path":"src/main/java/anya/messages/Messages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.messages;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":" * Container for user visible messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"public class Messages {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" public static final String DIVIDER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" /** A platform independent line separator. */","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" public static final String LS \u003d System.lineSeparator();","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_GREETING \u003d \"Hello! I\u0027m Anya Forger.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" + \"What can I do for you?\";","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_ERROR_LOADING \u003d \"Error loading file.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_ERROR_INIT \u003d \"Error initializing Bot.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_EXIT \u003d \"Bye! Hope to see you again.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_SUCCESS_LOADING \u003d \"Error loading file.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_SUCCESS_ADD \u003d \"I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_SUCCESS_DELETE \u003d \"I\u0027ve deleted this task:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_SUCCESS_MARK \u003d \"I\u0027ve marked this task as \u0027DONE\u0027:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_SUCCESS_UNMARK \u003d \"I\u0027ve marked this task as \u0027NOT DONE\u0027:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_TASK_SIZE \u003d \"Now you have tasks.size() tasks in the list!\";","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_TASK_LIST \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_TASK_FOUND \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_TASK_NOT_FOUND \u003d \"There are no matching tasks found\\n\";","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" public static final String MESSAGE_ERROR_PREFIX \u003d \"Oh no!\";","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":27}},{"path":"src/main/java/anya/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import anya.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import anya.exception.AnyaException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import anya.exception.InvalidArgumentException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import anya.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import anya.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"import anya.ui.Ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" * The `Parser` class is responsible for interpreting user input","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" * and executing corresponding actions in the Anya application.","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" * It handles parsing commands, validating arguments,","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" * and performing the appropriate operations on tasks and data storage.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" private Ui ui;","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Parser` instance with the specified storage and task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" * @param storage The storage component responsible for saving and loading task data.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The task list containing the user\u0027s tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" public Parser(Storage storage, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" * Parses the user input and returns the corresponding command.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" * @param input The user input to be parsed.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" * @return The command represented by the user input, or {@code Command.UNKNOWN} if the input is not recognized.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" public Command parseCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" assert input !\u003d null : \"Input cannot be null\";","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" return Command.BYE;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" return Command.LIST;","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" return Command.MARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" return Command.UNMARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" return Command.TODO;","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" return Command.DEADLINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":" return Command.EVENT;","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" return Command.DELETE;","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" if (input.equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" return Command.FIND;","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":" return Command.UNKNOWN;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"tim-pipi"},"content":" * Executes the core functionality of parsing user input and performing relevant actions.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"tim-pipi"},"content":" * This method reads user input, parses it, and executes the appropriate command based on the parsed input.","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"tim-pipi"},"content":" * It handles various command types and associated error checks, displaying appropriate messages and performing","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"tim-pipi"},"content":" * actions like marking tasks as done, adding tasks, deleting tasks, and more.","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"tim-pipi"},"content":" * @return The output of the command in String.","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"tim-pipi"},"content":" public String parse(String input) throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"tim-pipi"},"content":" assert input !\u003d null : \"Input cannot be null\";","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"tim-pipi"},"content":" String[] arguments \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"tim-pipi"},"content":" Command command \u003d parseCommand(arguments[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"tim-pipi"},"content":" String details;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"tim-pipi"},"content":" if (arguments.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"tim-pipi"},"content":" details \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"tim-pipi"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"tim-pipi"},"content":" details \u003d arguments[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"tim-pipi"},"content":" assert tasks !\u003d null : \"Tasks list cannot be null\";","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"tim-pipi"},"content":" switch (command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"tim-pipi"},"content":" case BYE:","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"tim-pipi"},"content":" return executeByeCommand();","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"tim-pipi"},"content":" case LIST:","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"tim-pipi"},"content":" return executeListCommand();","lastModifiedDate":"2023-09-15"},{"lineNumber":101,"author":{"gitId":"tim-pipi"},"content":" case MARK: {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"tim-pipi"},"content":" return executeMarkCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":103,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"tim-pipi"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"tim-pipi"},"content":" return executeUnmarkCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":106,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"tim-pipi"},"content":" case TODO: {","lastModifiedDate":"2023-09-15"},{"lineNumber":108,"author":{"gitId":"tim-pipi"},"content":" return executeTodoCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":109,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"tim-pipi"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-15"},{"lineNumber":111,"author":{"gitId":"tim-pipi"},"content":" return executeDeadlineCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":112,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":113,"author":{"gitId":"tim-pipi"},"content":" case EVENT: {","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"tim-pipi"},"content":" return executeEventCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":115,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":116,"author":{"gitId":"tim-pipi"},"content":" case DELETE: {","lastModifiedDate":"2023-09-15"},{"lineNumber":117,"author":{"gitId":"tim-pipi"},"content":" return executeDeleteCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":118,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":119,"author":{"gitId":"tim-pipi"},"content":" case FIND: {","lastModifiedDate":"2023-09-15"},{"lineNumber":120,"author":{"gitId":"tim-pipi"},"content":" return executeFindCommand(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":121,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":122,"author":{"gitId":"tim-pipi"},"content":" default:","lastModifiedDate":"2023-09-15"},{"lineNumber":123,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(\"I\u0027m sorry, but I don\u0027t know what that means (yet) :( \");","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"tim-pipi"},"content":" private String executeFindCommand(String details) {","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"tim-pipi"},"content":" TaskList matchingTasks \u003d tasks.find(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"tim-pipi"},"content":" if (matchingTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskNotFound();","lastModifiedDate":"2023-09-15"},{"lineNumber":131,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":132,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskFound(matchingTasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":134,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":135,"author":{"gitId":"tim-pipi"},"content":" private String executeDeleteCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":136,"author":{"gitId":"tim-pipi"},"content":" validateDeleteArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":137,"author":{"gitId":"tim-pipi"},"content":" validateTypeOfArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":138,"author":{"gitId":"tim-pipi"},"content":" int taskNumber \u003d Integer.parseInt(details) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"tim-pipi"},"content":" validateTaskNumber(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":140,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d tasks.get(taskNumber);","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"tim-pipi"},"content":" tasks.remove(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":143,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskDeleteSuccess(t, tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":144,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":146,"author":{"gitId":"tim-pipi"},"content":" private static void validateDeleteArguments(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":147,"author":{"gitId":"tim-pipi"},"content":" // Error: No argument or Multiple arguments provided","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"tim-pipi"},"content":" if (details.isEmpty() || details.split(\" \").length !\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"Please input in the following format:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":150,"author":{"gitId":"tim-pipi"},"content":" + \" delete \u003ctaskNumber\u003e\");","lastModifiedDate":"2023-09-15"},{"lineNumber":151,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"tim-pipi"},"content":" private String executeEventCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":155,"author":{"gitId":"tim-pipi"},"content":" validateEventDetails(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":156,"author":{"gitId":"tim-pipi"},"content":" validateEventTime(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":157,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"tim-pipi"},"content":" String taskName \u003d details.split(\"/from\")[0].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":159,"author":{"gitId":"tim-pipi"},"content":" String startTime \u003d details.split(\"/from\")[1].trim().split(\"/to\")[0].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":160,"author":{"gitId":"tim-pipi"},"content":" String endTime \u003d details.split(\"/to\")[1].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":161,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-09-15"},{"lineNumber":162,"author":{"gitId":"tim-pipi"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":163,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskAddSuccess(t, tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":164,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":166,"author":{"gitId":"tim-pipi"},"content":" private static void validateEventTime(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":167,"author":{"gitId":"tim-pipi"},"content":" // Error: Does not contain /from and /to","lastModifiedDate":"2023-09-15"},{"lineNumber":168,"author":{"gitId":"tim-pipi"},"content":" if (!details.contains(\"/from\") \u0026\u0026 !details.contains(\"/to\")) {","lastModifiedDate":"2023-09-15"},{"lineNumber":169,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"Please input in the following format:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":170,"author":{"gitId":"tim-pipi"},"content":" + \" event \u003ctaskName\u003e /from \u003cstartTime\u003e /to \u003cendTime\u003e\");","lastModifiedDate":"2023-09-15"},{"lineNumber":171,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":172,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":173,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":174,"author":{"gitId":"tim-pipi"},"content":" private static void validateEventDetails(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":175,"author":{"gitId":"tim-pipi"},"content":" // Error: No argument provided","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"tim-pipi"},"content":" if (details.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"Please input in the following format:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"tim-pipi"},"content":" + \" event \u003ctaskName\u003e /from \u003cstartTime\u003e /to \u003cendTime\u003e\");","lastModifiedDate":"2023-09-15"},{"lineNumber":179,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":180,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"tim-pipi"},"content":" private String executeDeadlineCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":183,"author":{"gitId":"tim-pipi"},"content":" String[] info \u003d details.split(\"/by\");","lastModifiedDate":"2023-09-15"},{"lineNumber":184,"author":{"gitId":"tim-pipi"},"content":" validateDeadlineDetails(details, info);","lastModifiedDate":"2023-09-15"},{"lineNumber":185,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"tim-pipi"},"content":" String taskName \u003d info[0].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":187,"author":{"gitId":"tim-pipi"},"content":" String deadline \u003d info[1].trim();","lastModifiedDate":"2023-09-15"},{"lineNumber":188,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-09-15"},{"lineNumber":189,"author":{"gitId":"tim-pipi"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":190,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskAddSuccess(t, tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":191,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":193,"author":{"gitId":"tim-pipi"},"content":" private static void validateDeadlineDetails(String details, String[] info) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":194,"author":{"gitId":"tim-pipi"},"content":" // Error: No argument or wrong no of arguments provided","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"tim-pipi"},"content":" if (details.isEmpty() || info.length !\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"Please input in the following format:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":197,"author":{"gitId":"tim-pipi"},"content":" + \" deadline \u003ctaskName\u003e /by \u003cdeadline\u003e\");","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":200,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"tim-pipi"},"content":" private String executeTodoCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":202,"author":{"gitId":"tim-pipi"},"content":" validateTodoDescription(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":203,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d new Todo(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":205,"author":{"gitId":"tim-pipi"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":206,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskAddSuccess(t, tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":207,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":209,"author":{"gitId":"tim-pipi"},"content":" private static void validateTodoDescription(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":210,"author":{"gitId":"tim-pipi"},"content":" // Error: No argument provided","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"tim-pipi"},"content":" if (details.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"Please input in the following format:\\n\"","lastModifiedDate":"2023-09-15"},{"lineNumber":213,"author":{"gitId":"tim-pipi"},"content":" + \" todo \u003ctaskName\u003e\");","lastModifiedDate":"2023-09-15"},{"lineNumber":214,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"tim-pipi"},"content":" private String executeByeCommand() throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":219,"author":{"gitId":"tim-pipi"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":220,"author":{"gitId":"tim-pipi"},"content":" return ui.showExitMessage();","lastModifiedDate":"2023-09-15"},{"lineNumber":221,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":223,"author":{"gitId":"tim-pipi"},"content":" private String executeListCommand() throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":224,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskList(tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":225,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":226,"author":{"gitId":"tim-pipi"},"content":" private String executeMarkCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":227,"author":{"gitId":"tim-pipi"},"content":" validateNumberOfArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":228,"author":{"gitId":"tim-pipi"},"content":" validateTypeOfArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":229,"author":{"gitId":"tim-pipi"},"content":" int taskNumber \u003d Integer.parseInt(details) - 1;","lastModifiedDate":"2023-09-15"},{"lineNumber":230,"author":{"gitId":"tim-pipi"},"content":" validateTaskNumber(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":231,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":232,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d tasks.get(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":233,"author":{"gitId":"tim-pipi"},"content":" tasks.mark(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":234,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskMarkSuccess(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":235,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":236,"author":{"gitId":"tim-pipi"},"content":" private String executeUnmarkCommand(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":237,"author":{"gitId":"tim-pipi"},"content":" validateNumberOfArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":238,"author":{"gitId":"tim-pipi"},"content":" validateTypeOfArguments(details);","lastModifiedDate":"2023-09-15"},{"lineNumber":239,"author":{"gitId":"tim-pipi"},"content":" int taskNumber \u003d Integer.parseInt(details) - 1;","lastModifiedDate":"2023-09-15"},{"lineNumber":240,"author":{"gitId":"tim-pipi"},"content":" validateTaskNumber(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":241,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":242,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d tasks.get(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":243,"author":{"gitId":"tim-pipi"},"content":" tasks.unmark(taskNumber);","lastModifiedDate":"2023-09-15"},{"lineNumber":244,"author":{"gitId":"tim-pipi"},"content":" return ui.showTaskUnmarkSuccess(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":245,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":247,"author":{"gitId":"tim-pipi"},"content":" private static void validateTypeOfArguments(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":248,"author":{"gitId":"tim-pipi"},"content":" // Error: Argument provided is not a number","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":250,"author":{"gitId":"tim-pipi"},"content":" Integer.parseInt(details);","lastModifiedDate":"2023-09-02"},{"lineNumber":251,"author":{"gitId":"tim-pipi"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":252,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"Please input in the following format:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":253,"author":{"gitId":"tim-pipi"},"content":" + \" mark/unmark \u003ctaskName\u003e\");","lastModifiedDate":"2023-09-16"},{"lineNumber":254,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"tim-pipi"},"content":" private static void validateNumberOfArguments(String details) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":258,"author":{"gitId":"tim-pipi"},"content":" // Error: No argument or Multiple arguments provided","lastModifiedDate":"2023-09-15"},{"lineNumber":259,"author":{"gitId":"tim-pipi"},"content":" if (details.isEmpty() || details.split(\" \").length !\u003d 1) {","lastModifiedDate":"2023-09-15"},{"lineNumber":260,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"Please input in the following format:\\n\"","lastModifiedDate":"2023-09-16"},{"lineNumber":261,"author":{"gitId":"tim-pipi"},"content":" + \" mark/unmark \u003ctaskName\u003e\");","lastModifiedDate":"2023-09-16"},{"lineNumber":262,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":265,"author":{"gitId":"tim-pipi"},"content":" private void validateTaskNumber(int taskNumber) throws InvalidArgumentException {","lastModifiedDate":"2023-09-15"},{"lineNumber":266,"author":{"gitId":"tim-pipi"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size() - 1) {","lastModifiedDate":"2023-09-15"},{"lineNumber":267,"author":{"gitId":"tim-pipi"},"content":" throw new InvalidArgumentException(\"I don\u0027t see a task with the number:\" + (taskNumber + 1));","lastModifiedDate":"2023-09-16"},{"lineNumber":268,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":269,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":270,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":270}},{"path":"src/main/java/anya/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import anya.exception.AnyaException;","lastModifiedDate":"2023-09-15"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"import anya.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" * The `Storage` class is responsible for managing the storage of task data in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" * It provides functionality to read, write, and convert task data between the application and the storage file.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" private final String storageFilePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" private File source;","lastModifiedDate":"2023-09-15"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Storage` instance with the specified storage file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" * @param path The file path where task data is stored.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" * @throws AnyaException If the provided storage file path is invalid (doesn\u0027t end with \u0027.txt\u0027).","lastModifiedDate":"2023-09-15"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" public Storage(String path) throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" this.storageFilePath \u003d path;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" if (!isValidPath(path)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(\"Storage file should end with \u0027.txt\u0027\");","lastModifiedDate":"2023-09-15"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" this.source \u003d new File(path);","lastModifiedDate":"2023-09-15"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" * Returns true if the given path is acceptable as a storage file.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" * @param filePath The file path to be checked.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" * @return true if the file path ends with \u0027.txt\u0027, indicating it\u0027s a valid storage file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" private static boolean isValidPath(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" return filePath.endsWith(\".txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" * Loads task data from the storage file and returns it as a `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" * @return A `TaskList` containing the loaded tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" * @throws AnyaException If an error occurs while reading or creating the storage file.","lastModifiedDate":"2023-09-15"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" public ArrayList\u003cTask\u003e load() throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" // Check for directory","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" File directory \u003d this.source.getParentFile();","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" directory.mkdir();","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" if (source.createNewFile()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":" return readFile();","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(\"Error writing to file: \" + storageFilePath);","lastModifiedDate":"2023-09-15"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" * Reads task data from the storage file and converts it into a `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":" * @return A `TaskList` containing the tasks read from the storage file.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":" * @throws FileNotFoundException If the storage file is not found.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"tim-pipi"},"content":" public ArrayList\u003cTask\u003e readFile() throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":76,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-15"},{"lineNumber":77,"author":{"gitId":"tim-pipi"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"tim-pipi"},"content":" Scanner sc \u003d new Scanner(this.source);","lastModifiedDate":"2023-09-15"},{"lineNumber":79,"author":{"gitId":"tim-pipi"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d convertStringToTask(sc.nextLine());","lastModifiedDate":"2023-09-15"},{"lineNumber":81,"author":{"gitId":"tim-pipi"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-15"},{"lineNumber":82,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"tim-pipi"},"content":" return tasks;","lastModifiedDate":"2023-09-15"},{"lineNumber":84,"author":{"gitId":"tim-pipi"},"content":" } catch (UnknownTaskException | FileNotFoundException e) {","lastModifiedDate":"2023-09-15"},{"lineNumber":85,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":86,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"tim-pipi"},"content":" * Converts a string representation of a task to a `Task` object.","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"tim-pipi"},"content":" * @param input The string representation of a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"tim-pipi"},"content":" * @return A `Task` object parsed from the input string.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"tim-pipi"},"content":" * @throws UnknownTaskException If an unknown task type is encountered in the input.","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"tim-pipi"},"content":" public Task convertStringToTask(String input) throws UnknownTaskException {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"tim-pipi"},"content":" String[] args \u003d input.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"tim-pipi"},"content":" String taskType \u003d args[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"tim-pipi"},"content":" boolean isDone \u003d args[1].trim().equals(\"1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"tim-pipi"},"content":" String description \u003d args[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"tim-pipi"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-15"},{"lineNumber":104,"author":{"gitId":"tim-pipi"},"content":" case \"T\":","lastModifiedDate":"2023-09-15"},{"lineNumber":105,"author":{"gitId":"tim-pipi"},"content":" return new Todo(description, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"tim-pipi"},"content":" case \"D\":","lastModifiedDate":"2023-09-15"},{"lineNumber":107,"author":{"gitId":"tim-pipi"},"content":" String by \u003d args[3].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"tim-pipi"},"content":" return new Deadline(description, by, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"tim-pipi"},"content":" case \"E\":","lastModifiedDate":"2023-09-15"},{"lineNumber":110,"author":{"gitId":"tim-pipi"},"content":" String from \u003d args[3].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"tim-pipi"},"content":" String to \u003d args[4].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"tim-pipi"},"content":" return new Event(description, from, to, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"tim-pipi"},"content":" default:","lastModifiedDate":"2023-09-15"},{"lineNumber":114,"author":{"gitId":"tim-pipi"},"content":" throw new UnknownTaskException(\"Unknown task identified: \" + taskType);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"tim-pipi"},"content":" * Saves the tasks from a `TaskList` to the storage file.","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The `TaskList` containing the tasks to be saved.","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"tim-pipi"},"content":" public void save(TaskList tasks) throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":124,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"tim-pipi"},"content":" clearFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"tim-pipi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":128,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":129,"author":{"gitId":"tim-pipi"},"content":" writeToFile(tasks);","lastModifiedDate":"2023-09-15"},{"lineNumber":130,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"tim-pipi"},"content":" private void writeToFile(TaskList tasks) throws AnyaException {","lastModifiedDate":"2023-09-15"},{"lineNumber":133,"author":{"gitId":"tim-pipi"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"tim-pipi"},"content":" String text \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"tim-pipi"},"content":" Task t \u003d tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"tim-pipi"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"tim-pipi"},"content":" text +\u003d convertTaskToString(t) + System.lineSeparator();","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"tim-pipi"},"content":" appendToFile(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"tim-pipi"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"tim-pipi"},"content":" throw new AnyaException(e.getMessage());","lastModifiedDate":"2023-09-15"},{"lineNumber":141,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"tim-pipi"},"content":" * Converts a `Task` object to its string representation for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"tim-pipi"},"content":" * @param task The `Task` object to be converted.","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"tim-pipi"},"content":" * @return A string representation of the task suitable for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"tim-pipi"},"content":" public String convertTaskToString(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"tim-pipi"},"content":" return task.formatToSave();","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"tim-pipi"},"content":" private void clearFile() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"tim-pipi"},"content":" FileWriter fw \u003d new FileWriter(this.storageFilePath, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"tim-pipi"},"content":" fw.write(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"tim-pipi"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"tim-pipi"},"content":" private void appendToFile(String text) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"tim-pipi"},"content":" FileWriter fw \u003d new FileWriter(this.storageFilePath, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"tim-pipi"},"content":" fw.write(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"tim-pipi"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"tim-pipi"},"content":" * Signals that an unknown task type was encountered during conversion.","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"tim-pipi"},"content":" public static class UnknownTaskException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"tim-pipi"},"content":" public UnknownTaskException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"tim-pipi"},"content":" super(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":175}},{"path":"src/main/java/anya/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * Represents a deadline task in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" * A deadline task is a task with a specific due date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Deadline` instance with the specified description and deadline date-time.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" * @param by The due date and time of the deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" this.by \u003d super.convertStringToDate(by);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Deadline` instance with the specified description, deadline date-time, and done status.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" * @param by The due date and time of the deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" * @param isDone A boolean indicating whether the task is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" public Deadline(String description, String by, Boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" this.by \u003d super.convertStringToDate(by);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" this.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" * Returns the type of task, which is \u0027D\u0027 for deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" * @return The task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" public String getType() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" return \"D\";","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" * Formats the `Deadline` object as a string for saving to storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" * @return A string representation of the `Deadline` object suitable for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" public String formatToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" return \"D\" + super.formatToSave() + \" | \" + this.by;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" * Formats a `LocalDateTime` object as a string in the \"MMM d yyyy HH:mm\" format.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" * @param date The `LocalDateTime` object to be formatted.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":" * @return A formatted date-time string.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" public String formatDate(LocalDateTime date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDate(this.by) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":73}},{"path":"src/main/java/anya/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * Represents an event task in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" * An event task is a task with a specific start date and time and an end date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Event` instance with the specified description, start date-time, and end date-time.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" * @param from The start date and time of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" * @param to The end date and time of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" this.from \u003d super.convertStringToDate(from);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" this.to \u003d super.convertStringToDate(to);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Event` instance with the specified description,","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" * start date-time, end date-time, and done status.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" * @param from The start date and time of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" * @param to The end date and time of the event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" * @param isDone A boolean indicating whether the task is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" public Event(String description, String from, String to, Boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" this.from \u003d super.convertStringToDate(from);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" this.to \u003d super.convertStringToDate(to);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" this.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" * Returns the type of task, which is \u0027E\u0027 for event.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" * @return The task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" public String getType() {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" return \"E\";","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" * Formats the `Event` object as a string for saving to storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" * @return A string representation of the `Event` object suitable for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" public String formatToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" return \"E\" + super.formatToSave() + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" * Formats a `LocalDateTime` object as a string in the \"MMM d yyyy HH:mm\" format.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":" * @param date The `LocalDateTime` object to be formatted.","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" * @return A formatted date-time string.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" public String formatDate(LocalDateTime date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"tim-pipi"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"tim-pipi"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatDate(this.from) + \" to: \" + formatDate(this.to) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":79}},{"path":"src/main/java/anya/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" * Represents a generic task in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * A task has a description and a completion status.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Task` instance with the specified description and initializes it as not done.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" return (isDone ? \"X\" : \" \"); // mark done anya.task with X","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" public String getStatusNumber() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" return (isDone ? \"1\" : \"0\"); // mark done anya.task with 1","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" public String getType() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" return this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" public Task markAsDone() {","lastModifiedDate":"2023-09-15"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" return this;","lastModifiedDate":"2023-09-15"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" public Task markAsNotDone() {","lastModifiedDate":"2023-09-15"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" return this;","lastModifiedDate":"2023-09-15"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" public String formatToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" return \" | \" + getStatusNumber() + \" | \" + this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" public LocalDateTime convertStringToDate(String dateString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" return LocalDateTime.parse(dateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":61}},{"path":"src/main/java/anya/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":" * Represents a collection of tasks in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":" * The `TaskList` class provides methods for adding, removing, accessing, and listing tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new empty `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" public TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `TaskList` with the specified list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" * @param tasks An ArrayList of tasks to initialize the `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" * Adds a task to the `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The tasks to be added.","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" public void add(Task... tasks) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" Collections.addAll(this.tasks, tasks);","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" * Removes a task from the `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" * @param task The task to be removed.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" public void remove(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" * Retrieves a task from the `TaskList` at the specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" public Task mark(int index) {","lastModifiedDate":"2023-09-15"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" return this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-15"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" public Task unmark(int index) {","lastModifiedDate":"2023-09-15"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" return this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-15"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-15"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-15"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" * Returns the number of tasks in the `TaskList`.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":" * @return The number of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"tim-pipi"},"content":" * Lists all tasks in the `TaskList` with their corresponding indices.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"tim-pipi"},"content":" public void list() {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"tim-pipi"},"content":" StringBuilder list \u003d new StringBuilder(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"tim-pipi"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"tim-pipi"},"content":" list.append(System.lineSeparator());","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"tim-pipi"},"content":" list.append(String.format((i + 1) + \". \" + tasks.get(i)));","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"tim-pipi"},"content":" System.out.println(list.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"tim-pipi"},"content":" * Finds and displays tasks containing a specified keyword in their descriptions.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"tim-pipi"},"content":" * @param input The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"tim-pipi"},"content":" public TaskList find(String input) {","lastModifiedDate":"2023-09-15"},{"lineNumber":92,"author":{"gitId":"tim-pipi"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"tim-pipi"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"tim-pipi"},"content":" if (t.getDescription().contains(input)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"tim-pipi"},"content":" matchingTasks.add(t);","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"tim-pipi"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-15"},{"lineNumber":99,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":100}},{"path":"src/main/java/anya/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":" * Represents a todo task in the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":" * A todo task is a simple task with a description.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Todo` instance with the specified description.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Todo` instance with the specified description and done status.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" * @param description A description of the todo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" * @param isDone A boolean indicating whether the task is marked as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":" public Todo(String description, Boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":" this.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" * Returns the type of task, which is \u0027T\u0027 for todo.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":" * @return The task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" public String getType() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" return \"T\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" * Formats the `Todo` object as a string for saving to storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" * @return A string representation of the `Todo` object suitable for storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" public String formatToSave() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" return \"T\" + super.formatToSave();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":54}},{"path":"src/main/java/anya/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.DIVIDER;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.LS;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_ERROR_INIT;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_ERROR_LOADING;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_EXIT;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_GREETING;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_SUCCESS_ADD;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_SUCCESS_DELETE;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_SUCCESS_LOADING;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_SUCCESS_MARK;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_SUCCESS_UNMARK;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_TASK_FOUND;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_TASK_LIST;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_TASK_NOT_FOUND;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"import static anya.messages.Messages.MESSAGE_TASK_SIZE;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":"import anya.task.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"tim-pipi"},"content":"import anya.task.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"tim-pipi"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"tim-pipi"},"content":" * Represents the User Interface (UI) of the Anya application.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"tim-pipi"},"content":" * The UI handles interactions with the user, displaying messages, and receiving user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"tim-pipi"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"tim-pipi"},"content":" private final Scanner in;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"tim-pipi"},"content":" private final PrintStream out;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Ui` instance using the default input and output streams (System.in and System.out).","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"tim-pipi"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"tim-pipi"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"tim-pipi"},"content":" * Constructs a new `Ui` instance with the specified input and output streams.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"tim-pipi"},"content":" * @param in The input stream to read user input from.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"tim-pipi"},"content":" * @param out The output stream to display messages to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"tim-pipi"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"tim-pipi"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"tim-pipi"},"content":" this.out \u003d out;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"tim-pipi"},"content":" * Displays a message to the user, surrounded by a divider for better readability.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"tim-pipi"},"content":" * @param message The message to be shown.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"tim-pipi"},"content":" public void showToUser(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"tim-pipi"},"content":" out.println(LS + DIVIDER + LS","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"tim-pipi"},"content":" + message.replace(\"\\n\", LS)","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"tim-pipi"},"content":" + LS + DIVIDER + LS);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"tim-pipi"},"content":" * Returns the welcome message when the application starts.","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"tim-pipi"},"content":" * @return Welcome Message.","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"tim-pipi"},"content":" public String showGreetingMessage() {","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_GREETING;","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"tim-pipi"},"content":" * Returns a message to inform the user that the application is exiting.","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"tim-pipi"},"content":" * @return Exit Message","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"tim-pipi"},"content":" public String showExitMessage() {","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_EXIT;","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"tim-pipi"},"content":" * Reads a user command from the input stream, trims leading and trailing whitespace,","lastModifiedDate":"2023-09-13"},{"lineNumber":84,"author":{"gitId":"tim-pipi"},"content":" * and returns the cleaned command as a string.","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"tim-pipi"},"content":" * @return The user-entered command after trimming whitespace.","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"tim-pipi"},"content":" public String readUserCommand() {","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"tim-pipi"},"content":" return in.nextLine().trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"tim-pipi"},"content":" * Returns a loading error message when there is an issue loading data.","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"tim-pipi"},"content":" * @return Loading Error Message.","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"tim-pipi"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_ERROR_LOADING;","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"tim-pipi"},"content":" * Returns a loading success message when there is an issue loading data.","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"tim-pipi"},"content":" * @return Loading Success Message.","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"tim-pipi"},"content":" public String showLoadingSuccess() {","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_SUCCESS_LOADING;","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"tim-pipi"},"content":" * Returns a success message after adding a task to the task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":112,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":113,"author":{"gitId":"tim-pipi"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The task list containing the added task.","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"tim-pipi"},"content":" * @return A success message including information about the added task and the updated task list size.","lastModifiedDate":"2023-09-13"},{"lineNumber":116,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":117,"author":{"gitId":"tim-pipi"},"content":" public String showTaskAddSuccess(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-13"},{"lineNumber":118,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_SUCCESS_ADD + task + LS","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"tim-pipi"},"content":" + MESSAGE_TASK_SIZE.replace(\"tasks.size()\", String.valueOf(tasks.size()));","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"tim-pipi"},"content":" * Generates a success message after marking a task as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"tim-pipi"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"tim-pipi"},"content":" * @return A success message indicating that the task has been marked as done.","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"tim-pipi"},"content":" public String showTaskMarkSuccess(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_SUCCESS_MARK + task;","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":132,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"tim-pipi"},"content":" * Generates a success message after marking a task as not done.","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"tim-pipi"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"tim-pipi"},"content":" * @return A success message indicating that the task has been marked as not done.","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"tim-pipi"},"content":" public String showTaskUnmarkSuccess(Task task) {","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_SUCCESS_UNMARK + task;","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"tim-pipi"},"content":" * Displays a list of tasks to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"tim-pipi"},"content":" public String showTaskList(TaskList tasks) {","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"tim-pipi"},"content":" StringBuilder list \u003d new StringBuilder(MESSAGE_TASK_LIST);","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"tim-pipi"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"tim-pipi"},"content":" list.append(String.format((i + 1) + \". \" + tasks.get(i) + \"\\n\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"tim-pipi"},"content":" return list.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"tim-pipi"},"content":" * Returns a success message after deleting a task from the task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"tim-pipi"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The task list containing the deleted task.","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"tim-pipi"},"content":" * @return A success message including information about the deleted task and the updated task list size.","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"tim-pipi"},"content":" public String showTaskDeleteSuccess(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_SUCCESS_DELETE + task + LS","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"tim-pipi"},"content":" + MESSAGE_TASK_SIZE.replace(\"tasks.size()\", String.valueOf(tasks.size()));","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"tim-pipi"},"content":" * Generates a message to display a list of tasks found in the task list.","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"tim-pipi"},"content":" * @param tasks The task list containing the found tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"tim-pipi"},"content":" * @return A message displaying the found tasks with their indexes in the list.","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"tim-pipi"},"content":" public String showTaskFound(TaskList tasks) {","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"tim-pipi"},"content":" StringBuilder list \u003d new StringBuilder(MESSAGE_TASK_FOUND);","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"tim-pipi"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"tim-pipi"},"content":" list.append(String.format((i + 1) + \". \" + tasks.get(i) + \"\\n\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":178,"author":{"gitId":"tim-pipi"},"content":" return list.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":181,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"tim-pipi"},"content":" * Generates a message to indicate that no tasks were found.","lastModifiedDate":"2023-09-13"},{"lineNumber":183,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":184,"author":{"gitId":"tim-pipi"},"content":" * @return A message indicating that no tasks matching the search criteria were found.","lastModifiedDate":"2023-09-13"},{"lineNumber":185,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":186,"author":{"gitId":"tim-pipi"},"content":" public String showTaskNotFound() {","lastModifiedDate":"2023-09-13"},{"lineNumber":187,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_TASK_NOT_FOUND;","lastModifiedDate":"2023-09-13"},{"lineNumber":188,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":189,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":190,"author":{"gitId":"tim-pipi"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":191,"author":{"gitId":"tim-pipi"},"content":" * Generates an error message during the application initialization.","lastModifiedDate":"2023-09-13"},{"lineNumber":192,"author":{"gitId":"tim-pipi"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":193,"author":{"gitId":"tim-pipi"},"content":" * @return Init Error Message.","lastModifiedDate":"2023-09-13"},{"lineNumber":194,"author":{"gitId":"tim-pipi"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":195,"author":{"gitId":"tim-pipi"},"content":" public String showInitError() {","lastModifiedDate":"2023-09-13"},{"lineNumber":196,"author":{"gitId":"tim-pipi"},"content":" return MESSAGE_ERROR_INIT;","lastModifiedDate":"2023-09-13"},{"lineNumber":197,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"tim-pipi":198}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"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\"anya.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":" \u003cFont name\u003d\"System Bold\" size\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"tim-pipi"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"tim-pipi"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"tim-pipi":23}},{"path":"src/test/java/anya/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"package anya.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":" private final Todo t \u003d new Todo(\"Test task\");","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":" public void markAsDoneTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":" assertTrue(t.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":" public void markAsNotDoneTest() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":" t.markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":" assertFalse(t.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"tim-pipi"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"tim-pipi"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"tim-pipi":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"tim-pipi"},"content":"todo sleep","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"tim-pipi"},"content":"deadline homework /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"tim-pipi"},"content":"event class /from 4pm /to 6pm","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"tim-pipi"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"tim-pipi"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"tim-pipi"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"tim-pipi"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"tim-pipi"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"tim-pipi"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"tim-pipi"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"tim-pipi"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"tim-pipi":19}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"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":"tim-pipi"},"content":"java -classpath ..\\bin Anya \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":{"tim-pipi":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":"tim-pipi"},"content":"java -classpath ../bin Anya \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"tim-pipi":1,"-":37}}] diff --git a/tim-pipi_ip_master/commits.json b/tim-pipi_ip_master/commits.json index e5b7d157..526ae9dc 100644 --- a/tim-pipi_ip_master/commits.json +++ b/tim-pipi_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"tim-pipi":[{"date":"2023-08-23","commitResults":[{"hash":"bd623f72734dbeab338b6f045abea9612d19667c","isMergeCommit":false,"messageTitle":"Renamed Duke to Anya Forger and added Greeting and Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"91d4bf3b25770be8bf6f8a49ee870eec3ba55bdf","isMergeCommit":false,"messageTitle":"Add Echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"649931b1b70f776df74f27bd02ada9a87c179fbd","isMergeCommit":false,"messageTitle":"Add list command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":5}}},{"hash":"3d9b3ba34a59cd2bca472142b777668c31e381dd","isMergeCommit":false,"messageTitle":"Add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"606f617b28d3156480e0a4fb2bed345d1989dc41","isMergeCommit":false,"messageTitle":"Add Mark as Done function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":10}}},{"hash":"be3739a5846e19145fbdd3e0e71e1185f0db10fd","isMergeCommit":false,"messageTitle":"Add three new types of Task: Todo, Deadline, Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":0}}},{"hash":"d4181aa8ded208a15fdb472db673ee9e3a873286","isMergeCommit":false,"messageTitle":"Support multiple types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":1}}},{"hash":"91740bf1c6fdab6a6396d92b8608221805afb09d","isMergeCommit":false,"messageTitle":"Add Automated Text UI Testing files","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0}}},{"hash":"b2430fd9a47203370870a2ef44424bc7e1f4ec3f","isMergeCommit":false,"messageTitle":"Refactor name: Duke to Anya","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":8},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fd944fbcb5e1e8a208f3cf63b76a8071d2b96b53","isMergeCommit":false,"messageTitle":"Add Error Handling and Refactor Code: Encapsulate common patterns in functions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":146}}},{"hash":"159117b0039631c5b2e76c2c9373e9f75f008d6b","isMergeCommit":false,"messageTitle":"Add Delete Function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":7}}},{"hash":"498f8f0adc1fb69b01330691230e448b2493c834","isMergeCommit":false,"messageTitle":"Add Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":10}}}]},{"date":"2023-09-01","commitResults":[{"hash":"3e1f2e20084a8c9284377dc965b2ab01b5116052","isMergeCommit":false,"messageTitle":"Add Save Functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":152,"deletions":19}}},{"hash":"0c2d815842d6af17345c4c02ca22a9429d4b8984","isMergeCommit":true,"messageTitle":"Merge from branch-level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"fd17749ee81c4973bb578e8bd5978c90c9eafff5","isMergeCommit":false,"messageTitle":"Change date and time to use LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":39,"deletions":17}}},{"hash":"76d5e326cdd5397d1fe625930f7b657982b501e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"bc706e22c7d9a340ab978e0a85966aa4ea545379","isMergeCommit":false,"messageTitle":"Add MoreOOP files and directories","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":0}}},{"hash":"cd8b8d40019a5e50867f06ee375378b182dd0f4c","isMergeCommit":false,"messageTitle":"Add Storage class methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":1}}},{"hash":"40ba50ad03265aac9568cec3c3521667b0414245","isMergeCommit":false,"messageTitle":"Refactor Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":62}}},{"hash":"adc63cc676475f6cca04f327f02cd1b014c15b22","isMergeCommit":false,"messageTitle":"Add TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":1}}},{"hash":"a68a523f52e0705ba776bad66f5281d10454f691","isMergeCommit":false,"messageTitle":"Add More OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":318,"deletions":385}}},{"hash":"f1f624f82cfa9e953121ee07c348d0475f95cb51","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"43eb82207c5657928085e9f02ca32f95268aa84b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"5ed3fce90411d14e3d977ed36ecdb75ff272b95c","isMergeCommit":false,"messageTitle":"Setup gradle to automate build","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1}}},{"hash":"fca8ded1fb4644479eb6459b6e25dde55ab28622","isMergeCommit":false,"messageTitle":"\"Add checkstyle and JUnit test\"","messageBody":"","tags":["A-Junit"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":23,"deletions":2}}},{"hash":"54c14333c60873c61cdf2caca0749a2bc6ab0632","isMergeCommit":false,"messageTitle":"Add JAR","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a7c42d93431d50c23aa7d3d1881f556cf67a4674","isMergeCommit":false,"messageTitle":"Add JavaDoc header comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":330,"deletions":27}}},{"hash":"377f725b922cbe9d200e77c63248664b9f2a76fc","isMergeCommit":false,"messageTitle":"Follow Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":32}}},{"hash":"58c0bf1ac38ee7ef56a30f80b43a77be7c60b4ce","isMergeCommit":false,"messageTitle":"Add new Command FIND","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"74a2ec7b553b757feff19dd1fcacf675bfe2d4a1","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"ec16295bd480cb3d66c03c7d9e4e22740d386b7b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"614dc8eb52dda058696b1498c656285b845b832f","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"40ad67d3efaa923121e68792ff17c8a041a1ba39","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"c97a2ea0a521620bc791388ec046b2f6b6dbb116","isMergeCommit":false,"messageTitle":"Update javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}},{"hash":"9afa31febfb6e02fecfc642cdaec342a61e4ec38","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"0de8de30c2076b0ea76e3a2222c999b43e7846b6","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":36,"deletions":24}}},{"hash":"35582cee586e16c3cca0cce791e2104bb2c29e2f","isMergeCommit":false,"messageTitle":"Set up JavaFX using Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"86ff97c8ff36ada4436dcc831ef6a013851fa15a","isMergeCommit":false,"messageTitle":"Set up GUI using JavaFX","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":2}}},{"hash":"daa9f43cf2efd6254ce8b2d880a5416351403e17","isMergeCommit":false,"messageTitle":"Add Echo functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"1117908a550c62ff593e043f0718f77a2b19f902","isMergeCommit":false,"messageTitle":"Add Dialog Boxes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":4}}},{"hash":"4259239c3f8fd66c72a0972ddd0280fdc2d4588a","isMergeCommit":false,"messageTitle":"Add custom behavior to DialogBox","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":4}}},{"hash":"e186c273904b1473e4889f91265abaad4d28326f","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":39,"deletions":0},"java":{"insertions":129,"deletions":150}}},{"hash":"71152d3604856d3eba9ffe6508830642bd15f2ed","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"2eff3ba7b4bed203da9f76ed3f51587349c6ff36","isMergeCommit":false,"messageTitle":"Add Varargs for add in Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"ad179e123f15f6d78d31d050990b96da099c2421","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Varargs\u0027","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"779b0e7760bcda9dba67547260fdcfa2166ba65c","isMergeCommit":false,"messageTitle":"Refactor UI and Messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":21}}}]},{"date":"2023-09-15","commitResults":[{"hash":"a0b41a570f3be498fc575547ef97c3af68f6ae90","isMergeCommit":false,"messageTitle":"Refactor GUI Code","messageBody":"The getResponse() function is only a basic echo function.\n\nA working GUI should have the same functionality as the text UI.\n\nLet\u0027s,\n* update the getResponse() function\n* ensure code quality in the updated functions\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":251,"deletions":273}}},{"hash":"f5ac4d0262c4b3e24aea7fe4a6d27dbe3e7bd251","isMergeCommit":true,"messageTitle":"Merge pull request #1 from tim-pipi/branch-Level-10","messageBody":"Branch level 10","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tim-pipi":{"java":1324,"md":30,"fxml":39,"sh":1,"bat":1,"gradle":22,"txt":24}},"authorContributionVariance":{"tim-pipi":76234.6},"authorDisplayNameMap":{"tim-pipi":"CS2103T-W17-2 TIMO..ETIO"}} +{"authorDailyContributionsMap":{"tim-pipi":[{"date":"2023-08-23","commitResults":[{"hash":"bd623f72734dbeab338b6f045abea9612d19667c","isMergeCommit":false,"messageTitle":"Renamed Duke to Anya Forger and added Greeting and Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"91d4bf3b25770be8bf6f8a49ee870eec3ba55bdf","isMergeCommit":false,"messageTitle":"Add Echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"649931b1b70f776df74f27bd02ada9a87c179fbd","isMergeCommit":false,"messageTitle":"Add list command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":5}}},{"hash":"3d9b3ba34a59cd2bca472142b777668c31e381dd","isMergeCommit":false,"messageTitle":"Add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"606f617b28d3156480e0a4fb2bed345d1989dc41","isMergeCommit":false,"messageTitle":"Add Mark as Done function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":10}}},{"hash":"be3739a5846e19145fbdd3e0e71e1185f0db10fd","isMergeCommit":false,"messageTitle":"Add three new types of Task: Todo, Deadline, Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":0}}},{"hash":"d4181aa8ded208a15fdb472db673ee9e3a873286","isMergeCommit":false,"messageTitle":"Support multiple types of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":1}}},{"hash":"91740bf1c6fdab6a6396d92b8608221805afb09d","isMergeCommit":false,"messageTitle":"Add Automated Text UI Testing files","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0}}},{"hash":"b2430fd9a47203370870a2ef44424bc7e1f4ec3f","isMergeCommit":false,"messageTitle":"Refactor name: Duke to Anya","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":8},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fd944fbcb5e1e8a208f3cf63b76a8071d2b96b53","isMergeCommit":false,"messageTitle":"Add Error Handling and Refactor Code: Encapsulate common patterns in functions","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":146}}},{"hash":"159117b0039631c5b2e76c2c9373e9f75f008d6b","isMergeCommit":false,"messageTitle":"Add Delete Function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":7}}},{"hash":"498f8f0adc1fb69b01330691230e448b2493c834","isMergeCommit":false,"messageTitle":"Add Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":10}}}]},{"date":"2023-09-01","commitResults":[{"hash":"3e1f2e20084a8c9284377dc965b2ab01b5116052","isMergeCommit":false,"messageTitle":"Add Save Functionality","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":152,"deletions":19}}},{"hash":"0c2d815842d6af17345c4c02ca22a9429d4b8984","isMergeCommit":true,"messageTitle":"Merge from branch-level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"fd17749ee81c4973bb578e8bd5978c90c9eafff5","isMergeCommit":false,"messageTitle":"Change date and time to use LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":39,"deletions":17}}},{"hash":"76d5e326cdd5397d1fe625930f7b657982b501e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"bc706e22c7d9a340ab978e0a85966aa4ea545379","isMergeCommit":false,"messageTitle":"Add MoreOOP files and directories","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":0}}},{"hash":"cd8b8d40019a5e50867f06ee375378b182dd0f4c","isMergeCommit":false,"messageTitle":"Add Storage class methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":1}}},{"hash":"40ba50ad03265aac9568cec3c3521667b0414245","isMergeCommit":false,"messageTitle":"Refactor Storage.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":62}}},{"hash":"adc63cc676475f6cca04f327f02cd1b014c15b22","isMergeCommit":false,"messageTitle":"Add TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":1}}},{"hash":"a68a523f52e0705ba776bad66f5281d10454f691","isMergeCommit":false,"messageTitle":"Add More OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":318,"deletions":385}}},{"hash":"f1f624f82cfa9e953121ee07c348d0475f95cb51","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"43eb82207c5657928085e9f02ca32f95268aa84b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"5ed3fce90411d14e3d977ed36ecdb75ff272b95c","isMergeCommit":false,"messageTitle":"Setup gradle to automate build","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":1,"deletions":1}}},{"hash":"fca8ded1fb4644479eb6459b6e25dde55ab28622","isMergeCommit":false,"messageTitle":"\"Add checkstyle and JUnit test\"","messageBody":"","tags":["A-Junit"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":23,"deletions":2}}},{"hash":"54c14333c60873c61cdf2caca0749a2bc6ab0632","isMergeCommit":false,"messageTitle":"Add JAR","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a7c42d93431d50c23aa7d3d1881f556cf67a4674","isMergeCommit":false,"messageTitle":"Add JavaDoc header comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":330,"deletions":27}}},{"hash":"377f725b922cbe9d200e77c63248664b9f2a76fc","isMergeCommit":false,"messageTitle":"Follow Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":32}}},{"hash":"58c0bf1ac38ee7ef56a30f80b43a77be7c60b4ce","isMergeCommit":false,"messageTitle":"Add new Command FIND","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"74a2ec7b553b757feff19dd1fcacf675bfe2d4a1","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"ec16295bd480cb3d66c03c7d9e4e22740d386b7b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"614dc8eb52dda058696b1498c656285b845b832f","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"40ad67d3efaa923121e68792ff17c8a041a1ba39","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"c97a2ea0a521620bc791388ec046b2f6b6dbb116","isMergeCommit":false,"messageTitle":"Update javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}},{"hash":"9afa31febfb6e02fecfc642cdaec342a61e4ec38","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"0de8de30c2076b0ea76e3a2222c999b43e7846b6","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":36,"deletions":24}}},{"hash":"35582cee586e16c3cca0cce791e2104bb2c29e2f","isMergeCommit":false,"messageTitle":"Set up JavaFX using Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0}}},{"hash":"86ff97c8ff36ada4436dcc831ef6a013851fa15a","isMergeCommit":false,"messageTitle":"Set up GUI using JavaFX","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":2}}},{"hash":"daa9f43cf2efd6254ce8b2d880a5416351403e17","isMergeCommit":false,"messageTitle":"Add Echo functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":0}}},{"hash":"1117908a550c62ff593e043f0718f77a2b19f902","isMergeCommit":false,"messageTitle":"Add Dialog Boxes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":4}}},{"hash":"4259239c3f8fd66c72a0972ddd0280fdc2d4588a","isMergeCommit":false,"messageTitle":"Add custom behavior to DialogBox","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":4}}},{"hash":"e186c273904b1473e4889f91265abaad4d28326f","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":39,"deletions":0},"java":{"insertions":129,"deletions":150}}},{"hash":"71152d3604856d3eba9ffe6508830642bd15f2ed","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}},{"hash":"2eff3ba7b4bed203da9f76ed3f51587349c6ff36","isMergeCommit":false,"messageTitle":"Add Varargs for add in Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"ad179e123f15f6d78d31d050990b96da099c2421","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Varargs\u0027","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"779b0e7760bcda9dba67547260fdcfa2166ba65c","isMergeCommit":false,"messageTitle":"Refactor UI and Messages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":21}}}]},{"date":"2023-09-15","commitResults":[{"hash":"a0b41a570f3be498fc575547ef97c3af68f6ae90","isMergeCommit":false,"messageTitle":"Refactor GUI Code","messageBody":"The getResponse() function is only a basic echo function.\n\nA working GUI should have the same functionality as the text UI.\n\nLet\u0027s,\n* update the getResponse() function\n* ensure code quality in the updated functions\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":251,"deletions":273}}},{"hash":"f5ac4d0262c4b3e24aea7fe4a6d27dbe3e7bd251","isMergeCommit":true,"messageTitle":"Merge pull request #1 from tim-pipi/branch-Level-10","messageBody":"Branch level 10","fileTypesAndContributionMap":{}}]},{"date":"2023-09-16","commitResults":[{"hash":"031fe3867c294f9e73c45cab48e107cb749abac5","isMergeCommit":false,"messageTitle":"Update build.gradle to fix JavaFX issue","messageBody":"The main class should be Launcher\n\nRunning other classes will give a runtime error\n\nLet\u0027s update the main class in build.gradle\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":2},"txt":{"insertions":0,"deletions":1},"java":{"insertions":4,"deletions":6}}},{"hash":"438064432e0032083ac082da4b7f3b0dcf674db7","isMergeCommit":false,"messageTitle":"Add assert in Parser.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"3a878ae578245dd2023196835d77922ddae81e13","isMergeCommit":false,"messageTitle":"Refactor for Code Quality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":12}}},{"hash":"bb4da698a80bc41d11d3ab6ee6332abf4433776c","isMergeCommit":true,"messageTitle":"Merge pull request #3 from tim-pipi/branch-A-Assertions","messageBody":"Branch a assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"c34dedb66284907035a83ab0610e9eb963fe988d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b4b5a38422074d4346054a045d1b18ed6a788b60","isMergeCommit":true,"messageTitle":"Merge pull request #4 from tim-pipi/branch-A-CodeQuality","messageBody":"Refactor for Code Quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tim-pipi":{"java":1324,"md":30,"fxml":39,"sh":1,"bat":1,"gradle":22,"txt":23}},"authorContributionVariance":{"tim-pipi":73980.64},"authorDisplayNameMap":{"tim-pipi":"CS2103T-W17-2 TIMO..ETIO"}} diff --git a/tjingsheng_ip_master/commits.json b/tjingsheng_ip_master/commits.json index e0dd39b0..b073a333 100644 --- a/tjingsheng_ip_master/commits.json +++ b/tjingsheng_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"tjingsheng":[{"date":"2023-08-24","commitResults":[{"hash":"1bae5ece5949af5ce7a6237ec85699895f0fb1cd","isMergeCommit":false,"messageTitle":"add-duke-level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}},{"hash":"367f7f7c8d955c1be4eb7bcf72107948ec727b07","isMergeCommit":false,"messageTitle":"add-duke-level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"a2c4dd9193e310cfeac13664b2117cb55a4ea704","isMergeCommit":false,"messageTitle":"add-duke-level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":10}}},{"hash":"528a9e7d22991f91559d04c95526fa46ee3f6a0f","isMergeCommit":false,"messageTitle":"add-duke-level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"ec387ca7ed008ed32bfa2c15afe4da0d5fbe883a","isMergeCommit":false,"messageTitle":"add-duke-level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":38}}}]},{"date":"2023-09-02","commitResults":[{"hash":"0a7157d39d16369448d94b8cd6284c3cc1e47d04","isMergeCommit":false,"messageTitle":"add-duke-level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":1}}},{"hash":"159dce2ff2573a6dc077a995d5c3a0b733af28e2","isMergeCommit":false,"messageTitle":"add-a-textuitesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":3,"deletions":27}}},{"hash":"8a21be3b527a3eee279127a570e39c5845ac5e98","isMergeCommit":false,"messageTitle":"add-duke-level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"5591af63669488d01ecc8e8282175298d0843d73","isMergeCommit":false,"messageTitle":"add-a-enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":18}}}]},{"date":"2023-09-03","commitResults":[{"hash":"22d8c9f80e84181c8b6286ef0dbe1c91f2d7fb9f","isMergeCommit":false,"messageTitle":"change-readme","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":16,"deletions":20}}},{"hash":"ad2007087ad363de8c60806c9d10145c0294f91b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from tjingsheng/add-intro","messageBody":"change-readme","fileTypesAndContributionMap":{}},{"hash":"6eaed36b8904b106de2be8a785a1269b7f97a49d","isMergeCommit":false,"messageTitle":"add-duke-level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":37}}},{"hash":"1dca12409e57e8bc51b4217277a3cd0f94fc8fc5","isMergeCommit":true,"messageTitle":"Merge pull request #2 from tjingsheng/branch-Level-7","messageBody":"add-duke-level-7","fileTypesAndContributionMap":{}},{"hash":"b5bbeb34e1a924c650ecf4df11a65369c4321be0","isMergeCommit":false,"messageTitle":"add-duke-level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":25}}},{"hash":"4afef36334788662c893c514b7fad63386dfad24","isMergeCommit":true,"messageTitle":"Merge pull request #3 from tjingsheng/branch-level-8","messageBody":"add-duke-level-8","fileTypesAndContributionMap":{}},{"hash":"96398803cbf00a1de0147e1fd018eddaa6eae0e3","isMergeCommit":false,"messageTitle":"add-a-moreoop","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":502,"deletions":125}}},{"hash":"ccc67b161854cf80f051493dffdb55d6dcabffdd","isMergeCommit":true,"messageTitle":"Merge pull request #4 from tjingsheng/a-more-oop","messageBody":"add-a-moreoop","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"c73781b68aff200f6a488ebde9c622830bf6a1bc","isMergeCommit":false,"messageTitle":"add-a-gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":43,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"486f643baa191e513b2abb53de0da57b78ed89c1","isMergeCommit":true,"messageTitle":"Merge pull request #5 from tjingsheng/add-a-gradle","messageBody":"add-a-gradle","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"776fc02590a1a008614d2aa52baf4458600cedd3","isMergeCommit":false,"messageTitle":"add-a-junit","messageBody":"","tags":["A-Junit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":1104,"deletions":267},"bat":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"426c9aad74cf8c41f11a4eac3c3de4b539c084b3","isMergeCommit":false,"messageTitle":"add-a-jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":43,"deletions":0},"java":{"insertions":1127,"deletions":292},"bat":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"b92c5bab2b56d6ca8b4747b3c81eb76583726ad8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-a-jar","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"06432f2965ab59ed8ada0e2a1adc42a1c84e4e46","isMergeCommit":true,"messageTitle":"Merge pull request #11 from tjingsheng/add-a-jar","messageBody":"add-a-jar","tags":["A-jar"],"fileTypesAndContributionMap":{}},{"hash":"1cb99a43b96c70a3f076d2d0623d48f085090ce5","isMergeCommit":false,"messageTitle":"add-a-javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":636,"deletions":31}}},{"hash":"443b1aa309fbe5011953843bcf7b89a702b2d100","isMergeCommit":false,"messageTitle":"add-a-codingstandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":139}}},{"hash":"c9d440736529e526b80de117d0ddb9ad1e1ac44d","isMergeCommit":false,"messageTitle":"add-duke-level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":195,"deletions":1}}},{"hash":"058da47c430e30c6f763dda47338e10daafb5e19","isMergeCommit":true,"messageTitle":"Merge pull request #12 from tjingsheng/branch-A-JavaDoc","messageBody":"add-a-javadoc","fileTypesAndContributionMap":{}},{"hash":"224fb84e2950f221e008bbf0df54ddc7986fc46a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e1110ecfb57004775104e63960dd4167401ab059","isMergeCommit":true,"messageTitle":"Merge pull request #13 from tjingsheng/branch-A-CodingStandard","messageBody":"add-a-codingstandard","fileTypesAndContributionMap":{}},{"hash":"3c3eda59d3ded4dc837a5946a4f3834d79cdf860","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"beebfa4311cc78b82be7dc298d24530e59984eb1","isMergeCommit":true,"messageTitle":"Merge pull request #14 from tjingsheng/branch-Level-9","messageBody":"add-duke-level-9","fileTypesAndContributionMap":{}},{"hash":"e0ab0cc021a78e05183bdd6260d20845ef33bf0a","isMergeCommit":false,"messageTitle":"use-gfmd-in-README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":60,"deletions":8}}}]},{"date":"2023-09-10","commitResults":[{"hash":"f0ce93c74f60562f52592c0c4f254d42b4824c12","isMergeCommit":false,"messageTitle":"add-duke-a-checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":311,"deletions":214}}},{"hash":"100a51d856e1f6cc4bf1bd53a8be3949154c4242","isMergeCommit":true,"messageTitle":"Merge pull request #15 from tjingsheng/add-a-checkstyle","messageBody":"add-duke-a-checkstyle","fileTypesAndContributionMap":{}},{"hash":"9909308372ff719362a50ec4b7564f4396034407","isMergeCommit":true,"messageTitle":"Merge pull request #15 from tjingsheng/add-a-checkstyle","messageBody":"add-duke-a-checkstyle\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"eeb0d260976f2b8f4fc304d804f7267b52a293c5","isMergeCommit":true,"messageTitle":"add-duke-level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1e3305735070e24cde10c28740c8cacb924a9cc4","isMergeCommit":true,"messageTitle":"Merge pull request #16 from tjingsheng/branch-Level-10","messageBody":"add-duke-level-10","fileTypesAndContributionMap":{}},{"hash":"6d32bdc73c3527b8f613af29c9d0a86e5f7729af","isMergeCommit":false,"messageTitle":"add-missing-fonts","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":170,"deletions":0}}}]},{"date":"2023-09-15","commitResults":[{"hash":"65932159a55801964de38999533f9e5acea59269","isMergeCommit":true,"messageTitle":"add-duke-level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc48bb325f1d1da88b5091fb64287ecea819039f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e7b0cc73f9c20050d2bfcb7013231e9289ba9876","isMergeCommit":true,"messageTitle":"Merge pull request #17 from tjingsheng/branch-Level-10","messageBody":"add-duke-level-10","fileTypesAndContributionMap":{}},{"hash":"062b43beb6dee58d4b743cf256aaa8e641f5fbe4","isMergeCommit":false,"messageTitle":"fix merge error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":28}}}]},{"date":"2023-09-16","commitResults":[{"hash":"1aaa8a24a35973722d06af4592dd7a484e9e69fb","isMergeCommit":false,"messageTitle":"add-duke-level-10","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":8,"deletions":15},"java":{"insertions":99,"deletions":57}}},{"hash":"2e9da5949fd4fc10e4f83a3cd0ab5e45e896fcd0","isMergeCommit":true,"messageTitle":"Merge pull request #18 from tjingsheng/branch-Level-10","messageBody":"add-duke-level-10","fileTypesAndContributionMap":{}},{"hash":"77e3e77c44baba211d3d25497bb9490a88ddb00a","isMergeCommit":false,"messageTitle":"add-a-varargs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":13}}},{"hash":"ee5b0805fd534a306047c67eeb7d8c89681cddab","isMergeCommit":true,"messageTitle":"Merge pull request #19 from tjingsheng/add-a-varags","messageBody":"add-a-varargs","fileTypesAndContributionMap":{}},{"hash":"5e487f55f9d19ed93f47e26624b39634d5bcba0d","isMergeCommit":false,"messageTitle":"add-a-codequality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":530,"deletions":242}}},{"hash":"72e35b53c31e604d11a1862340cd6232abc73e1f","isMergeCommit":false,"messageTitle":"add-a-assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":46}}},{"hash":"8724df17c894f7883b6c4f6c605c0c8060f80d8b","isMergeCommit":true,"messageTitle":"Merge pull request #20 from tjingsheng/branch-A-CodeQuality","messageBody":"add-a-codequality","fileTypesAndContributionMap":{}},{"hash":"505107a2a637e6eeb1536acae871e01a33b2800c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b9e8d3fd74d9ab141fb98b98fd464de9feba8dea","isMergeCommit":true,"messageTitle":"Merge pull request #21 from tjingsheng/branch-A-Assertions","messageBody":"add-a-assertions","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tjingsheng":{"java":3451,"md":70,"fxml":46,"sh":0,"bat":1,"gradle":54,"txt":179}},"authorContributionVariance":{"tjingsheng":567062.8},"authorDisplayNameMap":{"tjingsheng":"CS2103T-W10-2 TAN ..HENG"}} +{"authorDailyContributionsMap":{"tjingsheng":[{"date":"2023-08-24","commitResults":[{"hash":"1bae5ece5949af5ce7a6237ec85699895f0fb1cd","isMergeCommit":false,"messageTitle":"add-duke-level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}},{"hash":"367f7f7c8d955c1be4eb7bcf72107948ec727b07","isMergeCommit":false,"messageTitle":"add-duke-level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"a2c4dd9193e310cfeac13664b2117cb55a4ea704","isMergeCommit":false,"messageTitle":"add-duke-level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":10}}},{"hash":"528a9e7d22991f91559d04c95526fa46ee3f6a0f","isMergeCommit":false,"messageTitle":"add-duke-level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"ec387ca7ed008ed32bfa2c15afe4da0d5fbe883a","isMergeCommit":false,"messageTitle":"add-duke-level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":38}}}]},{"date":"2023-09-02","commitResults":[{"hash":"0a7157d39d16369448d94b8cd6284c3cc1e47d04","isMergeCommit":false,"messageTitle":"add-duke-level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":1}}},{"hash":"159dce2ff2573a6dc077a995d5c3a0b733af28e2","isMergeCommit":false,"messageTitle":"add-a-textuitesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":3,"deletions":27}}},{"hash":"8a21be3b527a3eee279127a570e39c5845ac5e98","isMergeCommit":false,"messageTitle":"add-duke-level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"5591af63669488d01ecc8e8282175298d0843d73","isMergeCommit":false,"messageTitle":"add-a-enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":18}}}]},{"date":"2023-09-03","commitResults":[{"hash":"22d8c9f80e84181c8b6286ef0dbe1c91f2d7fb9f","isMergeCommit":false,"messageTitle":"change-readme","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":16,"deletions":20}}},{"hash":"ad2007087ad363de8c60806c9d10145c0294f91b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from tjingsheng/add-intro","messageBody":"change-readme","fileTypesAndContributionMap":{}},{"hash":"6eaed36b8904b106de2be8a785a1269b7f97a49d","isMergeCommit":false,"messageTitle":"add-duke-level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":37}}},{"hash":"1dca12409e57e8bc51b4217277a3cd0f94fc8fc5","isMergeCommit":true,"messageTitle":"Merge pull request #2 from tjingsheng/branch-Level-7","messageBody":"add-duke-level-7","fileTypesAndContributionMap":{}},{"hash":"b5bbeb34e1a924c650ecf4df11a65369c4321be0","isMergeCommit":false,"messageTitle":"add-duke-level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":25}}},{"hash":"4afef36334788662c893c514b7fad63386dfad24","isMergeCommit":true,"messageTitle":"Merge pull request #3 from tjingsheng/branch-level-8","messageBody":"add-duke-level-8","fileTypesAndContributionMap":{}},{"hash":"96398803cbf00a1de0147e1fd018eddaa6eae0e3","isMergeCommit":false,"messageTitle":"add-a-moreoop","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":502,"deletions":125}}},{"hash":"ccc67b161854cf80f051493dffdb55d6dcabffdd","isMergeCommit":true,"messageTitle":"Merge pull request #4 from tjingsheng/a-more-oop","messageBody":"add-a-moreoop","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"c73781b68aff200f6a488ebde9c622830bf6a1bc","isMergeCommit":false,"messageTitle":"add-a-gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":43,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"486f643baa191e513b2abb53de0da57b78ed89c1","isMergeCommit":true,"messageTitle":"Merge pull request #5 from tjingsheng/add-a-gradle","messageBody":"add-a-gradle","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"776fc02590a1a008614d2aa52baf4458600cedd3","isMergeCommit":false,"messageTitle":"add-a-junit","messageBody":"","tags":["A-Junit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":1104,"deletions":267},"bat":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"426c9aad74cf8c41f11a4eac3c3de4b539c084b3","isMergeCommit":false,"messageTitle":"add-a-jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":43,"deletions":0},"java":{"insertions":1127,"deletions":292},"bat":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}},{"hash":"b92c5bab2b56d6ca8b4747b3c81eb76583726ad8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-a-jar","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"06432f2965ab59ed8ada0e2a1adc42a1c84e4e46","isMergeCommit":true,"messageTitle":"Merge pull request #11 from tjingsheng/add-a-jar","messageBody":"add-a-jar","tags":["A-jar"],"fileTypesAndContributionMap":{}},{"hash":"1cb99a43b96c70a3f076d2d0623d48f085090ce5","isMergeCommit":false,"messageTitle":"add-a-javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":636,"deletions":31}}},{"hash":"443b1aa309fbe5011953843bcf7b89a702b2d100","isMergeCommit":false,"messageTitle":"add-a-codingstandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":139}}},{"hash":"c9d440736529e526b80de117d0ddb9ad1e1ac44d","isMergeCommit":false,"messageTitle":"add-duke-level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":195,"deletions":1}}},{"hash":"058da47c430e30c6f763dda47338e10daafb5e19","isMergeCommit":true,"messageTitle":"Merge pull request #12 from tjingsheng/branch-A-JavaDoc","messageBody":"add-a-javadoc","fileTypesAndContributionMap":{}},{"hash":"224fb84e2950f221e008bbf0df54ddc7986fc46a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e1110ecfb57004775104e63960dd4167401ab059","isMergeCommit":true,"messageTitle":"Merge pull request #13 from tjingsheng/branch-A-CodingStandard","messageBody":"add-a-codingstandard","fileTypesAndContributionMap":{}},{"hash":"3c3eda59d3ded4dc837a5946a4f3834d79cdf860","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"beebfa4311cc78b82be7dc298d24530e59984eb1","isMergeCommit":true,"messageTitle":"Merge pull request #14 from tjingsheng/branch-Level-9","messageBody":"add-duke-level-9","fileTypesAndContributionMap":{}},{"hash":"e0ab0cc021a78e05183bdd6260d20845ef33bf0a","isMergeCommit":false,"messageTitle":"use-gfmd-in-README","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":60,"deletions":8}}}]},{"date":"2023-09-10","commitResults":[{"hash":"f0ce93c74f60562f52592c0c4f254d42b4824c12","isMergeCommit":false,"messageTitle":"add-duke-a-checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":311,"deletions":214}}},{"hash":"100a51d856e1f6cc4bf1bd53a8be3949154c4242","isMergeCommit":true,"messageTitle":"Merge pull request #15 from tjingsheng/add-a-checkstyle","messageBody":"add-duke-a-checkstyle","fileTypesAndContributionMap":{}},{"hash":"9909308372ff719362a50ec4b7564f4396034407","isMergeCommit":true,"messageTitle":"Merge pull request #15 from tjingsheng/add-a-checkstyle","messageBody":"add-duke-a-checkstyle\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"eeb0d260976f2b8f4fc304d804f7267b52a293c5","isMergeCommit":true,"messageTitle":"add-duke-level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1e3305735070e24cde10c28740c8cacb924a9cc4","isMergeCommit":true,"messageTitle":"Merge pull request #16 from tjingsheng/branch-Level-10","messageBody":"add-duke-level-10","fileTypesAndContributionMap":{}},{"hash":"6d32bdc73c3527b8f613af29c9d0a86e5f7729af","isMergeCommit":false,"messageTitle":"add-missing-fonts","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":170,"deletions":0}}}]},{"date":"2023-09-15","commitResults":[{"hash":"65932159a55801964de38999533f9e5acea59269","isMergeCommit":true,"messageTitle":"add-duke-level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc48bb325f1d1da88b5091fb64287ecea819039f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e7b0cc73f9c20050d2bfcb7013231e9289ba9876","isMergeCommit":true,"messageTitle":"Merge pull request #17 from tjingsheng/branch-Level-10","messageBody":"add-duke-level-10","fileTypesAndContributionMap":{}},{"hash":"062b43beb6dee58d4b743cf256aaa8e641f5fbe4","isMergeCommit":false,"messageTitle":"fix merge error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":28}}}]},{"date":"2023-09-16","commitResults":[{"hash":"1aaa8a24a35973722d06af4592dd7a484e9e69fb","isMergeCommit":false,"messageTitle":"add-duke-level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":8,"deletions":15},"java":{"insertions":99,"deletions":57}}},{"hash":"2e9da5949fd4fc10e4f83a3cd0ab5e45e896fcd0","isMergeCommit":true,"messageTitle":"Merge pull request #18 from tjingsheng/branch-Level-10","messageBody":"add-duke-level-10","fileTypesAndContributionMap":{}},{"hash":"77e3e77c44baba211d3d25497bb9490a88ddb00a","isMergeCommit":false,"messageTitle":"add-a-varargs","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":13}}},{"hash":"ee5b0805fd534a306047c67eeb7d8c89681cddab","isMergeCommit":true,"messageTitle":"Merge pull request #19 from tjingsheng/add-a-varags","messageBody":"add-a-varargs","fileTypesAndContributionMap":{}},{"hash":"5e487f55f9d19ed93f47e26624b39634d5bcba0d","isMergeCommit":false,"messageTitle":"add-a-codequality","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":530,"deletions":242}}},{"hash":"72e35b53c31e604d11a1862340cd6232abc73e1f","isMergeCommit":false,"messageTitle":"add-a-assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":46}}},{"hash":"8724df17c894f7883b6c4f6c605c0c8060f80d8b","isMergeCommit":true,"messageTitle":"Merge pull request #20 from tjingsheng/branch-A-CodeQuality","messageBody":"add-a-codequality","fileTypesAndContributionMap":{}},{"hash":"505107a2a637e6eeb1536acae871e01a33b2800c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b9e8d3fd74d9ab141fb98b98fd464de9feba8dea","isMergeCommit":true,"messageTitle":"Merge pull request #21 from tjingsheng/branch-A-Assertions","messageBody":"add-a-assertions","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tjingsheng":{"java":3451,"md":70,"fxml":46,"sh":0,"bat":1,"gradle":54,"txt":179}},"authorContributionVariance":{"tjingsheng":567062.8},"authorDisplayNameMap":{"tjingsheng":"CS2103T-W10-2 TAN ..HENG"}} diff --git a/tohpinren_ip_master/commits.json b/tohpinren_ip_master/commits.json index 645b4684..61a69726 100644 --- a/tohpinren_ip_master/commits.json +++ b/tohpinren_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"tohpinren":[{"date":"2023-08-21","commitResults":[{"hash":"83e48d052431a23724df55337fce38875cd1dbb6","isMergeCommit":false,"messageTitle":"Level-0: Abstract printing, rename Duke to Anto","messageBody":"","tags":["Level-1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"2c9371dd9f1b27e671094591859f69abc2e3eee9","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":5}}},{"hash":"d1c6848e23637cd72a45b6a747ef531f26ee7f3e","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":3}}},{"hash":"2515201f1af0fd02ed0d62fae9c3945a1b88b726","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":10}}},{"hash":"0b18647a72eb803cd30b7a55873b945871aaed11","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":17}}},{"hash":"f7411295904bd2af0e8916fcbeab819cae02a5f2","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"24cc2b883992fc6e17580aa17a3cdbdcd044f6fb","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":39}}},{"hash":"0b8aaaeac0163bdc43d147049252aaede0010d38","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":20}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2bac34b36775bad9c55a7d424aeb1d45e9d8c002","isMergeCommit":false,"messageTitle":"Fix Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":32}}}]},{"date":"2023-08-29","commitResults":[{"hash":"9f40be6eccdcb4586517ba38d5b746dd600c7788","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":198,"deletions":4}}},{"hash":"c66ccf6edd24a84d73023e8d0421d42c395af35a","isMergeCommit":true,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1168e6fce3e5723f6a498a478881fdb9b109a9d8","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":3},"java":{"insertions":48,"deletions":15}}},{"hash":"3e82b2602b03e3b63015a03a1ee39bb2102a5d60","isMergeCommit":true,"messageTitle":"Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"96b8ac6c6dcbce4ea9d6b76a321c5758a67fd47e","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":337,"deletions":288}}},{"hash":"13169e7375e210648a6ed989ca5a9467a317e542","isMergeCommit":true,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"e5f383534ad87040a509113096f4862e1286c6c8","isMergeCommit":false,"messageTitle":"A-Packages: Move classes into anto package","messageBody":"Classes are not organised into packages currently.\n\nPackages can help make the codebase more organised as it grows.\n\nCreated anto package and move classes into it.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":28,"deletions":2}}},{"hash":"6033ee85ae0640fa8328f404fd0091abe9f91a1f","isMergeCommit":true,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"88e40511a6a659ea0dc99056ae6aea93a4f857fa","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1641cadbc6dcf3a78e46cd799ed44bc2ed059f26","isMergeCommit":false,"messageTitle":"A-Gradle: Add gradle","messageBody":"Project does not currently use gradle\n\nGradle can be used to automate build tasks\n\nAdd gradle to project\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"txt":{"insertions":3,"deletions":1},"java":{"insertions":47,"deletions":45}}}]},{"date":"2023-08-31","commitResults":[{"hash":"4936263ad3630c2955c2660ee8a7393ee759e97a","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"Project does not have JUnit tests.\n\nWe should use JUnit to automate tests.\n\nAdd JUnit tests to project\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":93,"deletions":0}}},{"hash":"27cd478abe4bef622adbc691dc73019581b52b6e","isMergeCommit":true,"messageTitle":"A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"b3e4522d338f46d8f42ed3e9e3c77bf0a70bd490","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"The project did not have javadocs.\n\nJavadocs can make the code written more clear and improves\ncollaboration.\n\nAdd javadocs to project.\n","fileTypesAndContributionMap":{"java":{"insertions":304,"deletions":30}}},{"hash":"15bcbf9926a1e768e4d9ea211147e446cec53c35","isMergeCommit":true,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2d3d50a75f13d51f5ebfeffdc61f1c4af6f67ba0","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"Project did not follow coding standards 100%.\n\nCoding Standards can make the code more readable.\n\nRefactor code using coding standards.\n","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":13}}},{"hash":"979cb515330de89f18ece1d2b98acec82f805a4e","isMergeCommit":true,"messageTitle":"A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"f4fa83a9843ce8376bd0ae33a068ddf546869ddd","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"There was no way to find specific task in the chatbot.\n\nA find function would be helpful for users to look for specific tasks in\ntheir list.\n\nAdd a find function to filter for keyword and print list to user.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":65,"deletions":0}}},{"hash":"0d247235f5cd95dd8f5c976c0bdd7ba77eba3457","isMergeCommit":true,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"e534e79de4ee1d407126467b532bd8345d8f24c9","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"Styling can be improved.\n\nStyling can improve readability of code.\n\nImprove styling using checkstyle and PR comments.\n","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":18},"java":{"insertions":187,"deletions":126}}},{"hash":"df557f260cb04020781ffdac3606d0cf63ec47c0","isMergeCommit":true,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"0bdfd56dff8292f3a97c828eb2b24baf08a3f07e","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"Chatbot ran on CLI, did not have a GUI.\n\nGUI can make user experience better.\n\nAdd a GUI for Chatbot using JavaFX.\n","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"txt":{"insertions":4,"deletions":2},"fxml":{"insertions":39,"deletions":0},"java":{"insertions":376,"deletions":200}}},{"hash":"0bcde63fae036b7db99bd4c28063ad5766d7db24","isMergeCommit":true,"messageTitle":"Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f9f99d27da809deb687b2f4b4682563c8fe0dd4a","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"Project did not have a GUI.\n\nGUI can improve user experience.\n\nAdd a GUI using JavaFX.\n","fileTypesAndContributionMap":{"java":{"insertions":141,"deletions":73}}},{"hash":"753e2eff276ec397042fc3e092654b182443d8f3","isMergeCommit":true,"messageTitle":"Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"8b0737c710e02026bd6af9276300dff55657bae5","isMergeCommit":false,"messageTitle":"Add assertions to the project","messageBody":"Assertions are not used for the Anto Chatbot.\n\nAssertions can help us ensure that the important assumptions at various\npoints of the code are held true.\n\nLet\u0027s add assert statements into various parts of the code to check that\nour assumptions are true.\n\nWe need to ensure our assumptions about the code is true at various\npoints and we can use assert statements to do so.\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":2},"java":{"insertions":65,"deletions":7}}},{"hash":"95088d31ad5330a85087629f8e60364543afa136","isMergeCommit":false,"messageTitle":"Refactor to improve code quality","messageBody":"Code quality is not up to standard.\n\nLet\u0027s use what I learnt from the Code Quality topics to refactor my code\nto improve the overall code quality.\n\nHaving better code quality improves readability and allows for better\nmaintenance and improvements in the future.\n","fileTypesAndContributionMap":{"java":{"insertions":212,"deletions":144}}},{"hash":"fafdd6d214c992d854214d6ecd51ee8abef28fad","isMergeCommit":true,"messageTitle":"Merge pull request #1 from tohpinren/branch-A-Assertions","messageBody":"Add assertions to the project","fileTypesAndContributionMap":{}},{"hash":"1960b2083277493ac79892c55b7fb296f89eb4bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f1785b74924ac7069a3f4ee4e91ae1ef5596028f","isMergeCommit":true,"messageTitle":"Merge pull request #2 from tohpinren/branch-A-CodeQuality","messageBody":"Refactor to improve code quality","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"e2b3b0d3464baa5ccf45c7137fde2319ec4164fc","isMergeCommit":false,"messageTitle":"Add feature to view schedules on given date.","messageBody":"Users cannot look up the events happening on a given date.\n\nWith view schedule function, users can easily look up the events\nhappening on a date.\n\nLet\u0027s add the view schedule funciton to the Anto Chatbot.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":165,"deletions":12}}},{"hash":"ddd854aceaabcebbe1a7d935d74272a3cd9e6c7f","isMergeCommit":true,"messageTitle":"Merge pull request #4 from tohpinren/branch-B-ViewSchedules","messageBody":"Add feature to view schedules on given date.","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tohpinren":{"java":1657,"md":0,"fxml":39,"sh":1,"bat":1,"gradle":18,"txt":28}},"authorContributionVariance":{"tohpinren":78874.18},"authorDisplayNameMap":{"tohpinren":"CS2103T-W09-3 TOH .. REN"}} +{"authorDailyContributionsMap":{"tohpinren":[{"date":"2023-08-21","commitResults":[{"hash":"83e48d052431a23724df55337fce38875cd1dbb6","isMergeCommit":false,"messageTitle":"Level-0: Abstract printing, rename Duke to Anto","messageBody":"","tags":["Level-1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-23","commitResults":[{"hash":"2c9371dd9f1b27e671094591859f69abc2e3eee9","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":5}}},{"hash":"d1c6848e23637cd72a45b6a747ef531f26ee7f3e","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":3}}},{"hash":"2515201f1af0fd02ed0d62fae9c3945a1b88b726","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":10}}},{"hash":"0b18647a72eb803cd30b7a55873b945871aaed11","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":17}}},{"hash":"f7411295904bd2af0e8916fcbeab819cae02a5f2","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"24cc2b883992fc6e17580aa17a3cdbdcd044f6fb","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":39}}},{"hash":"0b8aaaeac0163bdc43d147049252aaede0010d38","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":20}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2bac34b36775bad9c55a7d424aeb1d45e9d8c002","isMergeCommit":false,"messageTitle":"Fix Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":32}}}]},{"date":"2023-08-29","commitResults":[{"hash":"9f40be6eccdcb4586517ba38d5b746dd600c7788","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":198,"deletions":4}}},{"hash":"c66ccf6edd24a84d73023e8d0421d42c395af35a","isMergeCommit":true,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1168e6fce3e5723f6a498a478881fdb9b109a9d8","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":3},"java":{"insertions":48,"deletions":15}}},{"hash":"3e82b2602b03e3b63015a03a1ee39bb2102a5d60","isMergeCommit":true,"messageTitle":"Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"96b8ac6c6dcbce4ea9d6b76a321c5758a67fd47e","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":337,"deletions":288}}},{"hash":"13169e7375e210648a6ed989ca5a9467a317e542","isMergeCommit":true,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"e5f383534ad87040a509113096f4862e1286c6c8","isMergeCommit":false,"messageTitle":"A-Packages: Move classes into anto package","messageBody":"Classes are not organised into packages currently.\n\nPackages can help make the codebase more organised as it grows.\n\nCreated anto package and move classes into it.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":28,"deletions":2}}},{"hash":"6033ee85ae0640fa8328f404fd0091abe9f91a1f","isMergeCommit":true,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"88e40511a6a659ea0dc99056ae6aea93a4f857fa","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1641cadbc6dcf3a78e46cd799ed44bc2ed059f26","isMergeCommit":false,"messageTitle":"A-Gradle: Add gradle","messageBody":"Project does not currently use gradle\n\nGradle can be used to automate build tasks\n\nAdd gradle to project\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"txt":{"insertions":3,"deletions":1},"java":{"insertions":47,"deletions":45}}}]},{"date":"2023-08-31","commitResults":[{"hash":"4936263ad3630c2955c2660ee8a7393ee759e97a","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"Project does not have JUnit tests.\n\nWe should use JUnit to automate tests.\n\nAdd JUnit tests to project\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":93,"deletions":0}}},{"hash":"27cd478abe4bef622adbc691dc73019581b52b6e","isMergeCommit":true,"messageTitle":"A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"b3e4522d338f46d8f42ed3e9e3c77bf0a70bd490","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"The project did not have javadocs.\n\nJavadocs can make the code written more clear and improves\ncollaboration.\n\nAdd javadocs to project.\n","fileTypesAndContributionMap":{"java":{"insertions":304,"deletions":30}}},{"hash":"15bcbf9926a1e768e4d9ea211147e446cec53c35","isMergeCommit":true,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2d3d50a75f13d51f5ebfeffdc61f1c4af6f67ba0","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"Project did not follow coding standards 100%.\n\nCoding Standards can make the code more readable.\n\nRefactor code using coding standards.\n","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":13}}},{"hash":"979cb515330de89f18ece1d2b98acec82f805a4e","isMergeCommit":true,"messageTitle":"A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"f4fa83a9843ce8376bd0ae33a068ddf546869ddd","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"There was no way to find specific task in the chatbot.\n\nA find function would be helpful for users to look for specific tasks in\ntheir list.\n\nAdd a find function to filter for keyword and print list to user.\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":65,"deletions":0}}},{"hash":"0d247235f5cd95dd8f5c976c0bdd7ba77eba3457","isMergeCommit":true,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"e534e79de4ee1d407126467b532bd8345d8f24c9","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"Styling can be improved.\n\nStyling can improve readability of code.\n\nImprove styling using checkstyle and PR comments.\n","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":18},"java":{"insertions":187,"deletions":126}}},{"hash":"df557f260cb04020781ffdac3606d0cf63ec47c0","isMergeCommit":true,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"0bdfd56dff8292f3a97c828eb2b24baf08a3f07e","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"Chatbot ran on CLI, did not have a GUI.\n\nGUI can make user experience better.\n\nAdd a GUI for Chatbot using JavaFX.\n","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"txt":{"insertions":4,"deletions":2},"fxml":{"insertions":39,"deletions":0},"java":{"insertions":376,"deletions":200}}},{"hash":"0bcde63fae036b7db99bd4c28063ad5766d7db24","isMergeCommit":true,"messageTitle":"Level-10","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f9f99d27da809deb687b2f4b4682563c8fe0dd4a","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"Project did not have a GUI.\n\nGUI can improve user experience.\n\nAdd a GUI using JavaFX.\n","fileTypesAndContributionMap":{"java":{"insertions":141,"deletions":73}}},{"hash":"753e2eff276ec397042fc3e092654b182443d8f3","isMergeCommit":true,"messageTitle":"Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"8b0737c710e02026bd6af9276300dff55657bae5","isMergeCommit":false,"messageTitle":"Add assertions to the project","messageBody":"Assertions are not used for the Anto Chatbot.\n\nAssertions can help us ensure that the important assumptions at various\npoints of the code are held true.\n\nLet\u0027s add assert statements into various parts of the code to check that\nour assumptions are true.\n\nWe need to ensure our assumptions about the code is true at various\npoints and we can use assert statements to do so.\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":2},"java":{"insertions":65,"deletions":7}}},{"hash":"95088d31ad5330a85087629f8e60364543afa136","isMergeCommit":false,"messageTitle":"Refactor to improve code quality","messageBody":"Code quality is not up to standard.\n\nLet\u0027s use what I learnt from the Code Quality topics to refactor my code\nto improve the overall code quality.\n\nHaving better code quality improves readability and allows for better\nmaintenance and improvements in the future.\n","fileTypesAndContributionMap":{"java":{"insertions":212,"deletions":144}}},{"hash":"fafdd6d214c992d854214d6ecd51ee8abef28fad","isMergeCommit":true,"messageTitle":"Merge pull request #1 from tohpinren/branch-A-Assertions","messageBody":"Add assertions to the project","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"1960b2083277493ac79892c55b7fb296f89eb4bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f1785b74924ac7069a3f4ee4e91ae1ef5596028f","isMergeCommit":true,"messageTitle":"Merge pull request #2 from tohpinren/branch-A-CodeQuality","messageBody":"Refactor to improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"e2b3b0d3464baa5ccf45c7137fde2319ec4164fc","isMergeCommit":false,"messageTitle":"Add feature to view schedules on given date.","messageBody":"Users cannot look up the events happening on a given date.\n\nWith view schedule function, users can easily look up the events\nhappening on a date.\n\nLet\u0027s add the view schedule funciton to the Anto Chatbot.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":165,"deletions":12}}},{"hash":"ddd854aceaabcebbe1a7d935d74272a3cd9e6c7f","isMergeCommit":true,"messageTitle":"Merge pull request #4 from tohpinren/branch-B-ViewSchedules","messageBody":"Add feature to view schedules on given date.","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"tohpinren":{"java":1657,"md":0,"fxml":39,"sh":1,"bat":1,"gradle":18,"txt":28}},"authorContributionVariance":{"tohpinren":78874.18},"authorDisplayNameMap":{"tohpinren":"CS2103T-W09-3 TOH .. REN"}} diff --git a/victorpengmx_ip_master/commits.json b/victorpengmx_ip_master/commits.json index a0a3a930..5d6b797d 100644 --- a/victorpengmx_ip_master/commits.json +++ b/victorpengmx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"victorpengmx":[{"date":"2023-08-22","commitResults":[{"hash":"4615e1781470a1d5e403c686a157b19a8db3ad92","isMergeCommit":false,"messageTitle":"complete Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5ed4defb0a2f1b8cc3c3095d671654a914fcc1fe","isMergeCommit":false,"messageTitle":"complete level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"39b9fea34faac8a8c65167bd518abf6bcf397f26","isMergeCommit":false,"messageTitle":"complete level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":2}}}]},{"date":"2023-08-23","commitResults":[{"hash":"56a56a7933e47ea63c37078aef649cd97d523a62","isMergeCommit":false,"messageTitle":"complete level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":10}}},{"hash":"77c6c43e8289e1aeea62e312df9a124f992ae4b3","isMergeCommit":false,"messageTitle":"Complete level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":12}}},{"hash":"c4604c82632d7ab29438422372de48893a368627","isMergeCommit":false,"messageTitle":"complete automated text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a1dc5e2e900c2d0ebba5f91ce2c72491323e24f5","isMergeCommit":false,"messageTitle":"complete level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":22,"deletions":1},"java":{"insertions":269,"deletions":58}}},{"hash":"aaefcf7f7ed0a38f04796ca05f881e29a490d55e","isMergeCommit":false,"messageTitle":"complete level 6 and fix issues with level 5","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":10},"java":{"insertions":63,"deletions":4}}}]},{"date":"2023-08-27","commitResults":[{"hash":"58c70ae265beac1b64d06e545076f4b0a3322e0c","isMergeCommit":false,"messageTitle":"Complete Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":26}}},{"hash":"a6f0d8f52470f2551d7661bc723194c0617937a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"dde3168a4a99c7862e4c4e7e390c9b6687199c8e","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":5},"java":{"insertions":65,"deletions":18}}},{"hash":"3452c32fa52c517f3d9dfd569db7ad2cd7c3ecd9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"839b8307e13e588a66e6c07e4385915898b82fca","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a878c3fe2ea6e62128084334742ac3892314c2d5","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":532,"deletions":262}}},{"hash":"7fc01ff3276ff4194a3c5a20a1f390d14642d1f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"23cfab289b4e4f8586a0969734ac5a921f4b67e5","isMergeCommit":false,"messageTitle":"Organize into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":25},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"f987cc56e9469d5634be5c002de61ea8eb6971ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f6b47732bc93977c24e700def487e5a79567a327","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b50f71f73198e87b94ec276915ef27801cc5f5a0","isMergeCommit":false,"messageTitle":"Use Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":94,"deletions":26}}},{"hash":"b00acb148ad33d0c89d28bc391d19260c04dcbb0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"3a6a261cd4f64e8e9bcab089ab63389cc93eec12","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":0}}},{"hash":"69b3822b28e1215655234a0798afbb4b23a87458","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"7b739dd646b882530dcb190eacd30423d392f3e9","isMergeCommit":false,"messageTitle":"Add and change some JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":24}}},{"hash":"93ab16c591dee6d233325caaef59f81ac72b1343","isMergeCommit":false,"messageTitle":"Tweak code to NOT comply with coding standard since previous code was already compliant","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"f9c13b0a84f203e8a37a57168fc807b561acd12f","isMergeCommit":false,"messageTitle":"Complete level 9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":4}}},{"hash":"79b835f88f07304289a35e12f61a2f44dd3f09b3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"15344913e1114ae673415265e43b3c779b15706f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"627b8c40a3bc22fa9def4647e2c8958ebbc214e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"683306148950d1f73c332483e603c378cb53a961","isMergeCommit":false,"messageTitle":"Complete Level 10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":284,"deletions":92},"md":{"insertions":2,"deletions":2}}},{"hash":"072615a349966eeb5092fe42500e175df69aafc8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10","A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"c34ed6cd89c2f94468fd5eb4e2edf46416f9b6ad","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Currently there are no assertions implemented.\n\nImportant assumptions in the code of some classes should be documented.\n\nLet\u0027s add assertions for the Storage, ListCommand, and TaskList classes.\n","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":5}}},{"hash":"724f68abef309cf874546602dfb47967fec58bef","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"Some methods are deeply nested\nand some variable names make little sense.\n\nThis makes reading code more difficult.\n\nLet\u0027s,\n*change the names of these variables\n*refactor these methods\n","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":91}}},{"hash":"2334a60aeb254c2172bacecaeb12cebb16441926","isMergeCommit":true,"messageTitle":"Merge pull request #1 from victorpengmx/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"b76173d1b85002c7ee912cbb2f3bfcdfb7ab2d94","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodeQuality\u0027","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"d0094d06410115e39080c24547f47ec03dcd9580","isMergeCommit":true,"messageTitle":"Merge pull request #2 from victorpengmx/branch-A-CodeQuality","messageBody":"Improve Code Quality","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"5052c5431960a0cca7ca3221b765d9334c5254ea","isMergeCommit":false,"messageTitle":"Add Help command","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":5,"deletions":5},"java":{"insertions":45,"deletions":10}}},{"hash":"1a38efac88b375835b95890976d6d7c94213489b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Help\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"victorpengmx":{"java":1554,"md":2,"fxml":35,"sh":1,"bat":1,"gradle":21,"txt":27}},"authorContributionVariance":{"victorpengmx":51913.742},"authorDisplayNameMap":{"victorpengmx":"CS2103T-T15-4 PENG.. M X"}} +{"authorDailyContributionsMap":{"victorpengmx":[{"date":"2023-08-22","commitResults":[{"hash":"4615e1781470a1d5e403c686a157b19a8db3ad92","isMergeCommit":false,"messageTitle":"complete Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5ed4defb0a2f1b8cc3c3095d671654a914fcc1fe","isMergeCommit":false,"messageTitle":"complete level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"39b9fea34faac8a8c65167bd518abf6bcf397f26","isMergeCommit":false,"messageTitle":"complete level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":2}}}]},{"date":"2023-08-23","commitResults":[{"hash":"56a56a7933e47ea63c37078aef649cd97d523a62","isMergeCommit":false,"messageTitle":"complete level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":10}}},{"hash":"77c6c43e8289e1aeea62e312df9a124f992ae4b3","isMergeCommit":false,"messageTitle":"Complete level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":12}}},{"hash":"c4604c82632d7ab29438422372de48893a368627","isMergeCommit":false,"messageTitle":"complete automated text ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a1dc5e2e900c2d0ebba5f91ce2c72491323e24f5","isMergeCommit":false,"messageTitle":"complete level 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":22,"deletions":1},"java":{"insertions":269,"deletions":58}}},{"hash":"aaefcf7f7ed0a38f04796ca05f881e29a490d55e","isMergeCommit":false,"messageTitle":"complete level 6 and fix issues with level 5","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":10},"java":{"insertions":63,"deletions":4}}}]},{"date":"2023-08-27","commitResults":[{"hash":"58c70ae265beac1b64d06e545076f4b0a3322e0c","isMergeCommit":false,"messageTitle":"Complete Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":26}}},{"hash":"a6f0d8f52470f2551d7661bc723194c0617937a6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"dde3168a4a99c7862e4c4e7e390c9b6687199c8e","isMergeCommit":false,"messageTitle":"Complete level 8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":5},"java":{"insertions":65,"deletions":18}}},{"hash":"3452c32fa52c517f3d9dfd569db7ad2cd7c3ecd9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"839b8307e13e588a66e6c07e4385915898b82fca","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a878c3fe2ea6e62128084334742ac3892314c2d5","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":532,"deletions":262}}},{"hash":"7fc01ff3276ff4194a3c5a20a1f390d14642d1f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"23cfab289b4e4f8586a0969734ac5a921f4b67e5","isMergeCommit":false,"messageTitle":"Organize into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":125,"deletions":25},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"f987cc56e9469d5634be5c002de61ea8eb6971ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"f6b47732bc93977c24e700def487e5a79567a327","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b50f71f73198e87b94ec276915ef27801cc5f5a0","isMergeCommit":false,"messageTitle":"Use Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1},"java":{"insertions":94,"deletions":26}}},{"hash":"b00acb148ad33d0c89d28bc391d19260c04dcbb0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"3a6a261cd4f64e8e9bcab089ab63389cc93eec12","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":0}}},{"hash":"69b3822b28e1215655234a0798afbb4b23a87458","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"7b739dd646b882530dcb190eacd30423d392f3e9","isMergeCommit":false,"messageTitle":"Add and change some JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":24}}},{"hash":"93ab16c591dee6d233325caaef59f81ac72b1343","isMergeCommit":false,"messageTitle":"Tweak code to NOT comply with coding standard since previous code was already compliant","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"f9c13b0a84f203e8a37a57168fc807b561acd12f","isMergeCommit":false,"messageTitle":"Complete level 9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":4}}},{"hash":"79b835f88f07304289a35e12f61a2f44dd3f09b3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"15344913e1114ae673415265e43b3c779b15706f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"627b8c40a3bc22fa9def4647e2c8958ebbc214e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-07","commitResults":[{"hash":"683306148950d1f73c332483e603c378cb53a961","isMergeCommit":false,"messageTitle":"Complete Level 10","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":284,"deletions":92},"md":{"insertions":2,"deletions":2}}},{"hash":"072615a349966eeb5092fe42500e175df69aafc8","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10","A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-12","commitResults":[{"hash":"c34ed6cd89c2f94468fd5eb4e2edf46416f9b6ad","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"Currently there are no assertions implemented.\n\nImportant assumptions in the code of some classes should be documented.\n\nLet\u0027s add assertions for the Storage, ListCommand, and TaskList classes.\n","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":5}}},{"hash":"724f68abef309cf874546602dfb47967fec58bef","isMergeCommit":false,"messageTitle":"Improve Code Quality","messageBody":"Some methods are deeply nested\nand some variable names make little sense.\n\nThis makes reading code more difficult.\n\nLet\u0027s,\n*change the names of these variables\n*refactor these methods\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":91}}},{"hash":"2334a60aeb254c2172bacecaeb12cebb16441926","isMergeCommit":true,"messageTitle":"Merge pull request #1 from victorpengmx/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"b76173d1b85002c7ee912cbb2f3bfcdfb7ab2d94","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodeQuality\u0027","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"d0094d06410115e39080c24547f47ec03dcd9580","isMergeCommit":true,"messageTitle":"Merge pull request #2 from victorpengmx/branch-A-CodeQuality","messageBody":"Improve Code Quality","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"5052c5431960a0cca7ca3221b765d9334c5254ea","isMergeCommit":false,"messageTitle":"Add Help command","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":5,"deletions":5},"java":{"insertions":45,"deletions":10}}},{"hash":"1a38efac88b375835b95890976d6d7c94213489b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Help\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"victorpengmx":{"java":1554,"md":2,"fxml":35,"sh":1,"bat":1,"gradle":21,"txt":27}},"authorContributionVariance":{"victorpengmx":51913.742},"authorDisplayNameMap":{"victorpengmx":"CS2103T-T15-4 PENG.. M X"}} diff --git a/wasjoe1_ip_master/authorship.json b/wasjoe1_ip_master/authorship.json index b075d91a..ea6c8d46 100644 --- a/wasjoe1_ip_master/authorship.json +++ b/wasjoe1_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":"wasjoe1"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"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":"wasjoe1"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"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":"wasjoe1"},"content":" mainClass.set(\"jeoe.Launcher\")","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" archiveBaseName \u003d \"Jeoe\"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"wasjoe1":22,"-":40}},{"path":"src/main/java/jeoe/Commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates a command that ends the Jeoe chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a ByeCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" ByeCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" super(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" * Executes the bye command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" * Prints an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" ui.showEndString();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" * Executes the bye command.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" * Returns an exit command.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(ui.getEndString());","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":47}},{"path":"src/main/java/jeoe/Commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the abstract class Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * It is meant for executing an action \u0026 determining if the command would end the run loop.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" /** A boolean that determines whether this command would end the run loop in Jeoe */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a Command object.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param isExit Exit status inputted by other commands to see if they end the run loop or not.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" Command(boolean isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" * Executes the actions for the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" public abstract void execute(TaskManager taskManager, Ui ui, StorageManager storageManager);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" public abstract String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" return this.isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":46}},{"path":"src/main/java/jeoe/Commands/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.NoCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.RunException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates Command Parser class which parses commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"public class CommandParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" * Returns the parsed command.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" * @param input the full input by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * @return Command that is produced from the user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * @throws RunException If the input by the user does not have a valid command.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" public static Command parse(String input) throws RunException {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" String command \u003d input.split(\" \")[0]; // even if its empty string, the 0 index will still be \"\"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" switch (command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" return new ByeCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" return new ListCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" return new TodoCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" return new DeadlineCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" return new EventCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" return new MarkCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" return new UnmarkCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" return new DeleteCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" case \"find\":","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" return new FindCommand(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" case \"sort\":","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" return new SortCommand(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" case \"\":","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" throw new NoCommandException(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" // throw exception when it doesnt have a command word","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" throw new InvalidCommandException(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":52}},{"path":"src/main/java/jeoe/Commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class DeadlineCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * It is meant to execute the creation of a Deadline object.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /** Contains the components of the deadline command */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" private String[] deadlineArr;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a DeadlineCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" DeadlineCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" deadlineArr \u003d input.replaceFirst(\"deadline \", \"\").split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * Converts date string inputted by user into Iso8601 format date string.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param dt The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @return Iso8601 format date string.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" private String convertToIso8601(String dt) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" // dt are in the format 2022-12-01 18:00","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" String[] dtArr \u003d dt.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" return dtArr[0] + \"T\" + dtArr[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" * Executes the deadline command.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" * Creates a Deadline object, adds it to the task list, saves it in local storage then displays it.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" String deadlineDescription \u003d this.deadlineArr[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" String by \u003d convertToIso8601(this.deadlineArr[1]); // need to add the T in","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" Deadline deadline \u003d new Deadline(deadlineDescription, LocalDateTime.parse(by));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(deadline.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" * Executes the deadline command.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" * Creates a Deadline object, adds it to the task list, saves it in local storage then returns required string.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" String deadlineDescription \u003d this.deadlineArr[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" String by \u003d convertToIso8601(this.deadlineArr[1]); // need to add the T in","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" Deadline deadline \u003d new Deadline(deadlineDescription, LocalDateTime.parse(by));","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(deadline);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(deadline.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":84}},{"path":"src/main/java/jeoe/Commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class DeleteCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * It is meant to execute the deletion of a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" /** Index in task list to delete task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" private int idxDel;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a DeleteCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" DeleteCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" idxDel \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Executes the delete command.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * Deletes a task from the list, remove it from local storage then prints out delete confirmation.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" Task t \u003d taskManager.deleteIndex(idxDel);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Noted. I\u0027ve removed this task:\\n\" + t.toString() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" + \"Now you have \" + taskManager.getTasksSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * Executes the delete command.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" * Deletes a task from the list, remove it from local storage then returns delete confirmation string.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" Task t \u003d taskManager.deleteIndex(idxDel);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Noted. I\u0027ve removed this task:\\n\" + t.toString() + \"\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" + \"Now you have \" + taskManager.getTasksSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":71}},{"path":"src/main/java/jeoe/Commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class EventCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * It is meant to execute the creation of an Event object.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" /** Contains the components of the event command */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" private String[] eventArr;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * Constructor for an EventCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" EventCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" this.eventArr \u003d input.replaceFirst(\"event \", \"\").split(\" /from \"); // eventArr have description","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Executes the event command.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * Creates an Event object, adds it to the task list, saves it in local storage then displays it.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" String eventDescription \u003d eventArr[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" String[] eventArr2 \u003d eventArr[1].split(\" /to \"); // eventArr2 have the from \u0026 to","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" String from \u003d eventArr2[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" String to \u003d eventArr2[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" Event event \u003d new Event(eventDescription, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" // add to storage","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(event.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * Executes the event command.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * Creates an Event object, adds it to the task list, saves it in local storage then returns string.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" String eventDescription \u003d eventArr[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" String[] eventArr2 \u003d eventArr[1].split(\" /to \"); // eventArr2 have the from \u0026 to","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" String from \u003d eventArr2[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" String to \u003d eventArr2[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" Event event \u003d new Event(eventDescription, from, to);","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" // add to storage","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(event);","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(event.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":75}},{"path":"src/main/java/jeoe/Commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class FindCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * It is meant to help the user find a task in the list of tasks,","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * with description matching the user input, and ran checkstyle on my current code.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" /** Contains the filter words that will filter our matching tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" private String filterWords;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a FindCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" FindCommand(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" this.filterWords \u003d input.replaceFirst(\"find \", \"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * Executes the find command.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" * Goes through the list and finds the tasks with description matching the user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" // check if the task has matching words, else continue","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" if (task.getDescription().contains(this.filterWords)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" * Executes the find command.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" * Goes through the list and finds the tasks with description matching the user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" // check if the task has matching words, else continue","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" if (task.getDescription().contains(this.filterWords)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"wasjoe1":81}},{"path":"src/main/java/jeoe/Commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class ListCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * It is meant to display a list view of all the tasks currently stored.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a ListCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" ListCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" * Executes the list command.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * Iterates through the list of task then displays a list view of the tasks to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" * Executes the list command.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" * Iterates through the list of task then displays a list view of the tasks to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":67}},{"path":"src/main/java/jeoe/Commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class MarkCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * It is meant to mark a task as done in the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" /** Index in the task list to mark a task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" private int idxMark;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a MarkCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" MarkCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" idxMark \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * Executes the mark command.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Marks a task from the list, updates the local storage then prints out the marked confirmation.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" taskManager.mark(idxMark);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Nice! I\u0027ve marked this task as done:\\n\" + taskManager.getTask(idxMark).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" * Executes the mark command.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" * Marks a task from the list, updates the local storage then returns out the marked confirmation string.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" taskManager.mark(idxMark);","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Nice! I\u0027ve marked this task as done:\\n\" + taskManager.getTask(idxMark).toString() + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":68}},{"path":"src/main/java/jeoe/Commands/SortCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Todo;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"public class SortCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a SortCommand object.","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" SortCommand(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" * Executes the Sort Command.","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" * Sorts the list then saves that new sorted list.","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" // sort the things in the list then save the new list","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" taskManager.sort();","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the sorted tasks in your list:\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" * Executes the Sort Command.","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" * Sorts the list then saves that new sorted list.","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" // sort the things in the list then save the new list","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" taskManager.sort();","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the sorted tasks in your list:\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"wasjoe1":71}},{"path":"src/main/java/jeoe/Commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class TodoCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * It is meant to execute the creation of a Todo object.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" /** Contains the description of the to do command. */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" private String todoDescription;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a TodoCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" TodoCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" this.todoDescription \u003d input.replaceFirst(\"todo \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Executes the Todo command.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * Creates a todo object, adds it to the task list, saves it in local storage then displays it.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" // create the actual task","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" Todo todo \u003d new Todo(todoDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(todo.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" * Executes the Todo command.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * Creates a todo object, adds it to the task list, saves it in local storage then returns the todo string.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" // create the actual task","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" Todo todo \u003d new Todo(todoDescription);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(todo);","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(todo.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":69}},{"path":"src/main/java/jeoe/Commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class UnmarkCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * It is meant to un-mark a task as done in the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" /** Index in the task list to un-mark a task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" private int idxUnmark;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a UnmarkCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" UnmarkCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" idxUnmark \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * Executes the unmark command.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Un-marks a task from the list, updates the local storage then prints out the un-marked confirmation.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" taskManager.unmark(idxUnmark);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" + taskManager.getTask(idxUnmark).toString() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" * Executes the unmark command.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * Un-marks a task from the list, updates the local storage then returns the un-marked confirmation string.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" taskManager.unmark(idxUnmark);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" + taskManager.getTask(idxUnmark).toString() + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":70}},{"path":"src/main/java/jeoe/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a DialogBox object.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * @param text The string input to be placed in the dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param img The image to be placed in the dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" /** Flips the dialog box such that the ImageView is on the left and text on the right. */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" * Returns the user\u0027s dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" * @param img Image of the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" * @param text The user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" * @return User\u0027s dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" * Returns Jeoe\u0027s dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" * @param img Image of Jeoe.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" * @param text Jeoe\u0027s output.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" * @return Jeoe\u0027s dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" public static DialogBox getJeoeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":"// --------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":"// DialogBox version 1","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":"//import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":"//import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":"//import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":"//import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":"//import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":"//import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":"//import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"wasjoe1"},"content":"//public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"wasjoe1"},"content":"// private Label text;","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"wasjoe1"},"content":"// private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"wasjoe1"},"content":"// public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"wasjoe1"},"content":"// text \u003d l;","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"wasjoe1"},"content":"// displayPicture \u003d iv;","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"wasjoe1"},"content":"// text.setWrapText(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"wasjoe1"},"content":"// displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"wasjoe1"},"content":"// displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"wasjoe1"},"content":"// this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"wasjoe1"},"content":"// this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"wasjoe1"},"content":"// }","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"wasjoe1"},"content":"// /**","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"wasjoe1"},"content":"// * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"wasjoe1"},"content":"// */","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"wasjoe1"},"content":"// private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"wasjoe1"},"content":"// this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"wasjoe1"},"content":"// ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"wasjoe1"},"content":"// FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"wasjoe1"},"content":"// this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"wasjoe1"},"content":"// }","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"wasjoe1"},"content":"// public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"wasjoe1"},"content":"// return new DialogBox(l, iv);","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"wasjoe1"},"content":"// }","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"wasjoe1"},"content":"// public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"wasjoe1"},"content":"// var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"wasjoe1"},"content":"// db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"wasjoe1"},"content":"// return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"wasjoe1"},"content":"// }","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"wasjoe1"},"content":"//}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":127}},{"path":"src/main/java/jeoe/Exceptions/InitializationException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class InitializationException.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It is an exception thrown when initialization of the Jeoe program fails.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class InitializationException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a InitializationException object.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to be included in the error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" public InitializationException(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" super(\"Initialization exception thrown\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":19}},{"path":"src/main/java/jeoe/Exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class InvalidCommandException.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It is an exception thrown when an invalid command was inputted by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class InvalidCommandException extends RunException {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a InvalidCommandException object.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to be included in the error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" public InvalidCommandException(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" super(\"☹ OOPS!!! A valid command is required. Your current command \\\"\" + input","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" + \"\\\" is not a valid command.\\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" + \"Please enter your input starting with :\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" + \"bye\\n\" + \"list\\n\" + \"todo\\n\" + \"deadline\\n\" + \"event\\n\" + \"mark\\n\" + \"unmark\\n\" + \"delete\\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" + \"After the command word, leave a space before typing your task.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":24}},{"path":"src/main/java/jeoe/Exceptions/NoCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class NoCommandException.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It is an exception thrown when no command was inputted by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class NoCommandException extends RunException {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a NoCommandException object.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to be included in the error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" public NoCommandException(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" super(\"☹ OOPS!!! A valid command is required. Your current command \\\"\" + input + \"\\\" is empty.\\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" + \"Please enter your input starting with :\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" + \"bye\\n\" + \"list\\n\" + \"todo\\n\" + \"deadline\\n\" + \"event\\n\" + \"mark\\n\" + \"unmark\\n\" + \"delete\\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" + \"After the command word, leave a space before typing your task.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":23}},{"path":"src/main/java/jeoe/Exceptions/RunException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class RunException.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It is an exception thrown when an error was encountered during the Jeoe program.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class RunException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a RunException object.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to be included in the error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" public RunException(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" super(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":19}},{"path":"src/main/java/jeoe/Jeoe.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Commands.Command;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Commands.CommandParser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.InitializationException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.NoCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.RunException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates my version of Duke, called Jeoe.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * Jeoe is a chatbot that helps the user keep track of their tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" * Java coding standard was adhered to in this program.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":"public class Jeoe {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" /** Manager to contain task list and handle operations on tasks. */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" private static TaskManager taskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" /** Manager to format \u0026 print statements to the ui. */","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" private static Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /** Manager to load \u0026 save task from local storage. */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" private static StorageManager storageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" /** Contains file path to local storage containing saved tasks. */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" private static String filePath \u003d System.getProperty(\"user.dir\") + \"/storage/taskListData.txt\"; // dir is till ip","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a Jeoe object.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" * The Jeoe object is to be passed to the Main class which runs the entire application.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" * The Jeoe object process the input using all its other components and passes back the","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" * result to the Main class for the JavaFX components to render out the output on a GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" public Jeoe() {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" Jeoe.initialize();","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" } catch (InitializationException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" // exception to do with initialization \u003d\u003e scanner fails (cannot be file issue)","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" System.out.println(e.getMessage()); // can change to ui printing this out in the future","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * Initialises the Jeoe program.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * Instantiates a TaskManager object, Ui object, and a StorageManager Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" private static void initialize() throws InitializationException {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" storageManager \u003d new StorageManager(filePath); // loading tasks \u0026 saving tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" // contains list of task, and has operations to add/delete tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" taskManager \u003d new TaskManager(storageManager.load()); // load passes the string for TM to add task to arr","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" ui.showOpenString(); // leave it here so i know that program did get initialized","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"Jeoe initialization failed\");","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" * Gets the response from the Jeoe program.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" * Gets the response from the Jeoe program to be displayed on the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" * @param input The input from the user using the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" * @return Response string to be displayed on the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" String jeoeReply;","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":" Command c \u003d CommandParser.parse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" jeoeReply \u003d c.executeAndReply(taskManager, ui, storageManager); // already has ui.getReply executed","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" // print exception, they will handle their formatting themselves","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":" jeoeReply \u003d ui.getReply(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":" } catch (NoCommandException e) { // can think of if tried 3 empty commands, terminate program","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":" jeoeReply \u003d ui.getReply(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":" } catch (RunException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":" jeoeReply \u003d ui.getReply(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"wasjoe1"},"content":" assert jeoeReply instanceof String : \"jeoe\u0027s response has to be a string type\";","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"wasjoe1"},"content":" return jeoeReply;","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"wasjoe1"},"content":" * The main method of Jeoe.","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"wasjoe1"},"content":" * The block of code is to initialize \u0026 run the Jeoe program (in the CLI).","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"wasjoe1"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"wasjoe1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":104}},{"path":"src/main/java/jeoe/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * The main method of Launcher.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" // this launch method will find the start method and run it","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":19}},{"path":"src/main/java/jeoe/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * A GUI for Jeoe using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" private Jeoe jeoe \u003d new Jeoe();","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * Starts the GUI by taking in a stage.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param stage Stage to be taken in for display on the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" assert jeoe !\u003d null : \"jeoe program should not be null\";","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" assert fxmlLoader !\u003d null : \"fxml loader has to exist\";","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" assert ap !\u003d null : \"anchor pane has to exist\";","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" assert scene !\u003d null : \"a scene has to exist\";","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" assert stage !\u003d null : \"a stage has to exist\";","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setJeoe(jeoe);","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":41}},{"path":"src/main/java/jeoe/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" private Jeoe jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaJeoe.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /** Initializes the main window. */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" * Sets the Jeoe object for future usage(getting the Jeoe response).","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" * @param j Jeoe object to be assigned.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" public void setJeoe(Jeoe j) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" jeoe \u003d j;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" * Creates 2 dialog boxes for user input and Jeoe output.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Jeoe\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" String response \u003d jeoe.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" DialogBox.getJeoeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":61}},{"path":"src/main/java/jeoe/Others/StorageManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Others;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the StorageManager class.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * The StorageManager helps to manage the loading \u0026 saving of tasks, to and from the local storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"public class StorageManager {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" /** Contains file path to local storage containing saved tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a StorageManager object.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" * @param filePath The file path which the storage manager will save tasks to.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" public StorageManager(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * Loads the tasks from local storage for usage in the Jeoe program.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" * @return File that contains list of tasks, to be handled by the TaskManager object.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" * @throws IOException If the file doesn\u0027t exist.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" public File load() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" // add items into the storage when loading the app","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" // find the file","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" File taskListData \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" // if file doesnt exist, // taskListData.length() \u003d\u003d 0; // is used to check length of file","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" if (!taskListData.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"task list data doesnt exist\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" taskListData.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" taskListData.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" return taskListData;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"couldn\u0027t create the new file exception\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" throw new IOException();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" * Converts a task of Task type, to a string to be stored in local storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" * @param t Task to be converted to string form.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" * @return String that is to be stored in local storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" private static String taskToStringForStorage(Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" // splits into type, mark or not, description, from, to","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" String deLim \u003d \" | \";","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" switch (t.taskType()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" String todo \u003d \"T\" + deLim;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" todo +\u003d t.isDone() ? (\"1\" + deLim) : (\"0\" + deLim);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" todo +\u003d t.getDescription();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" return todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" String deadline \u003d \"D\" + deLim;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" deadline +\u003d t.isDone() ? (\"1\" + deLim) : (\"0\" + deLim);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" deadline +\u003d t.getDescription() + deLim;","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" deadline +\u003d t.getEndDateTimeString();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":" return deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" String event \u003d \"E\" + deLim;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" event +\u003d t.isDone() ? (\"1\" + deLim) : (\"0\" + deLim);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":" event +\u003d t.getDescription() + deLim;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" event +\u003d t.getEndDateTimeString();","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" return event;","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":" * Saves a list of tasks in local storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"wasjoe1"},"content":" * @param tasks An ArrayList of tasks to be converted to string form and stored in local storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"wasjoe1"},"content":" public void save(ArrayList\u003cTask\u003e tasks) { // for saving into the storage, just rewrite the entire file","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"wasjoe1"},"content":" // to overwrite the file","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"wasjoe1"},"content":" // concatenate all the tasks in string form","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"wasjoe1"},"content":" String listOfTasksString \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"wasjoe1"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"wasjoe1"},"content":" String tString \u003d taskToStringForStorage(t);","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"wasjoe1"},"content":" listOfTasksString +\u003d (tString + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"wasjoe1"},"content":" // write to the file","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"wasjoe1"},"content":" FileWriter fw \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"wasjoe1"},"content":" fw.write(listOfTasksString);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"wasjoe1"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"wasjoe1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"wasjoe1"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"wasjoe1"},"content":" /** Deletes all tasks in local storage. */","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"wasjoe1"},"content":" public void deleteAllInFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"wasjoe1"},"content":" this.save(arr);","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"deleted all in file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":118}},{"path":"src/main/java/jeoe/Others/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Others;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the Ui class.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * The Ui helps to manage the inputs \u0026 outputs of the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" /** Scanner to scan for inputs by user */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" /** Constructor for a Ui object. */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" scanner \u003d new Scanner(System.in); // makes it such that the scanner takes in inputs from the console","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" * Returns the next input line by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" * @return Next input line by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" public String nextLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" /** Displays the opening string of the Jeoe program. */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" public void showOpenString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" String openingStr \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" + \" Hello! I\u0027m JEOE\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" + \" What can I do for you?\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" + \" type :\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" + \" list \u003d\u003e to list out items in storage\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" + \" _Anything else_ \u003d\u003e store in storage\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" System.out.println(openingStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" /** Displays the ending string of the Jeoe program. */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" public void showEndString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" String endStr \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" + \" Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" System.out.println(endStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" * Displays an output message to the user base on the input reply.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * @param reply Input reply by the execution of a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" public void displayReply(String reply) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" + reply","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" + \"____________________________________________________________\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" // ----------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" // when it switched to GUI","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" /** Returns the opening string of the Jeoe program. */","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" public String getOpeningString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" String openingStr \u003d \" Hello! I\u0027m JEOE\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" + \" What can I do for you?\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" + \" type :\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" + \" list \u003d\u003e to list out items in storage\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" + \" _Anything else_ \u003d\u003e store in storage\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" return openingStr;","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" /** Returns the ending string of the Jeoe program. */","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":" public String getEndString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" String endStr \u003d \" Bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" return endStr;","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" * Returns an output message to the user base on the input reply.","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":" * @param reply Input reply by the execution of a command.","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":" public String getReply(String reply) {","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":" return \"Jeoe :\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":" + reply;","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":90}},{"path":"src/main/java/jeoe/Tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the Deadline class.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * It represents a task that has a deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" /** End date \u0026 time of the deadline task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a Deadline object.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" * @param by The end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" super(description, TaskType.DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Returns the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" public String getEndDateTimeString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" return this.by.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" // return this.by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" // + \"T\" + this.by.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":46}},{"path":"src/main/java/jeoe/Tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the Event class.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It represents a task that has a start date \u0026 time and a deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" protected String from;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" protected String to;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * Constructor for an Event object.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" * @param from The start date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * @param to The end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" * Returns the start date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the start date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" public String getStartDateTimeString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" return this.from;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" * Returns the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" public String getEndDateTimeString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" return this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":51}},{"path":"src/main/java/jeoe/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the Task class.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It represents a task that is added to the Jeoe program upon a command by the user that creates a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class Task implements Comparable\u003cTask\u003e{","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /** Description of the task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" private String description; // the toString handles the space after the [ ] or [X]","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" /** Status of whether the task is done. */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" /** Enum type TaskType which lists the different task types. */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" TODO,","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" EVENT,","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" DEADLINE","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" /** TaskType of the task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" private TaskType taskType;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a Task object.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param taskType The task type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" public Task(String description, TaskType taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" return isDone ? \"[X] \" + this.description : \"[ ] \" + this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" * Returns the done status of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * @return Status of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" return this.isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" /** Un-marks the task to be not done. */","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" public void unmark() {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" /** Marks the task to be done. */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" public void mark() {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" * Returns the type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" * @return Type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" public TaskType taskType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" return this.taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" return this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":" * Returns the start date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the start date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"wasjoe1"},"content":" public String getStartDateTimeString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"wasjoe1"},"content":" // can consider removing this method by typecasting","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"wasjoe1"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"wasjoe1"},"content":" * Returns the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"wasjoe1"},"content":" public String getEndDateTimeString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"wasjoe1"},"content":" // can consider removing this method by typecasting","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"wasjoe1"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"wasjoe1"},"content":" * Returns the String to be returned when task is added to the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"wasjoe1"},"content":" * @param currNumOfTask Current number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"wasjoe1"},"content":" * @return String to be returned when task is added to the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"wasjoe1"},"content":" public String replyString(int currNumOfTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"wasjoe1"},"content":" return \"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"wasjoe1"},"content":" + this.toString() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"wasjoe1"},"content":" + \"Now you have \" + currNumOfTask + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"wasjoe1"},"content":" // the toString is called from the child class which is amazing \u003d\u003e RTT is child class type i guess","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":119,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"wasjoe1"},"content":" * Method to compare this object with another object when sorting.","lastModifiedDate":"2023-09-14"},{"lineNumber":121,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":122,"author":{"gitId":"wasjoe1"},"content":" * @param otherTask The other task to compare to.","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"wasjoe1"},"content":" * @return Int to returned to indicate which string comes first lexicographically.","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":126,"author":{"gitId":"wasjoe1"},"content":" public int compareTo(Task otherTask) {","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"wasjoe1"},"content":" // Compare base on string","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"wasjoe1"},"content":" return this.toString().compareTo(otherTask.toString());","lastModifiedDate":"2023-09-14"},{"lineNumber":129,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":130,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":130}},{"path":"src/main/java/jeoe/Tasks/TaskManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the TaskManager class.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * The StorageManager helps to contain the task list and handle operations on tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"public class TaskManager {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /** Contains list of tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" private ArrayList\u003cTask\u003e storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a TaskManager object.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" * Adds the lists of task to the storage field.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" * @param taskListData A file containing stored tasks on local machine.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" public TaskManager(File taskListData) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" storage \u003d new ArrayList\u003c\u003e(); // everytime you initialize, you start with a new storage","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" Scanner fileSc \u003d new Scanner(taskListData);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" while (fileSc.hasNextLine()) { // if no task, storage is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d stringToTask(fileSc.nextLine());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" storage.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" fileSc.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"storage manager did not load file properly\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" * Converts a task in string format to Task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" * @param taskInStringForm The task in string format to be converted.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" * @return A task of Task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" private Task stringToTask(String taskInStringForm) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" String[] taskData \u003d taskInStringForm.split(\" \\\\| \"); // assuming the description and all that doesnt have |","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" // splits into type, mark or not, description, from, to","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" switch (taskData[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" Task todo \u003d new Todo(taskData[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" if (taskData[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" todo.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" return todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" Task deadline \u003d new Deadline(taskData[2], LocalDateTime.parse(taskData[3]));","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" if (taskData[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" deadline.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" return deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" Task event \u003d new Event(taskData[2], taskData[3], taskData[4]);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" if (taskData[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" event.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" return event;","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" * Returns the list of task.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" return this.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":" * Returns the task at that index.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":" * @param idx Index of the task to be returned.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":" * @return The task at that index.","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"wasjoe1"},"content":" public Task getTask(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"wasjoe1"},"content":" return this.storage.get(idx);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"wasjoe1"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"wasjoe1"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"wasjoe1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"wasjoe1"},"content":" this.storage.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"wasjoe1"},"content":" * Deletes the task at that index.","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"wasjoe1"},"content":" * @param idx Index of the task to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"wasjoe1"},"content":" * @return The deleted task.","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"wasjoe1"},"content":" public Task deleteIndex(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"wasjoe1"},"content":" return this.storage.remove(idx);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"wasjoe1"},"content":" * Returns the size of the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"wasjoe1"},"content":" * @return Size of the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"wasjoe1"},"content":" public int getTasksSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"wasjoe1"},"content":" return this.storage.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"wasjoe1"},"content":" * Marks a task in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"wasjoe1"},"content":" * @param idxMark Index of the task to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"wasjoe1"},"content":" public void mark(int idxMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"wasjoe1"},"content":" storage.get(idxMark).mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"wasjoe1"},"content":" * Un-marks a task in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"wasjoe1"},"content":" * @param idxUnmark Index of the task to be un-marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"wasjoe1"},"content":" public void unmark(int idxUnmark) {","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"wasjoe1"},"content":" storage.get(idxUnmark).unmark();","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":143,"author":{"gitId":"wasjoe1"},"content":" * Sorts the tasks in the list.","lastModifiedDate":"2023-09-14"},{"lineNumber":144,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":145,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":146,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":147,"author":{"gitId":"wasjoe1"},"content":" public void sort() {","lastModifiedDate":"2023-09-14"},{"lineNumber":148,"author":{"gitId":"wasjoe1"},"content":" Collections.sort(this.storage);","lastModifiedDate":"2023-09-14"},{"lineNumber":149,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":150,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":151,"author":{"gitId":"wasjoe1"},"content":" /** Returns a string representation of the list of tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"wasjoe1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c this.storage.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d this.storage.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"wasjoe1"},"content":" return reply;","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":162}},{"path":"src/main/java/jeoe/Tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the Todo class.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It represents a task that has only its description.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a Todo object.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":25}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"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-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"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\"jeoe.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"447.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"153.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"0.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"446.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"153.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"447.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"472.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":19}},{"path":"src/test/java/jeoe/Commands/DeadlineCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"public class DeadlineCommandTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" protected StorageManager sm;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" protected TaskManager tm;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" protected Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" public void testAddDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" String filePath \u003d System.getProperty(\"user.dir\") + \"/storage/testTaskListData.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" sm \u003d new StorageManager(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" sm.deleteAllInFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" tm \u003d new TaskManager(sm.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" DeadlineCommand deadline \u003d new DeadlineCommand(\"deadline test /by 2022-12-01 18:00\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" deadline.execute(tm, ui, sm);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" assertEquals(\"1. [D][ ] test (by: Dec 1 2022 18:00)\\n\", tm.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"Exception in add deadline test\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":30}},{"path":"src/test/java/jeoe/Commands/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" protected StorageManager sm;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" protected TaskManager tm;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" protected Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" public void testAddTodo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" String filePath \u003d System.getProperty(\"user.dir\") + \"/storage/testTaskListData.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" sm \u003d new StorageManager(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" sm.deleteAllInFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" tm \u003d new TaskManager(sm.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" TodoCommand todoTest \u003d new TodoCommand(\"todo test\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" todoTest.execute(tm, ui, sm);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" assertEquals(\"1. [T][ ] test\\n\", tm.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"Exception in add to do test\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":30}},{"path":"storage/taskListData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"T | 0 | a","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"T | 0 | b","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"T | 0 | c","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"wasjoe1":3}},{"path":"storage/testTaskListData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":1}},{"path":"testdata/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":8}},{"path":"text-ui-test/diff-output.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"--- ACTUAL.TXT\t2023-08-24 12:24:54","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"+++ EXPECTED.TXT\t2023-08-24 12:08:47","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"@@ -24,3 +24,40 @@","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" Now you have 3 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"+ ☹ OOPS!!! A valid jeoe.Tasks.jeoe.Tasks is required. Your current input \"random grribish\" is not a valid task.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"+Please enter your input starting with :","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"+todo","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":"+deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"+event","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"+ After the command word, leave a space before typing your task.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"+Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":"+[T][X] borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":"+OK, I\u0027ve marked this task as not done yet:","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":"+[T][ ] borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":"+Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":"+[D][X] return book (by: Sunday)","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":"+Here are the tasks in your list:","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":"+1. [T][ ] borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":"+2. [D][X] return book (by: Sunday)","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":"+3. [E][ ] project meeting (from: Mon 2pm to: 4pm)","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"+ Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wasjoe1":43}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"random grribish","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wasjoe1":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":"wasjoe1"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"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":"wasjoe1"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-06"},{"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":"wasjoe1"},"content":" mainClass.set(\"jeoe.Launcher\")","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" archiveBaseName \u003d \"Jeoe\"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"wasjoe1":22,"-":40}},{"path":"src/main/java/jeoe/Commands/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates a command that ends the Jeoe chatbot.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a ByeCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" ByeCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" super(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" * Executes the bye command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" * Prints an exit command.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" ui.showEndString();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" * Executes the bye command.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" * Returns an exit command.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(ui.getEndString());","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":47}},{"path":"src/main/java/jeoe/Commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the abstract class Command.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * It is meant for executing an action \u0026 determining if the command would end the run loop.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" /** A boolean that determines whether this command would end the run loop in Jeoe */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a Command object.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param isExit Exit status inputted by other commands to see if they end the run loop or not.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" Command(boolean isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" * Executes the actions for the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" public abstract void execute(TaskManager taskManager, Ui ui, StorageManager storageManager);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" public abstract String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager);","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" * Returns the exit status of the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" * @return Exit status of the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" return this.isExit;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":46}},{"path":"src/main/java/jeoe/Commands/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.NoCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.RunException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates Command Parser class which parses commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"public class CommandParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" * Returns the parsed command.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" * @param input the full input by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * @return Command that is produced from the user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * @throws RunException If the input by the user does not have a valid command.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" public static Command parse(String input) throws RunException {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" String command \u003d input.split(\" \")[0]; // even if its empty string, the 0 index will still be \"\"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" switch (command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" return new ByeCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" return new ListCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" return new TodoCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" return new DeadlineCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" return new EventCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" return new MarkCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" return new UnmarkCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" return new DeleteCommand(input);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" case \"find\":","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" return new FindCommand(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" case \"sort\":","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" return new SortCommand(input);","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" case \"\":","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" throw new NoCommandException(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" // throw exception when it doesnt have a command word","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" throw new InvalidCommandException(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":52}},{"path":"src/main/java/jeoe/Commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class DeadlineCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * It is meant to execute the creation of a Deadline object.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /** Contains the components of the deadline command */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" private String[] deadlineArr;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a DeadlineCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" DeadlineCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" deadlineArr \u003d input.replaceFirst(\"deadline \", \"\").split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * Converts date string inputted by user into Iso8601 format date string.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param dt The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @return Iso8601 format date string.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" private String convertToIso8601(String dt) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" // dt are in the format 2022-12-01 18:00","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" String[] dtArr \u003d dt.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" return dtArr[0] + \"T\" + dtArr[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" * Executes the deadline command.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" * Creates a Deadline object, adds it to the task list, saves it in local storage then displays it.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" String deadlineDescription \u003d this.deadlineArr[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" String by \u003d convertToIso8601(this.deadlineArr[1]); // need to add the T in","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" Deadline deadline \u003d new Deadline(deadlineDescription, LocalDateTime.parse(by));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(deadline.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" * Executes the deadline command.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" * Creates a Deadline object, adds it to the task list, saves it in local storage then returns required string.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" String deadlineDescription \u003d this.deadlineArr[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" String by \u003d convertToIso8601(this.deadlineArr[1]); // need to add the T in","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" Deadline deadline \u003d new Deadline(deadlineDescription, LocalDateTime.parse(by));","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(deadline);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(deadline.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":84}},{"path":"src/main/java/jeoe/Commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class DeleteCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * It is meant to execute the deletion of a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" /** Index in task list to delete task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" private int idxDel;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a DeleteCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" DeleteCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" idxDel \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Executes the delete command.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * Deletes a task from the list, remove it from local storage then prints out delete confirmation.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" Task t \u003d taskManager.deleteIndex(idxDel);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Noted. I\u0027ve removed this task:\\n\" + t.toString() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" + \"Now you have \" + taskManager.getTasksSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * Executes the delete command.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" * Deletes a task from the list, remove it from local storage then returns delete confirmation string.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" Task t \u003d taskManager.deleteIndex(idxDel);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Noted. I\u0027ve removed this task:\\n\" + t.toString() + \"\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" + \"Now you have \" + taskManager.getTasksSize() + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":71}},{"path":"src/main/java/jeoe/Commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class EventCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * It is meant to execute the creation of an Event object.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" /** Contains the components of the event command */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" private String[] eventArr;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * Constructor for an EventCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" EventCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" this.eventArr \u003d input.replaceFirst(\"event \", \"\").split(\" /from \"); // eventArr have description","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Executes the event command.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * Creates an Event object, adds it to the task list, saves it in local storage then displays it.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" String eventDescription \u003d eventArr[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" String[] eventArr2 \u003d eventArr[1].split(\" /to \"); // eventArr2 have the from \u0026 to","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" String from \u003d eventArr2[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" String to \u003d eventArr2[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" Event event \u003d new Event(eventDescription, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" // add to storage","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(event.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * Executes the event command.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * Creates an Event object, adds it to the task list, saves it in local storage then returns string.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" String eventDescription \u003d eventArr[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" String[] eventArr2 \u003d eventArr[1].split(\" /to \"); // eventArr2 have the from \u0026 to","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" String from \u003d eventArr2[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" String to \u003d eventArr2[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" Event event \u003d new Event(eventDescription, from, to);","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" // add to storage","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(event);","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(event.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":75}},{"path":"src/main/java/jeoe/Commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class FindCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * It is meant to help the user find a task in the list of tasks,","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * with description matching the user input, and ran checkstyle on my current code.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" /** Contains the filter words that will filter our matching tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" private String filterWords;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a FindCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" FindCommand(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" this.filterWords \u003d input.replaceFirst(\"find \", \"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * Executes the find command.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" * Goes through the list and finds the tasks with description matching the user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" // check if the task has matching words, else continue","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" if (task.getDescription().contains(this.filterWords)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" * Executes the find command.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" * Goes through the list and finds the tasks with description matching the user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" // check if the task has matching words, else continue","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" if (task.getDescription().contains(this.filterWords)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"wasjoe1":81}},{"path":"src/main/java/jeoe/Commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class ListCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * It is meant to display a list view of all the tasks currently stored.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a ListCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" ListCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" * Executes the list command.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * Iterates through the list of task then displays a list view of the tasks to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" * Executes the list command.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" * Iterates through the list of task then displays a list view of the tasks to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":67}},{"path":"src/main/java/jeoe/Commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class MarkCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * It is meant to mark a task as done in the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" /** Index in the task list to mark a task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" private int idxMark;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a MarkCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" MarkCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" idxMark \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * Executes the mark command.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Marks a task from the list, updates the local storage then prints out the marked confirmation.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" taskManager.mark(idxMark);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Nice! I\u0027ve marked this task as done:\\n\" + taskManager.getTask(idxMark).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" * Executes the mark command.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" * Marks a task from the list, updates the local storage then returns out the marked confirmation string.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" taskManager.mark(idxMark);","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Nice! I\u0027ve marked this task as done:\\n\" + taskManager.getTask(idxMark).toString() + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":68}},{"path":"src/main/java/jeoe/Commands/SortCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Todo;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"public class SortCommand extends Command {","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a SortCommand object.","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" SortCommand(String input) {","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" * Executes the Sort Command.","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" * Sorts the list then saves that new sorted list.","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" // sort the things in the list then save the new list","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" taskManager.sort();","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the sorted tasks in your list:\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" * Executes the Sort Command.","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" * Sorts the list then saves that new sorted list.","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" // sort the things in the list then save the new list","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" taskManager.sort();","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"Here are the sorted tasks in your list:\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskManager.getTasks();","lastModifiedDate":"2023-09-14"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-14"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task + \"\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"wasjoe1":71}},{"path":"src/main/java/jeoe/Commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class TodoCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * It is meant to execute the creation of a Todo object.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" /** Contains the description of the to do command. */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" private String todoDescription;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a TodoCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" TodoCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" this.todoDescription \u003d input.replaceFirst(\"todo \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Executes the Todo command.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * Creates a todo object, adds it to the task list, saves it in local storage then displays it.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" // create the actual task","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" Todo todo \u003d new Todo(todoDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(todo.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" * Executes the Todo command.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * Creates a todo object, adds it to the task list, saves it in local storage then returns the todo string.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" // create the actual task","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" Todo todo \u003d new Todo(todoDescription);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" taskManager.addTask(todo);","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(todo.replyString(taskManager.getTasksSize()));","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":69}},{"path":"src/main/java/jeoe/Commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class UnmarkCommand.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * It is meant to un-mark a task as done in the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" /** Index in the task list to un-mark a task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" private int idxUnmark;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a UnmarkCommand object.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to parse into a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" UnmarkCommand(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" super(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" idxUnmark \u003d Integer.parseInt(input.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * Executes the unmark command.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Un-marks a task from the list, updates the local storage then prints out the un-marked confirmation.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" public void execute(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" taskManager.unmark(idxUnmark);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" + taskManager.getTask(idxUnmark).toString() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" ui.displayReply(reply);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" * Executes the unmark command.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * Un-marks a task from the list, updates the local storage then returns the un-marked confirmation string.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * @param taskManager Task manager handling tasks operations.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * @param ui Ui handling output to users.","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" * @param storageManager Storage manager handling storing \u0026 deletion of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" public String executeAndReply(TaskManager taskManager, Ui ui, StorageManager storageManager) {","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" // add to the storage in Task \u0026 save into HDD","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" taskManager.unmark(idxUnmark);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" storageManager.save(taskManager.getTasks());","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" // format the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" + taskManager.getTask(idxUnmark).toString() + \"\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" // add to the reply","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" return ui.getReply(reply);","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":70}},{"path":"src/main/java/jeoe/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" private Label dialog;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a DialogBox object.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * @param text The string input to be placed in the dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param img The image to be placed in the dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" /** Flips the dialog box such that the ImageView is on the left and text on the right. */","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" * Returns the user\u0027s dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" * @param img Image of the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" * @param text The user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" * @return User\u0027s dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" * Returns Jeoe\u0027s dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" * @param img Image of Jeoe.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" * @param text Jeoe\u0027s output.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" * @return Jeoe\u0027s dialog box.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" public static DialogBox getJeoeDialog(String text, Image img) {","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":" db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":"// --------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":"// DialogBox version 1","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":"//import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":"//import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":"//import javafx.geometry.Pos;","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":"//import javafx.scene.Node;","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":"//import javafx.scene.control.Label;","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":"//import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":"//import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"wasjoe1"},"content":"//public class DialogBox extends HBox {","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"wasjoe1"},"content":"// private Label text;","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"wasjoe1"},"content":"// private ImageView displayPicture;","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"wasjoe1"},"content":"// public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"wasjoe1"},"content":"// text \u003d l;","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"wasjoe1"},"content":"// displayPicture \u003d iv;","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"wasjoe1"},"content":"// text.setWrapText(true);","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"wasjoe1"},"content":"// displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"wasjoe1"},"content":"// displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"wasjoe1"},"content":"// this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"wasjoe1"},"content":"// this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"wasjoe1"},"content":"// }","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"wasjoe1"},"content":"// /**","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"wasjoe1"},"content":"// * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"wasjoe1"},"content":"// */","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"wasjoe1"},"content":"// private void flip() {","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"wasjoe1"},"content":"// this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"wasjoe1"},"content":"// ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"wasjoe1"},"content":"// FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"wasjoe1"},"content":"// this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"wasjoe1"},"content":"// }","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"wasjoe1"},"content":"// public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"wasjoe1"},"content":"// return new DialogBox(l, iv);","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"wasjoe1"},"content":"// }","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"wasjoe1"},"content":"//","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"wasjoe1"},"content":"// public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"wasjoe1"},"content":"// var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"wasjoe1"},"content":"// db.flip();","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"wasjoe1"},"content":"// return db;","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"wasjoe1"},"content":"// }","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"wasjoe1"},"content":"//}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":127}},{"path":"src/main/java/jeoe/Exceptions/InitializationException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class InitializationException.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It is an exception thrown when initialization of the Jeoe program fails.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class InitializationException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a InitializationException object.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to be included in the error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" public InitializationException(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" super(\"Initialization exception thrown\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":19}},{"path":"src/main/java/jeoe/Exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class InvalidCommandException.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It is an exception thrown when an invalid command was inputted by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class InvalidCommandException extends RunException {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a InvalidCommandException object.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to be included in the error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" public InvalidCommandException(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" super(\"☹ OOPS!!! A valid command is required. Your current command \\\"\" + input","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" + \"\\\" is not a valid command.\\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" + \"Please enter your input starting with :\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" + \"bye\\n\" + \"list\\n\" + \"todo\\n\" + \"deadline\\n\" + \"event\\n\" + \"mark\\n\" + \"unmark\\n\" + \"delete\\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" + \"After the command word, leave a space before typing your task.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":24}},{"path":"src/main/java/jeoe/Exceptions/NoCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class NoCommandException.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It is an exception thrown when no command was inputted by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class NoCommandException extends RunException {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a NoCommandException object.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to be included in the error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" public NoCommandException(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" super(\"☹ OOPS!!! A valid command is required. Your current command \\\"\" + input + \"\\\" is empty.\\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" + \"Please enter your input starting with :\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" + \"bye\\n\" + \"list\\n\" + \"todo\\n\" + \"deadline\\n\" + \"event\\n\" + \"mark\\n\" + \"unmark\\n\" + \"delete\\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" + \"After the command word, leave a space before typing your task.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":23}},{"path":"src/main/java/jeoe/Exceptions/RunException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the class RunException.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It is an exception thrown when an error was encountered during the Jeoe program.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class RunException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a RunException object.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @param input The string input by the user to be included in the error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" public RunException(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" super(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":19}},{"path":"src/main/java/jeoe/Jeoe.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Commands.Command;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Commands.CommandParser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.InitializationException;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.NoCommandException;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Exceptions.RunException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates my version of Duke, called Jeoe.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * Jeoe is a chatbot that helps the user keep track of their tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" * Java coding standard was adhered to in this program.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":"public class Jeoe {","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" /** Manager to contain task list and handle operations on tasks. */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" private static TaskManager taskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" /** Manager to format \u0026 print statements to the ui. */","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" private static Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /** Manager to load \u0026 save task from local storage. */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" private static StorageManager storageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" /** Contains file path to local storage containing saved tasks. */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" private static String filePath \u003d System.getProperty(\"user.dir\") + \"/storage/taskListData.txt\"; // dir is till ip","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a Jeoe object.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" * The Jeoe object is to be passed to the Main class which runs the entire application.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" * The Jeoe object process the input using all its other components and passes back the","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" * result to the Main class for the JavaFX components to render out the output on a GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" public Jeoe() {","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" Jeoe.initialize();","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" } catch (InitializationException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" // exception to do with initialization \u003d\u003e scanner fails (cannot be file issue)","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" System.out.println(e.getMessage()); // can change to ui printing this out in the future","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * Initialises the Jeoe program.","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" * Instantiates a TaskManager object, Ui object, and a StorageManager Object.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" private static void initialize() throws InitializationException {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" storageManager \u003d new StorageManager(filePath); // loading tasks \u0026 saving tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" // contains list of task, and has operations to add/delete tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" taskManager \u003d new TaskManager(storageManager.load()); // load passes the string for TM to add task to arr","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" ui.showOpenString(); // leave it here so i know that program did get initialize","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"Jeoe initialization failed\");","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" * Gets the response from the Jeoe program.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" * Gets the response from the Jeoe program to be displayed on the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" * @param input The input from the user using the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" * @return Response string to be displayed on the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" String jeoeReply;","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":" Command c \u003d CommandParser.parse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" jeoeReply \u003d c.executeAndReply(taskManager, ui, storageManager); // already has ui.getReply executed","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" // print exception, they will handle their formatting themselves","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":" jeoeReply \u003d ui.getReply(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":" } catch (NoCommandException e) { // can think of if tried 3 empty commands, terminate program","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":" jeoeReply \u003d ui.getReply(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":" } catch (RunException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":" jeoeReply \u003d ui.getReply(e.getMessage());","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":91,"author":{"gitId":"wasjoe1"},"content":" assert jeoeReply instanceof String : \"jeoe\u0027s response has to be a string type\";","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"wasjoe1"},"content":" return jeoeReply;","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"wasjoe1"},"content":" * The main method of Jeoe.","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"wasjoe1"},"content":" * The block of code is to initialize \u0026 run the Jeoe program (in the CLI).","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"wasjoe1"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"wasjoe1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":104}},{"path":"src/main/java/jeoe/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"public class Launcher {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * The main method of Launcher.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * @param args The command line arguments.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" // this launch method will find the start method and run it","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":19}},{"path":"src/main/java/jeoe/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * A GUI for Jeoe using FXML.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" private Jeoe jeoe \u003d new Jeoe();","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * Starts the GUI by taking in a stage.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param stage Stage to be taken in for display on the GUI.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" assert jeoe !\u003d null : \"jeoe program should not be null\";","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" assert fxmlLoader !\u003d null : \"fxml loader has to exist\";","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" assert ap !\u003d null : \"anchor pane has to exist\";","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" assert scene !\u003d null : \"a scene has to exist\";","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" assert stage !\u003d null : \"a stage has to exist\";","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setJeoe(jeoe);","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" stage.show();","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":41}},{"path":"src/main/java/jeoe/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" private Jeoe jeoe;","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaJeoe.png\"));","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /** Initializes the main window. */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" public void initialize() {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" * Sets the Jeoe object for future usage(getting the Jeoe response).","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" * @param j Jeoe object to be assigned.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" public void setJeoe(Jeoe j) {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" jeoe \u003d j;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" * Creates 2 dialog boxes for user input and Jeoe output.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Jeoe\u0027s reply and then appends them to","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" @FXML","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" String response \u003d jeoe.getResponse(input);","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" DialogBox.getJeoeDialog(response, dukeImage)","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" );","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":61}},{"path":"src/main/java/jeoe/Others/StorageManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Others;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the StorageManager class.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * The StorageManager helps to manage the loading \u0026 saving of tasks, to and from the local storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"public class StorageManager {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" /** Contains file path to local storage containing saved tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a StorageManager object.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" * @param filePath The file path which the storage manager will save tasks to.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" public StorageManager(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" * Loads the tasks from local storage for usage in the Jeoe program.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" * @return File that contains list of tasks, to be handled by the TaskManager object.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" * @throws IOException If the file doesn\u0027t exist.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" public File load() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" // add items into the storage when loading the app","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" // find the file","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" File taskListData \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" // if file doesnt exist, // taskListData.length() \u003d\u003d 0; // is used to check length of file","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" if (!taskListData.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"task list data doesnt exist\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" taskListData.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" taskListData.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" return taskListData;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"couldn\u0027t create the new file exception\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" throw new IOException();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" * Converts a task of Task type, to a string to be stored in local storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" * @param t Task to be converted to string form.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" * @return String that is to be stored in local storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" private static String taskToStringForStorage(Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" // splits into type, mark or not, description, from, to","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" String deLim \u003d \" | \";","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" switch (t.taskType()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" String todo \u003d \"T\" + deLim;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" todo +\u003d t.isDone() ? (\"1\" + deLim) : (\"0\" + deLim);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" todo +\u003d t.getDescription();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" return todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" String deadline \u003d \"D\" + deLim;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" deadline +\u003d t.isDone() ? (\"1\" + deLim) : (\"0\" + deLim);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" deadline +\u003d t.getDescription() + deLim;","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" deadline +\u003d t.getEndDateTimeString();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":" return deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" String event \u003d \"E\" + deLim;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" event +\u003d t.isDone() ? (\"1\" + deLim) : (\"0\" + deLim);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":" event +\u003d t.getDescription() + deLim;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" event +\u003d t.getEndDateTimeString();","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" return event;","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":" * Saves a list of tasks in local storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"wasjoe1"},"content":" * @param tasks An ArrayList of tasks to be converted to string form and stored in local storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"wasjoe1"},"content":" public void save(ArrayList\u003cTask\u003e tasks) { // for saving into the storage, just rewrite the entire file","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"wasjoe1"},"content":" // to overwrite the file","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"wasjoe1"},"content":" // concatenate all the tasks in string form","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"wasjoe1"},"content":" String listOfTasksString \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"wasjoe1"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"wasjoe1"},"content":" String tString \u003d taskToStringForStorage(t);","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"wasjoe1"},"content":" listOfTasksString +\u003d (tString + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"wasjoe1"},"content":" // write to the file","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"wasjoe1"},"content":" FileWriter fw \u003d new FileWriter(this.filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"wasjoe1"},"content":" fw.write(listOfTasksString);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"wasjoe1"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"wasjoe1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"wasjoe1"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"wasjoe1"},"content":" /** Deletes all tasks in local storage. */","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"wasjoe1"},"content":" public void deleteAllInFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"wasjoe1"},"content":" ArrayList\u003cTask\u003e arr \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"wasjoe1"},"content":" this.save(arr);","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"deleted all in file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":118}},{"path":"src/main/java/jeoe/Others/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Others;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the Ui class.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * The Ui helps to manage the inputs \u0026 outputs of the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" /** Scanner to scan for inputs by user */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" /** Constructor for a Ui object. */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" scanner \u003d new Scanner(System.in); // makes it such that the scanner takes in inputs from the console","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" * Returns the next input line by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" * @return Next input line by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" public String nextLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" /** Displays the opening string of the Jeoe program. */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" public void showOpenString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" String openingStr \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" + \" Hello! I\u0027m JEOE\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" + \" What can I do for you?\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" + \" type :\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" + \" list \u003d\u003e to list out items in storage\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" + \" _Anything else_ \u003d\u003e store in storage\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" System.out.println(openingStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" /** Displays the ending string of the Jeoe program. */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" public void showEndString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" String endStr \u003d \"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" + \" Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" + \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" System.out.println(endStr);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" * Displays an output message to the user base on the input reply.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" * @param reply Input reply by the execution of a command.","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" public void displayReply(String reply) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" + reply","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" + \"____________________________________________________________\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" // ----------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" // when it switched to GUI","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" /** Returns the opening string of the Jeoe program. */","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" public String getOpeningString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" String openingStr \u003d \" Hello! I\u0027m JEOE\\n\"","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" + \" What can I do for you?\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" + \" type :\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" + \" list \u003d\u003e to list out items in storage\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" + \" _Anything else_ \u003d\u003e store in storage\\n\";","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" return openingStr;","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" /** Returns the ending string of the Jeoe program. */","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":" public String getEndString() {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" String endStr \u003d \" Bye. Hope to see you again soon!\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" return endStr;","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" * Returns an output message to the user base on the input reply.","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":" * @param reply Input reply by the execution of a command.","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":" public String getReply(String reply) {","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":" return \"Jeoe :\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":" + reply;","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":90}},{"path":"src/main/java/jeoe/Tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the Deadline class.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * It represents a task that has a deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" /** End date \u0026 time of the deadline task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a Deadline object.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" * @param by The end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" super(description, TaskType.DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * Returns the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" public String getEndDateTimeString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" return this.by.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" // return this.by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" // + \"T\" + this.by.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" + \" (by: \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":46}},{"path":"src/main/java/jeoe/Tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the Event class.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It represents a task that has a start date \u0026 time and a deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" protected String from;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" protected String to;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * Constructor for an Event object.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" * @param from The start date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" * @param to The end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" * Returns the start date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the start date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" public String getStartDateTimeString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" return this.from;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" * Returns the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" public String getEndDateTimeString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" return this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":51}},{"path":"src/main/java/jeoe/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the Task class.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It represents a task that is added to the Jeoe program upon a command by the user that creates a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class Task implements Comparable\u003cTask\u003e{","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /** Description of the task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" private String description; // the toString handles the space after the [ ] or [X]","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" /** Status of whether the task is done. */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" /** Enum type TaskType which lists the different task types. */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" TODO,","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" EVENT,","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" DEADLINE","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" /** TaskType of the task. */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" private TaskType taskType;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a Task object.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" * @param taskType The task type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" public Task(String description, TaskType taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" return isDone ? \"[X] \" + this.description : \"[ ] \" + this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" * Returns the done status of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" * @return Status of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" return this.isDone;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" /** Un-marks the task to be not done. */","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" public void unmark() {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" /** Marks the task to be done. */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" public void mark() {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" * Returns the type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" * @return Type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" public TaskType taskType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" return this.taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" return this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":" * Returns the start date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the start date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"wasjoe1"},"content":" public String getStartDateTimeString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"wasjoe1"},"content":" // can consider removing this method by typecasting","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"wasjoe1"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"wasjoe1"},"content":" * Returns the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"wasjoe1"},"content":" * @return String representation of the end date \u0026 time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"wasjoe1"},"content":" public String getEndDateTimeString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"wasjoe1"},"content":" // can consider removing this method by typecasting","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"wasjoe1"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"wasjoe1"},"content":" * Returns the String to be returned when task is added to the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"wasjoe1"},"content":" * @param currNumOfTask Current number of tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"wasjoe1"},"content":" * @return String to be returned when task is added to the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"wasjoe1"},"content":" public String replyString(int currNumOfTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"wasjoe1"},"content":" return \"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"wasjoe1"},"content":" + this.toString() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"wasjoe1"},"content":" + \"Now you have \" + currNumOfTask + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"wasjoe1"},"content":" // the toString is called from the child class which is amazing \u003d\u003e RTT is child class type i guess","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":119,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"wasjoe1"},"content":" * Method to compare this object with another object when sorting.","lastModifiedDate":"2023-09-14"},{"lineNumber":121,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":122,"author":{"gitId":"wasjoe1"},"content":" * @param otherTask The other task to compare to.","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"wasjoe1"},"content":" * @return Int to returned to indicate which string comes first lexicographically.","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-14"},{"lineNumber":126,"author":{"gitId":"wasjoe1"},"content":" public int compareTo(Task otherTask) {","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"wasjoe1"},"content":" // Compare base on string","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"wasjoe1"},"content":" return this.toString().compareTo(otherTask.toString());","lastModifiedDate":"2023-09-14"},{"lineNumber":129,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":130,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":130}},{"path":"src/main/java/jeoe/Tasks/TaskManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the TaskManager class.","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" * The StorageManager helps to contain the task list and handle operations on tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"public class TaskManager {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" /** Contains list of tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" private ArrayList\u003cTask\u003e storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a TaskManager object.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" * Adds the lists of task to the storage field.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" * @param taskListData A file containing stored tasks on local machine.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" public TaskManager(File taskListData) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":" storage \u003d new ArrayList\u003c\u003e(); // everytime you initialize, you start with a new storage","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":" Scanner fileSc \u003d new Scanner(taskListData);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":" while (fileSc.hasNextLine()) { // if no task, storage is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d stringToTask(fileSc.nextLine());","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":" storage.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":" fileSc.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"storage manager did not load file properly\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"wasjoe1"},"content":" * Converts a task in string format to Task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"wasjoe1"},"content":" * @param taskInStringForm The task in string format to be converted.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"wasjoe1"},"content":" * @return A task of Task type.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"wasjoe1"},"content":" private Task stringToTask(String taskInStringForm) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"wasjoe1"},"content":" String[] taskData \u003d taskInStringForm.split(\" \\\\| \"); // assuming the description and all that doesnt have |","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"wasjoe1"},"content":" // splits into type, mark or not, description, from, to","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"wasjoe1"},"content":" switch (taskData[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"wasjoe1"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"wasjoe1"},"content":" Task todo \u003d new Todo(taskData[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"wasjoe1"},"content":" if (taskData[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"wasjoe1"},"content":" todo.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"wasjoe1"},"content":" return todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"wasjoe1"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"wasjoe1"},"content":" Task deadline \u003d new Deadline(taskData[2], LocalDateTime.parse(taskData[3]));","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"wasjoe1"},"content":" if (taskData[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"wasjoe1"},"content":" deadline.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"wasjoe1"},"content":" return deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"wasjoe1"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"wasjoe1"},"content":" Task event \u003d new Event(taskData[2], taskData[3], taskData[4]);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"wasjoe1"},"content":" if (taskData[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"wasjoe1"},"content":" event.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"wasjoe1"},"content":" return event;","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"wasjoe1"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"wasjoe1"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"wasjoe1"},"content":" * Returns the list of task.","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"wasjoe1"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"wasjoe1"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"wasjoe1"},"content":" return this.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"wasjoe1"},"content":" * Returns the task at that index.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"wasjoe1"},"content":" * @param idx Index of the task to be returned.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"wasjoe1"},"content":" * @return The task at that index.","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"wasjoe1"},"content":" public Task getTask(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"wasjoe1"},"content":" return this.storage.get(idx);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"wasjoe1"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"wasjoe1"},"content":" * @param task Task to be added.","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"wasjoe1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"wasjoe1"},"content":" this.storage.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"wasjoe1"},"content":" * Deletes the task at that index.","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"wasjoe1"},"content":" * @param idx Index of the task to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"wasjoe1"},"content":" * @return The deleted task.","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"wasjoe1"},"content":" public Task deleteIndex(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"wasjoe1"},"content":" return this.storage.remove(idx);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"wasjoe1"},"content":" * Returns the size of the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"wasjoe1"},"content":" * @return Size of the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"wasjoe1"},"content":" public int getTasksSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"wasjoe1"},"content":" return this.storage.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"wasjoe1"},"content":" * Marks a task in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"wasjoe1"},"content":" * @param idxMark Index of the task to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"wasjoe1"},"content":" public void mark(int idxMark) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"wasjoe1"},"content":" storage.get(idxMark).mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"wasjoe1"},"content":" * Un-marks a task in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"wasjoe1"},"content":" * @param idxUnmark Index of the task to be un-marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"wasjoe1"},"content":" public void unmark(int idxUnmark) {","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"wasjoe1"},"content":" storage.get(idxUnmark).unmark();","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":143,"author":{"gitId":"wasjoe1"},"content":" * Sorts the tasks in the list.","lastModifiedDate":"2023-09-14"},{"lineNumber":144,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":145,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-14"},{"lineNumber":146,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":147,"author":{"gitId":"wasjoe1"},"content":" public void sort() {","lastModifiedDate":"2023-09-14"},{"lineNumber":148,"author":{"gitId":"wasjoe1"},"content":" Collections.sort(this.storage);","lastModifiedDate":"2023-09-14"},{"lineNumber":149,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-14"},{"lineNumber":150,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":151,"author":{"gitId":"wasjoe1"},"content":" /** Returns a string representation of the list of tasks. */","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"wasjoe1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"wasjoe1"},"content":" String reply \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"wasjoe1"},"content":" for (int i \u003d 0; i \u003c this.storage.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"wasjoe1"},"content":" String num \u003d String.valueOf(i + 1) + \". \";","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"wasjoe1"},"content":" Task task \u003d this.storage.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"wasjoe1"},"content":" reply +\u003d num + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"wasjoe1"},"content":" return reply;","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":162}},{"path":"src/main/java/jeoe/Tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" * This class encapsulates the Todo class.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" * It represents a task that has only its description.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":" * @author Joe Chua","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":" * @version Week-3","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" * Constructor for a Todo object.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"wasjoe1":25}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"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-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"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\"jeoe.MainWindow\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"447.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"153.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"0.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"446.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"153.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"447.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"472.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"wasjoe1":19}},{"path":"src/test/java/jeoe/Commands/DeadlineCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"public class DeadlineCommandTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" protected StorageManager sm;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" protected TaskManager tm;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" protected Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" public void testAddDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" String filePath \u003d System.getProperty(\"user.dir\") + \"/storage/testTaskListData.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" sm \u003d new StorageManager(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" sm.deleteAllInFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" tm \u003d new TaskManager(sm.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" DeadlineCommand deadline \u003d new DeadlineCommand(\"deadline test /by 2022-12-01 18:00\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" deadline.execute(tm, ui, sm);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" assertEquals(\"1. [D][ ] test (by: Dec 1 2022 18:00)\\n\", tm.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"Exception in add deadline test\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":30}},{"path":"src/test/java/jeoe/Commands/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"package jeoe.Commands;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.StorageManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Others.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"import jeoe.Tasks.TaskManager;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":" protected StorageManager sm;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":" protected TaskManager tm;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":" protected Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":" public void testAddTodo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":" String filePath \u003d System.getProperty(\"user.dir\") + \"/storage/testTaskListData.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":" sm \u003d new StorageManager(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":" sm.deleteAllInFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":" tm \u003d new TaskManager(sm.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":" TodoCommand todoTest \u003d new TodoCommand(\"todo test\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":" todoTest.execute(tm, ui, sm);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":" assertEquals(\"1. [T][ ] test\\n\", tm.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":" System.out.println(\"Exception in add to do test\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":30}},{"path":"storage/taskListData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"T | 0 | a","lastModifiedDate":"2023-09-14"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"T | 0 | b","lastModifiedDate":"2023-09-14"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"T | 0 | c","lastModifiedDate":"2023-09-14"}],"authorContributionMap":{"wasjoe1":3}},{"path":"storage/testTaskListData.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":1}},{"path":"testdata/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"T | 0 | test","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"wasjoe1":8}},{"path":"text-ui-test/diff-output.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"--- ACTUAL.TXT\t2023-08-24 12:24:54","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"+++ EXPECTED.TXT\t2023-08-24 12:08:47","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"@@ -24,3 +24,40 @@","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":" Now you have 3 tasks in the list.","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":" ____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"+ ☹ OOPS!!! A valid jeoe.Tasks.jeoe.Tasks is required. Your current input \"random grribish\" is not a valid task.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"wasjoe1"},"content":"+Please enter your input starting with :","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"wasjoe1"},"content":"+todo","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"wasjoe1"},"content":"+deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"wasjoe1"},"content":"+event","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"wasjoe1"},"content":"+ After the command word, leave a space before typing your task.","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"wasjoe1"},"content":"+Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"wasjoe1"},"content":"+[T][X] borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"wasjoe1"},"content":"+OK, I\u0027ve marked this task as not done yet:","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"wasjoe1"},"content":"+[T][ ] borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"wasjoe1"},"content":"+Nice! I\u0027ve marked this task as done:","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"wasjoe1"},"content":"+[D][X] return book (by: Sunday)","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"wasjoe1"},"content":"+Here are the tasks in your list:","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"wasjoe1"},"content":"+1. [T][ ] borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"wasjoe1"},"content":"+2. [D][X] return book (by: Sunday)","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"wasjoe1"},"content":"+3. [E][ ] project meeting (from: Mon 2pm to: 4pm)","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"wasjoe1"},"content":"+ Bye. Hope to see you again soon!","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"wasjoe1"},"content":"+____________________________________________________________","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"wasjoe1"},"content":"+","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wasjoe1":43}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"wasjoe1"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"wasjoe1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"wasjoe1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"wasjoe1"},"content":"random grribish","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"wasjoe1"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"wasjoe1"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"wasjoe1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"wasjoe1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"wasjoe1"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"wasjoe1":9}}] diff --git a/wasjoe1_ip_master/commits.json b/wasjoe1_ip_master/commits.json index aab8a2be..a0011302 100644 --- a/wasjoe1_ip_master/commits.json +++ b/wasjoe1_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"wasjoe1":[{"date":"2023-08-24","commitResults":[{"hash":"754e6fa38ca6732130d10c53a348bd4d2348cd00","isMergeCommit":false,"messageTitle":"Level-0 commit by joe : 1st ever commit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":6}}},{"hash":"457f29c91dbb48f0f2ac40b50c291f809d66168f","isMergeCommit":false,"messageTitle":"Level-1 commit by joe : just bye","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"7f92e1f50fc22045cea33ab7f9689ab96481b0bc","isMergeCommit":false,"messageTitle":"Level-1 commit by joe : just bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"b88e49ceebd30a6f61d2290728f7f76eda0d5ea8","isMergeCommit":false,"messageTitle":"Level-2 commit by joe : add stuff \u0026 display a list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":8}}},{"hash":"9272ff74672a8cb8db0c0f28b4316b555abfa274","isMergeCommit":false,"messageTitle":"Level-3 commit by joe : Having tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":11}}},{"hash":"1dc174f5c91638d1d8a7f44946207fb9ab8f0c5c","isMergeCommit":false,"messageTitle":"Level-4 commit by joe : Have other task types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":157,"deletions":64}}},{"hash":"5bdb7bc05c5478d1cfe6b6970e1c8dd22f49dfde","isMergeCommit":false,"messageTitle":"Level-5 commit by joe : error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":163,"deletions":152}}},{"hash":"c0465f0be3c39c409b0a5aeac74906b289874f14","isMergeCommit":false,"messageTitle":"A-TextUiTesting commit by joe : ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":52,"deletions":0}}},{"hash":"6f7874c4d7624913c0dc379013f4faefdb065cf3","isMergeCommit":false,"messageTitle":"Level-6 commit by joe : deleting a task","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":7}}}]},{"date":"2023-09-01","commitResults":[{"hash":"2e5098a98454c72581e89987289e63003e7f771b","isMergeCommit":false,"messageTitle":"Add save feature to Jeoe.java and some restructure","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":425,"deletions":198}}},{"hash":"625805600d3a3a11c83138740784306cb7a23187","isMergeCommit":false,"messageTitle":"Teach chatbot to understand date \u0026 time in deadline task","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":19,"deletions":19}}}]},{"date":"2023-09-02","commitResults":[{"hash":"bd1fc8817eb207c3309faae0af11381832b303c9","isMergeCommit":false,"messageTitle":"Add Manager and Command classes, more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":498,"deletions":211}}},{"hash":"f2702978f341abe675b1343e51056a46bc4fe686","isMergeCommit":false,"messageTitle":"Move all files and packages into Jeoe pacakage","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":68,"deletions":78}}},{"hash":"c2dd4a52908276a428900ec5066404707adc8c11","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f3d9c14e511e1deb9a20dd0b3089c707487f220b","isMergeCommit":false,"messageTitle":"Add gradle support to project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":0,"deletions":2}}},{"hash":"5dfe72b13c756a92049aa7660407687dc43cbd85","isMergeCommit":false,"messageTitle":"Add 2 JUnit tests, Deadline \u0026 Todo","messageBody":"","tags":["v0.1","A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":12,"deletions":2},"java":{"insertions":76,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"046380310cb92afe543dd84dce704d998b8466af","isMergeCommit":false,"messageTitle":"Write javadocs for Jeoe program","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":691,"deletions":177}}},{"hash":"277d72b40ecace254b7a7bc5c6b3bd0980747c31","isMergeCommit":false,"messageTitle":"Follow the CS2103 coding standard for java","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"a6bcd54b74851a3046ede3928e98074ec73b53bf","isMergeCommit":false,"messageTitle":"Add find feature to Jeoe program","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"fb60964999498b9722931b0b899996b3e13dee49","isMergeCommit":false,"messageTitle":"Run checkstyle on code","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-06","commitResults":[{"hash":"400ee55ff2ade7f38eaa5153431157fdc0f00e29","isMergeCommit":false,"messageTitle":"Add GUI for Jeoe program","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"fxml":{"insertions":35,"deletions":0},"txt":{"insertions":2,"deletions":8},"java":{"insertions":791,"deletions":159}}}]},{"date":"2023-09-14","commitResults":[{"hash":"68d2b94ebb7fd2413ed6ccbface6356c875e36a1","isMergeCommit":false,"messageTitle":"Include assertions in Main and Jeoe class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":2,"deletions":1},"java":{"insertions":10,"deletions":155}}},{"hash":"8509f6faf7ef761f58efd4d8742c54c6ada44164","isMergeCommit":true,"messageTitle":"Merge pull request #1 from wasjoe1/branch-A-Assertions","messageBody":"Include assertions in Main and Jeoe class","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"e557489c7edd4ef1e1176e71f39a5f0cbf3082f1","isMergeCommit":false,"messageTitle":"Update storage file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"e4627c01ae8e8f045a8590cd8b0240a7040eb295","isMergeCommit":false,"messageTitle":"Remove all style errors using checkstyle as a guide","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":23}}},{"hash":"08ba265019e409eb92ba19dca33b2cf1c3f47594","isMergeCommit":true,"messageTitle":"Merge pull request #2 from wasjoe1/branch-A-CodeQuality","messageBody":"Remove all style errors using checkstyle as a guide","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"8a6da320e4ee2eb697c3db5879fe1527ae96b632","isMergeCommit":false,"messageTitle":"Clean code quality using checkstyle as a guide","messageBody":"Code quality is currently not clean. checkstyle shows that there\nare errors in the styling of my code.\n\nAdditional space are being removed, as well as unnecessary code.\nCheckstyle guide is used as reference.\n\nThese are done as then there would be a check list of styling\nthat i can check against for any errors.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"8c8dd6a0620ffe798da6d966cecd1b35cdc3ada0","isMergeCommit":false,"messageTitle":"Add sort feature to Jeoe","messageBody":"There is currently no sort feature.\n\nSometimes users want to see the list in a sorted manner for better\nviewing.\n\nAdd a new sort command in Commands directory.\nAdd a sort method to Task manager.\nMake Task objects comparable by extending comparable interface.\nAdd sort to the list of commands to the CommandParser.\n\nIts done this way due to the abstraction of Jeoe.\n","tags":["C-Sort","BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":96,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"wasjoe1":{"java":1920,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":22,"txt":64}},"authorContributionVariance":{"wasjoe1":112764.82},"authorDisplayNameMap":{"wasjoe1":"CS2103T-F11-2 CHUA.. JOE"}} +{"authorDailyContributionsMap":{"wasjoe1":[{"date":"2023-08-24","commitResults":[{"hash":"754e6fa38ca6732130d10c53a348bd4d2348cd00","isMergeCommit":false,"messageTitle":"Level-0 commit by joe : 1st ever commit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":6}}},{"hash":"457f29c91dbb48f0f2ac40b50c291f809d66168f","isMergeCommit":false,"messageTitle":"Level-1 commit by joe : just bye","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"7f92e1f50fc22045cea33ab7f9689ab96481b0bc","isMergeCommit":false,"messageTitle":"Level-1 commit by joe : just bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"b88e49ceebd30a6f61d2290728f7f76eda0d5ea8","isMergeCommit":false,"messageTitle":"Level-2 commit by joe : add stuff \u0026 display a list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":8}}},{"hash":"9272ff74672a8cb8db0c0f28b4316b555abfa274","isMergeCommit":false,"messageTitle":"Level-3 commit by joe : Having tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":11}}},{"hash":"1dc174f5c91638d1d8a7f44946207fb9ab8f0c5c","isMergeCommit":false,"messageTitle":"Level-4 commit by joe : Have other task types","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":157,"deletions":64}}},{"hash":"5bdb7bc05c5478d1cfe6b6970e1c8dd22f49dfde","isMergeCommit":false,"messageTitle":"Level-5 commit by joe : error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":163,"deletions":152}}},{"hash":"c0465f0be3c39c409b0a5aeac74906b289874f14","isMergeCommit":false,"messageTitle":"A-TextUiTesting commit by joe : ui testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":52,"deletions":0}}},{"hash":"6f7874c4d7624913c0dc379013f4faefdb065cf3","isMergeCommit":false,"messageTitle":"Level-6 commit by joe : deleting a task","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":7}}}]},{"date":"2023-09-01","commitResults":[{"hash":"2e5098a98454c72581e89987289e63003e7f771b","isMergeCommit":false,"messageTitle":"Add save feature to Jeoe.java and some restructure","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":425,"deletions":198}}},{"hash":"625805600d3a3a11c83138740784306cb7a23187","isMergeCommit":false,"messageTitle":"Teach chatbot to understand date \u0026 time in deadline task","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":19,"deletions":19}}}]},{"date":"2023-09-02","commitResults":[{"hash":"bd1fc8817eb207c3309faae0af11381832b303c9","isMergeCommit":false,"messageTitle":"Add Manager and Command classes, more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":498,"deletions":211}}},{"hash":"f2702978f341abe675b1343e51056a46bc4fe686","isMergeCommit":false,"messageTitle":"Move all files and packages into Jeoe pacakage","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":68,"deletions":78}}},{"hash":"c2dd4a52908276a428900ec5066404707adc8c11","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f3d9c14e511e1deb9a20dd0b3089c707487f220b","isMergeCommit":false,"messageTitle":"Add gradle support to project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":0,"deletions":2}}},{"hash":"5dfe72b13c756a92049aa7660407687dc43cbd85","isMergeCommit":false,"messageTitle":"Add 2 JUnit tests, Deadline \u0026 Todo","messageBody":"","tags":["v0.1","A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":12,"deletions":2},"java":{"insertions":76,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"046380310cb92afe543dd84dce704d998b8466af","isMergeCommit":false,"messageTitle":"Write javadocs for Jeoe program","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":691,"deletions":177}}},{"hash":"277d72b40ecace254b7a7bc5c6b3bd0980747c31","isMergeCommit":false,"messageTitle":"Follow the CS2103 coding standard for java","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"a6bcd54b74851a3046ede3928e98074ec73b53bf","isMergeCommit":false,"messageTitle":"Add find feature to Jeoe program","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"fb60964999498b9722931b0b899996b3e13dee49","isMergeCommit":false,"messageTitle":"Run checkstyle on code","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-06","commitResults":[{"hash":"400ee55ff2ade7f38eaa5153431157fdc0f00e29","isMergeCommit":false,"messageTitle":"Add GUI for Jeoe program","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":1},"fxml":{"insertions":35,"deletions":0},"txt":{"insertions":2,"deletions":8},"java":{"insertions":791,"deletions":159}}}]},{"date":"2023-09-14","commitResults":[{"hash":"68d2b94ebb7fd2413ed6ccbface6356c875e36a1","isMergeCommit":false,"messageTitle":"Include assertions in Main and Jeoe class","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"txt":{"insertions":2,"deletions":1},"java":{"insertions":10,"deletions":155}}},{"hash":"8509f6faf7ef761f58efd4d8742c54c6ada44164","isMergeCommit":true,"messageTitle":"Merge pull request #1 from wasjoe1/branch-A-Assertions","messageBody":"Include assertions in Main and Jeoe class","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"e2b6bf61de771ee02c6ce83c522fb4089c2031b2","isMergeCommit":false,"messageTitle":"Fill in update of Jeoe.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"e557489c7edd4ef1e1176e71f39a5f0cbf3082f1","isMergeCommit":false,"messageTitle":"Update storage file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"e4627c01ae8e8f045a8590cd8b0240a7040eb295","isMergeCommit":false,"messageTitle":"Remove all style errors using checkstyle as a guide","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":23}}},{"hash":"08ba265019e409eb92ba19dca33b2cf1c3f47594","isMergeCommit":true,"messageTitle":"Merge pull request #2 from wasjoe1/branch-A-CodeQuality","messageBody":"Remove all style errors using checkstyle as a guide","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"8a6da320e4ee2eb697c3db5879fe1527ae96b632","isMergeCommit":false,"messageTitle":"Clean code quality using checkstyle as a guide","messageBody":"Code quality is currently not clean. checkstyle shows that there\nare errors in the styling of my code.\n\nAdditional space are being removed, as well as unnecessary code.\nCheckstyle guide is used as reference.\n\nThese are done as then there would be a check list of styling\nthat i can check against for any errors.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"eeadb599d0158af0fe71723a946db10388ca5448","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8c8dd6a0620ffe798da6d966cecd1b35cdc3ada0","isMergeCommit":false,"messageTitle":"Add sort feature to Jeoe","messageBody":"There is currently no sort feature.\n\nSometimes users want to see the list in a sorted manner for better\nviewing.\n\nAdd a new sort command in Commands directory.\nAdd a sort method to Task manager.\nMake Task objects comparable by extending comparable interface.\nAdd sort to the list of commands to the CommandParser.\n\nIts done this way due to the abstraction of Jeoe.\n","tags":["C-Sort","BCD-Extension"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":96,"deletions":1}}}]},{"date":"2023-09-16","commitResults":[{"hash":"3cc13bcca7f222a4eeed81c87f5ff3bcb81497e0","isMergeCommit":true,"messageTitle":"Merge pull request #3 from wasjoe1/branch-A-Assertions","messageBody":"Branch A-Assertions","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"wasjoe1":{"java":1920,"md":0,"fxml":35,"sh":0,"bat":0,"gradle":22,"txt":64}},"authorContributionVariance":{"wasjoe1":106974.25},"authorDisplayNameMap":{"wasjoe1":"CS2103T-F11-2 CHUA.. JOE"}} diff --git a/wxwern_ip_master/commits.json b/wxwern_ip_master/commits.json index 654131da..7721e0e7 100644 --- a/wxwern_ip_master/commits.json +++ b/wxwern_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"wxwern":[{"date":"2023-08-22","commitResults":[{"hash":"55ee9edefd399cd35ec7630b84cd0940c484227a","isMergeCommit":false,"messageTitle":"add skeletal chatbot implementation","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":225,"deletions":6}}},{"hash":"6319c1f3bef8680c4b16cbab0b49fd9b7a014201","isMergeCommit":false,"messageTitle":"add echoing POC, fix convo open/close behaviour and printouts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":5}}},{"hash":"730b04173962fd06355beeb949039f2c8b501b05","isMergeCommit":false,"messageTitle":"improve interactive CLI display","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"71f80ffaff1ba9577d8f0cd240ed09da4e30d4d8","isMergeCommit":false,"messageTitle":"add wip task manager abstraction","messageBody":"","tags":["A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":0}}},{"hash":"6da1b6c28e6cf114cc41395f961c76acf114b292","isMergeCommit":false,"messageTitle":"add wip chatbot integration with task manager","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":11}}},{"hash":"52ee2c9180c3b08cfccb1790f6f7a659adeb2fff","isMergeCommit":false,"messageTitle":"add mark/unmark as complete support","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":3}}},{"hash":"8a0fd259555d3d53cd0977e3c193118ca3dd28e9","isMergeCommit":false,"messageTitle":"complete task class implementation","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}},{"hash":"643f4a8f68dfc3da4f262557e6aa5c4e7716a154","isMergeCommit":false,"messageTitle":"add distinct tasks: todos, events, deadlines","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":1}}},{"hash":"f604651be6e1452e9f655bf66538fbbe74032156","isMergeCommit":false,"messageTitle":"add wip integration with new task types to chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":11}}}]},{"date":"2023-08-23","commitResults":[{"hash":"3bc41634e58b22a5e0be561550e7893e1419d739","isMergeCommit":false,"messageTitle":"add new command parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":0}}},{"hash":"31e1d59bbffdcc42f2e60769a29f5c688728f2f7","isMergeCommit":false,"messageTitle":"update chatbot to use command parser plus fun convo style","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":39}}},{"hash":"b4077090197322c3bc563ad410783e07930d6658","isMergeCommit":false,"messageTitle":"update tests","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":25,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"34158bb883bf2d793184fde88f998f2c79ae4219","isMergeCommit":false,"messageTitle":"add new chatbot exception classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"fd95407560b5a83130f77a6345f87853009f043f","isMergeCommit":false,"messageTitle":"make chatbot handle exceptions and report to user","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":146}}},{"hash":"8835d8936191839a94df64aad6f659affbe3f52b","isMergeCommit":false,"messageTitle":"improve error phrasing, add missing error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":5}}},{"hash":"e0e85efa443146d767c52151c450236260a7d43a","isMergeCommit":false,"messageTitle":"add task delete support to chatbot","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":16}}},{"hash":"66843b3bbea24a6c411167c7c79389229dd9a9b5","isMergeCommit":false,"messageTitle":"Fix chatbot singleton not actually being a singleton","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"d8a9636ebe928c04259652ea927acefb4ce03d31","isMergeCommit":false,"messageTitle":"fix functional interface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"f7c26f7a8a8f8fde8b0d0e462ef613ec4920b00c","isMergeCommit":false,"messageTitle":"Refactor commands to support enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":28}}},{"hash":"7f628605b0c4b4a161d4bcd7159173a017ecf2e9","isMergeCommit":false,"messageTitle":"Rephrase Mark list operation enum to MarkComplete","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":9}}},{"hash":"f06ec1ae608153da485e5fc8aa7ed0c21cd1f6f5","isMergeCommit":false,"messageTitle":"Update unit tests to also test deletions and errors","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"38e03dd2098fa595065f620cde2b6c4a91aa58dc","isMergeCommit":false,"messageTitle":"Add WIP persistent storage support","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":2}}},{"hash":"4fa7c4d3872b5c29037eeca69d87ff4e7c40f18a","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"aa169f6d6e9093f864eeb714ff4f592b7f3fce29","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Level-7","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"438aa1a631229b50d8d2927edc866d9c0ac4a1e2","isMergeCommit":false,"messageTitle":"Add datetime input validation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":19}}},{"hash":"ccdb8e48656f8a34981a6ea2a0516f400da41037","isMergeCommit":false,"messageTitle":"Update unit tests for new datetime formats","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2}}},{"hash":"5745f726474c7e6b5d25b64ff1e6496b87597b26","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5930c3b292ccb03b6fb111b937dd7061ed6299e8","isMergeCommit":false,"messageTitle":"Add Gson dependency for JSON conversion","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"fade8f263f05497c981d25b1e00a4fcd4b8e4568","isMergeCommit":false,"messageTitle":"Complete persistent storage support","messageBody":"This integrates with Google\u0027s Gson and saves data in the relative\nlocation `todoifydata/tasks.json`.\n\nNote: The text-based unit test suite is currently broken by inability\nto compile Gson (it doesn\u0027t use Gradle). It should be migrated to JUnit\nsoon.\n","tags":["Level-7","A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":6}}},{"hash":"0fefa353e9bd22dca49ac35140a1080bec3e835a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c5777cc002dc31caace73d3a2a1df0a464db9b2d","isMergeCommit":false,"messageTitle":"Improve class structures and documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":215,"deletions":99}}}]},{"date":"2023-08-29","commitResults":[{"hash":"1f58da5460fa17a85290682ee4538d7c12a2ad8d","isMergeCommit":false,"messageTitle":"Improve Chatbot class organization","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":327,"deletions":189}}},{"hash":"8bd712509e29e5f7555355ec2dec02e2fa7b175b","isMergeCommit":false,"messageTitle":"Refactor classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":548,"deletions":463}}},{"hash":"71ed521b1e1fc22e210f72ebe2ab7a00d5d58cf8","isMergeCommit":false,"messageTitle":"Improve CLI design to mimic chatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":28}}},{"hash":"8412ebea632032351a2d91f4d4f929befafc413c","isMergeCommit":false,"messageTitle":"Add some JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3},"java":{"insertions":195,"deletions":19}}},{"hash":"adb13beca39c1e1bf400dc6ea8ca467c2115b334","isMergeCommit":false,"messageTitle":"Update project main class name and command syntax","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":15,"deletions":11},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":16,"deletions":9}}},{"hash":"48fd17409cd3ea20e8ae6d606c3bde6c50fcd150","isMergeCommit":false,"messageTitle":"Add version number","messageBody":"","tags":["v0.0.1-alpha","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"5c78c6d07d5c555e7b5f01ed72f46fe41a1b9d28","isMergeCommit":false,"messageTitle":"Fix tests to follow new syntax","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"47ba7fa77c49ecb52df8691000c402cbd61307b3","isMergeCommit":false,"messageTitle":"Made documentation formatting consistent","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":4}}},{"hash":"04023b24caf1f220de9fc03cd375e0d867610d0c","isMergeCommit":false,"messageTitle":"Apply codestyle formatting as per requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":216,"deletions":189}}},{"hash":"5f77a876c4d611a5ba984f6b55c7075e666e4d1e","isMergeCommit":false,"messageTitle":"Update phrasing and more code auto-formatting","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":82}}},{"hash":"6256c06d1a37171ac469391c4dbe51134f54587c","isMergeCommit":false,"messageTitle":"Add support for task search","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":13}}},{"hash":"48c445d450bf11c98a04daf1f0c53d6d7cc2a8bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cfe70d5ccbe07207f3d7a3ed57458cf8968f89e9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"adc1226e3387e3ace4876f2e784417cad380b97e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e2a96e6d6837ab27ab5569f5cd06c4a3c86949dd","isMergeCommit":false,"messageTitle":"Fix access modifiers for internal methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"d1e28f2ee390ae504d6a90fe6547268744b73294","isMergeCommit":false,"messageTitle":"Refactor source files into a single package","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":63,"deletions":55}}}]},{"date":"2023-09-02","commitResults":[{"hash":"308f6720f2f0ec17710403686f95885f1528fdfc","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"cdb9f424e7ab2320783bca402ee157b252fdb210","isMergeCommit":false,"messageTitle":"Refactor code for checkstyle compliance","messageBody":"","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":93,"deletions":122},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-06","commitResults":[{"hash":"1b3cc1ba82de62cd30373b285022dffc70b85687","isMergeCommit":false,"messageTitle":"Refactor command processing to better use exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":41}}},{"hash":"1f600b75263550a04077def16202448e4855932b","isMergeCommit":false,"messageTitle":"Fix an overly long line","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"da1f863fd68e57eb9116c769a43bd2fa7f1ee25e","isMergeCommit":false,"messageTitle":"Add rudimentary UI with JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":79,"deletions":0},"java":{"insertions":290,"deletions":10}}}]},{"date":"2023-09-08","commitResults":[{"hash":"4e898232149ffe17232a58fafa225569a18d3564","isMergeCommit":false,"messageTitle":"Fix UI layout bugs on small window sizes","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":8,"deletions":15},"java":{"insertions":6,"deletions":1}}},{"hash":"9b011ef55c0d6a03bec01ddf275d97122a22f830","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5f2d02ab77ddeaa856376f4e09f4c7aba389a245","isMergeCommit":false,"messageTitle":"Update README and build version","messageBody":"","tags":["v0.0.3-alpha"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"bf9aff33d491a4ea16d838b888088b660273d513","isMergeCommit":false,"messageTitle":"Add assertions to document some code assumptions","messageBody":"Some parts of the code rely on certain assumptions to function\ncorrectly. This commit notes the trivial assumptions made across some\nregions of the codebase, which can be tested by enabling Java\nassertions.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":2}}}]},{"date":"2023-09-13","commitResults":[{"hash":"72280555722be3c5da42613fe89468e2778abeb0","isMergeCommit":false,"messageTitle":"Improve code quality by updating phrasing and docs","messageBody":"These changes are based on feedback as per the pull request\nhttps://github.com/nus-cs2103-AY2324S1/ip/pull/67\n\nThis mostly involves updating method and variable names for improved\nclarity, and adding appropriate documentation to some internal sections.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":22}}},{"hash":"757fefc511a0c1d0bb8828db339a6dd3978d9bd1","isMergeCommit":false,"messageTitle":"Refactor the long ChatCommand#parse method","messageBody":"The functionality in this method has been extracted into multiple,\nsmaller methods to improve understanding.\n","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":42}}},{"hash":"a57bfd22cdd5cb67f9293fd2a7a04440426fee19","isMergeCommit":false,"messageTitle":"Improve code formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":17}}},{"hash":"faf9b4f3add94a1547bed91663a163d775e3ffe0","isMergeCommit":false,"messageTitle":"Remove the need for warning suppression annotation","messageBody":"This is done by swapping out an array that needed to use generics\n(but does not support it) with a Java Collections List (which supports\ngenerics).\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"bb07cfb5afc44ed308e11ef4406c433131654d2b","isMergeCommit":false,"messageTitle":"Remove an unused Gson object","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"d10b706e72ec38a66ab9f096349b234fcf25b586","isMergeCommit":false,"messageTitle":"Refactor task list retrieval to Java streams","messageBody":"","tags":["A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":19}}},{"hash":"2ae97151c0bae6d70973e715520550a60751975a","isMergeCommit":true,"messageTitle":"Merge pull request #2 from wxwern/branch-A-CodeQuality","messageBody":"Code quality improvements","fileTypesAndContributionMap":{}},{"hash":"7bcb3566bd52365918b3b66f33c445241fa63d9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f7cfefe61ab30dd7923dd3a2b332d7a6e5abb453","isMergeCommit":true,"messageTitle":"Merge pull request #1 from wxwern/branch-A-Assertions","messageBody":"Add assertions to document some code assumptions","fileTypesAndContributionMap":{}},{"hash":"2ee33e2e5c018308bbf8ed373eb7e9f88cbbbea0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Streams","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8ace4674ded8b352cf3c14b6c0369418dcf74460","isMergeCommit":true,"messageTitle":"Merge pull request #3 from wxwern/branch-A-Streams","messageBody":"Add task list retrieval via Java streams","fileTypesAndContributionMap":{}},{"hash":"3592470fd1d113f4da0936aa8ed60c19b4166868","isMergeCommit":false,"messageTitle":"Update README with content and fix its formatting","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":24,"deletions":17}}},{"hash":"2cbf51dee36a811673554f20ed916ccaf48f09ca","isMergeCommit":false,"messageTitle":"Add command mappings and info in enum declaration","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":50}}},{"hash":"4514c215d0397a2434d698cbb0823c603c909a03","isMergeCommit":false,"messageTitle":"Add help command","messageBody":"","tags":["C-Help","BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":3}}},{"hash":"b15a124d374d53225b28dff6dfd531f370b71fbe","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Help\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"a30d440f1a00c6ae3149ee921603b2adb48d6b2b","isMergeCommit":false,"messageTitle":"Fix checkstyle issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"be2c35cf7006b707e959643a3336a480e4d05690","isMergeCommit":false,"messageTitle":"Fix text UI tests for gradle and new output format","messageBody":"The text UI tests have been changed to utilise gradle instead of javac\nfor compilation, which makes it operate correctly again. Additionally,\nthe test case and outputs have been updated accordingly to the new\nformats.\n\nCaveat: We no longer maintain the Windows test script and is removed.\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":6},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":26,"deletions":9}}}]},{"date":"2023-09-15","commitResults":[{"hash":"92b8f7f84526678c7069198b152a6adf126f0e17","isMergeCommit":false,"messageTitle":"Remove color in test to fix GitHub macOS CI","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":1,"deletions":1}}},{"hash":"ec0d9b3ce88e7b02cf35b9346ab635d28211dcb3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CI\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"wxwern":{"java":2487,"md":29,"fxml":72,"sh":26,"bat":0,"gradle":22,"txt":34}},"authorContributionVariance":{"wxwern":274830.47},"authorDisplayNameMap":{"wxwern":"CS2103T-W08-3 LIM .. JIE"}} +{"authorDailyContributionsMap":{"wxwern":[{"date":"2023-08-22","commitResults":[{"hash":"55ee9edefd399cd35ec7630b84cd0940c484227a","isMergeCommit":false,"messageTitle":"add skeletal chatbot implementation","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":225,"deletions":6}}},{"hash":"6319c1f3bef8680c4b16cbab0b49fd9b7a014201","isMergeCommit":false,"messageTitle":"add echoing POC, fix convo open/close behaviour and printouts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":5}}},{"hash":"730b04173962fd06355beeb949039f2c8b501b05","isMergeCommit":false,"messageTitle":"improve interactive CLI display","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"71f80ffaff1ba9577d8f0cd240ed09da4e30d4d8","isMergeCommit":false,"messageTitle":"add wip task manager abstraction","messageBody":"","tags":["A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":0}}},{"hash":"6da1b6c28e6cf114cc41395f961c76acf114b292","isMergeCommit":false,"messageTitle":"add wip chatbot integration with task manager","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":11}}},{"hash":"52ee2c9180c3b08cfccb1790f6f7a659adeb2fff","isMergeCommit":false,"messageTitle":"add mark/unmark as complete support","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":3}}},{"hash":"8a0fd259555d3d53cd0977e3c193118ca3dd28e9","isMergeCommit":false,"messageTitle":"complete task class implementation","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}},{"hash":"643f4a8f68dfc3da4f262557e6aa5c4e7716a154","isMergeCommit":false,"messageTitle":"add distinct tasks: todos, events, deadlines","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":1}}},{"hash":"f604651be6e1452e9f655bf66538fbbe74032156","isMergeCommit":false,"messageTitle":"add wip integration with new task types to chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":11}}}]},{"date":"2023-08-23","commitResults":[{"hash":"3bc41634e58b22a5e0be561550e7893e1419d739","isMergeCommit":false,"messageTitle":"add new command parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":0}}},{"hash":"31e1d59bbffdcc42f2e60769a29f5c688728f2f7","isMergeCommit":false,"messageTitle":"update chatbot to use command parser plus fun convo style","messageBody":"","tags":["Level-4","A-Personality"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":39}}},{"hash":"b4077090197322c3bc563ad410783e07930d6658","isMergeCommit":false,"messageTitle":"update tests","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":25,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"34158bb883bf2d793184fde88f998f2c79ae4219","isMergeCommit":false,"messageTitle":"add new chatbot exception classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"fd95407560b5a83130f77a6345f87853009f043f","isMergeCommit":false,"messageTitle":"make chatbot handle exceptions and report to user","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":146}}},{"hash":"8835d8936191839a94df64aad6f659affbe3f52b","isMergeCommit":false,"messageTitle":"improve error phrasing, add missing error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":5}}},{"hash":"e0e85efa443146d767c52151c450236260a7d43a","isMergeCommit":false,"messageTitle":"add task delete support to chatbot","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":16}}},{"hash":"66843b3bbea24a6c411167c7c79389229dd9a9b5","isMergeCommit":false,"messageTitle":"Fix chatbot singleton not actually being a singleton","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"d8a9636ebe928c04259652ea927acefb4ce03d31","isMergeCommit":false,"messageTitle":"fix functional interface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"f7c26f7a8a8f8fde8b0d0e462ef613ec4920b00c","isMergeCommit":false,"messageTitle":"Refactor commands to support enums","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":28}}},{"hash":"7f628605b0c4b4a161d4bcd7159173a017ecf2e9","isMergeCommit":false,"messageTitle":"Rephrase Mark list operation enum to MarkComplete","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":9}}},{"hash":"f06ec1ae608153da485e5fc8aa7ed0c21cd1f6f5","isMergeCommit":false,"messageTitle":"Update unit tests to also test deletions and errors","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"38e03dd2098fa595065f620cde2b6c4a91aa58dc","isMergeCommit":false,"messageTitle":"Add WIP persistent storage support","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":2}}},{"hash":"4fa7c4d3872b5c29037eeca69d87ff4e7c40f18a","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"aa169f6d6e9093f864eeb714ff4f592b7f3fce29","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Level-7","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"438aa1a631229b50d8d2927edc866d9c0ac4a1e2","isMergeCommit":false,"messageTitle":"Add datetime input validation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":119,"deletions":19}}},{"hash":"ccdb8e48656f8a34981a6ea2a0516f400da41037","isMergeCommit":false,"messageTitle":"Update unit tests for new datetime formats","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2}}},{"hash":"5745f726474c7e6b5d25b64ff1e6496b87597b26","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5930c3b292ccb03b6fb111b937dd7061ed6299e8","isMergeCommit":false,"messageTitle":"Add Gson dependency for JSON conversion","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"fade8f263f05497c981d25b1e00a4fcd4b8e4568","isMergeCommit":false,"messageTitle":"Complete persistent storage support","messageBody":"This integrates with Google\u0027s Gson and saves data in the relative\nlocation `todoifydata/tasks.json`.\n\nNote: The text-based unit test suite is currently broken by inability\nto compile Gson (it doesn\u0027t use Gradle). It should be migrated to JUnit\nsoon.\n","tags":["Level-7","A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":6}}},{"hash":"0fefa353e9bd22dca49ac35140a1080bec3e835a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c5777cc002dc31caace73d3a2a1df0a464db9b2d","isMergeCommit":false,"messageTitle":"Improve class structures and documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":215,"deletions":99}}}]},{"date":"2023-08-29","commitResults":[{"hash":"1f58da5460fa17a85290682ee4538d7c12a2ad8d","isMergeCommit":false,"messageTitle":"Improve Chatbot class organization","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":327,"deletions":189}}},{"hash":"8bd712509e29e5f7555355ec2dec02e2fa7b175b","isMergeCommit":false,"messageTitle":"Refactor classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":548,"deletions":463}}},{"hash":"71ed521b1e1fc22e210f72ebe2ab7a00d5d58cf8","isMergeCommit":false,"messageTitle":"Improve CLI design to mimic chatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":28}}},{"hash":"8412ebea632032351a2d91f4d4f929befafc413c","isMergeCommit":false,"messageTitle":"Add some JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3},"java":{"insertions":195,"deletions":19}}},{"hash":"adb13beca39c1e1bf400dc6ea8ca467c2115b334","isMergeCommit":false,"messageTitle":"Update project main class name and command syntax","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":15,"deletions":11},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":16,"deletions":9}}},{"hash":"48fd17409cd3ea20e8ae6d606c3bde6c50fcd150","isMergeCommit":false,"messageTitle":"Add version number","messageBody":"","tags":["v0.0.1-alpha","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"5c78c6d07d5c555e7b5f01ed72f46fe41a1b9d28","isMergeCommit":false,"messageTitle":"Fix tests to follow new syntax","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"47ba7fa77c49ecb52df8691000c402cbd61307b3","isMergeCommit":false,"messageTitle":"Made documentation formatting consistent","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":4}}},{"hash":"04023b24caf1f220de9fc03cd375e0d867610d0c","isMergeCommit":false,"messageTitle":"Apply codestyle formatting as per requirements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":216,"deletions":189}}},{"hash":"5f77a876c4d611a5ba984f6b55c7075e666e4d1e","isMergeCommit":false,"messageTitle":"Update phrasing and more code auto-formatting","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":82}}},{"hash":"6256c06d1a37171ac469391c4dbe51134f54587c","isMergeCommit":false,"messageTitle":"Add support for task search","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":13}}},{"hash":"48c445d450bf11c98a04daf1f0c53d6d7cc2a8bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cfe70d5ccbe07207f3d7a3ed57458cf8968f89e9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"adc1226e3387e3ace4876f2e784417cad380b97e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e2a96e6d6837ab27ab5569f5cd06c4a3c86949dd","isMergeCommit":false,"messageTitle":"Fix access modifiers for internal methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"d1e28f2ee390ae504d6a90fe6547268744b73294","isMergeCommit":false,"messageTitle":"Refactor source files into a single package","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"java":{"insertions":63,"deletions":55}}}]},{"date":"2023-09-02","commitResults":[{"hash":"308f6720f2f0ec17710403686f95885f1528fdfc","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"cdb9f424e7ab2320783bca402ee157b252fdb210","isMergeCommit":false,"messageTitle":"Refactor code for checkstyle compliance","messageBody":"","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":93,"deletions":122},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-06","commitResults":[{"hash":"1b3cc1ba82de62cd30373b285022dffc70b85687","isMergeCommit":false,"messageTitle":"Refactor command processing to better use exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":41}}},{"hash":"1f600b75263550a04077def16202448e4855932b","isMergeCommit":false,"messageTitle":"Fix an overly long line","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}},{"hash":"da1f863fd68e57eb9116c769a43bd2fa7f1ee25e","isMergeCommit":false,"messageTitle":"Add rudimentary UI with JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":79,"deletions":0},"java":{"insertions":290,"deletions":10}}}]},{"date":"2023-09-08","commitResults":[{"hash":"4e898232149ffe17232a58fafa225569a18d3564","isMergeCommit":false,"messageTitle":"Fix UI layout bugs on small window sizes","messageBody":"","tags":["Level-10","A-BetterGui"],"fileTypesAndContributionMap":{"fxml":{"insertions":8,"deletions":15},"java":{"insertions":6,"deletions":1}}},{"hash":"9b011ef55c0d6a03bec01ddf275d97122a22f830","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5f2d02ab77ddeaa856376f4e09f4c7aba389a245","isMergeCommit":false,"messageTitle":"Update README and build version","messageBody":"","tags":["v0.0.3-alpha"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"bf9aff33d491a4ea16d838b888088b660273d513","isMergeCommit":false,"messageTitle":"Add assertions to document some code assumptions","messageBody":"Some parts of the code rely on certain assumptions to function\ncorrectly. This commit notes the trivial assumptions made across some\nregions of the codebase, which can be tested by enabling Java\nassertions.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":2}}}]},{"date":"2023-09-13","commitResults":[{"hash":"72280555722be3c5da42613fe89468e2778abeb0","isMergeCommit":false,"messageTitle":"Improve code quality by updating phrasing and docs","messageBody":"These changes are based on feedback as per the pull request\nhttps://github.com/nus-cs2103-AY2324S1/ip/pull/67\n\nThis mostly involves updating method and variable names for improved\nclarity, and adding appropriate documentation to some internal sections.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":22}}},{"hash":"757fefc511a0c1d0bb8828db339a6dd3978d9bd1","isMergeCommit":false,"messageTitle":"Refactor the long ChatCommand#parse method","messageBody":"The functionality in this method has been extracted into multiple,\nsmaller methods to improve understanding.\n","fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":42}}},{"hash":"a57bfd22cdd5cb67f9293fd2a7a04440426fee19","isMergeCommit":false,"messageTitle":"Improve code formatting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":17}}},{"hash":"faf9b4f3add94a1547bed91663a163d775e3ffe0","isMergeCommit":false,"messageTitle":"Remove the need for warning suppression annotation","messageBody":"This is done by swapping out an array that needed to use generics\n(but does not support it) with a Java Collections List (which supports\ngenerics).\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":3}}},{"hash":"bb07cfb5afc44ed308e11ef4406c433131654d2b","isMergeCommit":false,"messageTitle":"Remove an unused Gson object","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"d10b706e72ec38a66ab9f096349b234fcf25b586","isMergeCommit":false,"messageTitle":"Refactor task list retrieval to Java streams","messageBody":"","tags":["A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":19}}},{"hash":"2ae97151c0bae6d70973e715520550a60751975a","isMergeCommit":true,"messageTitle":"Merge pull request #2 from wxwern/branch-A-CodeQuality","messageBody":"Code quality improvements","fileTypesAndContributionMap":{}},{"hash":"7bcb3566bd52365918b3b66f33c445241fa63d9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Assertions","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f7cfefe61ab30dd7923dd3a2b332d7a6e5abb453","isMergeCommit":true,"messageTitle":"Merge pull request #1 from wxwern/branch-A-Assertions","messageBody":"Add assertions to document some code assumptions","fileTypesAndContributionMap":{}},{"hash":"2ee33e2e5c018308bbf8ed373eb7e9f88cbbbea0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Streams","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8ace4674ded8b352cf3c14b6c0369418dcf74460","isMergeCommit":true,"messageTitle":"Merge pull request #3 from wxwern/branch-A-Streams","messageBody":"Add task list retrieval via Java streams","fileTypesAndContributionMap":{}},{"hash":"3592470fd1d113f4da0936aa8ed60c19b4166868","isMergeCommit":false,"messageTitle":"Update README with content and fix its formatting","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":24,"deletions":17}}},{"hash":"2cbf51dee36a811673554f20ed916ccaf48f09ca","isMergeCommit":false,"messageTitle":"Add command mappings and info in enum declaration","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":50}}},{"hash":"4514c215d0397a2434d698cbb0823c603c909a03","isMergeCommit":false,"messageTitle":"Add help command","messageBody":"","tags":["C-Help","BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":3}}},{"hash":"b15a124d374d53225b28dff6dfd531f370b71fbe","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Help\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"a30d440f1a00c6ae3149ee921603b2adb48d6b2b","isMergeCommit":false,"messageTitle":"Fix checkstyle issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"be2c35cf7006b707e959643a3336a480e4d05690","isMergeCommit":false,"messageTitle":"Fix text UI tests for gradle and new output format","messageBody":"The text UI tests have been changed to utilise gradle instead of javac\nfor compilation, which makes it operate correctly again. Additionally,\nthe test case and outputs have been updated accordingly to the new\nformats.\n\nCaveat: We no longer maintain the Windows test script and is removed.\n","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":6},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":26,"deletions":9}}}]},{"date":"2023-09-15","commitResults":[{"hash":"92b8f7f84526678c7069198b152a6adf126f0e17","isMergeCommit":false,"messageTitle":"Remove color in test to fix GitHub macOS CI","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":1,"deletions":1}}},{"hash":"ec0d9b3ce88e7b02cf35b9346ab635d28211dcb3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CI\u0027","messageBody":"","tags":["A-CI"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"wxwern":{"java":2487,"md":29,"fxml":72,"sh":26,"bat":0,"gradle":22,"txt":34}},"authorContributionVariance":{"wxwern":274830.47},"authorDisplayNameMap":{"wxwern":"CS2103T-W08-3 LIM .. JIE"}} diff --git a/xCOLOURx_ip_master/authorship.json b/xCOLOURx_ip_master/authorship.json index 241854e1..e44032b9 100644 --- a/xCOLOURx_ip_master/authorship.json +++ b/xCOLOURx_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":"xCOLOURx"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":"checkstyle {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-09"},{"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":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" mainClass.set(\"noac.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" archiveBaseName \u003d \"noac\"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"xCOLOURx":21,"-":42}},{"path":"src/main/java/noac/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.javafx.Main;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":13}},{"path":"src/main/java/noac/Noac.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" * Main class of the Noac Chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"public class Noac{","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" public Noac() {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" this(\"data/tasks.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * Initialise the storage, tasklist and ui objects.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" * @param filePath File path for where to save the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" public Noac(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" } catch (NoacException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" ui.showErrorMessage(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" * Retrives the response for the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" * @param input String input given by user.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" * @return Reply given back to user.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" public String getResponse(String input){","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" return c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" } catch (NoacException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" return ui.showErrorMessage(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":57}},{"path":"src/main/java/noac/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * Abstract class for all commands to extend from which includes the abstract","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" * execute function and also the isExit function.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" * Abstract execute functions with the relevant parameters.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" * Determine if command is bye or not.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" * @return The boolean for where to exit or not.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" return isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":34}},{"path":"src/main/java/noac/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" * For executing the deadline command.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * Create the deadline command with the description and by time.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" * @param description description of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * @param by when the deadline is by.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" public DeadlineCommand(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" * Create a Deadline, store it in Tasklist and save it.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage){","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" Deadline d \u003d new Deadline(this.description, this.by);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" tasks.addTask(d);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" return ui.showAddTask(d, tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":47}},{"path":"src/main/java/noac/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * For executing the delete command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" private int taskIndex;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * Create the delete command with the which task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * @param taskIndex which task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" * Delete the task and update the Tasklist and save file","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws NoacException {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" if (taskIndex + 1 \u003e tasks.size() || taskIndex \u003c 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter a task in your list!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" tasks.deleteTask(this.taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" return ui.showDeleteTask(tasks.getTask(this.taskIndex), tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":45}},{"path":"src/main/java/noac/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" * For executing the event command.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" * Create the event command with the required variables.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * @param description description of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" * @param from when the event starts","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" * @param to when the event ends","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" public EventCommand(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" * Create a Event, store it in Tasklist and save it.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" Event e \u003d new Event(this.description, this.from, this.to);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" tasks.addTask(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" return ui.showAddTask(e, tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":50}},{"path":"src/main/java/noac/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * For executing the bye command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" private boolean isExit \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * Execute the bye command, show the bye message.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws NoacException {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" return ui.showByeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" * Tell the main loop to exit.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" * @return true to signal exit.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" return isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":37}},{"path":"src/main/java/noac/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" * For executing the find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" private String searchString;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * Create the OnCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" * @param searchString String to find matching tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" public FindCommand(String searchString) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" this.searchString \u003d searchString;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * Find all the task that contains that string and display it.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws NoacException {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" ArrayList\u003cTask\u003e returnTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" if (tasks.getTask(i).getDescription().contains(this.searchString)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" returnTasks.add(tasks.getTask(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" return ui.showFind(returnTasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":47}},{"path":"src/main/java/noac/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" * For executing the list command.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" * Display the list to the user using UI class.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" return ui.showList(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":23}},{"path":"src/main/java/noac/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * For executing the mark/unmark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" private int taskIndex;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" private boolean isMark;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" * Create the mark command class.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * @param taskIndex Which task to mark/unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" * @param isMark Whether to mark/unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" public MarkCommand(int taskIndex, boolean isMark) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" this.isMark \u003d isMark;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * Mark/unmark the task and update the user, task list and save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws NoacException {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" if (taskIndex + 1 \u003e tasks.size() || taskIndex \u003c 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter a task in your list!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" if (isMark) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" tasks.getTask(this.taskIndex).markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" tasks.getTask(this.taskIndex).unmarkAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" return ui.showMarkOrUnmark(tasks.getTask(this.taskIndex), this.isMark);","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":52}},{"path":"src/main/java/noac/command/OnCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * For executing the on command.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"public class OnCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" private LocalDate localDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" * Create the OnCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" * @param localDate The date to display all the tasks on that date.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" public OnCommand(LocalDate localDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" this.localDate \u003d localDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * Find all the task on the date and display it.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" ArrayList\u003cTask\u003e taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" if (tasks.getTask(i) instanceof Deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" if (localDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")).equals(","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" ((Deadline) tasks.getTask(i)).getBy().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" taskArrayList.add(tasks.getTask(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" } else if (tasks.getTask(i) instanceof Event) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" if (localDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")).equals(","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" ((Event) tasks.getTask(i)).getFrom().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")))","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" || localDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")).equals(","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" ((Event) tasks.getTask(i)).getTo().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" taskArrayList.add(tasks.getTask(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" return ui.showTasksOnDate(taskArrayList);","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":61}},{"path":"src/main/java/noac/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * For executing the to do command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * Create the TodoCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * @param description The description for the To Do.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" * Create a To Do, store it in Tasklist and save it.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage){","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" Todo t \u003d new Todo(this.description);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" return ui.showAddTask(t, tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":42}},{"path":"src/main/java/noac/javafx/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.javafx;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" public static DialogBox getNoacDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":60}},{"path":"src/main/java/noac/javafx/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.javafx;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import noac.Noac;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" * A GUI for NOAC using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" private Noac noac \u003d new Noac();","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" stage.setTitle(\"Noac\");","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setNoac(noac);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":32}},{"path":"src/main/java/noac/javafx/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.javafx;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"import noac.Noac;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" private Noac noac;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" private Image noacImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * Initialise the scrollPlane and print welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" public void initialize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" dialogContainer.getChildren().addAll(DialogBox.getNoacDialog(Ui.showWelcomeMessage(), noacImage));","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" public void setNoac(Noac n) {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" this.noac \u003d n;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" String response \u003d noac.getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" DialogBox.getNoacDialog(response, noacImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" if(input.equals(\"bye\")){","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" userInput.setDisable(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" sendButton.setDisable(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":63}},{"path":"src/main/java/noac/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":" * Deadline task which contains an addition deadline compared to task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" * Constructor for the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * @param description Description on what the task is.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" * @param by When the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" * Converts the task to string.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" * @return The string.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" * Converts to string to save to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" * @return The string to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" public String printToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" return \"D|\" + super.printToFile() + \"|\"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" * Getter function for the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" * @return the LocalDateTime when the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" return by;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":55}},{"path":"src/main/java/noac/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":" * Event task which contains an addition from and to date compared to task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" * Constructor for the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" * @param description Description on what the task is.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * @param from When the task starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * @param to When the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * Converts the task to string.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" * @return The string.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" + this.from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\")) + \" to: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" + this.to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" * Converts to string to save to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" * @return The string to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" public String printToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" return \"E|\" + super.printToFile() + \"|\"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" + this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \"|\"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" + this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" * Getter function for the from.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" * @return the LocalDateTime when the task starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" return from;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" * Getter function for the to.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" * @return the LocalDateTime when the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" return to;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":68}},{"path":"src/main/java/noac/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":" * Base Task class with description on what to do and","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":" * boolean for whether the task is done or not.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" * Constructor to initialise the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" * @param description Description on what the task is.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * Return \u0027X\u0027 for done task and space for undone task for printing to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" * @return The string as described.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" * Set isDone to true to mark the task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" * Set isDone to false to mark the task as undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" * Gets the description.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" * @return The description.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" public String getDescription(){","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" return this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" * Converts the task to string.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" * @return The string.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" * Converts to string to save to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" * @return The string to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":" public String printToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"xCOLOURx"},"content":" int i \u003d isDone ? 1 : 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"xCOLOURx"},"content":" return i + \"|\" + description;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":72}},{"path":"src/main/java/noac/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":" * To do task which extends the task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" * Constructor to initialise the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" * @param description Description on what the task is.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * Converts the task to string.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" * @return The string.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" return \"[T]\" + super.toString() ;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" * Converts to string to save to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" * @return The string to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" public String printToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" return \"T|\" + super.printToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":38}},{"path":"src/main/java/noac/util/NoacException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.util;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":" * Exception class for specific error for the Noac chatbot","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"public class NoacException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * Create the new exception with the message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" * @param errMessage The error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" public NoacException(String errMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" super(errMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":16}},{"path":"src/main/java/noac/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.util;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.command.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" * Parser class meant to parse strings into relevant data such as the user input and date string.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * Parse the user input and return the relevant command given by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * @param fullCommand The user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * @return The correct command to be executed based on input.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" public static Command parse(String fullCommand) throws NoacException{","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" Command returnCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" String[] userInputArr \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" String command \u003d userInputArr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr.length \u003e 2 || userInputArr.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter in the format mark [TASK_NUMBER] e.g. mark 1\");","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" } else if (!userInputArr[1].matches(\"\\\\d+\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter in the format mark [TASK_NUMBER] e.g. mark 1\");","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" int taskNo \u003d Integer.parseInt(userInputArr[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d new MarkCommand(taskNo, command.equals(\"mark\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr.length \u003e 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 1; i \u003c userInputArr.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" description +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" description \u003d description.substring(0, description.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d new TodoCommand(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"xCOLOURx"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"xCOLOURx"},"content":" String by \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"xCOLOURx"},"content":" boolean afterBy \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 1; i \u003c userInputArr.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr[i].equals(\"/by\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"xCOLOURx"},"content":" afterBy \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"xCOLOURx"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"xCOLOURx"},"content":" if (afterBy) {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"xCOLOURx"},"content":" by +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"xCOLOURx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"xCOLOURx"},"content":" description +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"xCOLOURx"},"content":" if (!afterBy) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! The input must contain the command /by\");","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"xCOLOURx"},"content":" if (by.length() \u003d\u003d 0 || description.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! The description and by of a deadline cannot \\n be empty\");","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"xCOLOURx"},"content":" by \u003d by.substring(0, by.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"xCOLOURx"},"content":" description \u003d description.substring(0, description.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d new DeadlineCommand(description, parseDate(by));","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"xCOLOURx"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"xCOLOURx"},"content":" String descript \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"xCOLOURx"},"content":" String from \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"xCOLOURx"},"content":" String to \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"xCOLOURx"},"content":" String status \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 1; i \u003c userInputArr.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr[i].equals(\"/from\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"xCOLOURx"},"content":" status \u003d \"from\";","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"xCOLOURx"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr[i].equals(\"/to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"xCOLOURx"},"content":" status \u003d \"to\";","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"xCOLOURx"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"xCOLOURx"},"content":" if (status.equals(\"event\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"xCOLOURx"},"content":" descript +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"xCOLOURx"},"content":" } else if (status.equals(\"from\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"xCOLOURx"},"content":" from +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"xCOLOURx"},"content":" } else if (status.equals(\"to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"xCOLOURx"},"content":" to +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"xCOLOURx"},"content":" if (!status.equals(\"to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! The input must contain the command /from and /to \\n in this order\");","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"xCOLOURx"},"content":" if (descript.length() \u003d\u003d 0 || from.length() \u003d\u003d 0 || to.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! The description, from and to of a event cannot \\n be empty!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"xCOLOURx"},"content":" from \u003d from.substring(0, from.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"xCOLOURx"},"content":" to \u003d to.substring(0, to.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"xCOLOURx"},"content":" descript \u003d descript.substring(0, descript.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d new EventCommand(descript, parseDate(from), parseDate(to));","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"xCOLOURx"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"xCOLOURx"},"content":" if(userInputArr.length \u003e 2 || userInputArr.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter in the format delete [TASK_NUMBER] e.g. delete 1\");","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"xCOLOURx"},"content":" } else if (!userInputArr[1].matches(\"\\\\d+\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter in the format delete [TASK_NUMBER] e.g. delete 1\");","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"xCOLOURx"},"content":" int taskNo2 \u003d Integer.parseInt(userInputArr[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d new DeleteCommand(taskNo2);","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"xCOLOURx"},"content":" case \"on\":","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"xCOLOURx"},"content":" LocalDate localDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr.length !\u003d 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please input date in this format yyyy-MM-dd\");","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"xCOLOURx"},"content":" localDate \u003d LocalDate.parse(userInputArr[1], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"xCOLOURx"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please input date in this format yyyy-MM-dd\");","lastModifiedDate":"2023-09-09"},{"lineNumber":171,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d new OnCommand(localDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"xCOLOURx"},"content":" case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"xCOLOURx"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"xCOLOURx"},"content":" String searchString \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 1; i \u003c userInputArr.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"xCOLOURx"},"content":" searchString +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d new FindCommand(searchString.trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"xCOLOURx"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":195,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"xCOLOURx"},"content":" return returnCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"xCOLOURx"},"content":" * Parse date string to LoaclDateTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"xCOLOURx"},"content":" * @param date The string date to be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"xCOLOURx"},"content":" * @return The parsed LocalDateTime object.","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"xCOLOURx"},"content":" * @throws DateTimeParseException Exception if the parsing fails.","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"xCOLOURx"},"content":" public static LocalDateTime parseDate(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"xCOLOURx"},"content":" LocalDateTime localDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"xCOLOURx"},"content":" if(date.length() \u003d\u003d 10) {","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"xCOLOURx"},"content":" localDateTime \u003d LocalDateTime.parse(date + \" 0000\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"xCOLOURx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"xCOLOURx"},"content":" localDateTime \u003d LocalDateTime.parse(date, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"xCOLOURx"},"content":" return localDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":218}},{"path":"src/main/java/noac/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.util;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * For interactions with the save file such as loading and saving.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" * Initialise the Storage object with the file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * @param filePath The file path where the save file should be.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" * Load the tasks in the save file or created one if it does not exist.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" * @return The loaded tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" public ArrayList\u003cTask\u003e load() throws NoacException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" ArrayList\u003cTask\u003e returnList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" if (!file.createNewFile()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" String[] fileLineInput \u003d scanner.nextLine().split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" String taskType \u003d fileLineInput[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" case \"T\":","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput.length !\u003d 3) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" Todo todo \u003d new Todo(fileLineInput[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" returnList.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"xCOLOURx"},"content":" case \"D\":","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput.length !\u003d 4) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"xCOLOURx"},"content":" Deadline deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"xCOLOURx"},"content":" deadline \u003d new Deadline(fileLineInput[2], Parser.parseDate(fileLineInput[3]));","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"xCOLOURx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"xCOLOURx"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"xCOLOURx"},"content":" returnList.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"xCOLOURx"},"content":" case \"E\":","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput.length !\u003d 5) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"xCOLOURx"},"content":" Event event;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"xCOLOURx"},"content":" try{","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"xCOLOURx"},"content":" event \u003d new Event(fileLineInput[2],Parser.parseDate(fileLineInput[3]) , Parser.parseDate(fileLineInput[4]));","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"xCOLOURx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"xCOLOURx"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"xCOLOURx"},"content":" returnList.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"xCOLOURx"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"xCOLOURx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"xCOLOURx"},"content":" return returnList;","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"xCOLOURx"},"content":" * Write the task list to save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"xCOLOURx"},"content":" * @param taskList The task list to be written.","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"xCOLOURx"},"content":" public void save(TaskList taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"xCOLOURx"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"xCOLOURx"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(fileWriter);","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"xCOLOURx"},"content":" for(int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"xCOLOURx"},"content":" bufferedWriter.write(taskList.getTask(i).printToFile() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"xCOLOURx"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"xCOLOURx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"xCOLOURx"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":144}},{"path":"src/main/java/noac/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.util;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" * List of task to store all the tasks by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * Create the TaskList object and initialise the empty arraylist.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" * Create the TaskList object and initialise the arraylist with the one given.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" * @param taskList The arraylist to be added to the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * Return the task at the index.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" * @param index The index of the task to be returned","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" * @return The task at that index.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" * Add the input task to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" * Remove a task in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" * Get the size of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" * @return The size of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" public int size() {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":" return taskList.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":67}},{"path":"src/main/java/noac/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.util;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" * For interactions with the user such as printing or getting the input.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"public class Ui {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" * Print the welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" public static String showWelcomeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" String welcomeMessage \u003d","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" \"Hello! I\u0027m NOAC\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" return welcomeMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" * Print the bye message.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" public String showByeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" String byeMessage \u003d \"Bye. Hope to see you again soon!\\n\" ;","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" return byeMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" * Prints the error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" * @param e The error which message is to be printed.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" public String showErrorMessage(NoacException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" * Prints all the tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" * @param taskList The list to be printed.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" public String showList(TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d i + \".\" + taskList.getTask(i-1).toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" * Lets the user know the task has been mark/unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" * @param task The task to be mark/unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" * @param isMark Boolean to determine whether to mark or unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":" public String showMarkOrUnmark(Task task, boolean isMark) {","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":" if (isMark) {","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"xCOLOURx"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"xCOLOURx"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d task.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"xCOLOURx"},"content":" * Lets the user know the task has been added.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"xCOLOURx"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"xCOLOURx"},"content":" * @param listSize The number of task in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"xCOLOURx"},"content":" public String showAddTask(Task task, int listSize) {","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d task.toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Now you have \" + listSize + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"xCOLOURx"},"content":" * Lets the user know the task has been deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"xCOLOURx"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"xCOLOURx"},"content":" * @param listSize The number of task in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"xCOLOURx"},"content":" public String showDeleteTask(Task task, int listSize) {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d task.toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Now you have \" + listSize + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"xCOLOURx"},"content":" * Shows the task on that date.","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks The task to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"xCOLOURx"},"content":" public String showTasksOnDate(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"The tasks on this date are:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"xCOLOURx"},"content":" for(int i \u003d 0 ; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"xCOLOURx"},"content":" * Prints all the tasks that matched a word.","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks The task to be printed.","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"xCOLOURx"},"content":" public String showFind(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"xCOLOURx"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"There are no matching tasks in your list. :(\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"xCOLOURx"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"xCOLOURx"},"content":" for(int i \u003d 0 ; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":149}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"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.0.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":22}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"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.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"noac.javafx.MainWindow\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"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-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"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-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"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-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":19}},{"path":"src/test/java/noac/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" public void testParseDate() {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" LocalDateTime result \u003d LocalDateTime.parse(\"2001-10-10 0000\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" assertEquals(result.toString(), Parser.parseDate(\"2001-10-10\").toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" LocalDateTime result2 \u003d LocalDateTime.parse(\"2001-10-10 1800\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" assertEquals(result2.toString(), Parser.parseDate(\"2001-10-10 1800\").toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" DateTimeParseException e \u003d assertThrows(DateTimeParseException.class, () -\u003e Parser.parseDate(\"2001-10-101800\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":32}},{"path":"src/test/java/noac/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" public void testPrintToFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" Deadline d \u003d new Deadline(\"hello\", LocalDateTime.parse(\"2001-10-10 1800\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")));","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" String result \u003d \"D|0|hello|2001-10-10 1800\";","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" assertEquals(result ,d.printToFile());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" Deadline d2 \u003d new Deadline(\"hello\", LocalDateTime.parse(\"2001-10-10 1800\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" String result2 \u003d \"D|1|hello|2001-10-10 1800\";","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" d2.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" assertEquals(result2 ,d2.printToFile());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" Deadline d3 \u003d new Deadline(\"hello\", Parser.parseDate(\"2001-10-10\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" String result3 \u003d \"D|0|hello|2001-10-10 0000\";","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" assertEquals(result3 ,d3.printToFile());","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":42}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":5}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"java -classpath ..\\bin noac.Noac \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"xCOLOURx":1,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":"checkstyle {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-09"},{"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":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" mainClass.set(\"noac.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" archiveFileName \u003d \"noac.jar\"","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" archiveBaseName \u003d \"noac\"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"xCOLOURx":22,"-":42}},{"path":"src/main/java/noac/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.javafx.Main;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":13}},{"path":"src/main/java/noac/Noac.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.command.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" * Main class of the Noac Chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"public class Noac{","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" public Noac() {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" this(\"data/tasks.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * Initialises the storage, tasklist and ui objects.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" * @param filePath File path for where to save the save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" public Noac(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" } catch (NoacException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" ui.showErrorMessage(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" * Retrives the response for the user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" * @param input String input given by user.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" * @return Reply given back to user.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" public String getResponse(String input){","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" return c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" } catch (NoacException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" return ui.showErrorMessage(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":57}},{"path":"src/main/java/noac/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * Abstract class for all commands to extend from which includes the abstract","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" * execute function and also the isExit function.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" * Abstracts execute functions with the relevant parameters.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" * Determines if command is bye or not.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" * @return The boolean for where to exit or not.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" return isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":34}},{"path":"src/main/java/noac/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" * For executing the deadline command.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" private LocalDateTime by;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * Create the deadline command with the description and by time.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" * @param description description of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * @param by when the deadline is by.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" public DeadlineCommand(String description, LocalDateTime by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" * Create a Deadline, store it in Tasklist and save it.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage){","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" Deadline d \u003d new Deadline(this.description, this.by);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" tasks.addTask(d);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" return ui.showAddTask(d, tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":47}},{"path":"src/main/java/noac/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * For executing the delete command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" private int taskIndex;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * Create the delete command with the which task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * @param taskIndex which task to delete.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" * Delete the task and update the Tasklist and save file","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws NoacException {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" if (taskIndex + 1 \u003e tasks.size() || taskIndex \u003c 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter a task in your list!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" tasks.deleteTask(this.taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" return ui.showDeleteTask(tasks.getTask(this.taskIndex), tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":45}},{"path":"src/main/java/noac/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" * For executing the event command.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" * Create the event command with the required variables.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * @param description description of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" * @param from when the event starts","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" * @param to when the event ends","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" public EventCommand(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" * Create a Event, store it in Tasklist and save it.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" Event e \u003d new Event(this.description, this.from, this.to);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" tasks.addTask(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" return ui.showAddTask(e, tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":50}},{"path":"src/main/java/noac/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * For executing the bye command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" private boolean isExit \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * Execute the bye command, show the bye message.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws NoacException {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" return ui.showByeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" * Tell the main loop to exit.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" * @return true to signal exit.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" return isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":37}},{"path":"src/main/java/noac/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" * For executing the find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" private String searchString;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * Create the OnCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" * @param searchString String to find matching tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" public FindCommand(String searchString) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" this.searchString \u003d searchString;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * Find all the task that contains that string and display it.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws NoacException {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" ArrayList\u003cTask\u003e returnTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" if (tasks.getTask(i).getDescription().contains(this.searchString)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" returnTasks.add(tasks.getTask(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" return ui.showFind(returnTasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":47}},{"path":"src/main/java/noac/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" * For executing the list command.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" * Display the list to the user using UI class.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" return ui.showList(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":23}},{"path":"src/main/java/noac/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.NoacException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * For executing the mark/unmark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" private int taskIndex;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" private boolean isMark;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" * Create the mark command class.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * @param taskIndex Which task to mark/unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" * @param isMark Whether to mark/unmark.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" public MarkCommand(int taskIndex, boolean isMark) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" this.isMark \u003d isMark;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * Mark/unmark the task and update the user, task list and save file.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws NoacException {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" if (taskIndex + 1 \u003e tasks.size() || taskIndex \u003c 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter a task in your list!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" if (isMark) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" tasks.getTask(this.taskIndex).markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" tasks.getTask(this.taskIndex).unmarkAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" return ui.showMarkOrUnmark(tasks.getTask(this.taskIndex), this.isMark);","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":52}},{"path":"src/main/java/noac/command/OnCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * For executing the on command.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"public class OnCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" private LocalDate localDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" * Create the OnCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" * @param localDate The date to display all the tasks on that date.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" public OnCommand(LocalDate localDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" this.localDate \u003d localDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * Find all the task on the date and display it.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" ArrayList\u003cTask\u003e taskArrayList \u003d getTasksOnDate(this.localDate, tasks);","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" return ui.showTasksOnDate(taskArrayList);","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" private ArrayList\u003cTask\u003e getTasksOnDate(LocalDate localDate, TaskList tasks) {","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" ArrayList\u003cTask\u003e taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" String formattedOnDate \u003d localDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" if (tasks.getTask(i) instanceof Deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" String deadlineByFormattedDate \u003d ((Deadline) tasks.getTask(i)).getBy()","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" .format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" if (formattedOnDate.equals(deadlineByFormattedDate)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" taskArrayList.add(tasks.getTask(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" } else if (tasks.getTask(i) instanceof Event) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" String eventFromFormattedDate \u003d ((Event) tasks.getTask(i)).getFrom()","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" .format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":" String eventToFormattedDate \u003d ((Event) tasks.getTask(i)).getTo()","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" .format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":" if (formattedOnDate.equals(eventFromFormattedDate)","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"xCOLOURx"},"content":" || formattedOnDate.equals(eventToFormattedDate)) {","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"xCOLOURx"},"content":" taskArrayList.add(tasks.getTask(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"xCOLOURx"},"content":" return taskArrayList;","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":77}},{"path":"src/main/java/noac/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.TaskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * For executing the to do command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * Create the TodoCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * @param description The description for the To Do.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" * Create a To Do, store it in Tasklist and save it.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks List of all the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * @param ui UI for printing result to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" * @param storage Storage class meant for saving to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage){","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" Todo t \u003d new Todo(this.description);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" return ui.showAddTask(t, tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":42}},{"path":"src/main/java/noac/javafx/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.javafx;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" private Label dialog;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" private void flip() {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" public static DialogBox getNoacDialog(String text, Image img) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" db.flip();","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" return db;","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":60}},{"path":"src/main/java/noac/javafx/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.javafx;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import noac.Noac;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" * A GUI for NOAC using FXML.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" private Noac noac \u003d new Noac();","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" stage.setTitle(\"Noac\");","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setNoac(noac);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" stage.show();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":32}},{"path":"src/main/java/noac/javafx/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.javafx;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"import noac.Noac;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" private Noac noac;","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" private Image noacImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * Initialise the scrollPlane and print welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" public void initialize() {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" dialogContainer.getChildren().addAll(DialogBox.getNoacDialog(Ui.showWelcomeMessage(), noacImage));","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" public void setNoac(Noac n) {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" this.noac \u003d n;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" @FXML","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" String response \u003d noac.getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" DialogBox.getNoacDialog(response, noacImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" );","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" if(input.equals(\"bye\")){","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" userInput.setDisable(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" sendButton.setDisable(true);","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":63}},{"path":"src/main/java/noac/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":" * Deadline task which contains an addition deadline compared to task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" * Constructor for the Deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * @param description Description on what the task is.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" * @param by When the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" * Converts the task to string.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" * @return The string.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" String formattedBy \u003d this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" + formattedBy + \")\";","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" * Converts to string to save to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" * @return The string to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" public String printToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" String formattedBy \u003d this.by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" return \"D|\" + super.printToFile() + \"|\"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" + formattedBy;","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" * Getter function for the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" * @return the LocalDateTime when the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" return by;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":60}},{"path":"src/main/java/noac/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":" * Event task which contains an addition from and to date compared to task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" * Constructor for the Event.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" * @param description Description on what the task is.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" * @param from When the task starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * @param to When the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * Converts the task to string.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" * @return The string.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" String formattedFrom \u003d this.from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" String formattedTo \u003d this.to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" return \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" + formattedFrom + \" to: \"","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" + formattedTo + \")\";","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" * Converts to string to save to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" * @return The string to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" public String printToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" String formattedFrom \u003d this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" String formattedTo \u003d this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" return \"E|\" + super.printToFile() + \"|\"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" + formattedFrom + \"|\"","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" + formattedTo;","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" * Getter function for the from.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" * @return the LocalDateTime when the task starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" return from;","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":" * Getter function for the to.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"xCOLOURx"},"content":" * @return the LocalDateTime when the task is due.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"xCOLOURx"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"xCOLOURx"},"content":" return to;","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":74}},{"path":"src/main/java/noac/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":" * Base Task class with description on what to do and","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":" * boolean for whether the task is done or not.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" * Constructor to initialise the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" * @param description Description on what the task is.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * Return \u0027X\u0027 for done task and space for undone task for printing to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" * @return The string as described.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" * Set isDone to true to mark the task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" * Set isDone to false to mark the task as undone.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" public void unmarkAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" * Gets the description.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" * @return The description.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" public String getDescription(){","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" return this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" * Converts the task to string.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" * @return The string.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" * Converts to string to save to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" * @return The string to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":" public String printToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"xCOLOURx"},"content":" int i \u003d isDone ? 1 : 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"xCOLOURx"},"content":" return i + \"|\" + description;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":72}},{"path":"src/main/java/noac/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":" * To do task which extends the task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" * Constructor to initialise the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" * @param description Description on what the task is.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * Converts the task to string.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" * @return The string.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" return \"[T]\" + super.toString() ;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" * Converts to string to save to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" * @return The string to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" public String printToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" return \"T|\" + super.printToFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":38}},{"path":"src/main/java/noac/util/NoacException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.util;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":" * Exception class for specific error for the Noac chatbot","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"public class NoacException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" * Create the new exception with the message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" * @param errMessage The error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" public NoacException(String errMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" super(errMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":16}},{"path":"src/main/java/noac/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.util;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.command.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" * Parser class meant to parse strings into relevant data such as the user input and date string.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" private static final String MARK_COMMAND \u003d \"mark\";","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" private static final String DEFAULT_TIME \u003d \"0000\";","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" * Parse the user input and return the relevant command given by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" * @param fullCommand The user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" * @return The correct command to be executed based on input.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" public static Command parse(String fullCommand) throws NoacException {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" Command returnCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" String[] userInputArr \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" String command \u003d userInputArr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d handleCaseList();","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d handleCaseMark(userInputArr, command);","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d handleCaseTodo(userInputArr);","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d handleCaseDeadline(userInputArr);","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" case \"event\":","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d handleCaseEvent(userInputArr);","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" case \"delete\":","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d handleCaseDelete(userInputArr);","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" case \"on\":","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d handleCaseOn(userInputArr);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" case \"bye\":","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d handleCaseBye();","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" case \"find\":","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" returnCommand \u003d handleCaseFind(userInputArr);","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":" return returnCommand;","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"xCOLOURx"},"content":" * Parse date string to LoaclDateTime object.","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"xCOLOURx"},"content":" * @param date The string date to be parsed.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"xCOLOURx"},"content":" * @return The parsed LocalDateTime object.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"xCOLOURx"},"content":" * @throws DateTimeParseException Exception if the parsing fails.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"xCOLOURx"},"content":" public static LocalDateTime parseDate(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"xCOLOURx"},"content":" LocalDateTime localDateTime;","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"xCOLOURx"},"content":" if (date.length() \u003d\u003d 10) {","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"xCOLOURx"},"content":" localDateTime \u003d LocalDateTime.parse(date + \" \" + DEFAULT_TIME, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"xCOLOURx"},"content":" } else {","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"xCOLOURx"},"content":" localDateTime \u003d LocalDateTime.parse(date, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"xCOLOURx"},"content":" return localDateTime;","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"xCOLOURx"},"content":" private static Command handleCaseList() {","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"xCOLOURx"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"xCOLOURx"},"content":" private static Command handleCaseMark(String[] userInputArr, String command) throws NoacException {","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr.length \u003e 2 || userInputArr.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter in the format mark [TASK_NUMBER] e.g. mark 1\");","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"xCOLOURx"},"content":" } else if (!userInputArr[1].matches(\"\\\\d+\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter in the format mark [TASK_NUMBER] e.g. mark 1\");","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"xCOLOURx"},"content":" int taskNo \u003d Integer.parseInt(userInputArr[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"xCOLOURx"},"content":" return new MarkCommand(taskNo, command.equals(MARK_COMMAND));","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"xCOLOURx"},"content":" private static Command handleCaseTodo(String[] userInputArr) throws NoacException {","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"xCOLOURx"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 1; i \u003c userInputArr.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"xCOLOURx"},"content":" description +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"xCOLOURx"},"content":" assert description.length() \u003e 1 : \"Description too short\";","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"xCOLOURx"},"content":" description \u003d description.substring(0, description.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"xCOLOURx"},"content":" return new TodoCommand(description);","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"xCOLOURx"},"content":" private static Command handleCaseDeadline(String[] userInputArr) throws NoacException {","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"xCOLOURx"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"xCOLOURx"},"content":" String by \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"xCOLOURx"},"content":" boolean isAfterBy \u003d false;","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 1; i \u003c userInputArr.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr[i].equals(\"/by\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"xCOLOURx"},"content":" isAfterBy \u003d true;","lastModifiedDate":"2023-09-16"},{"lineNumber":131,"author":{"gitId":"xCOLOURx"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"xCOLOURx"},"content":" if (isAfterBy) {","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"xCOLOURx"},"content":" by +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"xCOLOURx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"xCOLOURx"},"content":" description +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"xCOLOURx"},"content":" if (!isAfterBy) {","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! The input must contain the command /by\");","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"xCOLOURx"},"content":" if (by.length() \u003d\u003d 0 || description.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! The description and by of a deadline cannot be empty\");","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"xCOLOURx"},"content":" assert isAfterBy : \"isAfterBy must be true\";","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"xCOLOURx"},"content":" by \u003d by.substring(0, by.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"xCOLOURx"},"content":" description \u003d description.substring(0, description.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"xCOLOURx"},"content":" return new DeadlineCommand(description, parseDate(by));","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"xCOLOURx"},"content":" private static Command handleCaseEvent(String[] userInputArr) throws NoacException {","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"xCOLOURx"},"content":" String descript \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"xCOLOURx"},"content":" String from \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"xCOLOURx"},"content":" String to \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"xCOLOURx"},"content":" String status \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 1; i \u003c userInputArr.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr[i].equals(\"/from\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"xCOLOURx"},"content":" status \u003d \"from\";","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"xCOLOURx"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr[i].equals(\"/to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"xCOLOURx"},"content":" status \u003d \"to\";","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"xCOLOURx"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"xCOLOURx"},"content":" if (status.equals(\"event\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"xCOLOURx"},"content":" descript +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"xCOLOURx"},"content":" } else if (status.equals(\"from\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"xCOLOURx"},"content":" from +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"xCOLOURx"},"content":" } else if (status.equals(\"to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"xCOLOURx"},"content":" to +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"xCOLOURx"},"content":" if (!status.equals(\"to\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! The input must contain the command /from and /to \\nin this order\");","lastModifiedDate":"2023-09-09"},{"lineNumber":182,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"xCOLOURx"},"content":" if (descript.length() \u003d\u003d 0 || from.length() \u003d\u003d 0 || to.length() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! The description, from and to of a event cannot \\nbe empty!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":185,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"xCOLOURx"},"content":" assert from.length() \u003e 1 : \"from too short\";","lastModifiedDate":"2023-09-16"},{"lineNumber":188,"author":{"gitId":"xCOLOURx"},"content":" assert to.length() \u003e 1 : \"to too short\";","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"xCOLOURx"},"content":" assert descript.length() \u003e 1 : \"descript too short\";","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"xCOLOURx"},"content":" from \u003d from.substring(0, from.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"xCOLOURx"},"content":" to \u003d to.substring(0, to.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"xCOLOURx"},"content":" descript \u003d descript.substring(0, descript.length() - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"xCOLOURx"},"content":" return new EventCommand(descript, parseDate(from), parseDate(to));","lastModifiedDate":"2023-09-16"},{"lineNumber":196,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":198,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"xCOLOURx"},"content":" private static Command handleCaseDelete(String[] userInputArr) throws NoacException {","lastModifiedDate":"2023-09-16"},{"lineNumber":200,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr.length \u003e 2 || userInputArr.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter in the format delete [TASK_NUMBER] e.g. delete 1\");","lastModifiedDate":"2023-09-09"},{"lineNumber":202,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"xCOLOURx"},"content":" } else if (!userInputArr[1].matches(\"\\\\d+\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please enter in the format delete [TASK_NUMBER] e.g. delete 1\");","lastModifiedDate":"2023-09-09"},{"lineNumber":205,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"xCOLOURx"},"content":" int taskNo \u003d Integer.parseInt(userInputArr[1]) - 1;","lastModifiedDate":"2023-09-16"},{"lineNumber":208,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"xCOLOURx"},"content":" return new DeleteCommand(taskNo);","lastModifiedDate":"2023-09-16"},{"lineNumber":210,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":211,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"xCOLOURx"},"content":" private static Command handleCaseOn(String[] userInputArr) throws NoacException {","lastModifiedDate":"2023-09-16"},{"lineNumber":213,"author":{"gitId":"xCOLOURx"},"content":" LocalDate localDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"xCOLOURx"},"content":" if (userInputArr.length !\u003d 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please input date in this format yyyy-MM-dd\");","lastModifiedDate":"2023-09-09"},{"lineNumber":217,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":219,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"xCOLOURx"},"content":" localDate \u003d LocalDate.parse(userInputArr[1], DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"xCOLOURx"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Please input date in this format yyyy-MM-dd\");","lastModifiedDate":"2023-09-09"},{"lineNumber":224,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"xCOLOURx"},"content":" return new OnCommand(localDate);","lastModifiedDate":"2023-09-16"},{"lineNumber":227,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":228,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"xCOLOURx"},"content":" private static Command handleCaseBye() {","lastModifiedDate":"2023-09-16"},{"lineNumber":230,"author":{"gitId":"xCOLOURx"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-16"},{"lineNumber":231,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":232,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"xCOLOURx"},"content":" private static Command handleCaseFind(String[] userInputArr) {","lastModifiedDate":"2023-09-16"},{"lineNumber":234,"author":{"gitId":"xCOLOURx"},"content":" String searchString \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 1; i \u003c userInputArr.length; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"xCOLOURx"},"content":" searchString +\u003d userInputArr[i] + \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"xCOLOURx"},"content":" assert searchString.length() \u003e\u003d 1 : \"searchString too short\";","lastModifiedDate":"2023-09-16"},{"lineNumber":240,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":241,"author":{"gitId":"xCOLOURx"},"content":" return new FindCommand(searchString.trim());","lastModifiedDate":"2023-09-16"},{"lineNumber":242,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":245}},{"path":"src/main/java/noac/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.util;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Todo;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" * For interactions with the save file such as loading and saving.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" private String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" * Initialise the Storage object with the file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" * @param filePath The file path where the save file should be.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" * Load the tasks in the save file or created one if it does not exist.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" * @return The loaded tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" * @throws NoacException For any errors that needs to be displayed to user.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" public ArrayList\u003cTask\u003e load() throws NoacException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" ArrayList\u003cTask\u003e returnList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" return returnList;","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" String[] fileLineInput \u003d scanner.nextLine().split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" String taskType \u003d fileLineInput[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":" handleDifferentTask(taskType, fileLineInput, returnList);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":" return returnList;","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"xCOLOURx"},"content":" * Write the task list to save file.","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"xCOLOURx"},"content":" * @param taskList The task list to be written.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"xCOLOURx"},"content":" public void save(TaskList taskList) {","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"xCOLOURx"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"xCOLOURx"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(fileWriter);","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"xCOLOURx"},"content":" for(int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"xCOLOURx"},"content":" bufferedWriter.write(taskList.getTask(i).printToFile() + \"\\n\");","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":83,"author":{"gitId":"xCOLOURx"},"content":" bufferedWriter.close();","lastModifiedDate":"2023-09-16"},{"lineNumber":84,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"xCOLOURx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"xCOLOURx"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"xCOLOURx"},"content":" private ArrayList\u003cTask\u003e handleDifferentTask(String taskType, String[] fileLineInput, ArrayList\u003cTask\u003e returnList) throws NoacException {","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"xCOLOURx"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"xCOLOURx"},"content":" case \"T\":","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"xCOLOURx"},"content":" returnList \u003d handleCaseTodo(fileLineInput, returnList);","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":97,"author":{"gitId":"xCOLOURx"},"content":" case \"D\":","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"xCOLOURx"},"content":" returnList \u003d handleCaseDeadline(fileLineInput, returnList);","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"xCOLOURx"},"content":" case \"E\":","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"xCOLOURx"},"content":" returnList \u003d handleCaseEvent(fileLineInput, returnList);","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"xCOLOURx"},"content":" break;","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"xCOLOURx"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"xCOLOURx"},"content":" return returnList;","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"xCOLOURx"},"content":" private ArrayList\u003cTask\u003e handleCaseTodo(String[] fileLineInput, ArrayList\u003cTask\u003e returnList) throws NoacException{","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput.length !\u003d 3) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"xCOLOURx"},"content":" Todo todo \u003d new Todo(fileLineInput[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"xCOLOURx"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"xCOLOURx"},"content":" returnList.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"xCOLOURx"},"content":" return returnList;","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"xCOLOURx"},"content":" private ArrayList\u003cTask\u003e handleCaseDeadline(String[] fileLineInput, ArrayList\u003cTask\u003e returnList) throws NoacException{","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput.length !\u003d 4) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"xCOLOURx"},"content":" Deadline deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"xCOLOURx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"xCOLOURx"},"content":" deadline \u003d new Deadline(fileLineInput[2], Parser.parseDate(fileLineInput[3]));","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"xCOLOURx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"xCOLOURx"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"xCOLOURx"},"content":" returnList.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"xCOLOURx"},"content":" return returnList;","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":147,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"xCOLOURx"},"content":" private ArrayList\u003cTask\u003e handleCaseEvent(String[] fileLineInput, ArrayList\u003cTask\u003e returnList) throws NoacException{","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput.length !\u003d 5) {","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"xCOLOURx"},"content":" Event event;","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"xCOLOURx"},"content":" try{","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"xCOLOURx"},"content":" event \u003d new Event(fileLineInput[2],Parser.parseDate(fileLineInput[3]) , Parser.parseDate(fileLineInput[4]));","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"xCOLOURx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"xCOLOURx"},"content":" throw new NoacException(\"OOPS!!! Corrupted Save file\");","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"xCOLOURx"},"content":" if (fileLineInput[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"xCOLOURx"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"xCOLOURx"},"content":" returnList.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"xCOLOURx"},"content":" return returnList;","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":169}},{"path":"src/main/java/noac/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.util;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" * List of task to store all the tasks by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" * Create the TaskList object and initialise the empty arraylist.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" * Create the TaskList object and initialise the arraylist with the one given.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" * @param taskList The arraylist to be added to the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" * Return the task at the index.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" * @param index The index of the task to be returned","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" * @return The task at that index.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":" * Add the input task to the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":" * Remove a task in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" * Get the size of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" * @return The size of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" public int size() {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":" return taskList.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":67}},{"path":"src/main/java/noac/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.util;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":" * For interactions with the user such as printing or getting the input.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"public class Ui {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" * Print the welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" public static String showWelcomeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" String welcomeMessage \u003d","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" \"Hello! I\u0027m NOAC\\n\" +","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" return welcomeMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":" * Print the bye message.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":" public String showByeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" String byeMessage \u003d \"Bye. Hope to see you again soon!\\n\" ;","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" return byeMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" * Prints the error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":" * @param e The error which message is to be printed.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":" public String showErrorMessage(NoacException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"xCOLOURx"},"content":" * Prints all the tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"xCOLOURx"},"content":" * @param taskList The list to be printed.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"xCOLOURx"},"content":" public String showList(TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"xCOLOURx"},"content":" for (int i \u003d 1; i \u003c\u003d taskList.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d i + \".\" + taskList.getTask(i-1).toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"xCOLOURx"},"content":" * Lets the user know the task has been mark/unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"xCOLOURx"},"content":" * @param task The task to be mark/unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"xCOLOURx"},"content":" * @param isMark Boolean to determine whether to mark or unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"xCOLOURx"},"content":" public String showMarkOrUnmark(Task task, boolean isMark) {","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"xCOLOURx"},"content":" if (isMark) {","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Nice! I\u0027ve marked this task as done:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"xCOLOURx"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"OK, I\u0027ve marked this task as not done yet:\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d task.toString();","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"xCOLOURx"},"content":" * Lets the user know the task has been added.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"xCOLOURx"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"xCOLOURx"},"content":" * @param listSize The number of task in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"xCOLOURx"},"content":" public String showAddTask(Task task, int listSize) {","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Got it. I\u0027ve added this task:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d task.toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Now you have \" + listSize + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"xCOLOURx"},"content":" * Lets the user know the task has been deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"xCOLOURx"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"xCOLOURx"},"content":" * @param listSize The number of task in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"xCOLOURx"},"content":" public String showDeleteTask(Task task, int listSize) {","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d task.toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Now you have \" + listSize + \" tasks in the list.\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"xCOLOURx"},"content":" * Shows the task on that date.","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks The task to be displayed.","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"xCOLOURx"},"content":" public String showTasksOnDate(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"The tasks on this date are:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"xCOLOURx"},"content":" for(int i \u003d 0 ; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"xCOLOURx"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"xCOLOURx"},"content":" * Prints all the tasks that matched a word.","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"xCOLOURx"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"xCOLOURx"},"content":" * @param tasks The task to be printed.","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"xCOLOURx"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"xCOLOURx"},"content":" public String showFind(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"xCOLOURx"},"content":" String returnMessage \u003d \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"xCOLOURx"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage + \"There are no matching tasks in your list. :(\\n\";","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"xCOLOURx"},"content":" for(int i \u003d 0 ; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"xCOLOURx"},"content":" returnMessage +\u003d tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":148,"author":{"gitId":"xCOLOURx"},"content":" return returnMessage;","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":150}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"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.0.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":" \u003cInsets /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":22}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"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.7\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"noac.javafx.MainWindow\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"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-09"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"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-09"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"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-09"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"xCOLOURx":19}},{"path":"src/test/java/noac/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" public void testParseDate() {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" LocalDateTime result \u003d LocalDateTime.parse(\"2001-10-10 0000\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" assertEquals(result.toString(), Parser.parseDate(\"2001-10-10\").toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" LocalDateTime result2 \u003d LocalDateTime.parse(\"2001-10-10 1800\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" assertEquals(result2.toString(), Parser.parseDate(\"2001-10-10 1800\").toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" DateTimeParseException e \u003d assertThrows(DateTimeParseException.class, () -\u003e Parser.parseDate(\"2001-10-101800\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":32}},{"path":"src/test/java/noac/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"package noac.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"import noac.util.Parser;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xCOLOURx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xCOLOURx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xCOLOURx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xCOLOURx"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"xCOLOURx"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"xCOLOURx"},"content":" public void testPrintToFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"xCOLOURx"},"content":" Deadline d \u003d new Deadline(\"hello\", LocalDateTime.parse(\"2001-10-10 1800\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")));","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"xCOLOURx"},"content":" String result \u003d \"D|0|hello|2001-10-10 1800\";","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"xCOLOURx"},"content":" assertEquals(result ,d.printToFile());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"xCOLOURx"},"content":" Deadline d2 \u003d new Deadline(\"hello\", LocalDateTime.parse(\"2001-10-10 1800\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")));","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"xCOLOURx"},"content":" String result2 \u003d \"D|1|hello|2001-10-10 1800\";","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"xCOLOURx"},"content":" d2.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"xCOLOURx"},"content":" assertEquals(result2 ,d2.printToFile());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"xCOLOURx"},"content":" Deadline d3 \u003d new Deadline(\"hello\", Parser.parseDate(\"2001-10-10\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"xCOLOURx"},"content":" String result3 \u003d \"D|0|hello|2001-10-10 0000\";","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"xCOLOURx"},"content":" assertEquals(result3 ,d3.printToFile());","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"xCOLOURx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"xCOLOURx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"xCOLOURx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xCOLOURx":42}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"xCOLOURx"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"xCOLOURx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xCOLOURx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"xCOLOURx"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"xCOLOURx"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xCOLOURx":5}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"xCOLOURx"},"content":"java -classpath ..\\bin noac.Noac \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"xCOLOURx":1,"-":20}}] diff --git a/xCOLOURx_ip_master/commits.json b/xCOLOURx_ip_master/commits.json index 6d0736e3..f03baf22 100644 --- a/xCOLOURx_ip_master/commits.json +++ b/xCOLOURx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"xCOLOURx":[{"date":"2023-08-24","commitResults":[{"hash":"ee580b78146058780b3919e86620fac9f6b81788","isMergeCommit":false,"messageTitle":"Initial commit for lvl 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":5}}},{"hash":"a5825fece20e7101d16560e74856365a565151c6","isMergeCommit":false,"messageTitle":"Initial commit for lvl 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":21}}},{"hash":"311264ff062a223ca3343ef4524dc14ad99a4867","isMergeCommit":false,"messageTitle":"Inital commit for lvl 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}},{"hash":"6615a61dc5941e55e68ce4de1957ea62da9144b7","isMergeCommit":false,"messageTitle":"Inital commit for lvl 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":5}}},{"hash":"4bfedb49a2ac1db00ae245ee47f0c78c6bfd42f8","isMergeCommit":false,"messageTitle":"Initial commit for lvl 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":227,"deletions":25}}},{"hash":"f12c1c3b26d93ad23c1b53eebe170fc95a72372f","isMergeCommit":false,"messageTitle":"Initial commit for Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"15297316477e6a7cb51ffa486c34f94be7adba59","isMergeCommit":false,"messageTitle":"Initial commit for lvl 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":143}}},{"hash":"6eebcc102c4621299a2472d2aa6326b9b079c42b","isMergeCommit":false,"messageTitle":"Initial commit for lvl 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":4}}}]},{"date":"2023-08-31","commitResults":[{"hash":"539b6d178b90ed5746c1dfef1cde70aefa49d45b","isMergeCommit":false,"messageTitle":"Add Save functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":176,"deletions":20}}},{"hash":"a15503108270d15e8436f6bb1e092ff99c636bb5","isMergeCommit":false,"messageTitle":"Add Date and Time functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":222,"deletions":139}}},{"hash":"fc9de874b21bdeb89ebde16457b2e0b7ea9a3138","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"34c0681906e73032e0b6e6e03ecb8e95f8ae219d","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":692,"deletions":476}}},{"hash":"b511bf1293213437cf37809c7fd2431b0b0f5a9c","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":21},"bat":{"insertions":1,"deletions":1}}},{"hash":"51eef1f6a6ce238c997bfb83be2bae026e2a9997","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f8be0daab4904bb19717b239713f63ad5a9350b0","isMergeCommit":false,"messageTitle":"Add Gradle Support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"1df7c11e36c8838e831136dfa55a47cd954d5959","isMergeCommit":false,"messageTitle":"Add JUnit Test","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":0}}},{"hash":"236ad2f0ab5aaa313161a42401c199ee109852e6","isMergeCommit":false,"messageTitle":"Add JavaDocs comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":385,"deletions":9}}},{"hash":"362c0d5ce717851e3f66ba3f82259a892e42ab52","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"ec2c4af5a3fa66c0659f5be0dbb3d4513e605066","isMergeCommit":false,"messageTitle":"Fix lines according to coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":70}}},{"hash":"b4dabeee9113dc25d982cf4f0867b416ce725414","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandard into master","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b6f2afbff2220d323e79ecd3c47ceea49801d185","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":0}}},{"hash":"15246077209cfc3ca9651b7da5aa11386d540bec","isMergeCommit":true,"messageTitle":"Fix merge conflicts between master and branch-Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"94f4fc47e4b02f51b7a217078c514b72f751708e","isMergeCommit":false,"messageTitle":"add CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"7646f2d22bf5186ebf68079499f6770003dab152","isMergeCommit":false,"messageTitle":"Add JavaFX GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":1},"fxml":{"insertions":41,"deletions":0},"java":{"insertions":421,"deletions":286}}}]}]},"authorFileTypeContributionMap":{"xCOLOURx":{"java":1564,"md":0,"fxml":41,"sh":0,"bat":1,"gradle":21,"txt":5}},"authorContributionVariance":{"xCOLOURx":202834.52},"authorDisplayNameMap":{"xCOLOURx":"CS2103T-T13-1 KYLE..CHAN"}} +{"authorDailyContributionsMap":{"xCOLOURx":[{"date":"2023-08-24","commitResults":[{"hash":"ee580b78146058780b3919e86620fac9f6b81788","isMergeCommit":false,"messageTitle":"Initial commit for lvl 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":5}}},{"hash":"a5825fece20e7101d16560e74856365a565151c6","isMergeCommit":false,"messageTitle":"Initial commit for lvl 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":21}}},{"hash":"311264ff062a223ca3343ef4524dc14ad99a4867","isMergeCommit":false,"messageTitle":"Inital commit for lvl 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}},{"hash":"6615a61dc5941e55e68ce4de1957ea62da9144b7","isMergeCommit":false,"messageTitle":"Inital commit for lvl 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":5}}},{"hash":"4bfedb49a2ac1db00ae245ee47f0c78c6bfd42f8","isMergeCommit":false,"messageTitle":"Initial commit for lvl 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":227,"deletions":25}}},{"hash":"f12c1c3b26d93ad23c1b53eebe170fc95a72372f","isMergeCommit":false,"messageTitle":"Initial commit for Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"15297316477e6a7cb51ffa486c34f94be7adba59","isMergeCommit":false,"messageTitle":"Initial commit for lvl 5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":143}}},{"hash":"6eebcc102c4621299a2472d2aa6326b9b079c42b","isMergeCommit":false,"messageTitle":"Initial commit for lvl 6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":4}}}]},{"date":"2023-08-31","commitResults":[{"hash":"539b6d178b90ed5746c1dfef1cde70aefa49d45b","isMergeCommit":false,"messageTitle":"Add Save functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":176,"deletions":20}}},{"hash":"a15503108270d15e8436f6bb1e092ff99c636bb5","isMergeCommit":false,"messageTitle":"Add Date and Time functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":222,"deletions":139}}},{"hash":"fc9de874b21bdeb89ebde16457b2e0b7ea9a3138","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"34c0681906e73032e0b6e6e03ecb8e95f8ae219d","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":692,"deletions":476}}},{"hash":"b511bf1293213437cf37809c7fd2431b0b0f5a9c","isMergeCommit":false,"messageTitle":"Add Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":21},"bat":{"insertions":1,"deletions":1}}},{"hash":"51eef1f6a6ce238c997bfb83be2bae026e2a9997","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f8be0daab4904bb19717b239713f63ad5a9350b0","isMergeCommit":false,"messageTitle":"Add Gradle Support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"1df7c11e36c8838e831136dfa55a47cd954d5959","isMergeCommit":false,"messageTitle":"Add JUnit Test","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":0}}},{"hash":"236ad2f0ab5aaa313161a42401c199ee109852e6","isMergeCommit":false,"messageTitle":"Add JavaDocs comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":385,"deletions":9}}},{"hash":"362c0d5ce717851e3f66ba3f82259a892e42ab52","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"ec2c4af5a3fa66c0659f5be0dbb3d4513e605066","isMergeCommit":false,"messageTitle":"Fix lines according to coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":70}}},{"hash":"b4dabeee9113dc25d982cf4f0867b416ce725414","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandard into master","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b6f2afbff2220d323e79ecd3c47ceea49801d185","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":0}}},{"hash":"15246077209cfc3ca9651b7da5aa11386d540bec","isMergeCommit":true,"messageTitle":"Fix merge conflicts between master and branch-Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"94f4fc47e4b02f51b7a217078c514b72f751708e","isMergeCommit":false,"messageTitle":"add CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"7646f2d22bf5186ebf68079499f6770003dab152","isMergeCommit":false,"messageTitle":"Add JavaFX GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":1},"fxml":{"insertions":41,"deletions":0},"java":{"insertions":421,"deletions":286}}}]},{"date":"2023-09-16","commitResults":[{"hash":"867ebd3a90979ccc93c94487d99b66cc049e9f59","isMergeCommit":false,"messageTitle":"Add Assertions","messageBody":"Assertions not implemented.\n\nAssertions helps to identify bugs in the code.\n\nAssertions statements are added to the Parse.java file.\n\nParsing of the input contains the most assumptions and the assert statements can help identify the bugs.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":15,"deletions":4}}},{"hash":"a716340ddbb124de873d5e98fa5f3e5058f52401","isMergeCommit":true,"messageTitle":"Merge pull request #2 from xCOLOURx/branch-A-Assertions","messageBody":"Add Assertions","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"a9c34a95a8db991fb363eca7eda3c4cda9debd74","isMergeCommit":false,"messageTitle":"Refactor according to Coding Standards","messageBody":"Current Code is not up to Coding Standards\n\nRefactor the code by implementing SLAP, avoiding long methods, magic\nnumbers and making happy path prominent, mainly in the Parser.java and\nStorage.java files.\n\nThis makes the code alot more readable to other users.\n","fileTypesAndContributionMap":{"java":{"insertions":304,"deletions":235}}},{"hash":"84c5755aea0ee32d34e5e9caa99dedacd3946d29","isMergeCommit":true,"messageTitle":"Merge pull request #3 from xCOLOURx/branch-A-CodeQuality","messageBody":"Refactor according to Coding Standards","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"xCOLOURx":{"java":1644,"md":0,"fxml":41,"sh":0,"bat":1,"gradle":22,"txt":5}},"authorContributionVariance":{"xCOLOURx":166140.81},"authorDisplayNameMap":{"xCOLOURx":"CS2103T-T13-1 KYLE..CHAN"}} diff --git a/xxiaoweii_ip_master/authorship.json b/xxiaoweii_ip_master/authorship.json index 0b3ef4e9..7bc7d1e6 100644 --- a/xxiaoweii_ip_master/authorship.json +++ b/xxiaoweii_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"# chatty.Duke project template","lastModifiedDate":"2023-09-12"},{"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":"xxiaoweii"},"content":"3. After that, locate the `src/main/java/chatty.Duke.java` file, right-click it, and choose `Run chatty.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-12"},{"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":{"xxiaoweii":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":"xxiaoweii"},"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":"repositories {","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" mavenCentral()","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":"dependencies {","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"xxiaoweii":28,"-":41}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"[T][ ] sleep","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"[T][ ] sleep","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"[T][ ] sleep again","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":3}},{"path":"src/main/java/chatty/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * An abstract class that manage the command from the user","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for Command class that takes in the state of the command that the user input","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" * @param isExit the state of the command entered by user","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" public Command(Boolean isExit) {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * Return the state of the command","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" * @return a boolean value that represent the state of the command","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" return this.isExit;","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" * Carry out each task according to the command entered","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current available task","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" * @param storage the storage class that is responsible for updating the stored list when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" * @return the respective String after the action is carried out","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException when the sotrage class couldn\u0027t save the data","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" public abstract String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":40}},{"path":"src/main/java/chatty/command/CommandNotFound.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles command that is not pre-set in the system","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"public class CommandNotFound extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the invalid command","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" public CommandNotFound() {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * Prints out the error message","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current available task","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * @param storage the storage class that is responsible for updating the stored list when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * @return the error message that tells the user that the input command is not valid","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" return ui.showInvalid();","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":30}},{"path":"src/main/java/chatty/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Deadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * A class that handle the deadline command that the user entered","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private Task task;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * Contructor for deadline command that will create a task object","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * @param taskDescription the deadline task that user wants to add in","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * @param deadline the deadline of the task","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" public DeadlineCommand(String taskDescription, String deadline) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" this.task \u003d new Deadline(taskDescription, deadline);","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * Add in the deadline task into the current tasklist","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current task","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * @param storage helps to update the data when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" * @return the string that shows the user that the task has been added successfully","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException when storage could not update the files","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(this.task);","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" return ui.showAdded(this.task, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":46}},{"path":"src/main/java/chatty/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * A class that handle the delete command that the user entered","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" private int index;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" * Contructor for delete command","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * @param i the index of the task the user wants to delete","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" public DeleteCommand(int i) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" this.index \u003d i;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" * Delete the task specified by the user","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current task","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @param storage helps to update the data when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * @return the string that shows the user that the task has been deleted successfully","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException when storage could not update the files","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" return ui.showDelete(index, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":43}},{"path":"src/main/java/chatty/command/DoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * A class that handle the mark command that the user entered","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"public class DoneCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" private int index;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" * Contructor for exit command that will create a task object","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" * @param i the index of the task the user wants to mark as done","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" public DoneCommand(int i) {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" this.index \u003d i;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" * Mark the indicated task as done","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current task","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @param storage helps to update the data when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @return the string that shows the user that the task has been mark done","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException when storage could not update the files","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" taskList.markTask(index, true);","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" return ui.showDone(index, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":43}},{"path":"src/main/java/chatty/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Event;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * A class that handle the event command that the user entered","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private Task task;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * Contructor for event command that will create a task object","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * @param taskDescription the event task to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * @param startTime the timing which the event start","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" * @param endTIme the timing which the event will end","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" public EventCommand(String taskDescription, String startTime, String endTIme) {","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" this.task \u003d new Event(taskDescription, startTime, endTIme);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * Add in the new event task into the current taskList","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current task","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" * @param storage helps to update the data when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * @return the string that tells the use that the event task has been added into","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * the list successfully","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException when storage could not update the files","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(this.task);","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" return ui.showAdded(this.task, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":48}},{"path":"src/main/java/chatty/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * A class that handle the exit command that the user entered","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" * Contructor for exit command","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" super(true);","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" * End the conversation","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current task","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * @param storage helps to update the data when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" * @return the string that says goodbye","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" return ui.showExit();","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":31}},{"path":"src/main/java/chatty/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * A class that handle the find command that the user entered","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" private String keyword;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" * Contructor for find command that will create a task object","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" * @param keyword the keyword used to find the task","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" * Find the task matching the keywords entered","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current task","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @param storage helps to update the data when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @return the string that list out the tasks that matched the keywords","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException when storage could not update the files","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" return ui.showMatched(taskList.containsKeyword(this.keyword));","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":42}},{"path":"src/main/java/chatty/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" * A class that handle the list command that the user entered","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * Contructor for list command","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * List out the current list of task","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current task","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * @param storage helps to update the data when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * @return the string that list out the task for the user","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" return ui.showList(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":30}},{"path":"src/main/java/chatty/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.ToDo;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * A class that handle the todo command that the user entered","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private Task task;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * Contructor for find command that will create a task object","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * @param taskDescription the task to be added into the list","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" public ToDoCommand(String taskDescription) {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" this.task \u003d new ToDo(taskDescription);","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * Add in the new todo task into the list","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current task","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * @param storage helps to update the data when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * @return the string that tells the user that the task has been added","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException when storage could not update the files","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(this.task);","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" return ui.showAdded(this.task, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":45}},{"path":"src/main/java/chatty/command/UndoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * A class that handle the unmark command that the user entered","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"public class UndoneCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" private int index;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" * Contructor for unmark command","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" * @param i the index of the task that the user want to mark as undone","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" public UndoneCommand(int i) {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" this.index \u003d i;","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" * Mark the indicated task as undone","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the tasklist with the current task","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * @param ui the current user interface","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @param storage helps to update the data when necessary","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @return the string that tells the user that the task has been made undone","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException when storage could not update the files","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" taskList.markTask(index, false);","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" return ui.showUndone(index, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":43}},{"path":"src/main/java/chatty/exception/ChattyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.exception;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * Throw any exception related to the chatbot","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class ChattyException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":" public ChattyException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xxiaoweii":11}},{"path":"src/main/java/chatty/exception/DetailsUnknownException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.exception;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * When the user did not enter the details of the task","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class DetailsUnknownException extends ChattyException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" * Returns a message telling the user that the input entered is incomplete","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" public DetailsUnknownException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" super(\"The details are missing. Please check your input again\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"xxiaoweii":14}},{"path":"src/main/java/chatty/exception/IncompleteMessageException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.exception;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * When user only enter the keyword without the task description","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class IncompleteMessageException extends ChattyException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":" public IncompleteMessageException(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" super(\"The command you entered is incomplete. Please give me more information.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"xxiaoweii":10}},{"path":"src/main/java/chatty/exception/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.exception;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * if user entered a task number that does not exist","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class InvalidTaskNumberException extends ChattyException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" public InvalidTaskNumberException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" super(\"The task number you have entered is invalid, please double check.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"xxiaoweii":11}},{"path":"src/main/java/chatty/exception/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.exception;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * if an input entered by user does not start with one of the command word","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class UnknownCommandException extends ChattyException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" super(\"Sorry, I don\u0027t understand what that means.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xxiaoweii":10}},{"path":"src/main/java/chatty/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" private Label dialog;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" private void flip() {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" db.flip();","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" return db;","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":61}},{"path":"src/main/java/chatty/gui/GuiMain.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"public class GuiMain extends Application {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(GuiMain.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" stage.setTitle(\"Chatty\");","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" stage.show();","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":33}},{"path":"src/main/java/chatty/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"public class Launcher {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" Application.launch(GuiMain.class, args);","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":12}},{"path":"src/main/java/chatty/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" private Duke duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/duke.png\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" public void initialize() {","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" this.duke \u003d d;","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" );","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" userInput.clear();","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":53}},{"path":"src/main/java/chatty/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * Class that handles the Deadline task","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" private final String deadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * ontructor for Deadline class that calls the constructor of the parent class to create a Task object","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" * @param taskDescription the deadline task to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * @param deadline THe deadline of the task to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" public Deadline(String taskDescription, String deadline) {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" * Return the String representation of the object","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * @return String representation of the object","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" String status \u003d (this.isDone) ? \"[D][X] \" : \"[D][ ] \";","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" String task \u003d String.format(\"%s (by: %s)\", this.task, this.deadline);","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" return status + task;","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":30}},{"path":"src/main/java/chatty/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * Class that handles the Event task","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" private final String startTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" private final String endTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" * ontructor for Event class that calls the constructor of the parent class to create a Task object","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * @param taskDescription the event task to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" * @param startTime the start time of the event task","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" * @param endTime the end time of the event task","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" public Event(String taskDescription, String startTime, String endTime) {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * Return the String representation of the object","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" * @return String representation of the object","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" String status \u003d (this.isDone) ? \"[E][X] \" : \"[E][ ] \";","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" String taskString \u003d String.format(\"%s (from: %s to: %s)\", this.task, this.startTime, this.endTime);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" return status + taskString;","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":33}},{"path":"src/main/java/chatty/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles each of the task added by the user","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class Task {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" protected String task;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" * Constructor that for Task class that creates one task object for each task to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * @param task the task that the user wants to add","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" public Task(String task) {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" * Method that change the state of the task according to the instruction given by the user","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * @param status the status of the task that the user wants to change to","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" public void markStatus(boolean status) {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" this.isDone \u003d status;","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * Method that checks if the task contains the keyword entered","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * @param keyword the keyword that the user wants to find","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * @return return a boolean value to indicate if the task contains the particular keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" public boolean checkKeyword(String keyword) {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" return this.task.contains(keyword);","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":37}},{"path":"src/main/java/chatty/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.InvalidTaskNumberException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" * A class that creates and handle the list of task added by the user","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"public class TaskList {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for TaskList class that creaes a new ArrayList to store the tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" public TaskList() {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * Method that finds the current size of the task list","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * @return the size of the current task list, in int value","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" public int listSize() {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * Method that helps to add in new task into the list","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * @param task","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" * Method that delete a task from the current list of task","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" * @param i the index of the task that the user wants to delete","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" * @return the task that is being removed","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException when the index of the task entered by the user is out of the range of the","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" * available task","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" public Task deleteTask(int i) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" if (i \u003e\u003d this.listSize() || i \u003c 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" throw new InvalidTaskNumberException();","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" return this.taskList.remove(i - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" * Method that get the task that the user want to change status","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":" * @param i the index of the task that the user wants to change status","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" * @param status the status that user wants to change the task to, indicated by boolean value","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException when the index of the task entered by the user is out of the range of the","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" * * available task","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" public void markTask(int i, boolean status) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" if (i \u003e\u003d this.listSize() || i \u003c 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" throw new InvalidTaskNumberException();","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":" Task taskToMark \u003d this.taskList.get(i - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" taskToMark.markStatus(status);","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" * Method that prints out the task","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" * @param i the index of the task of interest","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":" * @return the task indicated by the index, in String","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"xxiaoweii"},"content":" public String showTask(int i) {","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"xxiaoweii"},"content":" Task taskToShow \u003d taskList.get(i - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"xxiaoweii"},"content":" return taskToShow.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"xxiaoweii"},"content":" * Method that check if the task contains the keyword. Add it into another list if it contains the keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"xxiaoweii"},"content":" * @param keyword the keyword to search for the relevant task","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"xxiaoweii"},"content":" * @return the list of task matching the keyword entered","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"xxiaoweii"},"content":" public String containsKeyword(String keyword) {","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"xxiaoweii"},"content":" StringBuilder listWithKeyword \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"xxiaoweii"},"content":" int i \u003d 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"xxiaoweii"},"content":" while (i \u003c taskList.size()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"xxiaoweii"},"content":" if (taskList.get(i).checkKeyword(keyword)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"xxiaoweii"},"content":" int taskNumber \u003d i + 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"xxiaoweii"},"content":" listWithKeyword.append(taskNumber + \". \" + this.showTask(taskNumber)).append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"xxiaoweii"},"content":" i++;","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"xxiaoweii"},"content":" return listWithKeyword.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"xxiaoweii"},"content":" * Method that return the task of interest","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"xxiaoweii"},"content":" * @param i the index of the task to be returned","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"xxiaoweii"},"content":" * @return the task indicated by index i","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"xxiaoweii"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"xxiaoweii"},"content":" return taskList.get(i);","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":103}},{"path":"src/main/java/chatty/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * Class that handles the todo task","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * Contructor for todo class that calls the constructor of the parent class to create a Task object","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * @param task the task to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" public ToDo(String task) {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" super(task);","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" * Return the String representation of the object","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * @return String representation of the object","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" return \"[T][X] \" + this.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" return \"[T][ ] \" + this.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":28}},{"path":"src/main/java/chatty/utils/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.utils;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.Command;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * Main class that will run according to the command given by the user","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"public class Duke {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" private Ui ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" private Storage storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * Empty constructor when GUI is run","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" public Duke() {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" this.storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" this.storage.loadTask(this.taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" } catch (ChattyException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" * Constructor that will load the existing file if there is","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * @param filePath the path to the existing file","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" storage.loadTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" } catch (ChattyException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":" * The method that will start the chatbot when called","lastModifiedDate":"2023-09-14"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" public void startChatting() {","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" ui.showGreet();","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" String originalInput \u003d ui.getInput();","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" Command command \u003d Parser.parse(originalInput);","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":" command.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" } catch (ChattyException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":74,"author":{"gitId":"xxiaoweii"},"content":" * Get the chatbot response to be printed on the dialogue box when GUI is called","lastModifiedDate":"2023-09-14"},{"lineNumber":75,"author":{"gitId":"xxiaoweii"},"content":" * @param input the input from the user","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"xxiaoweii"},"content":" * @return The response given by the chatbot","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"xxiaoweii"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"xxiaoweii"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"xxiaoweii"},"content":" String msg \u003d command.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"xxiaoweii"},"content":" return \"Chatty: \\n\" + msg;","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"xxiaoweii"},"content":" } catch (ChattyException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"xxiaoweii"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"xxiaoweii"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"xxiaoweii"},"content":" new Duke(\"data/tasks.txt\").startChatting();","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":91}},{"path":"src/main/java/chatty/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.utils;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.Command;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.CommandNotFound;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.DeadlineCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.DeleteCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.DoneCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.EventCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.ExitCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.FindCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.ListCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.ToDoCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.UndoneCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.DetailsUnknownException;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.IncompleteMessageException;","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.InvalidTaskNumberException;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * Responsible to do the parsing required for the chatbot","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":"public class Parser {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * return the specific command to execute depending on the command given by the user","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @param input the input by user","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * @return The specific command","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * @throws DetailsUnknownException when the user did not enter the details for the task","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" * @throws IncompleteMessageException when the user did not enter the task description","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException when the task number entered by the user is out of the range","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" public static Command parse(String input) throws DetailsUnknownException,","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" IncompleteMessageException, InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" String exitC \u003d \"bye\";","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" String listC \u003d \"list\";","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" String deleteC \u003d \"delete\";","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" String doneC \u003d \"mark\";","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" String undoneC \u003d \"unmark\";","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" String deadlineC \u003d \"deadline\";","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" String eventC \u003d \"event\";","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" String todoC \u003d \"todo\";","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" String findC \u003d \"find\";","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" if (input.equalsIgnoreCase(exitC)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" if (input.equalsIgnoreCase(listC)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" if (input.startsWith(doneC)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" if (input.length() \u003d\u003d doneC.length() - 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"Done\");","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" String getIndex \u003d input.substring(doneC.length() + 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":" int taskIndex \u003d Integer.parseInt(getIndex);","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" return new DoneCommand(taskIndex);","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" if (input.startsWith(undoneC)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" if (input.length() \u003d\u003d undoneC.length() - 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"Undone\");","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"xxiaoweii"},"content":" String getIndex \u003d input.substring(undoneC.length() + 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"xxiaoweii"},"content":" int taskIndex \u003d Integer.parseInt(getIndex);","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"xxiaoweii"},"content":" return new UndoneCommand(taskIndex);","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"xxiaoweii"},"content":" if (input.startsWith(deleteC)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"xxiaoweii"},"content":" if (input.length() \u003d\u003d deleteC.length() - 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"Delete\");","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"xxiaoweii"},"content":" String getIndex \u003d input.substring(deleteC.length() + 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"xxiaoweii"},"content":" int taskIndex \u003d Integer.parseInt(getIndex);","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"xxiaoweii"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"xxiaoweii"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"xxiaoweii"},"content":" throw new InvalidTaskNumberException();","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"xxiaoweii"},"content":" if (input.startsWith(deadlineC)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"xxiaoweii"},"content":" if (input.length() \u003d\u003d deadlineC.length() - 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"D\");","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"xxiaoweii"},"content":" // return [deadline, chatty.task/by deadline]","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"xxiaoweii"},"content":" String[] inputArr \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"xxiaoweii"},"content":" // return [chatty.task description, deadline]","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"xxiaoweii"},"content":" String[] splitInput \u003d inputArr[1].split(\"/by \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d splitInput[0];","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"xxiaoweii"},"content":" LocalDate date \u003d LocalDate.parse(splitInput[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"xxiaoweii"},"content":" String formattedDate \u003d Parser.formatDate(date);","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"xxiaoweii"},"content":" return new DeadlineCommand(taskDescription, formattedDate);","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"xxiaoweii"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"xxiaoweii"},"content":" throw new DetailsUnknownException();","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"xxiaoweii"},"content":" } catch (IncompleteMessageException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"xxiaoweii"},"content":" if (input.startsWith(todoC)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"xxiaoweii"},"content":" if (input.length() \u003d\u003d todoC.length() || input.length() \u003d\u003d todoC.length() + 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"T\");","lastModifiedDate":"2023-09-12"},{"lineNumber":116,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"xxiaoweii"},"content":" //return [todoC, taskDescription];","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"xxiaoweii"},"content":" String[] inputArr \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d inputArr[1];","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"xxiaoweii"},"content":" return new ToDoCommand(taskDescription);","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"xxiaoweii"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"xxiaoweii"},"content":" throw new DetailsUnknownException();","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"xxiaoweii"},"content":" if (input.startsWith(eventC)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"xxiaoweii"},"content":" if (input.length() \u003d\u003d eventC.length() - 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"E\");","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"xxiaoweii"},"content":" //return [event, chatty.task/from time /to time]","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"xxiaoweii"},"content":" String[] inputArr \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"xxiaoweii"},"content":" //return [taskDescription, /from time /to time]","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"xxiaoweii"},"content":" String[] splitInput \u003d inputArr[1].split(\"/from \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":137,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d splitInput[0];","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"xxiaoweii"},"content":" String[] splitTime \u003d splitInput[1].split(\" /to \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":139,"author":{"gitId":"xxiaoweii"},"content":" LocalDate start \u003d LocalDate.parse(splitTime[0]);","lastModifiedDate":"2023-09-12"},{"lineNumber":140,"author":{"gitId":"xxiaoweii"},"content":" String formattedStart \u003d Parser.formatDate(start);","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"xxiaoweii"},"content":" LocalDate end \u003d LocalDate.parse(splitTime[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":142,"author":{"gitId":"xxiaoweii"},"content":" String formattedEnd \u003d Parser.formatDate(end);","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"xxiaoweii"},"content":" return new EventCommand(taskDescription, formattedStart, formattedEnd);","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"xxiaoweii"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"xxiaoweii"},"content":" throw new DetailsUnknownException();","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"xxiaoweii"},"content":" } catch (IncompleteMessageException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":148,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":149,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":150,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":151,"author":{"gitId":"xxiaoweii"},"content":" if (input.startsWith(findC)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":152,"author":{"gitId":"xxiaoweii"},"content":" if (input.length() \u003d\u003d findC.length() - 1) {","lastModifiedDate":"2023-09-12"},{"lineNumber":153,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"F\");","lastModifiedDate":"2023-09-12"},{"lineNumber":154,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":155,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":156,"author":{"gitId":"xxiaoweii"},"content":" //return [find, keyword]","lastModifiedDate":"2023-09-12"},{"lineNumber":157,"author":{"gitId":"xxiaoweii"},"content":" String[] inputArr \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":158,"author":{"gitId":"xxiaoweii"},"content":" String keyword \u003d inputArr[1];","lastModifiedDate":"2023-09-12"},{"lineNumber":159,"author":{"gitId":"xxiaoweii"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-12"},{"lineNumber":160,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":161,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":162,"author":{"gitId":"xxiaoweii"},"content":" return new CommandNotFound();","lastModifiedDate":"2023-09-12"},{"lineNumber":163,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":164,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":165,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":166,"author":{"gitId":"xxiaoweii"},"content":" * Format the date in LocalDate format to String","lastModifiedDate":"2023-09-14"},{"lineNumber":167,"author":{"gitId":"xxiaoweii"},"content":" * @param date the date in LocalDate format","lastModifiedDate":"2023-09-14"},{"lineNumber":168,"author":{"gitId":"xxiaoweii"},"content":" * @return the formatted date in String representation","lastModifiedDate":"2023-09-14"},{"lineNumber":169,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":170,"author":{"gitId":"xxiaoweii"},"content":" public static String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-12"},{"lineNumber":171,"author":{"gitId":"xxiaoweii"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-12"},{"lineNumber":172,"author":{"gitId":"xxiaoweii"},"content":" String formattedDate \u003d date.format(formatter);","lastModifiedDate":"2023-09-12"},{"lineNumber":173,"author":{"gitId":"xxiaoweii"},"content":" return formattedDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":174,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":175,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":175}},{"path":"src/main/java/chatty/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.utils;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import java.io.File;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.InvalidTaskNumberException;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Deadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Event;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.ToDo;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" * Responsible to save the existing list","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * to a hardware storage. The list will autoload when","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * user restart duke chatbot.","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":"public class Storage {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" private String filePath;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" private File file;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the Storage path","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @param filePath the path to the storage file","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" this.file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" this.file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" if (!this.file.exists()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" this.file.createNewFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" * Save the added task to the storage file","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the list with all the task","lastModifiedDate":"2023-09-14"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" public void saveTask(TaskList taskList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(this.filePath));","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" StringBuilder tasks \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":" for (int i \u003d 0; i \u003c taskList.listSize(); i++) {","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" tasks.append(taskList.showTask(i + 1)).append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" writer.write(tasks.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" writer.close();","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" System.out.println(\"An error occured while trying to save tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" * Load the file when the user starts the bot again","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the list that contains the added task","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" * @throws IOException when the task cannot be loaded","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":" @SuppressWarnings(\"checkstyle:MissingSwitchDefault\")","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":" public void loadTask(TaskList taskList) throws IOException, ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"xxiaoweii"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"xxiaoweii"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"xxiaoweii"},"content":" String task \u003d scanner.nextLine();","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"xxiaoweii"},"content":" char taskType \u003d task.charAt(1);","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"xxiaoweii"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"xxiaoweii"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"xxiaoweii"},"content":" loadTodoTask(taskList, task);","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"xxiaoweii"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"xxiaoweii"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"xxiaoweii"},"content":" loadDeadlineTask(taskList, task);","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"xxiaoweii"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"xxiaoweii"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"xxiaoweii"},"content":" loadEventTask(taskList, task);","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"xxiaoweii"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Unable to load task\");","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"xxiaoweii"},"content":" * Handles the case when the task to be loaded is a todo task","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the list with the added task","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"xxiaoweii"},"content":" * @param task The ask to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":98,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException when the index of the task is not valid","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"xxiaoweii"},"content":" private void loadTodoTask(TaskList taskList, String task) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d task.substring(7);","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"xxiaoweii"},"content":" boolean isDone \u003d task.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(new ToDo(taskDescription));","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"xxiaoweii"},"content":" if (isDone) {","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"xxiaoweii"},"content":" taskList.markTask(taskList.listSize(), true);","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":110,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":111,"author":{"gitId":"xxiaoweii"},"content":" * Handles the case when the task to be loaded is a deadline task","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the list with the added task","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"xxiaoweii"},"content":" * @param task The ask to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException when the index of the task is not valid","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":116,"author":{"gitId":"xxiaoweii"},"content":" private void loadDeadlineTask(TaskList taskList, String task) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"xxiaoweii"},"content":" int colonIndex \u003d task.indexOf(\":\");","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d task.substring(7, colonIndex - 4);","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"xxiaoweii"},"content":" String deadline \u003d task.substring(colonIndex + 4, task.length() - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"xxiaoweii"},"content":" boolean isDone \u003d task.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(new Deadline(taskDescription, deadline));","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"xxiaoweii"},"content":" if (isDone) {","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"xxiaoweii"},"content":" taskList.markTask(taskList.listSize(), true);","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"xxiaoweii"},"content":" * Handles the case when the task to be loaded is a event task","lastModifiedDate":"2023-09-14"},{"lineNumber":129,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the list with the added task","lastModifiedDate":"2023-09-14"},{"lineNumber":130,"author":{"gitId":"xxiaoweii"},"content":" * @param task The ask to be added","lastModifiedDate":"2023-09-14"},{"lineNumber":131,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException when the index of the task is not valid","lastModifiedDate":"2023-09-14"},{"lineNumber":132,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":133,"author":{"gitId":"xxiaoweii"},"content":" private void loadEventTask(TaskList taskList, String task) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"xxiaoweii"},"content":" int colon1Index \u003d task.indexOf(\u0027:\u0027);","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"xxiaoweii"},"content":" int colon2Index \u003d task.indexOf(\u0027:\u0027, colon1Index + 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":137,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d task.substring(7, colon1Index - 6);","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"xxiaoweii"},"content":" String startDate \u003d task.substring(colon1Index + 2, colon2Index - 3);","lastModifiedDate":"2023-09-12"},{"lineNumber":139,"author":{"gitId":"xxiaoweii"},"content":" String endDate \u003d task.substring(colon2Index + 2, task.length() - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":140,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"xxiaoweii"},"content":" boolean isDone \u003d task.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-12"},{"lineNumber":142,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(new Event(taskDescription, startDate, endDate));","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"xxiaoweii"},"content":" if (isDone) {","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"xxiaoweii"},"content":" taskList.markTask(taskList.listSize(), true);","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":147}},{"path":"src/main/java/chatty/utils/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.utils;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.InvalidTaskNumberException;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * Responsible for the interactions with user","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"public class Ui {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the Ui class.","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * Initialise the chatbot","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" public Ui() {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" * Get the input from the user","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * @return the input from the user","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" public String getInput() {","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * Prints the greeting when the user start the chatbot","lastModifiedDate":"2023-09-14"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" * @return The greeting","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" public String showGreet() {","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" return \"Hi there! I\u0027m Chatty! \\n How can I help you today?\";","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" * Prints the exit line when te user wants to exit the chatbot","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" * @return The goodbye message","lastModifiedDate":"2023-09-14"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" public String showExit() {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" return \"Bye! Hope to see you again soon!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" * Prints out the list of task in the task list","lastModifiedDate":"2023-09-14"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the task list to be printed for the user","lastModifiedDate":"2023-09-14"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" * @return the list of task in the task list","lastModifiedDate":"2023-09-14"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" public String showList(TaskList taskList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":" if (taskList.listSize() \u003d\u003d 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" return \"There is currently no chatty.task in your list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" StringBuilder result \u003d new StringBuilder(\"Here are the tasks in your list: \\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" for (int i \u003d 0; i \u003c taskList.listSize(); i++) {","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" result.append(i + 1).append(\". \").append(taskList.getTask(i)).append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":" return result.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" * Prints the message to show the user that the task has been mark done","lastModifiedDate":"2023-09-14"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task the user wants to mark as done","lastModifiedDate":"2023-09-14"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the task list consisting of all the available tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"xxiaoweii"},"content":" public String showDone(int i, TaskList taskList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"xxiaoweii"},"content":" return \"Nice! I\u0027ve marked this chatty.task as done: \\n\" + \" \" + taskList.showTask(i);","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"xxiaoweii"},"content":" * Prints the message to show the user that the task has been mark as undone","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task the user wants to mark as undone","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the task list consisting of all the available tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":80,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"xxiaoweii"},"content":" public String showUndone(int i, TaskList taskList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"xxiaoweii"},"content":" return \"Ok, I\u0027ve marked this chatty.task as not done: \\n\" + \" \" + taskList.showTask(i);","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"xxiaoweii"},"content":" * Prints the message to show the user that the task has been deleted","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task the user wants to delete","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the task list consisting of all the available tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":91,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"xxiaoweii"},"content":" * @exception InvalidTaskNumberException when the index of the task is not a valid index","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":94,"author":{"gitId":"xxiaoweii"},"content":" public String showDelete(int i, TaskList taskList) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"xxiaoweii"},"content":" return \"Alright, I\u0027ve removed this chatty.task from the list: \\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"xxiaoweii"},"content":" + \" \" + taskList.deleteTask(i) + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"xxiaoweii"},"content":" + \"Now you have\" + taskList.listSize() + \" task(s) in your list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"xxiaoweii"},"content":" * Prints the message to show the user that the task has been added to the list","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"xxiaoweii"},"content":" * @param task The task to be added into the list","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the task list consisting of all the available tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":104,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message","lastModifiedDate":"2023-09-14"},{"lineNumber":105,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"xxiaoweii"},"content":" public String showAdded(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"xxiaoweii"},"content":" return \"Got it. I\u0027ve added this chatty.task into the list: \\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"xxiaoweii"},"content":" + \" \" + task + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"xxiaoweii"},"content":" + \"You now have \" + taskList.listSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"xxiaoweii"},"content":" * Prints the message to tell the user that the command is not valid","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":116,"author":{"gitId":"xxiaoweii"},"content":" public String showInvalid() {","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"xxiaoweii"},"content":" return \"Sorry, I don\u0027t understand this command\";","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":121,"author":{"gitId":"xxiaoweii"},"content":" * Prints the list of task that matched the specified keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":122,"author":{"gitId":"xxiaoweii"},"content":" * @param matchedTask the list of task that matched the keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":123,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message + the list of matching task","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"xxiaoweii"},"content":" public String showMatched(String matchedTask) {","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"xxiaoweii"},"content":" if (matchedTask.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"xxiaoweii"},"content":" return \"There is no tasks matching your keyword\";","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"xxiaoweii"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"xxiaoweii"},"content":" return \"Here are the list of task(s) matching your keyword: \\n\" + matchedTask;","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":132}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"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-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: lightblue;\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"chatty.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" textFill\u003d\"#3791c5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #e9ff44;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" style\u003d\"-fx-background-color: #b1ebfd;\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":19}},{"path":"src/test/java/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Deadline;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" assertEquals(\"[D][ ] Complete iP (by: Sep 05 2023 2:00PM)\",","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" new Deadline(\"Complete iP\", \"2023-09-05 1400\").toString());","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xxiaoweii":14}},{"path":"src/test/java/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.ToDo;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" assertEquals(\"[T][ ] Complete iP\", new ToDo(\"Complete iP\").toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xxiaoweii":13}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"# chatty.Duke project template","lastModifiedDate":"2023-09-12"},{"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":"xxiaoweii"},"content":"3. After that, locate the `src/main/java/chatty.Duke.java` file, right-click it, and choose `Run chatty.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-12"},{"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":{"xxiaoweii":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":"xxiaoweii"},"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" mainClass.set(\"chatty.gui.Launcher\")","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" archiveFileName \u003d \u0027chattyGui.jar\u0027","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" archiveBaseName \u003d \"chattyGui\"","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":"checkstyle {","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":"repositories {","lastModifiedDate":"2023-09-07"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" mavenCentral()","lastModifiedDate":"2023-09-07"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":"dependencies {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"xxiaoweii":30,"-":40}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"[T][ ] sleep","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"[T][ ] sleep","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"[T][ ] sleep again","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":3}},{"path":"src/main/java/chatty/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * An abstract class representing a command that can be executed by the Chatty chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * Commands are used to interact with the user, manipulate the task list, and manage the user interface.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * Each concrete subclass of this class defines specific behavior for a particular command type.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * Constructs a new command instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * @param isExit true if this command represents an exit command, false otherwise.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" public Command(Boolean isExit) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * Checks if this command is an exit command.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @return true if this command represents an exit command, false otherwise.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" return this.isExit;","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" * Executes the command\u0027s specific behavior using the provided task list, user interface, and storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * The concrete implementations of this method define the action to be taken for each command type.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage responsible for updating stored data, if necessary.","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" * @return A String representing the result or response of executing the command.","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException if the storage class encounters an error while saving data.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" public abstract String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":46}},{"path":"src/main/java/chatty/command/CommandNotFound.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" * A class that represents a command that is not recognized or pre-set in the Chatty system.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * When the user enters an invalid or unrecognized command, an instance of this class is created","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * to handle and display an error message.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"public class CommandNotFound extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the invalid command instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" * Initializes the instance to represent a non-exit command.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" public CommandNotFound() {","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * Executes the command for handling an invalid command.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * Displays an error message through the user interface.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks (not used in this command).","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage class that is responsible for updating stored data (not used in this command).","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @return A String containing the error message indicating that the input command is not valid.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" return ui.showInvalid();","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":35}},{"path":"src/main/java/chatty/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Deadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles the deadline command entered by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" * When the user provides a deadline command, an instance of this class is created to","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * add a deadline task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" private Task task;","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the deadline command instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" * Initializes the instance with the provided task description and deadline.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * @param taskDescription The description of the deadline task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * @param deadline The deadline associated with the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" public DeadlineCommand(String taskDescription, String deadline) {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" this.task \u003d new Deadline(taskDescription, deadline);","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" * Executes the deadline command to add a deadline task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * This method adds the specified deadline task to the task list, updates the storage,","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * and returns a message confirming the task addition.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage class that is responsible for updating stored data.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" * @return A String indicating that the deadline task has been added successfully.","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException If storage encounters an issue while saving the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(this.task);","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" return ui.showAdded(this.task, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":53}},{"path":"src/main/java/chatty/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles the delete command entered by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * When the user provides a delete command, an instance of this class is created to","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * delete a task from the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private int index;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the delete command instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * Initializes the instance with the index of the task the user wants to delete.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task the user wants to delete.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" public DeleteCommand(int i) {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" this.index \u003d i;","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * Executes the delete command to remove a task from the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * This method deletes the specified task from the task list, updates the storage,","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" * and returns a message confirming the task deletion.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage class that is responsible for updating stored data.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * @return A String indicating that the task has been deleted successfully.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException If storage encounters an issue while saving the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" return ui.showDelete(index, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":50}},{"path":"src/main/java/chatty/command/DoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles the mark command entered by the user to mark a task as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * When the user provides a mark command, an instance of this class is created to","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * mark a task as done in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"public class DoneCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private int index;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the DoneCommand instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * Initializes the instance with the index of the task the user wants to mark as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task the user wants to mark as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" public DoneCommand(int i) {","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" this.index \u003d i;","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * Executes the mark command to mark a task as done in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * This method marks the specified task as done, updates the storage,","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * and returns a message confirming the task has been marked as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage class that is responsible for updating stored data.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" * @return A String indicating that the task has been marked as done successfully.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException If storage encounters an issue while saving the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" taskList.markTask(index, true);","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" return ui.showDone(index, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":50}},{"path":"src/main/java/chatty/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Event;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles the event command entered by the user to add an event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" * When the user provides an event command, an instance of this class is created","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * to add an event task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" private Task task;","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the EventCommand instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" * Initializes the instance with the event task description, start time, and end time.","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * @param taskDescription The description of the event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * @param startTime The timing at which the event starts.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" * @param endTime The timing at which the event ends.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" public EventCommand(String taskDescription, String startTime, String endTime) {","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" this.task \u003d new Event(taskDescription, startTime, endTime);","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * Executes the event command to add an event task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * This method adds the new event task to the task list, updates the storage,","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" * and returns a message indicating that the event task has been added successfully.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage class that is responsible for updating stored data.","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" * @return A String indicating that the event task has been added successfully.","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException If storage encounters an issue while saving the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(this.task);","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" return ui.showAdded(this.task, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":54}},{"path":"src/main/java/chatty/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles the exit command entered by the user to end the conversation.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * When the user provides an exit command, an instance of this class is created","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * to end the conversation and display a goodbye message.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the ExitCommand instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" * Initializes the instance to specify that it represents an exit command.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" super(true);","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * Executes the exit command to end the conversation.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * This method returns a goodbye message to signal the end of the conversation.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks (unused in this command).","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage class (unused in this command).","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @return A String containing a goodbye message.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-14"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" return ui.showExit();","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":35}},{"path":"src/main/java/chatty/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles the find command entered by the user to search for tasks containing a specific keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * When the user provides a find command with a keyword, an instance of this class is created","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * to search for tasks in the task list that match the given keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private String keyword;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the FindCommand instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * Initializes the instance with the provided keyword to be used in the task search.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * @param keyword The keyword used to search for tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * Executes the find command to search for tasks matching the specified keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * This method returns a string containing a list of tasks that match the keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage class (unused in this command).","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" * @return A String containing a list of tasks that match the specified keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException when storage could not update the files (unused in this command).","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" return ui.showMatched(taskList.containsKeyword(this.keyword));","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":49}},{"path":"src/main/java/chatty/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles the list command entered by the user to display the current task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * When the user provides a list command, an instance of this class is created","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * to display the list of tasks in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the ListCommand instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" * Initializes the instance without any specific parameters.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" public ListCommand() {","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * Executes the list command to display the current list of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" * This method returns a string containing the list of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage class (unused in this command).","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * @return A String containing the list of tasks for the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" return ui.showList(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":36}},{"path":"src/main/java/chatty/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Task;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.ToDo;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles the \u0027todo\u0027 command entered by the user to add a new \u0027todo\u0027 task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" * When the user provides a \u0027todo\u0027 command with a task description, an instance of this class is created","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * to add the specified \u0027todo\u0027 task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" private Task task;","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the ToDoCommand instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * @param taskDescription The description of the \u0027todo\u0027 task to be added to the list.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" public ToDoCommand(String taskDescription) {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" this.task \u003d new ToDo(taskDescription);","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * Executes the \u0027todo\u0027 command to add a new \u0027todo\u0027 task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * This method adds the \u0027todo\u0027 task to the task list, updates the storage (if required),","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" * and returns a string confirming the addition of the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage class for updating the stored task list (if required).","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * @return A String containing a confirmation message for the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException If storage encounters an error while saving the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(this.task);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" return ui.showAdded(this.task, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":52}},{"path":"src/main/java/chatty/command/UndoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.command;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * A class that handles the \u0027unmark\u0027 command entered by the user to mark a task as undone in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * When the user provides an \u0027unmark\u0027 command with a task index, an instance of this class is created","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * to update the status of the specified task as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"public class UndoneCommand extends Command {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private int index;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the UndoneCommand instance.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task that the user wants to mark as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" public UndoneCommand(int i) {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" super(false);","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" this.index \u003d i;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * Executes the \u0027unmark\u0027 command to mark a task as undone in the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * This method updates the status of the specified task as undone, saves the updated task list to storage (if required),","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" * and returns a string indicating that the task has been marked as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The task list with the current available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * @param ui The current user interface for displaying messages.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * @param storage The storage class for updating the stored task list (if required).","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" * @return A String containing a message indicating that the task has been marked as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException If storage encounters an error while saving the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) throws ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" taskList.markTask(index, false);","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" storage.saveTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Cannot save chatty.task!\");","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" return ui.showUndone(index, taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":49}},{"path":"src/main/java/chatty/exception/ChattyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.exception;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * Throw any exception related to the chatbot","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class ChattyException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":" public ChattyException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xxiaoweii":11}},{"path":"src/main/java/chatty/exception/DetailsUnknownException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.exception;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * When the user did not enter the details of the task","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class DetailsUnknownException extends ChattyException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" * Returns a message telling the user that the input entered is incomplete","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" public DetailsUnknownException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" super(\"The details are missing. Please check your input again\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"xxiaoweii":14}},{"path":"src/main/java/chatty/exception/IncompleteMessageException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.exception;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * When user only enter the keyword without the task description","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class IncompleteMessageException extends ChattyException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":" public IncompleteMessageException(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" super(\"The command you entered is incomplete. Please give me more information.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"xxiaoweii":10}},{"path":"src/main/java/chatty/exception/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.exception;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * if user entered a task number that does not exist","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class InvalidTaskNumberException extends ChattyException {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" public InvalidTaskNumberException() {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" super(\"The task number you have entered is invalid, please double check.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"xxiaoweii":11}},{"path":"src/main/java/chatty/exception/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.exception;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * if an input entered by user does not start with one of the command word","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class UnknownCommandException extends ChattyException {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" super(\"Sorry, I don\u0027t understand what that means.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"xxiaoweii":10}},{"path":"src/main/java/chatty/gui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" private Label dialog;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" private void flip() {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" db.flip();","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" return db;","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":61}},{"path":"src/main/java/chatty/gui/GuiMain.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Duke;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"public class GuiMain extends Application {","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(GuiMain.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" stage.setTitle(\"Chatty\");","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" stage.show();","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":33}},{"path":"src/main/java/chatty/gui/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"public class Launcher {","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" Application.launch(GuiMain.class, args);","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":12}},{"path":"src/main/java/chatty/gui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.gui;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.utils.Duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" private Duke duke;","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/user.png\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/duke.png\"));","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" public void initialize() {","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" this.duke \u003d d;","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" @FXML","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" );","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" userInput.clear();","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":53}},{"path":"src/main/java/chatty/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * A class that represents a Deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" private final String deadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the Deadline class that calls the constructor of the parent class to create a Task object.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" * @param taskDescription The deadline task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" * @param deadline The deadline of the task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" public Deadline(String taskDescription, String deadline) {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" assert deadline !\u003d null : \"Deadline should not be null when creating a Deadline task.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * Returns the String representation of the object.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" * @return The String representation of the Deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" String status \u003d (this.isDone) ? \"[D][X] \" : \"[D][ ] \";","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" String task \u003d String.format(\"%s (by: %s)\", this.task, this.deadline);","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" return status + task;","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":33}},{"path":"src/main/java/chatty/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * A class that represents an Event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" private final String startTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" private final String endTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the Event class that calls the constructor of the parent class to create a Task object.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" * @param taskDescription The event task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" * @param startTime The start time of the event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" * @param endTime The end time of the event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" public Event(String taskDescription, String startTime, String endTime) {","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" super(taskDescription);","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" assert startTime !\u003d null : \"Start time should not be null when creating an Event.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" assert endTime !\u003d null : \"End time should not be null when creating an Event.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" * Returns the String representation of the object.","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * @return The String representation of the Event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" String status \u003d (this.isDone) ? \"[E][X] \" : \"[E][ ] \";","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" String taskString \u003d String.format(\"%s (from: %s to: %s)\", this.task, this.startTime, this.endTime);","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" return status + taskString;","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":37}},{"path":"src/main/java/chatty/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * A class that represents each task added by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class Task {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" protected String task;","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the Task class that creates a task object for each task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" * @param task The task that the user wants to add.","lastModifiedDate":"2023-09-16"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" public Task(String task) {","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * Changes the state of the task according to the instruction given by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * @param status The status of the task that the user wants to change to.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" public void markStatus(boolean status) {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" this.isDone \u003d status;","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * Checks if the task contains the entered keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * @param keyword The keyword that the user wants to find.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * @return Returns a boolean value to indicate if the task contains the particular keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" public boolean checkKeyword(String keyword) {","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" return this.task.contains(keyword);","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":40}},{"path":"src/main/java/chatty/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.InvalidTaskNumberException;","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" * A class that creates and manages a list of tasks added by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"public class TaskList {","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the TaskList class that creates a new ArrayList to store the tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" public TaskList() {","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" * Retrieves the current size of the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" * @return The size of the current task list, as an integer value.","lastModifiedDate":"2023-09-16"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" public int listSize() {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" int size \u003d this.taskList.size();","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" assert size \u003e\u003d 0 : \"Task list size should not be negative.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" return size;","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * Adds a new task to the task list.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" * Deletes a task from the current list of tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task that the user wants to delete.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" * @return The task that is being removed.","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException When the index of the task entered by the user is out of the range of the","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" * available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" public Task deleteTask(int i) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" assert i \u003e 0 \u0026\u0026 i \u003c\u003d this.listSize() : \"Invalid task index: \" + i;","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" if (i \u003e\u003d this.listSize() || i \u003c 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":" throw new InvalidTaskNumberException();","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":" return this.taskList.remove(i - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" * Retrieves the task that the user wants to change status.","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task that the user wants to change status.","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":" * @param status The status that the user wants to change the task to, indicated by a boolean value.","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException When the index of the task entered by the user is out of the range of the","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" * available tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" public void markTask(int i, boolean status) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" assert i \u003e 0 \u0026\u0026 i \u003c\u003d this.listSize() : \"Invalid task index: \" + i;","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" if (i \u003e\u003d this.listSize() || i \u003c 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":" throw new InvalidTaskNumberException();","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"xxiaoweii"},"content":" Task taskToMark \u003d this.taskList.get(i - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"xxiaoweii"},"content":" taskToMark.markStatus(status);","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"xxiaoweii"},"content":" * Prints out the task at the specified index.","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task of interest.","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"xxiaoweii"},"content":" * @return The task indicated by the index, as a String.","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":81,"author":{"gitId":"xxiaoweii"},"content":" public String showTask(int i) {","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"xxiaoweii"},"content":" Task taskToShow \u003d taskList.get(i - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"xxiaoweii"},"content":" return taskToShow.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"xxiaoweii"},"content":" * Checks if the tasks contain a specific keyword and returns a list of tasks matching the keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"xxiaoweii"},"content":" * @param keyword The keyword to search for relevant tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"xxiaoweii"},"content":" * @return A list of tasks matching the entered keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":92,"author":{"gitId":"xxiaoweii"},"content":" public String containsKeyword(String keyword) {","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"xxiaoweii"},"content":" StringBuilder listWithKeyword \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"xxiaoweii"},"content":" int i \u003d 0;","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"xxiaoweii"},"content":" while (i \u003c taskList.size()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"xxiaoweii"},"content":" if (taskList.get(i).checkKeyword(keyword)) {","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"xxiaoweii"},"content":" int taskNumber \u003d i + 1;","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"xxiaoweii"},"content":" listWithKeyword.append(taskNumber + \". \" + this.showTask(taskNumber)).append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"xxiaoweii"},"content":" i++;","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"xxiaoweii"},"content":" return listWithKeyword.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":103,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":106,"author":{"gitId":"xxiaoweii"},"content":" * Retrieves the task at the specified index.","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task to be returned.","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"xxiaoweii"},"content":" * @return The task indicated by index i.","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":111,"author":{"gitId":"xxiaoweii"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"xxiaoweii"},"content":" return taskList.get(i);","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":115}},{"path":"src/main/java/chatty/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":" * Class that handles the todo task","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the ToDo class that calls the constructor of the parent class to create a Task object.","lastModifiedDate":"2023-09-16"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * @param task The description of the task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" public ToDo(String task) {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" super(task);","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * Returns the string representation of the ToDo task, including its status and description.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" * @return A String representation of the task, including whether it is done or not and its description.","lastModifiedDate":"2023-09-16"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" @Override","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" public String toString() {","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" return \"[T][X] \" + this.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" return \"[T][ ] \" + this.task;","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":30}},{"path":"src/main/java/chatty/utils/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.utils;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.Command;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" * Main class that manages and runs the Chatty chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"public class Duke {","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" private Ui ui;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" private Storage storage;","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * Empty constructor when GUI is run","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" public Duke() {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" this.storage \u003d new Storage(\"data/tasks.txt\");","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" this.storage.loadTask(this.taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" } catch (ChattyException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * Constructor that loads existing data from a specified file path.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" * @param filePath The path to the existing file.","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" storage.loadTask(taskList);","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" } catch (ChattyException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" * Start the chatbot\u0027s interaction with the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" public void startChatting() {","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" ui.showGreet();","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":" String originalInput \u003d ui.getInput();","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" assert originalInput !\u003d null \u0026\u0026 !originalInput.isEmpty() : \"Input should not be null or empty.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" Command command \u003d Parser.parse(originalInput);","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" command.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":" } catch (ChattyException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"xxiaoweii"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"xxiaoweii"},"content":" * Get the chatbot\u0027s response to be displayed in the GUI.","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"xxiaoweii"},"content":" * @param input The input from the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":80,"author":{"gitId":"xxiaoweii"},"content":" * @return The response given by the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":81,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":82,"author":{"gitId":"xxiaoweii"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"xxiaoweii"},"content":" Command command \u003d Parser.parse(input);","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"xxiaoweii"},"content":" String msg \u003d command.execute(this.taskList, this.ui, this.storage);","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"xxiaoweii"},"content":" assert msg !\u003d null : \"Command execution returned a null message.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"xxiaoweii"},"content":" return \"Chatty: \\n\" + msg;","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"xxiaoweii"},"content":" } catch (ChattyException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"xxiaoweii"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"xxiaoweii"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"xxiaoweii"},"content":" new Duke(\"data/tasks.txt\").startChatting();","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":96}},{"path":"src/main/java/chatty/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.utils;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.Command;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.CommandNotFound;","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.DeadlineCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.DeleteCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.DoneCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.EventCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.ExitCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.FindCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.ListCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.ToDoCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":"import chatty.command.UndoneCommand;","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.DetailsUnknownException;","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.IncompleteMessageException;","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.InvalidTaskNumberException;","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" * Responsible for parsing user input and generating appropriate commands for the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":"public class Parser {","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" * Parse user input and return the specific command to execute.","lastModifiedDate":"2023-09-16"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" * @param input The input provided by the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" * @return The specific command to execute.","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" * @throws DetailsUnknownException When the user did not enter the details for the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" * @throws IncompleteMessageException When the user did not enter the task description.","lastModifiedDate":"2023-09-16"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException When the task number entered by the user is out of range.","lastModifiedDate":"2023-09-16"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" public static Command parse(String input) throws DetailsUnknownException,","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" IncompleteMessageException, InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-09-16"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" String commandWord \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-09-16"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" String commandArgs \u003d parts.length \u003e 1 ? parts[1] : \"\";","lastModifiedDate":"2023-09-16"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-16"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" case \"bye\":","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" case \"list\":","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" case \"done\":","lastModifiedDate":"2023-09-16"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" return parseDoneCommand(commandArgs);","lastModifiedDate":"2023-09-16"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" case \"undone\":","lastModifiedDate":"2023-09-16"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" return parseUndoneCommand(commandArgs);","lastModifiedDate":"2023-09-16"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":" case \"delete\":","lastModifiedDate":"2023-09-16"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" return parseDeleteCommand(commandArgs);","lastModifiedDate":"2023-09-16"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" return parseDeadlineCommand(commandArgs);","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" case \"todo\":","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" return parseTodoCommand(commandArgs);","lastModifiedDate":"2023-09-16"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" case \"event\":","lastModifiedDate":"2023-09-16"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" return parseEventCommand(commandArgs);","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" case \"find\":","lastModifiedDate":"2023-09-16"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":" return parseFindCommand(commandArgs);","lastModifiedDate":"2023-09-16"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" default:","lastModifiedDate":"2023-09-16"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" return new CommandNotFound();","lastModifiedDate":"2023-09-16"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":" * Parse and create a DoneCommand based on the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":71,"author":{"gitId":"xxiaoweii"},"content":" * @param args The command arguments.","lastModifiedDate":"2023-09-16"},{"lineNumber":72,"author":{"gitId":"xxiaoweii"},"content":" * @return A DoneCommand to mark a task as done.","lastModifiedDate":"2023-09-16"},{"lineNumber":73,"author":{"gitId":"xxiaoweii"},"content":" * @throws IncompleteMessageException When the user did not provide a task number.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException When the task number entered by the user is invalid.","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":76,"author":{"gitId":"xxiaoweii"},"content":" private static Command parseDoneCommand(String args) throws IncompleteMessageException,","lastModifiedDate":"2023-09-16"},{"lineNumber":77,"author":{"gitId":"xxiaoweii"},"content":" InvalidTaskNumberException {","lastModifiedDate":"2023-09-16"},{"lineNumber":78,"author":{"gitId":"xxiaoweii"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":79,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"Done\");","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"xxiaoweii"},"content":" int taskIndex \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-16"},{"lineNumber":82,"author":{"gitId":"xxiaoweii"},"content":" return new DoneCommand(taskIndex);","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"xxiaoweii"},"content":" * Parse and create an UndoneCommand based on the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":87,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":88,"author":{"gitId":"xxiaoweii"},"content":" * @param args The command arguments.","lastModifiedDate":"2023-09-16"},{"lineNumber":89,"author":{"gitId":"xxiaoweii"},"content":" * @return An UndoneCommand to mark a task as not done.","lastModifiedDate":"2023-09-16"},{"lineNumber":90,"author":{"gitId":"xxiaoweii"},"content":" * @throws IncompleteMessageException When the user did not provide a task number.","lastModifiedDate":"2023-09-16"},{"lineNumber":91,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException When the task number entered by the user is invalid.","lastModifiedDate":"2023-09-16"},{"lineNumber":92,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":93,"author":{"gitId":"xxiaoweii"},"content":" private static Command parseUndoneCommand(String args) throws IncompleteMessageException,","lastModifiedDate":"2023-09-16"},{"lineNumber":94,"author":{"gitId":"xxiaoweii"},"content":" InvalidTaskNumberException {","lastModifiedDate":"2023-09-16"},{"lineNumber":95,"author":{"gitId":"xxiaoweii"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":96,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"Undone\");","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"xxiaoweii"},"content":" int taskIndex \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"xxiaoweii"},"content":" return new UndoneCommand(taskIndex);","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":103,"author":{"gitId":"xxiaoweii"},"content":" * Parse and create a DeleteCommand based on the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":104,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"xxiaoweii"},"content":" * @param args The command arguments.","lastModifiedDate":"2023-09-16"},{"lineNumber":106,"author":{"gitId":"xxiaoweii"},"content":" * @return A DeleteCommand to delete a task.","lastModifiedDate":"2023-09-16"},{"lineNumber":107,"author":{"gitId":"xxiaoweii"},"content":" * @throws IncompleteMessageException When the user did not provide a task number.","lastModifiedDate":"2023-09-16"},{"lineNumber":108,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException When the task number entered by the user is invalid.","lastModifiedDate":"2023-09-16"},{"lineNumber":109,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":110,"author":{"gitId":"xxiaoweii"},"content":" private static Command parseDeleteCommand(String args) throws IncompleteMessageException,","lastModifiedDate":"2023-09-16"},{"lineNumber":111,"author":{"gitId":"xxiaoweii"},"content":" InvalidTaskNumberException {","lastModifiedDate":"2023-09-16"},{"lineNumber":112,"author":{"gitId":"xxiaoweii"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"Delete\");","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":115,"author":{"gitId":"xxiaoweii"},"content":" int taskIndex \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"xxiaoweii"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-09-12"},{"lineNumber":117,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":120,"author":{"gitId":"xxiaoweii"},"content":" * Parse and create a DeadlineCommand based on the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":121,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":122,"author":{"gitId":"xxiaoweii"},"content":" * @param args The command arguments.","lastModifiedDate":"2023-09-16"},{"lineNumber":123,"author":{"gitId":"xxiaoweii"},"content":" * @return A DeadlineCommand to add a deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":124,"author":{"gitId":"xxiaoweii"},"content":" * @throws DetailsUnknownException When the user did not provide details for the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":125,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"xxiaoweii"},"content":" private static Command parseDeadlineCommand(String args) throws DetailsUnknownException {","lastModifiedDate":"2023-09-16"},{"lineNumber":127,"author":{"gitId":"xxiaoweii"},"content":" String[] splitInput \u003d args.split(\"/by \", 2);","lastModifiedDate":"2023-09-16"},{"lineNumber":128,"author":{"gitId":"xxiaoweii"},"content":" if (splitInput.length !\u003d 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":129,"author":{"gitId":"xxiaoweii"},"content":" throw new DetailsUnknownException();","lastModifiedDate":"2023-09-16"},{"lineNumber":130,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d splitInput[0];","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"xxiaoweii"},"content":" LocalDate date \u003d LocalDate.parse(splitInput[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"xxiaoweii"},"content":" String formattedDate \u003d Parser.formatDate(date);","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"xxiaoweii"},"content":" return new DeadlineCommand(taskDescription, formattedDate);","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":137,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"xxiaoweii"},"content":" * Parse and create a ToDoCommand based on the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":139,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":140,"author":{"gitId":"xxiaoweii"},"content":" * @param args The command arguments.","lastModifiedDate":"2023-09-16"},{"lineNumber":141,"author":{"gitId":"xxiaoweii"},"content":" * @return A ToDoCommand to add a to-do task.","lastModifiedDate":"2023-09-16"},{"lineNumber":142,"author":{"gitId":"xxiaoweii"},"content":" * @throws IncompleteMessageException When the user did not provide a task description.","lastModifiedDate":"2023-09-16"},{"lineNumber":143,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":144,"author":{"gitId":"xxiaoweii"},"content":" private static Command parseTodoCommand(String args) throws IncompleteMessageException {","lastModifiedDate":"2023-09-16"},{"lineNumber":145,"author":{"gitId":"xxiaoweii"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":146,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"T\");","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":148,"author":{"gitId":"xxiaoweii"},"content":" return new ToDoCommand(args);","lastModifiedDate":"2023-09-16"},{"lineNumber":149,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":150,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":151,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":152,"author":{"gitId":"xxiaoweii"},"content":" * Parse and create an EventCommand based on the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":153,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":154,"author":{"gitId":"xxiaoweii"},"content":" * @param args The command arguments.","lastModifiedDate":"2023-09-16"},{"lineNumber":155,"author":{"gitId":"xxiaoweii"},"content":" * @return An EventCommand to add an event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":156,"author":{"gitId":"xxiaoweii"},"content":" * @throws DetailsUnknownException When the user did not provide details for the task.","lastModifiedDate":"2023-09-16"},{"lineNumber":157,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":158,"author":{"gitId":"xxiaoweii"},"content":" private static Command parseEventCommand(String args) throws DetailsUnknownException {","lastModifiedDate":"2023-09-16"},{"lineNumber":159,"author":{"gitId":"xxiaoweii"},"content":" String[] splitInput \u003d args.split(\"/from \", 2);","lastModifiedDate":"2023-09-16"},{"lineNumber":160,"author":{"gitId":"xxiaoweii"},"content":" if (splitInput.length !\u003d 2) {","lastModifiedDate":"2023-09-16"},{"lineNumber":161,"author":{"gitId":"xxiaoweii"},"content":" throw new DetailsUnknownException();","lastModifiedDate":"2023-09-16"},{"lineNumber":162,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":163,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d splitInput[0];","lastModifiedDate":"2023-09-12"},{"lineNumber":164,"author":{"gitId":"xxiaoweii"},"content":" String[] splitTime \u003d splitInput[1].split(\" /to \", 2);","lastModifiedDate":"2023-09-12"},{"lineNumber":165,"author":{"gitId":"xxiaoweii"},"content":" LocalDate start \u003d LocalDate.parse(splitTime[0]);","lastModifiedDate":"2023-09-12"},{"lineNumber":166,"author":{"gitId":"xxiaoweii"},"content":" String formattedStart \u003d Parser.formatDate(start);","lastModifiedDate":"2023-09-12"},{"lineNumber":167,"author":{"gitId":"xxiaoweii"},"content":" LocalDate end \u003d LocalDate.parse(splitTime[1]);","lastModifiedDate":"2023-09-12"},{"lineNumber":168,"author":{"gitId":"xxiaoweii"},"content":" String formattedEnd \u003d Parser.formatDate(end);","lastModifiedDate":"2023-09-12"},{"lineNumber":169,"author":{"gitId":"xxiaoweii"},"content":" return new EventCommand(taskDescription, formattedStart, formattedEnd);","lastModifiedDate":"2023-09-12"},{"lineNumber":170,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":171,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":172,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-16"},{"lineNumber":173,"author":{"gitId":"xxiaoweii"},"content":" * Parse and create a FindCommand based on the user input.","lastModifiedDate":"2023-09-16"},{"lineNumber":174,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":175,"author":{"gitId":"xxiaoweii"},"content":" * @param args The command arguments.","lastModifiedDate":"2023-09-16"},{"lineNumber":176,"author":{"gitId":"xxiaoweii"},"content":" * @return A FindCommand to search for tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":177,"author":{"gitId":"xxiaoweii"},"content":" * @throws IncompleteMessageException When the user did not provide a search keyword.","lastModifiedDate":"2023-09-16"},{"lineNumber":178,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-16"},{"lineNumber":179,"author":{"gitId":"xxiaoweii"},"content":" private static Command parseFindCommand(String args) throws IncompleteMessageException {","lastModifiedDate":"2023-09-16"},{"lineNumber":180,"author":{"gitId":"xxiaoweii"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-09-16"},{"lineNumber":181,"author":{"gitId":"xxiaoweii"},"content":" throw new IncompleteMessageException(\"F\");","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":183,"author":{"gitId":"xxiaoweii"},"content":" return new FindCommand(args);","lastModifiedDate":"2023-09-16"},{"lineNumber":184,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":185,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":187,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":188,"author":{"gitId":"xxiaoweii"},"content":" * Format a LocalDate to a string representation.","lastModifiedDate":"2023-09-16"},{"lineNumber":189,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":190,"author":{"gitId":"xxiaoweii"},"content":" * @param date The LocalDate to be formatted.","lastModifiedDate":"2023-09-16"},{"lineNumber":191,"author":{"gitId":"xxiaoweii"},"content":" * @return The formatted date in String representation.","lastModifiedDate":"2023-09-16"},{"lineNumber":192,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":193,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":194,"author":{"gitId":"xxiaoweii"},"content":" public static String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-12"},{"lineNumber":195,"author":{"gitId":"xxiaoweii"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"xxiaoweii"},"content":" String formattedDate \u003d date.format(formatter);","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"xxiaoweii"},"content":" return formattedDate;","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":199}},{"path":"src/main/java/chatty/utils/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.utils;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"import java.io.File;","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-14"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.ChattyException;","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.InvalidTaskNumberException;","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Deadline;","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Event;","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.ToDo;","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" * Responsible for saving and loading tasks to/from a hardware storage.","lastModifiedDate":"2023-09-16"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * The task list will autoload when the user restarts the Chatty chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":"public class Storage {","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" private String filePath;","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" private File file;","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the Storage class.","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @param filePath The path to the storage file.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" this.file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" this.file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":" if (!this.file.exists()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" this.file.createNewFile();","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" e.getMessage();","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" * Save the added tasks to the storage file.","lastModifiedDate":"2023-09-16"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The list with all the tasks to be saved.","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" public void saveTask(TaskList taskList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(this.filePath));","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" StringBuilder tasks \u003d new StringBuilder();","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" for (int i \u003d 0; i \u003c taskList.listSize(); i++) {","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":" tasks.append(taskList.showTask(i + 1)).append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" writer.write(tasks.toString());","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" writer.close();","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" System.out.println(\"An error occured while trying to save tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":" * Load the tasks from the storage file when the user starts the bot again.","lastModifiedDate":"2023-09-16"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The list that contains the added tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" * @throws IOException When the tasks cannot be loaded.","lastModifiedDate":"2023-09-16"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":" * @throws ChattyException","lastModifiedDate":"2023-09-14"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":71,"author":{"gitId":"xxiaoweii"},"content":" @SuppressWarnings(\"checkstyle:MissingSwitchDefault\")","lastModifiedDate":"2023-09-14"},{"lineNumber":72,"author":{"gitId":"xxiaoweii"},"content":" public void loadTask(TaskList taskList) throws IOException, ChattyException {","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"xxiaoweii"},"content":" try {","lastModifiedDate":"2023-09-12"},{"lineNumber":74,"author":{"gitId":"xxiaoweii"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-12"},{"lineNumber":75,"author":{"gitId":"xxiaoweii"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":76,"author":{"gitId":"xxiaoweii"},"content":" String task \u003d scanner.nextLine();","lastModifiedDate":"2023-09-12"},{"lineNumber":77,"author":{"gitId":"xxiaoweii"},"content":" char taskType \u003d task.charAt(1);","lastModifiedDate":"2023-09-12"},{"lineNumber":78,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":79,"author":{"gitId":"xxiaoweii"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"xxiaoweii"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"xxiaoweii"},"content":" loadTodoTask(taskList, task);","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"xxiaoweii"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"xxiaoweii"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"xxiaoweii"},"content":" loadDeadlineTask(taskList, task);","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"xxiaoweii"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"xxiaoweii"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"xxiaoweii"},"content":" loadEventTask(taskList, task);","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"xxiaoweii"},"content":" break;","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":90,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"xxiaoweii"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"xxiaoweii"},"content":" throw new ChattyException(\"Unable to load task\");","lastModifiedDate":"2023-09-14"},{"lineNumber":93,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":95,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"xxiaoweii"},"content":" * Handles the case when the task to be loaded is a todo task.","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":99,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The list with the added tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":100,"author":{"gitId":"xxiaoweii"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":101,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException When the index of the task is not valid.","lastModifiedDate":"2023-09-16"},{"lineNumber":102,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"xxiaoweii"},"content":" private void loadTodoTask(TaskList taskList, String task) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d task.substring(7);","lastModifiedDate":"2023-09-12"},{"lineNumber":105,"author":{"gitId":"xxiaoweii"},"content":" boolean isDone \u003d task.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(new ToDo(taskDescription));","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"xxiaoweii"},"content":" if (isDone) {","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"xxiaoweii"},"content":" taskList.markTask(taskList.listSize(), true);","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":111,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":112,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":113,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"xxiaoweii"},"content":" * Handles the case when the task to be loaded is a deadline task.","lastModifiedDate":"2023-09-16"},{"lineNumber":115,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":116,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The list with the added tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":117,"author":{"gitId":"xxiaoweii"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":118,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException When the index of the task is not valid.","lastModifiedDate":"2023-09-16"},{"lineNumber":119,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":120,"author":{"gitId":"xxiaoweii"},"content":" private void loadDeadlineTask(TaskList taskList, String task) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"xxiaoweii"},"content":" int colonIndex \u003d task.indexOf(\":\");","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d task.substring(7, colonIndex - 4);","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"xxiaoweii"},"content":" String deadline \u003d task.substring(colonIndex + 4, task.length() - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":124,"author":{"gitId":"xxiaoweii"},"content":" boolean isDone \u003d task.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(new Deadline(taskDescription, deadline));","lastModifiedDate":"2023-09-12"},{"lineNumber":126,"author":{"gitId":"xxiaoweii"},"content":" if (isDone) {","lastModifiedDate":"2023-09-12"},{"lineNumber":127,"author":{"gitId":"xxiaoweii"},"content":" taskList.markTask(taskList.listSize(), true);","lastModifiedDate":"2023-09-12"},{"lineNumber":128,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-16"},{"lineNumber":132,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":133,"author":{"gitId":"xxiaoweii"},"content":" * Handles the case when the task to be loaded is an event task.","lastModifiedDate":"2023-09-16"},{"lineNumber":134,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList The list with the added tasks.","lastModifiedDate":"2023-09-16"},{"lineNumber":136,"author":{"gitId":"xxiaoweii"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-16"},{"lineNumber":137,"author":{"gitId":"xxiaoweii"},"content":" * @throws InvalidTaskNumberException When the index of the task is not valid.","lastModifiedDate":"2023-09-16"},{"lineNumber":138,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":139,"author":{"gitId":"xxiaoweii"},"content":" private void loadEventTask(TaskList taskList, String task) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":140,"author":{"gitId":"xxiaoweii"},"content":" int colon1Index \u003d task.indexOf(\u0027:\u0027);","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"xxiaoweii"},"content":" int colon2Index \u003d task.indexOf(\u0027:\u0027, colon1Index + 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":142,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"xxiaoweii"},"content":" String taskDescription \u003d task.substring(7, colon1Index - 6);","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"xxiaoweii"},"content":" String startDate \u003d task.substring(colon1Index + 2, colon2Index - 3);","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"xxiaoweii"},"content":" String endDate \u003d task.substring(colon2Index + 2, task.length() - 1);","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":147,"author":{"gitId":"xxiaoweii"},"content":" boolean isDone \u003d task.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-12"},{"lineNumber":148,"author":{"gitId":"xxiaoweii"},"content":" taskList.addTask(new Event(taskDescription, startDate, endDate));","lastModifiedDate":"2023-09-12"},{"lineNumber":149,"author":{"gitId":"xxiaoweii"},"content":" if (isDone) {","lastModifiedDate":"2023-09-12"},{"lineNumber":150,"author":{"gitId":"xxiaoweii"},"content":" taskList.markTask(taskList.listSize(), true);","lastModifiedDate":"2023-09-12"},{"lineNumber":151,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":152,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":153,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":153}},{"path":"src/main/java/chatty/utils/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"package chatty.utils;","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-14"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.exception.InvalidTaskNumberException;","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Task;","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.TaskList;","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":"/**","lastModifiedDate":"2023-09-14"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" * Responsible for interactions with the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"public class Ui {","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" * Constructor for the Ui class.","lastModifiedDate":"2023-09-14"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":" * Initializes the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":20,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":21,"author":{"gitId":"xxiaoweii"},"content":" public Ui() {","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"xxiaoweii"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":26,"author":{"gitId":"xxiaoweii"},"content":" * Gets input from the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":27,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":28,"author":{"gitId":"xxiaoweii"},"content":" * @return The input from the user.","lastModifiedDate":"2023-09-16"},{"lineNumber":29,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":30,"author":{"gitId":"xxiaoweii"},"content":" public String getInput() {","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"xxiaoweii"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-09-16"},{"lineNumber":32,"author":{"gitId":"xxiaoweii"},"content":" assert !input.isEmpty() : \"User input should not be empty!\";","lastModifiedDate":"2023-09-16"},{"lineNumber":33,"author":{"gitId":"xxiaoweii"},"content":" return input;","lastModifiedDate":"2023-09-16"},{"lineNumber":34,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":36,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":37,"author":{"gitId":"xxiaoweii"},"content":" * Prints the greeting message when the user starts the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":38,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":39,"author":{"gitId":"xxiaoweii"},"content":" * @return The greeting message.","lastModifiedDate":"2023-09-16"},{"lineNumber":40,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":41,"author":{"gitId":"xxiaoweii"},"content":" public String showGreet() {","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"xxiaoweii"},"content":" return \"Hi there! I\u0027m Chatty! \\n How can I help you today?\";","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":46,"author":{"gitId":"xxiaoweii"},"content":" * Prints the exit message when the user wants to exit the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":47,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":48,"author":{"gitId":"xxiaoweii"},"content":" * @return The goodbye message.","lastModifiedDate":"2023-09-16"},{"lineNumber":49,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":50,"author":{"gitId":"xxiaoweii"},"content":" public String showExit() {","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"xxiaoweii"},"content":" return \"Bye! Hope to see you again soon!\";","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":55,"author":{"gitId":"xxiaoweii"},"content":" * Prints the exit message when the user wants to exit the chatbot.","lastModifiedDate":"2023-09-16"},{"lineNumber":56,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":57,"author":{"gitId":"xxiaoweii"},"content":" * @return The goodbye message.","lastModifiedDate":"2023-09-16"},{"lineNumber":58,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":59,"author":{"gitId":"xxiaoweii"},"content":" public String showList(TaskList taskList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"xxiaoweii"},"content":" assert taskList.listSize() \u003e\u003d 0 : \"Task list size should not be negative.\";","lastModifiedDate":"2023-09-16"},{"lineNumber":61,"author":{"gitId":"xxiaoweii"},"content":" if (taskList.listSize() \u003d\u003d 0) {","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"xxiaoweii"},"content":" return \"There is currently no chatty.task in your list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"xxiaoweii"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"xxiaoweii"},"content":" StringBuilder result \u003d new StringBuilder(\"Here are the tasks in your list: \\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"xxiaoweii"},"content":" for (int i \u003d 0; i \u003c taskList.listSize(); i++) {","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"xxiaoweii"},"content":" result.append(i + 1).append(\". \").append(taskList.getTask(i)).append(\"\\n\");","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"xxiaoweii"},"content":" return result.toString();","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":70,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":71,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":72,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":73,"author":{"gitId":"xxiaoweii"},"content":" * Prints the message to show the user that the task has been mark done.","lastModifiedDate":"2023-09-16"},{"lineNumber":74,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":75,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task the user wants to mark as done","lastModifiedDate":"2023-09-14"},{"lineNumber":76,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the task list consisting of all the available tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":77,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message","lastModifiedDate":"2023-09-14"},{"lineNumber":78,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":79,"author":{"gitId":"xxiaoweii"},"content":" public String showDone(int i, TaskList taskList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":80,"author":{"gitId":"xxiaoweii"},"content":" return \"Nice! I\u0027ve marked this chatty.task as done: \\n\" + \" \" + taskList.showTask(i);","lastModifiedDate":"2023-09-12"},{"lineNumber":81,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":82,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":84,"author":{"gitId":"xxiaoweii"},"content":" * Prints the message to show the user that the task has been mark as undone.","lastModifiedDate":"2023-09-16"},{"lineNumber":85,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":86,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task the user wants to mark as undone","lastModifiedDate":"2023-09-14"},{"lineNumber":87,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the task list consisting of all the available tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":88,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message","lastModifiedDate":"2023-09-14"},{"lineNumber":89,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":90,"author":{"gitId":"xxiaoweii"},"content":" public String showUndone(int i, TaskList taskList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":91,"author":{"gitId":"xxiaoweii"},"content":" return \"Ok, I\u0027ve marked this chatty.task as not done: \\n\" + \" \" + taskList.showTask(i);","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":93,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":94,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-14"},{"lineNumber":95,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":96,"author":{"gitId":"xxiaoweii"},"content":" * Prints the message to show the user that the task has been deleted","lastModifiedDate":"2023-09-14"},{"lineNumber":97,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":98,"author":{"gitId":"xxiaoweii"},"content":" * @param i The index of the task the user wants to delete","lastModifiedDate":"2023-09-14"},{"lineNumber":99,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the task list consisting of all the available tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":100,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message","lastModifiedDate":"2023-09-14"},{"lineNumber":101,"author":{"gitId":"xxiaoweii"},"content":" * @exception InvalidTaskNumberException when the index of the task is not a valid index","lastModifiedDate":"2023-09-14"},{"lineNumber":102,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":103,"author":{"gitId":"xxiaoweii"},"content":" public String showDelete(int i, TaskList taskList) throws InvalidTaskNumberException {","lastModifiedDate":"2023-09-12"},{"lineNumber":104,"author":{"gitId":"xxiaoweii"},"content":" assert i \u003e\u003d 0 \u0026\u0026 i \u003c taskList.listSize() : \"Invalid task index: \" + i;","lastModifiedDate":"2023-09-16"},{"lineNumber":105,"author":{"gitId":"xxiaoweii"},"content":" return \"Alright, I\u0027ve removed this chatty.task from the list: \\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":106,"author":{"gitId":"xxiaoweii"},"content":" + \" \" + taskList.deleteTask(i) + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":107,"author":{"gitId":"xxiaoweii"},"content":" + \"Now you have\" + taskList.listSize() + \" task(s) in your list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":108,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":109,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":110,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":111,"author":{"gitId":"xxiaoweii"},"content":" * Prints the message to show the user that the task has been added to the list","lastModifiedDate":"2023-09-14"},{"lineNumber":112,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":113,"author":{"gitId":"xxiaoweii"},"content":" * @param task The task to be added into the list","lastModifiedDate":"2023-09-14"},{"lineNumber":114,"author":{"gitId":"xxiaoweii"},"content":" * @param taskList the task list consisting of all the available tasks","lastModifiedDate":"2023-09-14"},{"lineNumber":115,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message","lastModifiedDate":"2023-09-14"},{"lineNumber":116,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":117,"author":{"gitId":"xxiaoweii"},"content":" public String showAdded(Task task, TaskList taskList) {","lastModifiedDate":"2023-09-12"},{"lineNumber":118,"author":{"gitId":"xxiaoweii"},"content":" return \"Got it. I\u0027ve added this chatty.task into the list: \\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":119,"author":{"gitId":"xxiaoweii"},"content":" + \" \" + task + \"\\n\"","lastModifiedDate":"2023-09-12"},{"lineNumber":120,"author":{"gitId":"xxiaoweii"},"content":" + \"You now have \" + taskList.listSize() + \" task(s) in the list.\";","lastModifiedDate":"2023-09-12"},{"lineNumber":121,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":123,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":124,"author":{"gitId":"xxiaoweii"},"content":" * Prints the message to tell the user that the command is not valid","lastModifiedDate":"2023-09-14"},{"lineNumber":125,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":126,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message","lastModifiedDate":"2023-09-14"},{"lineNumber":127,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":128,"author":{"gitId":"xxiaoweii"},"content":" public String showInvalid() {","lastModifiedDate":"2023-09-12"},{"lineNumber":129,"author":{"gitId":"xxiaoweii"},"content":" return \"Sorry, I don\u0027t understand this command\";","lastModifiedDate":"2023-09-12"},{"lineNumber":130,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":131,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"xxiaoweii"},"content":" /**","lastModifiedDate":"2023-09-14"},{"lineNumber":133,"author":{"gitId":"xxiaoweii"},"content":" * Prints the list of task that matched the specified keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":134,"author":{"gitId":"xxiaoweii"},"content":" *","lastModifiedDate":"2023-09-16"},{"lineNumber":135,"author":{"gitId":"xxiaoweii"},"content":" * @param matchedTask the list of task that matched the keyword","lastModifiedDate":"2023-09-14"},{"lineNumber":136,"author":{"gitId":"xxiaoweii"},"content":" * @return The specified message + the list of matching task","lastModifiedDate":"2023-09-14"},{"lineNumber":137,"author":{"gitId":"xxiaoweii"},"content":" */","lastModifiedDate":"2023-09-14"},{"lineNumber":138,"author":{"gitId":"xxiaoweii"},"content":" public String showMatched(String matchedTask) {","lastModifiedDate":"2023-09-12"},{"lineNumber":139,"author":{"gitId":"xxiaoweii"},"content":" if (matchedTask.isEmpty()) {","lastModifiedDate":"2023-09-12"},{"lineNumber":140,"author":{"gitId":"xxiaoweii"},"content":" return \"There is no tasks matching your keyword\";","lastModifiedDate":"2023-09-12"},{"lineNumber":141,"author":{"gitId":"xxiaoweii"},"content":" } else {","lastModifiedDate":"2023-09-12"},{"lineNumber":142,"author":{"gitId":"xxiaoweii"},"content":" return \"Here are the list of task(s) matching your keyword: \\n\" + matchedTask;","lastModifiedDate":"2023-09-12"},{"lineNumber":143,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":144,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":145}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"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-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: lightblue;\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"chatty.gui.MainWindow\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" textFill\u003d\"#3791c5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: #e9ff44;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"xxiaoweii"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" style\u003d\"-fx-background-color: #b1ebfd;\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"xxiaoweii"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"xxiaoweii"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"xxiaoweii"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"xxiaoweii"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"xxiaoweii":19}},{"path":"src/test/java/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.Deadline;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" assertEquals(\"[D][ ] Complete iP (by: Sep 05 2023 2:00PM)\",","lastModifiedDate":"2023-09-14"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" new Deadline(\"Complete iP\", \"2023-09-05 1400\").toString());","lastModifiedDate":"2023-09-14"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xxiaoweii":14}},{"path":"src/test/java/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xxiaoweii"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"xxiaoweii"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"xxiaoweii"},"content":"import chatty.task.ToDo;","lastModifiedDate":"2023-09-14"},{"lineNumber":6,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"xxiaoweii"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"xxiaoweii"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"xxiaoweii"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"xxiaoweii"},"content":" public void testStringConversion() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"xxiaoweii"},"content":" assertEquals(\"[T][ ] Complete iP\", new ToDo(\"Complete iP\").toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"xxiaoweii"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"xxiaoweii"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"xxiaoweii":13}}] diff --git a/xxiaoweii_ip_master/commits.json b/xxiaoweii_ip_master/commits.json index ee71f9f3..90a2693a 100644 --- a/xxiaoweii_ip_master/commits.json +++ b/xxiaoweii_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"xxiaoweii":[{"date":"2023-08-23","commitResults":[{"hash":"db9d5273b5dfe82df794fb5c1f67c43e35c3427e","isMergeCommit":false,"messageTitle":"level 0 - rename, greet, exit","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"9b36f3efca7833183292ba14c0e64f5110d89d92","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"29747e8089f93ffc3f41bcc75f3a265198273866","isMergeCommit":false,"messageTitle":"level 1 -","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"7904bd3a5681f4e0c07de4199962da31521f0e34","isMergeCommit":false,"messageTitle":"level 1 - echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"4906654f45af92c37843da18dfa1ac9786748afe","isMergeCommit":false,"messageTitle":"level 1 - echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"4a8668115e44daee82177246f27c765c31eb27ec","isMergeCommit":false,"messageTitle":"level 2 - Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"1836d13a2e408b2a4aeb0fa26894a7cd3e35406b","isMergeCommit":false,"messageTitle":"level 3 - Mark As Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"7a428a95d038260250620e490468040286e22616","isMergeCommit":false,"messageTitle":"level 4: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":12}}},{"hash":"ce86ea15422d0b2a036501bdebc245ec0d36d1ca","isMergeCommit":false,"messageTitle":"A-TestUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"7c1bc8cfcf7f7392bb75e394ac3a8695b5ee437f","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":26}}},{"hash":"e78dcc9c6a92cef5d717b2f6668786796566cd0b","isMergeCommit":false,"messageTitle":"Level 6 - Delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"33547fca441d380cf905adc88ec3bf830bb5fcfd","isMergeCommit":false,"messageTitle":"Level 6 - updated the code slightly","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":228,"deletions":132}}},{"hash":"d622b086eae73fa444aadccff40c63dd821a9822","isMergeCommit":false,"messageTitle":"Level 7 - Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":2}}},{"hash":"39c3d4e00fc3fb43ac95143953c069e8a2006055","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":29,"deletions":3}}},{"hash":"cf5a465c6631658c1a996cd5cd53d121f6f56cb1","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":16}}},{"hash":"bb72d7b4e79a19be462eff2635f51de901505783","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ec2253217bc96ea555ca418455a4cfb405d9c7f8","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":18},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-01","commitResults":[{"hash":"524f8dc427fc16c17c569bb2d2ef1d263ad60730","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":58}}},{"hash":"78bb09aff3c65981d8a127bbd3057827d21ac806","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"927f03f3821a19e1d5309af267380cd43df25c37","isMergeCommit":false,"messageTitle":"level 0 - rename, greet, exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"33fd4402b7dcda98e98f02d7ddb0844f7c908853","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"321adbdc184080889ffd7db993c57180d064915f","isMergeCommit":false,"messageTitle":"level 1 -","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"89296275d1962688c243739f73bde0d74d52b5d3","isMergeCommit":false,"messageTitle":"level 1 - echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"fe095a535577c697a416ee05f74c6398371e461f","isMergeCommit":false,"messageTitle":"level 1 - echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"b3774cb12b795fbefbc5cbb70b700093b392a25a","isMergeCommit":false,"messageTitle":"level 2 - Add, List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"111971660fd6369d852dceadd6518ab09d2619dc","isMergeCommit":false,"messageTitle":"level 3 - Mark As Done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":1}}},{"hash":"23d114678d6d2cc25d001bbe6b09c2fad0d47d69","isMergeCommit":false,"messageTitle":"level 4: ToDos, Events, Deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":12}}},{"hash":"c30062cc577a4b9773a4b1bb8fe151612d789d48","isMergeCommit":false,"messageTitle":"A-TestUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"7de816c595cb2c8df333dbd7633af2d774853ee5","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":26}}},{"hash":"becd1d3d66a0aac589dc9005753b9d1d922fbd74","isMergeCommit":false,"messageTitle":"Level 6 - Delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"de927d4f4ed94563d504b0458409d480be96f976","isMergeCommit":false,"messageTitle":"Level 6 - updated the code slightly","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":228,"deletions":132}}},{"hash":"b50ca3d01a2c163e57661d0284a8817f53920a4c","isMergeCommit":false,"messageTitle":"Level 7 - Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":2}}},{"hash":"dde19fa19a8dad6385fe1e5cdfd2646bdf719cc6","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":29,"deletions":3}}},{"hash":"40a72e6744174aa4f391ccf09fbce11db55297ff","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":16}}},{"hash":"9d32ea6a7926312a40cdf901bf727e31e4ef7298","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c3dc38e45b2bbc41c09eb0489527c40411ee0b46","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":18},"md":{"insertions":2,"deletions":2}}},{"hash":"a6bc1214370307fcccbfa0659cbf4d9db6510d5b","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":58}}},{"hash":"fdf27a31497b348abdb9b81a80994f3da1e3f908","isMergeCommit":false,"messageTitle":"JUnit test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"f7c760e8b5aa3c091a69135c3ebf2756adc55ff9","isMergeCommit":false,"messageTitle":"JUnit test","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":25,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"095330986fd204a5f47d82aa8fba996b6ea27f09","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":246,"deletions":12}}},{"hash":"9b544d0746b340c2eb9eee9b20f4d4987fbdbb96","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":9}}},{"hash":"c7a8fd7abad269ad838a70806598bb66e50ea6b1","isMergeCommit":false,"messageTitle":"Level 9 - Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":98,"deletions":2}}},{"hash":"50e30de64cb46b9fd98c4cfdf5d142d109c6df17","isMergeCommit":false,"messageTitle":"Level 9 - Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-07","commitResults":[{"hash":"6f7f7902184de2b08939b1980af48ec537caba3b","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":116,"deletions":58}}},{"hash":"679fd332f4281e0be31a7afdfdbe9037a48ff72c","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":0},"java":{"insertions":9,"deletions":5}}},{"hash":"441a336b48affe0d224c136e0931dbfe10081de3","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"5b814327c3c2cb09030c3a51a55fcc7499b6b887","isMergeCommit":false,"messageTitle":"Level 10 - GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":976,"deletions":911},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-14","commitResults":[{"hash":"b3a9e12c02af72f9c7637af4a403fb101b6fffd1","isMergeCommit":false,"messageTitle":"Added JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":447,"deletions":39}}}]}]},"authorFileTypeContributionMap":{"xxiaoweii":{"java":1459,"md":2,"fxml":35,"sh":0,"bat":0,"gradle":28,"txt":3}},"authorContributionVariance":{"xxiaoweii":191383.8},"authorDisplayNameMap":{"xxiaoweii":"CS2103T-F08-4 ONG .. WEI"}} +{"authorDailyContributionsMap":{"xxiaoweii":[{"date":"2023-08-23","commitResults":[{"hash":"db9d5273b5dfe82df794fb5c1f67c43e35c3427e","isMergeCommit":false,"messageTitle":"level 0 - rename, greet, exit","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"9b36f3efca7833183292ba14c0e64f5110d89d92","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"29747e8089f93ffc3f41bcc75f3a265198273866","isMergeCommit":false,"messageTitle":"level 1 -","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"7904bd3a5681f4e0c07de4199962da31521f0e34","isMergeCommit":false,"messageTitle":"level 1 - echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"4906654f45af92c37843da18dfa1ac9786748afe","isMergeCommit":false,"messageTitle":"level 1 - echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"4a8668115e44daee82177246f27c765c31eb27ec","isMergeCommit":false,"messageTitle":"level 2 - Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"1836d13a2e408b2a4aeb0fa26894a7cd3e35406b","isMergeCommit":false,"messageTitle":"level 3 - Mark As Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"7a428a95d038260250620e490468040286e22616","isMergeCommit":false,"messageTitle":"level 4: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":12}}},{"hash":"ce86ea15422d0b2a036501bdebc245ec0d36d1ca","isMergeCommit":false,"messageTitle":"A-TestUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"7c1bc8cfcf7f7392bb75e394ac3a8695b5ee437f","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":26}}},{"hash":"e78dcc9c6a92cef5d717b2f6668786796566cd0b","isMergeCommit":false,"messageTitle":"Level 6 - Delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"33547fca441d380cf905adc88ec3bf830bb5fcfd","isMergeCommit":false,"messageTitle":"Level 6 - updated the code slightly","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":228,"deletions":132}}},{"hash":"d622b086eae73fa444aadccff40c63dd821a9822","isMergeCommit":false,"messageTitle":"Level 7 - Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":2}}},{"hash":"39c3d4e00fc3fb43ac95143953c069e8a2006055","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":29,"deletions":3}}},{"hash":"cf5a465c6631658c1a996cd5cd53d121f6f56cb1","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":16}}},{"hash":"bb72d7b4e79a19be462eff2635f51de901505783","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ec2253217bc96ea555ca418455a4cfb405d9c7f8","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":18},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-01","commitResults":[{"hash":"524f8dc427fc16c17c569bb2d2ef1d263ad60730","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":58}}},{"hash":"78bb09aff3c65981d8a127bbd3057827d21ac806","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027 into add-gradle-support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"927f03f3821a19e1d5309af267380cd43df25c37","isMergeCommit":false,"messageTitle":"level 0 - rename, greet, exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":6}}},{"hash":"33fd4402b7dcda98e98f02d7ddb0844f7c908853","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"321adbdc184080889ffd7db993c57180d064915f","isMergeCommit":false,"messageTitle":"level 1 -","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"89296275d1962688c243739f73bde0d74d52b5d3","isMergeCommit":false,"messageTitle":"level 1 - echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"fe095a535577c697a416ee05f74c6398371e461f","isMergeCommit":false,"messageTitle":"level 1 - echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"b3774cb12b795fbefbc5cbb70b700093b392a25a","isMergeCommit":false,"messageTitle":"level 2 - Add, List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"111971660fd6369d852dceadd6518ab09d2619dc","isMergeCommit":false,"messageTitle":"level 3 - Mark As Done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":1}}},{"hash":"23d114678d6d2cc25d001bbe6b09c2fad0d47d69","isMergeCommit":false,"messageTitle":"level 4: ToDos, Events, Deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":12}}},{"hash":"c30062cc577a4b9773a4b1bb8fe151612d789d48","isMergeCommit":false,"messageTitle":"A-TestUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":0},"sh":{"insertions":0,"deletions":0}}},{"hash":"7de816c595cb2c8df333dbd7633af2d774853ee5","isMergeCommit":false,"messageTitle":"Level 5 - Handle Errors","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":26}}},{"hash":"becd1d3d66a0aac589dc9005753b9d1d922fbd74","isMergeCommit":false,"messageTitle":"Level 6 - Delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"de927d4f4ed94563d504b0458409d480be96f976","isMergeCommit":false,"messageTitle":"Level 6 - updated the code slightly","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":228,"deletions":132}}},{"hash":"b50ca3d01a2c163e57661d0284a8817f53920a4c","isMergeCommit":false,"messageTitle":"Level 7 - Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":2}}},{"hash":"dde19fa19a8dad6385fe1e5cdfd2646bdf719cc6","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":29,"deletions":3}}},{"hash":"40a72e6744174aa4f391ccf09fbce11db55297ff","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":16}}},{"hash":"9d32ea6a7926312a40cdf901bf727e31e4ef7298","isMergeCommit":false,"messageTitle":"Level 8 - Dates and Times","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"c3dc38e45b2bbc41c09eb0489527c40411ee0b46","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":18},"md":{"insertions":2,"deletions":2}}},{"hash":"a6bc1214370307fcccbfa0659cbf4d9db6510d5b","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":58}}},{"hash":"fdf27a31497b348abdb9b81a80994f3da1e3f908","isMergeCommit":false,"messageTitle":"JUnit test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"f7c760e8b5aa3c091a69135c3ebf2756adc55ff9","isMergeCommit":false,"messageTitle":"JUnit test","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":25,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"095330986fd204a5f47d82aa8fba996b6ea27f09","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":246,"deletions":12}}},{"hash":"9b544d0746b340c2eb9eee9b20f4d4987fbdbb96","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":9}}},{"hash":"c7a8fd7abad269ad838a70806598bb66e50ea6b1","isMergeCommit":false,"messageTitle":"Level 9 - Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":98,"deletions":2}}},{"hash":"50e30de64cb46b9fd98c4cfdf5d142d109c6df17","isMergeCommit":false,"messageTitle":"Level 9 - Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}}]},{"date":"2023-09-07","commitResults":[{"hash":"6f7f7902184de2b08939b1980af48ec537caba3b","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":116,"deletions":58}}},{"hash":"679fd332f4281e0be31a7afdfdbe9037a48ff72c","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":22,"deletions":0},"java":{"insertions":9,"deletions":5}}},{"hash":"441a336b48affe0d224c136e0931dbfe10081de3","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-12","commitResults":[{"hash":"5b814327c3c2cb09030c3a51a55fcc7499b6b887","isMergeCommit":false,"messageTitle":"Level 10 - GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":976,"deletions":911},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-14","commitResults":[{"hash":"b3a9e12c02af72f9c7637af4a403fb101b6fffd1","isMergeCommit":false,"messageTitle":"Added JavaDoc","messageBody":"","tags":["A-JavaDoc","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":447,"deletions":39}}}]},{"date":"2023-09-16","commitResults":[{"hash":"d850efc009033def4881ef6715ccedba41d49f28","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2}}},{"hash":"f204941b1f883c45c27c065fdf23425fe5ddfdf7","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"4cc2221caeb0ef97a46cb1d1c441d2971de18b11","isMergeCommit":false,"messageTitle":"Added assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"bcf0ce5cabb678da797ab9b4abece3d03a76136e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from xxiaoweii/branch-A-Assertions","messageBody":"Branch-A-Assertions","fileTypesAndContributionMap":{}},{"hash":"46703d87d552969ef1a08938ca577abcbdb9f304","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":438,"deletions":312}}},{"hash":"333b3f48e36aad36c6f3210974b2a3304047ec74","isMergeCommit":true,"messageTitle":"Merge pull request #3 from xxiaoweii/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"xxiaoweii":{"java":1599,"md":2,"fxml":35,"sh":0,"bat":0,"gradle":30,"txt":3}},"authorContributionVariance":{"xxiaoweii":191854.31},"authorDisplayNameMap":{"xxiaoweii":"CS2103T-F08-4 ONG .. WEI"}} diff --git a/yezkez10_ip_master/commits.json b/yezkez10_ip_master/commits.json index 013c69bd..994066fa 100644 --- a/yezkez10_ip_master/commits.json +++ b/yezkez10_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"yezkez10":[{"date":"2023-08-22","commitResults":[{"hash":"4941f389466ca8126913a95a4027b5c52e29a4f9","isMergeCommit":false,"messageTitle":"Level-0 to 2 cos i forgot.. tehe","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":6}}}]},{"date":"2023-08-23","commitResults":[{"hash":"7d2547ab3dfcc039044ba383e6595ff9c08c07f0","isMergeCommit":false,"messageTitle":"Debug level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"a70d23f2299849c24ff01304402e9ab78687c87c","isMergeCommit":false,"messageTitle":"Do Level-3. why did it take me 5 hours?? But finally clutched it","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"35b10c0cbdbcb792c5b88314fa2bf4e26ec56e9b","isMergeCommit":false,"messageTitle":"Do level-4. Abstraction heart shape heart shape","messageBody":"","tags":["Level-5","Level-4","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":15}}},{"hash":"43500b698fa77818f04309fcdbed7ef3c4213f9b","isMergeCommit":false,"messageTitle":"Do Level-5","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":66,"deletions":45}}},{"hash":"faa913adb6c62cf92be9e595dba71f7a39c2fae8","isMergeCommit":false,"messageTitle":"Complete Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}}]},{"date":"2023-08-25","commitResults":[{"hash":"c892a00ea82fa1508a93fe875f5128e93b33782a","isMergeCommit":false,"messageTitle":"Testing","messageBody":"","tags":["Testing"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":13,"deletions":4}}}]},{"date":"2023-08-28","commitResults":[{"hash":"fa4bb64b90d023ba2c6f2b88fee833a6f78a621d","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":0}}},{"hash":"6c43ac397d2c8b896a5b885c06047642ec2ed6bb","isMergeCommit":false,"messageTitle":"Edit Deadline to deal with dates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":90,"deletions":40}}}]},{"date":"2023-08-29","commitResults":[{"hash":"9ced4f9939e7182c2d8cd4b5a87793cb300e2865","isMergeCommit":false,"messageTitle":"Debug level-8. Still can\u0027t parse when no time involved.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":10}}}]},{"date":"2023-09-01","commitResults":[{"hash":"e204c82357fcbfc25f16cff73e0392f7d2be8aa5","isMergeCommit":false,"messageTitle":"Redo Level-4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":271,"deletions":244}}},{"hash":"da935255c9f14a1e65c7bf44ca28625283e1b7e2","isMergeCommit":false,"messageTitle":"Redo Level-6 Delete","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":3}}},{"hash":"2cc31a12f9ffca3f2223bae61332668032e1d7b8","isMergeCommit":false,"messageTitle":"Redo Level-7: Save","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"6935ca71243ba3ca94cc8b2462831b403cade059","isMergeCommit":false,"messageTitle":"Redo Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":9}}},{"hash":"9d4753850955e0c025877003c5765e3c96893cfc","isMergeCommit":false,"messageTitle":"Add load task function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"d260572acb9062870ff1ad92712e2f5dd37757b4","isMergeCommit":false,"messageTitle":"Add handling of no-such-file case","messageBody":"","tags":["Level-7","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":30,"deletions":6}}},{"hash":"2961bf1dbfe6e29de030337ea5f6d45b39344129","isMergeCommit":false,"messageTitle":"Add OOP","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":367,"deletions":306}}},{"hash":"7ed40db88008deaadd8044ee0908655e20305d85","isMergeCommit":false,"messageTitle":"Organise files into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":4}}},{"hash":"b90c625792f73c8ec7ae83c6703e8ec680f42536","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"05d1e61dd6db438bff16d0ff573cfc54423c2f42","isMergeCommit":false,"messageTitle":"Add non-trivial JUnit tests","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":101,"deletions":37},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"a13b020054c949a58408161a4b4f9a7329a6fad7","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":75,"deletions":6}}},{"hash":"7032b799c749f8f37895fb37ca5284aeab3f1b76","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":5}}}]},{"date":"2023-09-05","commitResults":[{"hash":"81a64380bdb99838c5e56be5ef751b18e8c63dfe","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":26,"deletions":20}}}]},{"date":"2023-09-06","commitResults":[{"hash":"4d4862035b3c12d1aedac104ed35b9b0c57dafc5","isMergeCommit":false,"messageTitle":"edit build.gradle","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-13","commitResults":[{"hash":"394e778b3d26bbcc21f3c03dd668210abbeb3dce","isMergeCommit":false,"messageTitle":"Add Level-10 GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":26,"deletions":0},"txt":{"insertions":0,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":413,"deletions":181}}},{"hash":"bcd7aa9443dd8a7c51a3bfb8e0ce129b8b203b7a","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"5645431303bd571508ea52c072756f9d7a09790d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/yezkez10/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"d9b5847dd85e7ee00e4e03a99f67146a9c07f262","isMergeCommit":false,"messageTitle":"Add assertions. Assertions define assumptions for runtime to verify.","messageBody":"Assertions used liberally for error handling.\n\nAssertions used to verify assumptions before runtime catches error from assumption.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":16,"deletions":8}}},{"hash":"fad977f7e20375a9a6463edfd80afefed37c1210","isMergeCommit":true,"messageTitle":"Merge pull request #1 from yezkez10/branch-A-Assertions","messageBody":"Add assertions.","fileTypesAndContributionMap":{}},{"hash":"75a2b25a7f320ec0bd23fac9e7fb59c4661f4af0","isMergeCommit":false,"messageTitle":"Improve code quality.","messageBody":"Production code needs to be of high quality.\n\nMany methods have been refactored to return Strings,\nso JavaDoc has been updated to reflect these changes.\n\nTried to SLAP hard most importantly.\n","tags":["A-CodeQuality","A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":99}}}]},{"date":"2023-09-15","commitResults":[{"hash":"095fbf7673fcd27ad1ec785160ba833dcab578fc","isMergeCommit":false,"messageTitle":"MainWindow.java initialise and handleUserInput","messageBody":"initialise does not print welcome message, and handleUserInput immediately exits app once \u0027bye\u0027 is inputted\n\nPrinting a welcome message before handling inputs makes it more presentable,\nand waiting 5 secs before exiting the app makes the app feel closer to a complete production.\n\nOthers:\nShortened some methods in Duke.java to improve code quality.\n","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":33}}}]}]},"authorFileTypeContributionMap":{"yezkez10":{"java":978,"md":24,"fxml":35,"sh":0,"bat":1,"gradle":30,"txt":15}},"authorContributionVariance":{"yezkez10":64298.793},"authorDisplayNameMap":{"yezkez10":"CS2103T-W09-3 FOO .. JOY"}} +{"authorDailyContributionsMap":{"yezkez10":[{"date":"2023-08-22","commitResults":[{"hash":"4941f389466ca8126913a95a4027b5c52e29a4f9","isMergeCommit":false,"messageTitle":"Level-0 to 2 cos i forgot.. tehe","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":6}}}]},{"date":"2023-08-23","commitResults":[{"hash":"7d2547ab3dfcc039044ba383e6595ff9c08c07f0","isMergeCommit":false,"messageTitle":"Debug level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"a70d23f2299849c24ff01304402e9ab78687c87c","isMergeCommit":false,"messageTitle":"Do Level-3. why did it take me 5 hours?? But finally clutched it","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":3}}},{"hash":"35b10c0cbdbcb792c5b88314fa2bf4e26ec56e9b","isMergeCommit":false,"messageTitle":"Do level-4. Abstraction heart shape heart shape","messageBody":"","tags":["Level-5","Level-4","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":15}}},{"hash":"43500b698fa77818f04309fcdbed7ef3c4213f9b","isMergeCommit":false,"messageTitle":"Do Level-5","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":66,"deletions":45}}},{"hash":"faa913adb6c62cf92be9e595dba71f7a39c2fae8","isMergeCommit":false,"messageTitle":"Complete Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}}]},{"date":"2023-08-25","commitResults":[{"hash":"c892a00ea82fa1508a93fe875f5128e93b33782a","isMergeCommit":false,"messageTitle":"Testing","messageBody":"","tags":["Testing"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":13,"deletions":4}}}]},{"date":"2023-08-28","commitResults":[{"hash":"fa4bb64b90d023ba2c6f2b88fee833a6f78a621d","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":0}}},{"hash":"6c43ac397d2c8b896a5b885c06047642ec2ed6bb","isMergeCommit":false,"messageTitle":"Edit Deadline to deal with dates","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":90,"deletions":40}}}]},{"date":"2023-08-29","commitResults":[{"hash":"9ced4f9939e7182c2d8cd4b5a87793cb300e2865","isMergeCommit":false,"messageTitle":"Debug level-8. Still can\u0027t parse when no time involved.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":10}}}]},{"date":"2023-09-01","commitResults":[{"hash":"e204c82357fcbfc25f16cff73e0392f7d2be8aa5","isMergeCommit":false,"messageTitle":"Redo Level-4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":271,"deletions":244}}},{"hash":"da935255c9f14a1e65c7bf44ca28625283e1b7e2","isMergeCommit":false,"messageTitle":"Redo Level-6 Delete","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":3}}},{"hash":"2cc31a12f9ffca3f2223bae61332668032e1d7b8","isMergeCommit":false,"messageTitle":"Redo Level-7: Save","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"6935ca71243ba3ca94cc8b2462831b403cade059","isMergeCommit":false,"messageTitle":"Redo Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":9}}},{"hash":"9d4753850955e0c025877003c5765e3c96893cfc","isMergeCommit":false,"messageTitle":"Add load task function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"d260572acb9062870ff1ad92712e2f5dd37757b4","isMergeCommit":false,"messageTitle":"Add handling of no-such-file case","messageBody":"","tags":["Level-7","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":30,"deletions":6}}},{"hash":"2961bf1dbfe6e29de030337ea5f6d45b39344129","isMergeCommit":false,"messageTitle":"Add OOP","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":367,"deletions":306}}},{"hash":"7ed40db88008deaadd8044ee0908655e20305d85","isMergeCommit":false,"messageTitle":"Organise files into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":4}}},{"hash":"b90c625792f73c8ec7ae83c6703e8ec680f42536","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"05d1e61dd6db438bff16d0ff573cfc54423c2f42","isMergeCommit":false,"messageTitle":"Add non-trivial JUnit tests","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":101,"deletions":37},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"a13b020054c949a58408161a4b4f9a7329a6fad7","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":75,"deletions":6}}},{"hash":"7032b799c749f8f37895fb37ca5284aeab3f1b76","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":5}}}]},{"date":"2023-09-05","commitResults":[{"hash":"81a64380bdb99838c5e56be5ef751b18e8c63dfe","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":26,"deletions":20}}}]},{"date":"2023-09-06","commitResults":[{"hash":"4d4862035b3c12d1aedac104ed35b9b0c57dafc5","isMergeCommit":false,"messageTitle":"edit build.gradle","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]},{"date":"2023-09-13","commitResults":[{"hash":"394e778b3d26bbcc21f3c03dd668210abbeb3dce","isMergeCommit":false,"messageTitle":"Add Level-10 GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":26,"deletions":0},"txt":{"insertions":0,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":413,"deletions":181}}},{"hash":"bcd7aa9443dd8a7c51a3bfb8e0ce129b8b203b7a","isMergeCommit":false,"messageTitle":"Add GUI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"5645431303bd571508ea52c072756f9d7a09790d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/yezkez10/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-14","commitResults":[{"hash":"d9b5847dd85e7ee00e4e03a99f67146a9c07f262","isMergeCommit":false,"messageTitle":"Add assertions. Assertions define assumptions for runtime to verify.","messageBody":"Assertions used liberally for error handling.\n\nAssertions used to verify assumptions before runtime catches error from assumption.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":16,"deletions":8}}},{"hash":"fad977f7e20375a9a6463edfd80afefed37c1210","isMergeCommit":true,"messageTitle":"Merge pull request #1 from yezkez10/branch-A-Assertions","messageBody":"Add assertions.","fileTypesAndContributionMap":{}},{"hash":"75a2b25a7f320ec0bd23fac9e7fb59c4661f4af0","isMergeCommit":false,"messageTitle":"Improve code quality.","messageBody":"Production code needs to be of high quality.\n\nMany methods have been refactored to return Strings,\nso JavaDoc has been updated to reflect these changes.\n\nTried to SLAP hard most importantly.\n","tags":["merge-A-CodeQuality","A-CodeQuality","A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":99}}}]},{"date":"2023-09-15","commitResults":[{"hash":"095fbf7673fcd27ad1ec785160ba833dcab578fc","isMergeCommit":false,"messageTitle":"MainWindow.java initialise and handleUserInput","messageBody":"initialise does not print welcome message, and handleUserInput immediately exits app once \u0027bye\u0027 is inputted\n\nPrinting a welcome message before handling inputs makes it more presentable,\nand waiting 5 secs before exiting the app makes the app feel closer to a complete production.\n\nOthers:\nShortened some methods in Duke.java to improve code quality.\n","tags":["Level-9","A-Jar","A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":33}}}]}]},"authorFileTypeContributionMap":{"yezkez10":{"java":978,"md":24,"fxml":35,"sh":0,"bat":1,"gradle":30,"txt":15}},"authorContributionVariance":{"yezkez10":64298.793},"authorDisplayNameMap":{"yezkez10":"CS2103T-W09-3 FOO .. JOY"}} diff --git a/yongning0310_ip_master/commits.json b/yongning0310_ip_master/commits.json index 971c74a5..b3ede8ea 100644 --- a/yongning0310_ip_master/commits.json +++ b/yongning0310_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"yongning0310":[{"date":"2023-08-24","commitResults":[{"hash":"1df28901e58d11b48dea982991558cf18ee632fe","isMergeCommit":false,"messageTitle":"changed name to dong","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"2163a4a390ef0fca8b9ce142ea1974aa007ba79d","isMergeCommit":false,"messageTitle":"added scanner to echo input","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"e852d40b21f02c8d6238e05e8d553bd96005f613","isMergeCommit":false,"messageTitle":"keeps track of list and prints out when required","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"3be31f30d34e02aa4f97163caa5f6930a020f4c7","isMergeCommit":false,"messageTitle":"created new class for task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":5}}},{"hash":"19b88251e473c6c4045a6c9a2a7071baf13c1774","isMergeCommit":false,"messageTitle":"automated testing","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":157,"deletions":51},"sh":{"insertions":38,"deletions":0}}},{"hash":"8d941306e19615d2f7369e229577a310cce0394a","isMergeCommit":false,"messageTitle":"handle exception","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":56}}},{"hash":"5707c59f66f7dafb2225359a937fccfcb9bfb98a","isMergeCommit":false,"messageTitle":"delete task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":11}}},{"hash":"7a4db5908439d075dc498989221073502e1e41e0","isMergeCommit":false,"messageTitle":"edited test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}},{"hash":"01f42a9dd812caa7b41feacba972d47506c9f263","isMergeCommit":false,"messageTitle":"java docs updated","messageBody":"","tags":["IA-TextUiTesting","A-TextUiTesting","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":4}}}]},{"date":"2023-08-30","commitResults":[{"hash":"052f31f4976183b4b6aed0f318aa00d0612a8999","isMergeCommit":false,"messageTitle":"implemented duke.txt to store db","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":1},"java":{"insertions":208,"deletions":15}}},{"hash":"9833deadd5513f7b2b739a71cee818b0f7519545","isMergeCommit":false,"messageTitle":"added dateTimeUtils to handle dateFormat","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"808ed701db0f3eabfe79a0c1e6a23f90a6343225","isMergeCommit":false,"messageTitle":"more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":411,"deletions":255}}},{"hash":"b698a7aa53c813d49c0319ee4966e2e3c79c523d","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":36},"md":{"insertions":2,"deletions":2}}},{"hash":"427aedb19cd0415e918335c28a11d61094ce872f","isMergeCommit":true,"messageTitle":"merged with gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"de55f5a34a97c0f4a28ad213f71d6c72714c555f","isMergeCommit":false,"messageTitle":"set up gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a5458771c80a6761f93af06569520e9e31ead2a3","isMergeCommit":false,"messageTitle":"J unit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":0}}},{"hash":"5179ba54727456052a5610b677436406a32677c7","isMergeCommit":false,"messageTitle":"java docs, coding standard","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":7},"java":{"insertions":644,"deletions":209}}}]},{"date":"2023-09-04","commitResults":[{"hash":"258fb54067bcbcbdd7b4d644d2f29ec147307852","isMergeCommit":false,"messageTitle":"added checkstyle and fixed styling","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":0},"java":{"insertions":354,"deletions":144}}}]},{"date":"2023-09-07","commitResults":[{"hash":"3eabde95757a7f5f30ea5cfa42e84a2a1705b0ab","isMergeCommit":false,"messageTitle":"added GUI","messageBody":"","tags":["Level-10","A-Assertions"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":277,"deletions":177}}}]},{"date":"2023-09-12","commitResults":[{"hash":"2a0ca536d3f6c4c4c8fb764f46baa64431bbc2d2","isMergeCommit":false,"messageTitle":"Added asserts statement to Parser and Storage. In Parser, assert statement is added to ensure that event, deadline and todo are valid, it also ensures that output is not null. In Storage, assert statement is used to tasks of type T, D and E are valid when reading from file.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":11}}},{"hash":"0d9e044cfedb437ea08953a736e6bff697dcbcf8","isMergeCommit":false,"messageTitle":"edited storage file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"ec301756e584701000187bf8340bfd5f32da6f3b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from yongning0310/branch-A-Assertions","messageBody":"Added asserts statement to Parser and Storage.","fileTypesAndContributionMap":{}},{"hash":"e4c0ef326da72dfae1677d7082f1a5168a94b2f4","isMergeCommit":false,"messageTitle":"refactored Duke, Parser and Storage, broke the logic into smaller parts and more emphasis is placed on readability and maintainability with more descriptive names","messageBody":"","tags":["BCD-Extension","A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":250,"deletions":211}}},{"hash":"d2161128d512b7a31cca821ec442a53da8c023a9","isMergeCommit":true,"messageTitle":"Merge pull request #2 from yongning0310/branch-A-CodeQuality","messageBody":"refactored Duke, Parser and Storage, broke the logic into smaller parts","fileTypesAndContributionMap":{}},{"hash":"a978e81baf5f87878dc12b9d2435244d93a0ce93","isMergeCommit":false,"messageTitle":"C-FlexibleDataSource","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":27,"deletions":0},"java":{"insertions":223,"deletions":98}}},{"hash":"842327bdb333943b9efa01be2fc26665c71df84c","isMergeCommit":true,"messageTitle":"Merge pull request #3 from yongning0310/branch-BCD-Extension","messageBody":"C-FlexibleDataSource","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"yongning0310":{"java":1742,"md":2,"fxml":62,"sh":38,"bat":0,"gradle":21,"txt":40}},"authorContributionVariance":{"yongning0310":152524.06},"authorDisplayNameMap":{"yongning0310":"CS2103T-W17-1 LEE ..NING"}} +{"authorDailyContributionsMap":{"yongning0310":[{"date":"2023-08-24","commitResults":[{"hash":"1df28901e58d11b48dea982991558cf18ee632fe","isMergeCommit":false,"messageTitle":"changed name to dong","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"2163a4a390ef0fca8b9ce142ea1974aa007ba79d","isMergeCommit":false,"messageTitle":"added scanner to echo input","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"e852d40b21f02c8d6238e05e8d553bd96005f613","isMergeCommit":false,"messageTitle":"keeps track of list and prints out when required","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"3be31f30d34e02aa4f97163caa5f6930a020f4c7","isMergeCommit":false,"messageTitle":"created new class for task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":5}}},{"hash":"19b88251e473c6c4045a6c9a2a7071baf13c1774","isMergeCommit":false,"messageTitle":"automated testing","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":157,"deletions":51},"sh":{"insertions":38,"deletions":0}}},{"hash":"8d941306e19615d2f7369e229577a310cce0394a","isMergeCommit":false,"messageTitle":"handle exception","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":56}}},{"hash":"5707c59f66f7dafb2225359a937fccfcb9bfb98a","isMergeCommit":false,"messageTitle":"delete task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":11}}},{"hash":"7a4db5908439d075dc498989221073502e1e41e0","isMergeCommit":false,"messageTitle":"edited test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}},{"hash":"01f42a9dd812caa7b41feacba972d47506c9f263","isMergeCommit":false,"messageTitle":"java docs updated","messageBody":"","tags":["IA-TextUiTesting","A-TextUiTesting","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":4}}}]},{"date":"2023-08-30","commitResults":[{"hash":"052f31f4976183b4b6aed0f318aa00d0612a8999","isMergeCommit":false,"messageTitle":"implemented duke.txt to store db","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":1},"java":{"insertions":208,"deletions":15}}},{"hash":"9833deadd5513f7b2b739a71cee818b0f7519545","isMergeCommit":false,"messageTitle":"added dateTimeUtils to handle dateFormat","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"808ed701db0f3eabfe79a0c1e6a23f90a6343225","isMergeCommit":false,"messageTitle":"more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":411,"deletions":255}}},{"hash":"b698a7aa53c813d49c0319ee4966e2e3c79c523d","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":36},"md":{"insertions":2,"deletions":2}}},{"hash":"427aedb19cd0415e918335c28a11d61094ce872f","isMergeCommit":true,"messageTitle":"merged with gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"de55f5a34a97c0f4a28ad213f71d6c72714c555f","isMergeCommit":false,"messageTitle":"set up gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"a5458771c80a6761f93af06569520e9e31ead2a3","isMergeCommit":false,"messageTitle":"J unit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":0}}},{"hash":"5179ba54727456052a5610b677436406a32677c7","isMergeCommit":false,"messageTitle":"java docs, coding standard","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":7},"java":{"insertions":644,"deletions":209}}}]},{"date":"2023-09-04","commitResults":[{"hash":"258fb54067bcbcbdd7b4d644d2f29ec147307852","isMergeCommit":false,"messageTitle":"added checkstyle and fixed styling","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":0},"java":{"insertions":354,"deletions":144}}}]},{"date":"2023-09-07","commitResults":[{"hash":"3eabde95757a7f5f30ea5cfa42e84a2a1705b0ab","isMergeCommit":false,"messageTitle":"added GUI","messageBody":"","tags":["Level-10","A-Assertions"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":277,"deletions":177}}}]},{"date":"2023-09-12","commitResults":[{"hash":"2a0ca536d3f6c4c4c8fb764f46baa64431bbc2d2","isMergeCommit":false,"messageTitle":"Added asserts statement to Parser and Storage. In Parser, assert statement is added to ensure that event, deadline and todo are valid, it also ensures that output is not null. In Storage, assert statement is used to tasks of type T, D and E are valid when reading from file.","messageBody":"","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":11}}},{"hash":"0d9e044cfedb437ea08953a736e6bff697dcbcf8","isMergeCommit":false,"messageTitle":"edited storage file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"ec301756e584701000187bf8340bfd5f32da6f3b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from yongning0310/branch-A-Assertions","messageBody":"Added asserts statement to Parser and Storage.","fileTypesAndContributionMap":{}},{"hash":"e4c0ef326da72dfae1677d7082f1a5168a94b2f4","isMergeCommit":false,"messageTitle":"refactored Duke, Parser and Storage, broke the logic into smaller parts and more emphasis is placed on readability and maintainability with more descriptive names","messageBody":"","tags":["BCD-Extension","A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":250,"deletions":211}}},{"hash":"d2161128d512b7a31cca821ec442a53da8c023a9","isMergeCommit":true,"messageTitle":"Merge pull request #2 from yongning0310/branch-A-CodeQuality","messageBody":"refactored Duke, Parser and Storage, broke the logic into smaller parts","fileTypesAndContributionMap":{}},{"hash":"a978e81baf5f87878dc12b9d2435244d93a0ce93","isMergeCommit":false,"messageTitle":"C-FlexibleDataSource","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"fxml":{"insertions":27,"deletions":0},"java":{"insertions":223,"deletions":98}}},{"hash":"842327bdb333943b9efa01be2fc26665c71df84c","isMergeCommit":true,"messageTitle":"Merge pull request #3 from yongning0310/branch-BCD-Extension","messageBody":"C-FlexibleDataSource","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"yongning0310":{"java":1742,"md":2,"fxml":62,"sh":38,"bat":0,"gradle":21,"txt":40}},"authorContributionVariance":{"yongning0310":152524.06},"authorDisplayNameMap":{"yongning0310":"CS2103T-W17-1 LEE ..NING"}}